为什么你的代码在服务器上跑不起来?90%的新手都栽在这三个字母上

为什么你的代码在服务器上跑不起来?90%的新手都栽在这三个字母上

那个让你抓狂的 Permission denied

你有没有遇到过这种情况:辛辛苦苦写完的脚本,传到服务器上一跑,啪——

bash: ./run.sh: Permission denied

或者更崩溃的:明明昨天还能用的Python脚本,今天就不行了?

这不是你的代码有问题,也不是服务器抽风。真相是:你遇到了Linux世界里最基础也最重要的概念——文件权限。

据统计,超过70%的Linux新手在入职前三个月都曾被 Permission denied 折磨过。今天我们用一篇文章,彻底拿下它。

三个字母统治的世界:r、w、x

打开终端,输入 ls -l,你会看到一堆类似这样的东西:

-rwxr-xr--  1 user  staff  2048 Jun 16 10:30 run.sh

别被这一串字母吓到。把它拆成四段就一目了然了:

| 段位 | 内容 | 含义 |

|——|——|——|

| 第1位 | `-` | 文件类型(`-`是普通文件,`d`是目录) |

| 第2-4位 | `rwx` | **文件所有者**的权限 |

| 第5-7位 | `r-x` | **同组用户**的权限 |

| 第8-10位 | `r–` | **其他人**的权限 |

r (read) = 4:能读取文件内容。对目录来说,意味着能 ls 看到里面有什么

w (write) = 2:能修改文件。对目录来说,意味着能在里面创建/删除文件

x (execute) = 1:能执行文件。对目录来说,意味着能 cd 进去

记住这三个数字:**读=4,写=2,执行=1**。这就是文件权限的”九九乘法表”。

一招制胜:chmod 的两种写法

### 符号模式(人类友好版)

chmod u+x run.sh      # 给文件主人(u)加上执行(x)权限
chmod g-w secret.txt  # 去掉同组用户(g)的写(w)权限
chmod o+r report.pdf  # 让其他人(o)也能读(r)
chmod a+x deploy.sh   # 给所有人(all)加上执行权限

### 数字模式(高手速查版)

把 r(4)+w(2)+x(1) 加起来,三个组各一个数字:

chmod 755 run.sh   # rwx(7) + r-x(5) + r-x(5) → 主人全能,别人可读可执行
chmod 644 index.html  # rw(6) + r(4) + r(4) → 主人可写,别人只读
chmod 600 ~/.ssh/id_rsa  # rw(6) + 无(0) + 无(0) → 只有你能碰!

最常用的三个数字组合,背下来够用一辈子:

| 数字 | 含义 | 什么时候用 |

|——|——|———–|

| `755` | 主人全能,别人只读执行 | 脚本、程序 |

| `644` | 主人可写,别人只读 | 普通文件 |

| `600` | 只有主人能读写 | **私钥、密码文件** |

文件是谁的?chown 一句话解决

有时候权限对了但还是报错,那是文件不属于你

chown ubuntu:ubuntu run.sh   # 把文件的主人改成ubuntu,组也改成ubuntu
chown -R ubuntu:ubuntu /var/www/  # 递归改整个目录(-R = 全部子文件一起改)

新手最容易踩的三个坑

坑1:chmod 777 一时爽,安全火葬场

777意味着全世界都能读写执行你的文件。除非你确定这个文件就该对全网公开(比如 /tmp 下的临时文件),否则千万别用。尤其是 .envid_rsa 这些敏感文件——用 600

坑2:目录需要 x 权限才能 cd 进入

很多人给目录设了 rw 权限却进不去——因为缺少 x。目录的 x 不是”执行”,是”进入”。把这个记在脑子里:

没有r → 看不到目录内容(ls 报错)
没有w → 不能在目录里创建/删除文件
没有x → 进不去这个目录(cd 报错)

坑3:sudo 创建的文件属于 root,不是你

sudo vimsudo touch 创建的文件,主人是 root。普通用户改不了它。要么用 sudo chown 改回来,要么从一开始就别用 sudo 创建你需要日常编辑的文件。

一张图记住全部

         r(4)  w(2)  x(1)
         ┌───┬───┬───┐
  owner  │ ✓ │ ✓ │ ✓ │  = 7
         ├───┼───┼───┤
  group  │ ✓ │   │ ✓ │  = 5
         ├───┼───┼───┤
  others │ ✓ │   │   │  = 4
         └───┴───┴───┘
              chmod 754

下一次看到 Permission denied,别慌。先 ls -l 看一眼,再 chmod 搭把手,三秒搞定。

记住一句话:Linux 的权限系统不是来刁难你的——它是保护你的第一道墙。学会了,你就是这堵墙的主人。


— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn

滚动至顶部
微信公众号:LC智趣厅

扫码关注微信公众号
LC智趣厅