我必须将apache中目录的权限更改为htdocs
某个组并具有某些读/写/执行。
目录需要有 775 权限,文件需要有 664。
如果我对 进行递归 664 htdocs
,那么所有文件和目录都将更改为 664。
我不想手动更改目录。
有没有办法只更改文件或目录?
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
使用 find 的-type
选项来限制对文件和目录的操作。使用该-o
选项为不同类型指定备用操作,因此您只需运行find
一次,而不是为每种类型单独运行。
find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
用于find
搜索目录并对其应用 chmod:
find -type d | xargs chmod 775
使用f
文件类型:
find -type f | xargs chmod 775
上面 Gordon 的回答是正确的,但是如果您试图锁定对目录树的访问权限,它会使所有者可执行的脚本也可以执行给任何被授予大写 X 的人。
使用
find <path> -type d -exec chmod 775 {} +
或者
find <path> -type d -exec chmod 755 {} +
更安全。
我使用类似于 Gordon 提供的解决方案的东西:
chmod -R ug=rw,o=r,a+X /path/to/folder/
即使先前为某些文件设置了执行权限,它也应始终为文件夹设置 775,为文件设置 664
尝试:
find htdocs -type d -exec chmod 775 {} +
对于目录或文件
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)