如何在一个命令中更改目录的文件权限


11

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


您是否要更改目录中所有文件的权限?您是否也希望将其放入嵌套目录?您要更改目录本身的权限,还是仅更改其中的文件的权限?最后,您是否在发布问题之前先尝试搜索该网站?
以太2010年

Answers:


21

要以非递归方式更改文件或目录条目的权限,请使用以下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在目录上设置?该问题仅规定他要更改权限,而不是特别更改权限。
里斯·摩尔

@里斯摩尔:你是对的。询问者甚至没有说关于递归更改权限的任何信息。
乔伊·亚当斯

1
通常,您通常要使用+和-符号模式。即,chmod -R go=u,go-w /dir
dannysauer

6

chmod有一个-R标志,意味着递归地更改文件和目录的权限。

您可以使用大写的'X'对文件夹执行正确的操作:'X'=“仅在文件为目录或已经具有某些用户的执行权限时才执行/搜索”

因此,例如:chmod -R ug = rwX,o-rwx。

将使所有者和每个文件组可以访问整个树,而其他任何人都不能访问。此后,任何已经可执行的文件仍将可执行,并且所有目录的用户名和组名均带有“ x”,而其他目录则无。


尝试chmod -R 444 somedir在其中包含文件的目录。你得到Permission denied,因为-x标志是越来越带下目录,并且它需要继续读取目录。
乔伊·亚当斯

1
X = Y语法是一个有用的附录。例如,您可以使用chmod -R g = u dir将组权限设置为用户权限,以设置组和用户等效项。这可以解决类似dirs之类的问题,而dirs需要可执行文件,而“ plain”文件则不需要。
保罗·鲁贝尔

3
chmod -R <file permission> *

从手册页chmod

-R, --recursive
              change files and directories recursively

chmod-R多个方向一起使用开关,该开关具有子目录树,其中子目录树中包含数百万个文件,您想一次性更改这些文件的文件许可权。

文件权限可能是例如。777、755、644等

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.