35

我必须将apache中目录的权限更改为htdocs某个组并具有某些读/写/执行。

目录需要有 775 权限,文件需要有 664。

如果我对 进行递归 664 htdocs,那么所有文件和目录都将更改为 664。

我不想手动更改目录。

有没有办法只更改文件或目录?

4

7 回答 7

68

chmod实际上可以自己做到这一点;符号权限的X意思是“执行,如果有意义的话”,这通常意味着目录而不是文件。因此,您可以使用:

chmod -R u=rwX,go=rX /path/to/htdocs

唯一的潜在问题是,如果任何普通文件已经设置了执行集,chmod则假定它是故意的并保留它。如果这是一个潜在问题并且您拥有 GNU 版本chmod(即您在 Linux 上),您可以使用它来删除任何杂散的执行权限,如下所示:

chmod -R a-x,u=rwX,go=rX /path/to/htdocs

不幸的是,这个技巧不适用于 bsd (/macOS) 版本chmod(我不确定其他版本)。这是因为 bsd 版本X基于“原始(未修改)模式”应用权限,即在修改完成之前它是否有任何执行a-x位(参见页面)。man

于 2013-06-13T16:05:11.990 回答
39

使用 find 的-type选项来限制对文件和目录的操作。使用该-o选项为不同类型指定备用操作,因此您只需运行find一次,而不是为每种类型单独运行。

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
于 2013-06-13T15:43:02.073 回答
4

用于find搜索目录并对其应用 chmod:

find -type d | xargs chmod 775

使用f文件类型:

find -type f | xargs chmod 775
于 2013-06-13T15:42:48.880 回答
4

上面 Gordon 的回答是正确的,但是如果您试图锁定对目录树的访问权限,它会使所有者可执行的脚本也可以执行给任何被授予大写 X 的人。

使用

find <path> -type d -exec chmod 775 {} +

或者

find <path> -type d -exec chmod 755 {} +

更安全。

于 2015-08-22T22:07:12.437 回答
4

我使用类似于 Gordon 提供的解决方案的东西:

chmod -R ug=rw,o=r,a+X /path/to/folder/

即使先前为某些文件设置了执行权限,它也应始终为文件夹设置 775,为文件设置 664

于 2016-10-18T15:49:57.053 回答
2

尝试:

find htdocs -type d -exec chmod 775 {} +
于 2013-06-13T15:45:32.177 回答
0

对于目录或文件

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
于 2021-02-03T02:12:24.397 回答