Linux 权限 denied 怎么排查
Permission denied 是初学 Linux 最常见的错误之一。它不一定意味着“必须加 sudo”,而是说明当前用户对某个文件、目录、设备或操作没有足够权限。
先看完整报错
不同报错位置代表不同问题:
bash: ./script.sh: Permission denied
可能是脚本没有执行权限。
touch: cannot touch '/etc/test': Permission denied
可能是你正在写系统目录。
mkdir: cannot create directory 'data': Permission denied
可能是当前目录没有写权限。
第一步:确认当前位置
pwd
ls -ld .
pwd 告诉你当前在哪里,ls -ld . 显示当前目录权限。
如果你在 /etc、/usr、/var 等系统目录中,普通用户没有写权限是正常的。
第二步:检查目标权限
检查文件:
ls -l target
检查目录本身:
ls -ld target-dir
注意,查看目录权限时要用 -d,否则 ls 会列出目录里面的内容。
第三步:判断自己是谁
whoami
id
看当前用户是否是文件所有者,是否属于对应用户组。
权限判断通常按这个顺序:
- 你是不是所有者。
- 你是否属于所属组。
- 否则使用其他人权限。
脚本不能执行
如果脚本没有执行权限:
ls -l script.sh
看到类似:
-rw-r--r-- 1 rudy rudy 100 Jul 24 10:00 script.sh
没有 x,添加执行权限:
chmod u+x script.sh
./script.sh
也可以不加执行权限,直接交给 Bash:
bash script.sh
目录不能进入
目录需要执行权限才能进入:
ls -ld secret-dir
如果没有 x,即使有 r 也可能无法访问目录内文件。
文件属于 root
如果你在自己的目录里发现文件属于 root,通常是因为以前用了 sudo 创建文件:
ls -l
修正所有者:
sudo chown "$USER:$USER" file
修正整个目录时要谨慎:
sudo chown -R "$USER:$USER" project
确认 project 是你的项目目录,不要对系统目录递归执行。