linux中用find查找并修改文件权限需分两步:先精准定位目标文件,再通过-exec或-execdir对每个匹配项执行chmod;常用场景包括按名称、类型或当前权限筛选后批量设权,并强调限定范围、预览确认及优先使用-execdir保障安全。

Linux 中用 find 查找并修改文件权限,核心思路是:先精准定位目标文件,再对每个匹配项执行 chmod。这不是一步到位的“查找+改权”原子操作,而是通过 -exec 或 -execdir 将 chmod 命令作用于每个结果上。
按条件查找并统一设权限
最常见场景是批量修正某类文件的权限,比如把所有 shell 脚本设为可执行:
find /path/to/search -type f -name "*.sh" -exec chmod 755 {} \;find /var/www -type f -name "*.php" -exec chmod 644 {} \;
说明:{} 是占位符,代表当前找到的文件路径;\; 表示 -exec 命令结束(反斜杠用于转义分号)。
安全起见,先预览再执行
误操作可能影响系统或服务,建议分两步走:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 先只查不改:
find /opt -type f -perm 777看哪些文件权限过宽 - 确认无误后加
-exec:find /opt -type f -perm 777 -exec chmod 644 {} \; - 或用
-ok替代-exec,每条命令都会交互确认:find . -name "*.log" -ok chmod 600 {} \;
按权限状态筛选再调整
不只是按名称或类型,还能基于当前权限做判断:
- 查找所有世界可写的普通文件,并去掉其他用户写权限:
find /tmp -type f -perm -o=w -exec chmod o-w {} \; - 查找没有执行权限但扩展名是
.py的文件,加上执行权:find . -type f -name "*.py" ! -perm -u=x -exec chmod u+x {} \;
注意:-perm -mode 表示“包含该权限位”,-perm /mode 表示“任意一位匹配”,! 或 -not 表示取反。
限制范围,避免误伤系统文件
在根目录下盲目执行风险极高,务必加约束:
- 限定搜索深度:
find /home -maxdepth 2 -name "*.conf" -exec chmod 600 {} \; - 排除特定目录:
find /var -path "/var/log" -prune -o -name "*.tmp" -exec rm {} \;(同理可用于 chmod) - 优先用
-execdir(比-exec更安全):find . -name "config.ini" -execdir chmod 600 {} \;,它会在每个匹配文件所在目录执行命令,降低路径拼接风险。










