极简工具箱

免费在线工具 · 本地计算 · 无需上传

Linux 权限怎么看:755、644 与 chmod 的读法

`ls -l` 第一列那串 `-rwxr-xr-x` 到底怎么读?为什么 644 的文件执行不了、目录没有 x 就进不去?把三位一组拆开就清楚了。

广告位(百度联盟)

一、十位字符拆成四段

-rwxr-xr-x  1 root root  4096 Nov  3 10:00 deploy.sh
│└┬┘└┬┘└┬┘
│ │  │  └── 其他人(other)
│ │  └───── 所属组(group)
│ └──────── 所有者(user)
└────────── 文件类型:- 普通文件、d 目录、l 链接、s 套接字

每组三位固定是 r(读=4)、w(写=2)、x(执行=1),没有该权限就是 -。所以 rwxr-xr-x = 755。

二、数字怎么来的

三位相加就是该组的权限值:

符号数字含义(文件)含义(目录)
r4读取内容列出目录内文件名(ls)
w2修改内容在目录内创建/删除文件
x1执行(脚本/程序)进入目录(cd)、访问其中文件

755 = rwxr-xr-x:所有者可读写执行,组和其他人可读可执行。 644 = rw-r--r--:所有者可读写,其他人只读。

常用组合:

chmod 644 file.txt      # 普通文件
chmod 755 script.sh     # 可执行脚本、目录
chmod 600 id_rsa        # 私钥,只有自己能读写
chmod 700 ~/.ssh        # 目录,只有自己能进

三、目录的 x 权限最容易被忽略

这是新手最常困惑的地方:

所以「网页 403」时,除了看文件权限,还要看从根到该文件的每一级目录是否都有 x。

四、chmod 的两种写法

chmod 755 file              # 数字(八进制)
chmod u+x file              # 符号:给所有者加执行
chmod go-w file             # 去掉组和其他的写权限
chmod -R 755 dir            # 递归(慎用,会把文件也变成可执行)

递归改目录时更稳的做法是分开处理:

find dir -type d -exec chmod 755 {} \;
find dir -type f -exec chmod 644 {} \;

五、umask:新建文件的默认权限

新建文件的权限 = 666 - umask,新建目录 = 777 - umask。常见 umask 022 意味着新文件是 644、新目录是 755。用 umask 命令查看当前值,在 /etc/profile 或服务配置里可以改。

六、三个特殊位

七、Permission denied 排查顺序

  1. ls -l 看文件权限和属主属组。
  2. namei -l /path/to/file 一次性看整条路径每级目录的权限——这是最快的定位方式。
  3. 确认当前用户是谁(id),是否在对应组里。
  4. 检查 SELinux/AppArmor(getenforce),以及挂载是否带 noexec。
  5. 脚本报「权限不够」但已经是 755,看 shebang 和文件系统挂载选项。

小结

三位一组、r=4 w=2 x=1;目录的 x 决定能不能进;私钥 600、目录 700、脚本 755、普通文件 644;递归改权限要分开处理文件和目录。

本文相关工具(本地计算,无需上传)

更多使用教程