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

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

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

答案1

要非递归地更改文件或目录条目的权限,请使用以下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,因为它会不加区分地对文件和目录进行操作。

答案2

chmod有一个-R标志,表示递归更改文件和目录的权限。

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

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

会使整个树仅对每个文件的所有者和组可访问,而其他任何人都无法访问。任何已经可执行的文件在之后仍可执行,并且所有目录都会为用户和组显示“x”,而其他目录则不显示。

答案3

chmod -R <file permission> *

来自的手册页chmod

-R, --recursive
              change files and directories recursively

使用chmod带有-R开关的多个方向,其子目录树包含数百万个文件,并且您想要一次性更改这些文件的文件权限。

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

相关内容