在 Linux 中, 直接使用 chmod -R 777
递归更改目录权限虽然可以快速解决权限问题, 但会同时赋予文件执行权限, 这种做法存在较大的安全隐患。短期来看确实解决了眼下问题, 万一有什么服务被攻破了, 具有执行权限的文件可能被用于运行恶意程序。因此, 为了安全起见, 我们需要一种方法只修改文件夹的权限, 而不影响文件的权限。
递归修改权限
递归修改文件夹权限
文件夹的执行权限相当于允许进入目录的权限。使用以下命令为文件夹设置权限
find /path/to/base/dir -type d -exec chmod 755 {} +
这会递归查找指定目录下的所有文件夹, 并将它们的权限设置为 755
(可读、可写、可执行)
递归修改文件权限
使用以下命令为文件设置权限
find /path/to/base/dir -type f -exec chmod 644 {} +
这会递归查找指定目录下的所有文件, 并将它们的权限设置为 644
(可读、可写, 但不可执行)
使用命令替代简化操作
如果需要处理的对象较多, 可以使用以下方法
方法 1: 直接传递给 chmod
注意: 文件名中包含空格可能导致失败
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
方法 2: 结合 xargs
减少 chmod
调用次数
适用于文件特别多的情况
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
在这里, -print0
和 xargs -0
的组合能够安全处理文件名中包含空格或特殊字符的情况
原文