要以非递归方式更改文件或目录条目的权限,使用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
位的情况下就不行了,因为它对文件和目录的操作是不加区分的。
chmod
有一个-R
标志,意思是要递归地改变文件和目录的权限。
你可以用大写的'X'来对文件夹进行正确的操作:'X’=“只有当文件是一个目录或者已经有某个用户的执行权限时才会执行/搜索”
所以,例如:chmod -R ug=rwX,o-rwx 。
会使整个树的所有者和每个文件的组可以访问,而其他人则不能访问。任何已经可以执行的文件之后仍然可以执行,所有的目录都会有'x'代表用户和组,而不代表其他人。