ls -l 不显示八进制权限值,仅输出符号表示法(如 -rw-r--r--);需用 stat -c "%a" 获取可靠八进制值(如 644),或手动按 r=4、w=2、x=1 换算三组权限。

用 ls -l 看权限字符串,但不直接显示八进制数值
ls -l 输出的第一列(如 -rw-r--r--)是符号表示法,它本身不含数字。很多人误以为这里会直接显示 644 这类值,其实不会——你需要自己换算或借助其他命令。
常见错误现象:执行 ls -l file.txt 后盯着那一串 rwx- 发呆,不知道怎么对应到 755;或者把 ls -l 和 chmod 755 混为一谈,以为输出里“有数字就代表当前权限值”。
-
ls -l只展示符号,不展示八进制数 - 目录和普通文件的权限逻辑一致,但
x对目录意味着“可进入”,不是“可执行” - 若看到权限末尾带
.(如-rw-r--r--.),说明启用了 SELinux,.不影响八进制换算
用 stat 命令直接看到八进制权限值
stat 是最可靠、最直观的方式,它原生支持以八进制格式输出权限位。
执行:stat -c "%a %n" filename → 输出类似 644 filename
执行:stat -c "%A %a %n" filename → 同时显示符号+数字+文件名,比如 -rw-r--r-- 644 filename
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
%a:八进制权限(如644、755) -
%A:符号权限(如-rw-r--r--) - 对目录要用
stat -c "%a %n" dirname,不需要加-d参数也能正确识别 - 注意:
stat在某些精简版系统(如 Alpine)中可能默认未安装,需先apk add coreutils
手动换算 rwx 到八进制:三组三位,每组相加
不是死记硬背,而是按位置加权:每组三个字符(如所有者位 rw-)分别对应 4(r)、2(w)、1(x),- 就是 0。
例如:-rwxr-xr-- → 所有者 rwx=4+2+1=7,组 r-x=4+0+1=5,其他 r--=4+0+0=4 → 得 754
- 目录权限常为
755,对应drwxr-xr-x;注意开头的d是类型,不算进数值 - 若某组是
---,就是0;r--是4,rw-是6,rwx是7 - 容易漏掉的是:软链接(
l开头)的权限在大多数情况下被忽略,实际生效的是目标文件权限
为什么不用 ls -l 配合 awk 解析?慎用
有人写 ls -l file | awk '{print $1}' | cut -c2-10 | sed 's/r/4/g; s/w/2/g; s/x/1/g; s/-/0/g' 再求和——逻辑上可行,但极不可靠。
问题在于:ls -l 输出格式受 locale、终端宽度、别名(如 ls --color)干扰,字段位置可能偏移;且无法处理 ACL 或扩展属性带来的额外字符(如 + 结尾)。
- 真实环境中,
ls -l第一列可能以drwxr-xr-x+结尾(+表示有 ACL),这时用cut -c2-10会截断错误 -
stat是内核级接口,输出稳定,无格式歧义 - 如果你必须脚本化批量获取权限数值,优先用
stat -c "%a" *,而不是解析ls
真正需要确认权限数值时,stat -c "%a" 是唯一值得信任的方案;手动换算是理解原理的必经过程,但生产脚本里别自己造轮子解析 ls 输出——那点省下的命令调用,远不如一次错位解析带来的故障代价。










