2010-11-08 17:31:41 +0000 2010-11-08 17:31:41 +0000
11
11

如何用一个命令改变一个目录的文件权限?

如何在Unix中用一个命令改变一个目录的所有文件权限?

答案 (3)

21
21
21
2010-11-08 17:40:58 +0000

要以非递归方式更改文件或目录条目的权限,使用chmod命令(参见 man chmod 阅读更多关于其特定选项的信息):

chmod +x dir # Set a directory to be listable
chmod +x file # Set a file to be executable

要以递归方式更改文件/目录的所有者(影响所有子代):

chown -R username dir # Recursively set user
chown -R username:groupname dir # Recursively set user and group

要以递归方式更改目录中所有文件的权限位。

find dir -type f -exec chmod 644 {} ';' # make all files rw-r-r-

如果你能做到这一点就更好了。

find dir -type d -exec chmod 755 {} ';' # make all directories rwxr-xr-x

然而,这有问题。它对文件和目录的处理是一样的。上面的命令让所有用户都可以读取目录,但同时也让所有文件都可以执行,而这通常是你不希望看到的。

如果我们把它改成644,我们会得到另一个问题:

chmod -R 755 dir

问题是644把目录列表位去掉了,这个副作用阻止了文件树的进一步遍历。你可以通过使用sudo来解决这个问题,但是你最终得到的目录对非root用户来说还是完全没用的。

关键是,chmod -R在某些情况下(比如chmod -R g-r)还能正常工作,但在你想乱用-x位的情况下就不行了,因为它对文件和目录的操作是不加区分的。

6
6
6
2010-11-08 17:34:48 +0000

chmod有一个-R标志,意思是要递归地改变文件和目录的权限。

你可以用大写的'X'来对文件夹进行正确的操作:'X’=“只有当文件是一个目录或者已经有某个用户的执行权限时才会执行/搜索”

所以,例如:chmod -R ug=rwX,o-rwx 。

会使整个树的所有者和每个文件的组可以访问,而其他人则不能访问。任何已经可以执行的文件之后仍然可以执行,所有的目录都会有'x'代表用户和组,而不代表其他人。

3
3
3
2012-08-01 07:10:21 +0000
chmod -R <file permission> *

chmod的手册页面上看。

-R, --recursive
              change files and directories recursively

使用chmod-R开关用于多个方向,其中有子目录树,里面有几百万个文件,而你想一次性改变这些文件的文件权限。

文件权限可以是例如777, 755, 644等。