Linux 下递归把目录改成 755、文件改成 644

用 find 分别递归设置目录 755、文件 644,适合站点权限被弄乱后一键恢复基线;注意可执行脚本与可写目录要单独处理。

做运维和独立开发这些年,最常碰到的一类「小坑」不是代码写错,而是目录权限被弄乱:有人从 Windows 拷了一堆文件上来,有人用 root 解压了 zip,结果 Web 目录里文件变成 777、目录变成 600,Nginx/Apache 读不了、PHP 写不了、SSH 同事也进不去。

我一般会定一个简单规矩:目录 755、文件 644。目录需要可执行位,才能 cd 进去并遍历;普通文件不需要执行权限,644 对所有人可读、所有者可写,够用也相对安全。

怎么改

把 /path 换成你的实际路径(例如站点根目录),分别处理文件和目录:

find /path -type f -exec chmod 644 {} \;  # 设置文件权限为644

find /path -type d -exec chmod 755 {} \;  # 设置目录权限为755

-type f 只匹配普通文件,-type d 只匹配目录,这样不会把目录和文件混着改。\; 是 find -exec 的结束符,别漏掉。

如果目录特别大,也可以用:

find /path -type f -print0 | xargs -0 chmod 644
find /path -type d -print0 | xargs -0 chmod 755

批量时少起几次进程,会快一点。

注意几点

  1. 先确认路径再执行。 对 / 或系统目录乱 chmod,服务可能立刻起不来。
  2. 脚本、可执行文件别一律 644。 若目录里有 shell 脚本、二进制,改完后再单独 chmod +x。
  3. Web 可写目录要单独留口。 例如上传目录、缓存目录,可能需要属主是 www/nginx,或额外放宽写权限;不要整站 777。
  4. 权限只是一层。 还要看属主属组(chown)和 SELinux/AppArmor;权限对了但属主不对,同样读不了。

为何记下

一人公司没有专职运维,站点、网盘、客户机经常自己搭。权限一乱,排查成本往往高于写代码。把「目录 755、文件 644」当成默认基线,出问题先统一权限再查业务,能少走很多弯路。这条命令本身很短,但用对场景,能省掉半下午。

No comments yet