【发布时间】:2013-06-10 02:07:18
【问题描述】:
我必须将apache中htdocs目录的权限更改为某个组并具有一定的读/写/执行权限。
目录需要775权限,文件需要664权限。
如果我对htdocs 执行递归 664,那么所有文件和目录都将更改为 664。
我不想手动更改目录。
有没有办法只更改文件或目录?
【问题讨论】:
标签: linux bash directory chmod
我必须将apache中htdocs目录的权限更改为某个组并具有一定的读/写/执行权限。
目录需要775权限,文件需要664权限。
如果我对htdocs 执行递归 664,那么所有文件和目录都将更改为 664。
我不想手动更改目录。
有没有办法只更改文件或目录?
【问题讨论】:
标签: linux bash directory chmod
使用find 搜索目录并对其应用 chmod:
find -type d | xargs chmod 775
对文件使用类型f:
find -type f | xargs chmod 775
【讨论】:
使用 find 的 -type 选项来限制对文件和目录的操作。使用-o 选项为不同类型指定备用操作,因此您只需运行find 一次,而不是为每种类型单独运行。
find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +
【讨论】:
chmods 内置支持。请参阅下面的Gordon Davisson's 答案
find 方法将它们全部清理干净,而 u=rwX,go=rX 则不会清理任何东西。
尝试:
find htdocs -type d -exec chmod 775 {} +
【讨论】:
chmod 实际上可以自己做到这一点; X 符号权限的意思是“执行,如果有意义的话”,这通常意味着目录而不是文件。所以,你可以使用:
chmod -R u=rwX,go=rX /path/to/htdocs
唯一的潜在问题是,如果任何普通文件已经设置了执行集,chmod 会假定它是故意的并保留它。如果这是一个潜在的问题并且你有chmod的GNU版本(即你在Linux上),你可以得到它来删除任何杂散的执行权限,如下所示:
chmod -R a-x,u=rwX,go=rX /path/to/htdocs
不幸的是,这个技巧不适用于chmod 的 bsd (/macOS) 版本(我不确定其他版本)。这是因为bsd版本基于“原始(未修改)模式”应用X权限,即在a-x修改完成之前是否有任何执行位之前(见the man page )。
【讨论】:
xargs 最终将失败。查看man pages了解更多信息
chmod -R a-rwx,u+rwX,go+rX 这有效地删除了用户、组和其他人的所有权限,然后只添加您想要的那些。
chmod 的某些版本。但我会在答案中添加一个解释。
上面 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,即使之前为某些文件设置了执行权限
【讨论】:
用于目录或文件
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
【讨论】: