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 --- ---