Answers:
要以非递归方式更改文件或目录条目的权限,请使用以下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
如果您可以这样做,那就太好了:
chmod -R 755 dir
但是,这有问题。它将文件和目录视为相同。上面的命令使目录可被所有用户列出和读取,但也使所有文件可执行,这通常是您不希望执行的操作。
如果将其更改为644
,则会遇到另一个问题:
$ chmod -R 644 x2
chmod: cannot access `x2/authors.html': Permission denied
chmod: cannot access `x2/day_of_week.plot': Permission denied
chmod: cannot access `x2/day_of_week.dat': Permission denied
chmod: cannot access `x2/commits_by_year.png': Permission denied
chmod: cannot access `x2/index.html': Permission denied
chmod: cannot access `x2/commits_by_year.plot': Permission denied
chmod: cannot access `x2/commits_by_year_month.plot': Permission denied
chmod: cannot access `x2/files_by_date.png': Permission denied
chmod: cannot access `x2/files.html': Permission denied
...
问题是644
取出目录列表位,并且此副作用阻止了文件树的进一步遍历。您可以使用来解决此问题sudo
,但最终仍然得到对非root用户完全无用的目录。
关键是,chmod -R
在某些情况下(例如chmod -R g-r
),效果很好,但在您想弄乱该-x
位的情况下,效果就不好了,因为它会不加选择地对文件和目录进行操作。
644
或完全要-x
在目录上设置?该问题仅规定他要更改权限,而不是特别更改权限。
chmod -R go=u,go-w /dir
chmod
有一个-R
标志,意味着递归地更改文件和目录的权限。
您可以使用大写的'X'对文件夹执行正确的操作:'X'=“仅在文件为目录或已经具有某些用户的执行权限时才执行/搜索”
因此,例如:chmod -R ug = rwX,o-rwx。
将使所有者和每个文件组可以访问整个树,而其他任何人都不能访问。此后,任何已经可执行的文件仍将可执行,并且所有目录的用户名和组名均带有“ x”,而其他目录则无。
chmod -R 444 somedir
在其中包含文件的目录。你得到Permission denied
,因为-x标志是越来越带下目录,并且它需要继续读取目录。