🧱 一、Linux 为什么要有权限?
想象一下:
- 你写了一个程序,不想让别人删掉 → 需要“写保护”
- 你有一个密码文件,不想让别人看 → 需要“读保护”
- 你写了一个脚本,想让别人运行但不能改 → 需要“执行权限”
👉 Linux 是多用户系统,权限就是“谁可以对文件做什么”的规则!
👥 二、权限是给“谁”设置的?
Linux 把“谁能访问文件”分成 三类人:
| 类别 | 英文 | 说明 |
|---|---|---|
| 🧑 所有者 | Owner (u) | 创建文件的人(比如你 wn) |
| 👥 所属组 | Group (g) | 和你同一个组的用户(比如 developers 组) |
| 🌍 其他人 | Others (o) | 除了你和你组以外的所有人 |
💡 每个文件都有一个“所有者”和一个“所属组”
🔐 三、权限有哪些类型?
对每一类人,可以设置三种权限:
| 权限 | 字母 | 数字 | 说明(文件) | 说明(目录) |
|---|---|---|---|---|
| 读 | r | 4 | 可以查看文件内容 | 可以 ls 列出目录内容 |
| 写 | w | 2 | 可以修改文件内容 | 可以在目录里创建/删除文件 |
| 执行 | x | 1 | 可以运行程序/脚本 | 可以 cd 进入目录 |
⚠️ 目录的“x”权限特别重要!没有 x,你连 cd 都进不去!
🔢 四、数字权限 vs 字母权限(核心!)
Linux 权限有两种表示法:
✅ 1. 字母表示法(可视化,适合人看)
用 ls -l 查看:
bash
深色版本
ls -l myfile.txt
-rw-r--r-- 1 wn wn 0 Sep 16 20:00 myfile.txt
解释:
深色版本
- rw- r-- r--
│ │ │ └─ Others(其他人):r-- = 只读
│ │ └───── Group(组):r-- = 只读
│ └───────── Owner(所有者):rw- = 读+写
└──────────── 文件类型(- = 普通文件,d = 目录)
✅ 2. 数字表示法(八进制,适合命令用)
把 r/w/x 转换成数字:
- r = 4
- w = 2
- x = 1
👉 把你需要的权限加起来!
| 权限组合 | 字母 | 数字 | 说明 |
|---|---|---|---|
| 无权限 | --- | 0 | 什么都不能做 |
| 只读 | r-- | 4 | 能看不能改 |
| 只写 | -w- | 2 | 能改不能看(很少用) |
| 读+写 | rw- | 6 | 最常用!能看能改 |
| 读+执行 | r-x | 5 | 能看、能运行(脚本) |
| 读+写+执行 | rwx | 7 | 全能!开发常用 |
👉 所以,权限用三位数字表示:
深色版本
Owner Group Others
6 4 4 → 644
7 5 5 → 755
7 0 0 → 700
6 0 0 → 600
🛠️ 五、如何查看和修改权限?
✅ 1. 查看权限
bash
深色版本
ls -l 文件名 # 查看文件权限
ls -ld 目录名 # 查看目录权限(必须加 -d)
✅ 2. 修改权限 —— chmod
➤ 用数字法(推荐新手):
bash
深色版本
chmod 600 myfile.txt # 只有自己能读写
chmod 755 myscript.sh # 自己全能,别人能读能执行
chmod 644 config.conf # 自己能改,别人只能看
➤ 用字母法(适合微调):
bash
深色版本
chmod u+x script.sh # 给所有者加执行权限
chmod g-w file.txt # 给组去掉写权限
chmod o+r public.txt # 给其他人加读权限
chmod a+x all.sh # 给所有人(all)加执行权限
💡
u=user(owner),g=group,o=others,a=all
📁 六、目录权限 vs 文件权限(重点!)
很多新手搞混:为什么目录权限和文件权限行为不一样?
| 操作 | 文件需要权限 | 目录需要权限 |
|---|---|---|
| 查看内容(cat) | r | — |
| 修改内容(echo >) | w | — |
| 运行(./script) | x | — |
| 列出内容(ls) | — | r |
| 进入目录(cd) | — | x |
| 创建/删除文件 | — | w + x |
⚠️ 没有 x 权限的目录,你连 cd 都进不去!
🧪 实验:
bash
深色版本
mkdir testdir
chmod 644 testdir # 只给 r 权限,不给 x
cd testdir # ❌ 失败!Permission denied
ls testdir # ❌ 也失败!即使有 r 权限也不行
chmod 755 testdir # 加上 x 权限
cd testdir # ✅ 成功!
🎯 七、常用权限设置(开发必备)
| 场景 | 权限 | 说明 |
|---|---|---|
| 私人配置文件 | 600 | 只有自己能读写(如 ~/.ssh/id_rsa) |
| 源代码文件 | 644 | 自己能改,别人能看 |
| 可执行程序 | 755 | 自己全能,别人能运行 |
| 私人脚本 | 700 | 只有自己能运行和修改 |
| 团队共享目录 | 775 | 组内成员全能,其他人能读+执行 |
| 临时开放文件 | 666 | 所有人都能读写(⚠️ 危险!) |
| 完全开放 | 777 | 所有人都能读写执行(🚨 高危!慎用!) |
🧩 八、特殊权限(进阶,了解即可)
除了 rwx,Linux 还有三个“特殊权限位”:
✅ 1. SUID(Set User ID)→ 用所有者的身份运行
bash
深色版本
chmod u+s /usr/bin/passwd
ls -l → -rwsr-xr-x # 注意 s
👉 比如 passwd 命令,普通用户运行时,临时获得 root 权限改密码!
✅ 2. SGID(Set Group ID)→ 用组的身份运行 / 目录下新文件继承组
bash
深色版本
chmod g+s /shared/project
ls -l → drwxr-sr-x
👉 在共享目录中,新创建的文件自动属于该组!
✅ 3. Sticky Bit → 目录中,只有文件所有者能删除文件
bash
深色版本
chmod +t /tmp
ls -l → drwxrwxrwt
👉 /tmp 目录,你只能删自己的文件,不能删别人的!
🛡️ 九、安全建议(小白必看)
- 私密文件用
600(如密钥、密码) - 脚本用
755或700 - 源代码用
644 - 目录至少要有
755(rwxr-xr-x) - 不要随便用
777!除非你明确知道后果! - 用
ls -l经常检查权限!
🎁 十、小练习(巩固知识)
bash
深色版本
# 1. 创建文件和目录
touch myfile.txt
mkdir mydir
# 2. 查看默认权限
ls -l myfile.txt
ls -ld mydir
# 3. 修改为私人文件
chmod 600 myfile.txt
ls -l → -rw-------
# 4. 修改为可执行脚本
chmod 755 myfile.txt
ls -l → -rwxr-xr-x
# 5. 修改目录权限
chmod 700 mydir
ls -ld → drwx------
# 6. 尝试进入目录
cd mydir # ✅ 应该成功
touch test.txt # ✅ 应该成功
# 7. 改成无执行权限
chmod 600 mydir
cd mydir # ❌ 应该失败!