Permission denied:先分清「谁」没有权限
报 Permission denied 时,第一反应不该是 chmod 777,而是弄清:当前有效用户是谁、卡在路径的哪一层、缺的是读、写还是执行。
快速确认身份
id
whoami
namei -l /path/to/file
namei -l 会列出路径上每一级目录的权限,目录缺少 x 时,即使文件本身是 644,也进不去。
文件与目录的差别
- 文件的
x:能否当作程序执行 - 目录的
x:能否进入该目录、穿过路径 - 目录的
r:能否列出目录项(ls) - 目录的
w:能否在目录里创建/删除名字(还受 sticky bit 影响)
常见误判
- 脚本有执行权限,但 shebang 指向的解释器路径无权限
- 用了 sudo,但重定向
>仍由当前壳用户执行 - ACL(getfacl)或不可变属性(lsattr)额外限制
先 ls -ld 路径上每一层,再考虑改权限;改的时候尽量只给需要的那一类用户最小权限。