王美洁

1.6 权限

1. 为什么要有权限?

很多同学对“电脑”的直觉来自个人电脑。在个人电脑上,你往往就是主要使用者,想新建文件就新建,想删除文件就删除,想装软件就装软件。

但服务器、工作站、集群不是这种场景。

一台服务器通常会同时被很多人使用。系统必须回答一个很基础的问题:谁可以对什么东西做什么事。

比如:

  • 我们不能随便看别人的文件
  • 我们不能随便修改别人的脚本和计算结果
  • 我们不能动系统运行所依赖的关键文件
  • 我们不能随便改公共软件环境,影响其他人的任务

如果没有权限机制,多人共用的计算环境很快就会失控。一个人误删公共目录,一个脚本错误覆盖共享文件,或者随手改了系统配置,都可能影响整台机器上的其他用户。

所以权限最核心的作用,可以先理解成三件事:

  • 保护数据:避免文件被随意查看、修改或删除
  • 保护系统:避免普通用户误操作系统关键部分
  • 保护协作环境:让多人共享一台机器时,各自有边界,出了问题也更容易定位

所以权限并不是额外的“麻烦设置”,而是 Linux 这类多用户系统维持秩序的基本机制。

对新手来说,最常见的权限问题通常不是抽象概念,而是这些很具体的情况:

  • 文件明明在这里,但就是打不开
  • 脚本明明写好了,但就是不能执行
  • 命令明明存在,但系统提示没有权限
  • 共享目录里能看不能改,或者能改不能进

说了这么多,具体的放到文件上,最常见的就是三类权限:

  • read
  • write
  • 执行 execute
bash
ls -l run.sh # 查看文件权限

输出通常会长成这样:

text
-rwxr-xr-- 1 user group 1234 Apr 6 10:00 run.sh

可以先这样理解:

  • 第一段 rwx:文件所有者
  • 第二段 r-x:同组用户
  • 第三段 r--:其他用户

2. 用 chmod 修改权限

看懂权限之后,下一步就是知道怎么改。

最直观的写法是:

bash
chmod u+x run.sh  # 给文件所有者 user 增加执行权限
chmod g-w data.in # 去掉同组用户 group 的写权限
chmod o-r data.in # 去掉其他用户 others 的读权限
chmod a+r data.in # 给所有人 all 增加读权限

这里可以这样拆:

  • u:user,文件所有者
  • g:group,同组用户
  • o:others,其他用户
  • a:all,所有人
  • +:增加权限
  • -:去掉权限
  • r / w / x:读、写、执行

所以 chmod u+x run.sh 的意思就是:

run.sh 的文件所有者增加执行权限。

新手最常遇到的问题不是“文件不能看”,而是“脚本不能执行”。这时最常用的就是:

bash
chmod +x run.sh # 给脚本增加可执行权限 等同于 a+x
./run.sh        # 直接执行脚本

3. 数字权限怎么看

你后面还会看到另一种更紧凑的写法,比如:

bash
chmod 755 run.sh   # 给脚本设置常见的可执行权限
chmod 644 data.txt # 给普通文本文件设置常见权限

这里的数字不是硬背出来的,而是二进制位的压缩写法:

text
r = 100₂ = 4
w = 010₂ = 2
x = 001₂ = 1

所以:

text
7 = rwx = 111₂
6 = rw- = 110₂
5 = r-x = 101₂
4 = r-- = 100₂

也就是说:

text
755 -> rwx r-x r-x
644 -> rw- r-- r--
700 -> rwx --- ---