chmod · 权限钥匙
上游:ls(
ls -la查看当前权限)· sudo(改别人的文件需要管理员权限) 下游:chown(改文件主人)· systemctl(服务脚本需要正确权限) 参见:unzip(解压出的文件可能需要设权限)
一句话是什么
chmod 控制谁能对文件做什么——读、写、还是运行,
就像给每扇门设置不同的钥匙权限。
为什么需要它
Linux 里每个文件都有三把锁,三种人各持一把钥匙:
文件的三种人:
u = user (文件主人,通常是你自己)
g = group (你所在的用户组)
o = others (其他所有人)
三种权限:
r = read (读,可以看内容)
w = write (写,可以修改)
x = execute (执行,可以运行)
你用 ls -la 看文件,最左边那串字符就是权限:
$ ls -la ~/mc-server/bedrock_server
-rwxr-xr-- 1 aaron aaron 120M Apr 20 08:00 bedrock_server
↑↑↑↑↑↑↑↑↑
│└┬┘└┬┘└┬┘
│ u g o
│
└─ - = 普通文件(d = 目录,l = 链接)| 位置 | 字符 | 意思 |
|---|---|---|
rwx | user | 主人可以读、写、执行 |
r-x | group | 同组用户可以读和执行,不能写 |
r-- | others | 其他人只能读 |
核心用法
公式(符号法,推荐)
chmod [谁][加/减][什么] 文件
| 谁 | 含义 |
|---|---|
u | user(文件主人) |
g | group(组) |
o | others(其他人) |
a | all(所有人) |
| 操作 | 含义 |
|---|---|
+ | 增加权限 |
- | 删除权限 |
= | 设置为(覆盖) |
常用命令表
| 操作 | 命令 | 结果 |
|---|---|---|
| 给文件加可执行权限 | chmod +x 文件 | 所有人都能运行 |
| 只有主人能读写 | chmod 600 文件 | rw------- |
| 所有人都能读执行 | chmod 755 文件 | rwxr-xr-x |
| 只有主人能动 | chmod 700 目录 | rwx------ |
| 公开只读 | chmod 644 文件 | rw-r--r-- |
数字法(快速参考)
4 = r(读)
2 = w(写)
1 = x(执行)
把三种权限相加:
rwx = 4+2+1 = 7
rw- = 4+2+0 = 6
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4
chmod 755 = rwx r-x r-x
主人 组 其他
Linux 笑话
Aaron 第一次运行 shell 脚本,结果是:
$ ./start.sh
bash: ./start.sh: Permission denied他以为 sudo ./start.sh 能解决——
于是写了一个完全错误的权限方案。
后来他才知道,问题根本不是 sudo,是文件没有 x(执行)权限:
ls -la start.sh
# -rw-r--r-- 1 aaron aaron start.sh
# ↑↑
# 没有 x!
chmod +x start.sh
./start.sh
# 成功运行教训:Permission denied 不一定要 sudo,
先用 ls -la 检查权限,再决定是加权限还是加 sudo。
参数拟人化拆解 · 数字法 vs 符号法到底怎么选
chmod 的两套写法不是”新手用一个,老手用另一个”——它们各有最适合的场景。
符号法(u/g/o/a + +/-/= + r/w/x)· 适合”微调”
chmod u+x start.sh # 只给主人加执行权限
chmod g-w report.txt # 撤销组的写权限
chmod o= secret.txt # 把"其他人"的所有权限清零
chmod a+r README.md # 所有人都能读拟人化:“对某把锁的某种钥匙,单独操作”——动一处,不碰其他。
适用场景:
- 解决”
./xxx.sh跑不起来”——chmod +x xxx.sh一招制敌 - 撤销单项权限:
chmod o-r private.log(其他人不能再读,但主人和组的权限不变)
数字法(三位数字)· 适合”整体重置”
4 = r 2 = w 1 = x
每位数字 = 那一类人的权限总和
百位 = u(主人) 十位 = g(组) 个位 = o(其他人)
chmod 644 报告.txt
# 6 = 4+2 = rw- 主人能读写
# 4 = 4 = r-- 组只能读
# 4 = 4 = r-- 其他人只能读
# → -rw-r--r--拟人化:“一次性把三套钥匙全部换掉”——所有权限位重写,老的清空。
适用场景:
- 给新文件设标准权限
- 跟”标准值”对齐:
644普通文件 /755程序和目录 /600私密 /700私密目录
五个最常用数字 · 背下来省一辈子
| 数字 | 权限 | 用在哪里 |
|---|---|---|
644 | rw-r--r-- | 普通文件(文档、配置) |
755 | rwxr-xr-x | 可执行程序、共享目录 |
600 | rw------- | 私密文件(SSH 密钥、密码本) |
700 | rwx------ | 私密目录(如 ~/.ssh/) |
777 | rwxrwxrwx | 危险:所有人都能读写执行,几乎不该用 |
关键区别 · 加权限 vs 重置权限
# 起始:-rw-r--r--(644)
chmod +x file # 符号法 → -rwxr-xr-x(变成 755,其他位的 r 全保留)
chmod 700 file # 数字法 → -rwx------(其他人的 r 被清掉了)符号法 = 加减微调,原有权限保留 数字法 = 整套覆盖,老权限清零
目录的 x 是个反直觉的点
文件的 x = 可执行(程序能跑)
目录的 x = “可进入”(能 cd 进去)
chmod 644 ~/文件夹/ # 移除目录的 x
cd ~/文件夹/
# Permission denied
# 即使你是主人,没有 x 也进不去自己的目录所以目录通常需要 755 或 700,不能用 644——
644 对文件没问题,对目录就把自己锁外面了。
-R 递归 · 危险但有用
chmod -R 755 ~/mc-server/
# 把整个目录树(mc-server 及其下所有文件和子目录)都设成 755问题:递归会给所有文件都加 x,连配置、文档都成了”可执行”。 正经做法是分开处理目录和文件:
# 目录设 755(保留 x 让能进入)
find ~/mc-server -type d -exec chmod 755 {} \;
# 文件设 644(普通文件不需要 x)
find ~/mc-server -type f -exec chmod 644 {} \;
# 单独给主程序加 x
chmod +x ~/mc-server/bedrock_server ~/mc-server/*.sh例题精讲
📗 初探 Starter — 给脚本加可执行权限
任务:创建一个脚本,发现跑不了,然后修复它。
# 第一步:写一个简单脚本
echo '#!/bin/bash
echo "Aaron 的第一个脚本!"
echo "当前时间:$(date)"' > ~/练习/hello.sh
# 第二步:尝试运行(会失败)
./~/练习/hello.sh
# Permission denied
# 第三步:查看当前权限
ls -la ~/练习/hello.sh
# -rw-r--r-- 1 aaron aaron hello.sh
# 没有 x(执行权限)
# 第四步:加上执行权限
chmod +x ~/练习/hello.sh
# 第五步:再看权限
ls -la ~/练习/hello.sh
# -rwxr-xr-x 1 aaron aaron hello.sh
# 第六步:运行
~/练习/hello.sh
# Aaron 的第一个脚本!
# 当前时间:Mon Apr 20 08:00:00 CST 2026你学到了什么:.sh 脚本写好之后,一定要 chmod +x 才能运行。
📘 应用 User — 保护私密文件
任务:把一个私密文件设为只有自己能看,其他人完全看不到。
# 创建一个私密文件
echo "这是我的秘密" > ~/私密笔记.txt
# 看看默认权限
ls -la ~/私密笔记.txt
# -rw-r--r-- 1 aaron aaron 私密笔记.txt
# 问题:其他人(o)还能读!
# 设为只有自己能读写
chmod 600 ~/私密笔记.txt
# 验证
ls -la ~/私密笔记.txt
# -rw------- 1 aaron aaron 私密笔记.txt
# 测试:切换到 root 看看(root 有特殊权限,能无视权限)
sudo cat ~/私密笔记.txt
# 注意:root 无论什么权限都能读,所以保密对 root 无效
# 测试:普通用户能不能读(在多用户系统上)
# 在 Aaron 的机器上只有一个用户,暂时无法测试你学到了什么:600(rw-------)是私密文件的标准权限。
注意:root 不受 chmod 限制。
📙 管理 Admin — 给 Minecraft 服务器设置正确权限
任务:解压 BDS 之后,设置正确权限让服务器能运行。
# 解压服务器(假设已完成)
ls -la ~/mc-server/
# 检查主程序权限
ls -la ~/mc-server/bedrock_server
# 可能是 -rw-r--r--(没有执行权限)
# 给主程序加执行权限
chmod +x ~/mc-server/bedrock_server
# 给所有 .sh 脚本加执行权限
chmod +x ~/mc-server/*.sh
# 目录权限:确保 aaron 可以进入和修改
chmod 755 ~/mc-server/
# 配置文件不需要执行权限,设为 644
chmod 644 ~/mc-server/server.properties
# 最终确认
ls -la ~/mc-server/你学到了什么:不同文件有不同的权限需求——
可执行程序需要 +x,配置文件只需要 644,目录需要 755。
官方文档参考
man chmod # 完整手册
chmod --help # 快速选项列表权限本质是 9 个 bit(3×3),数字法和符号法效果相同,符号法更易读。 在线:
https://manpages.ubuntu.com/chmod
节点链接
上游(先理解这些)
同层(权限体系的另一半)
- chown ← chmod 改权限,chown 改主人;两个一起才完整
下游(正确权限才能做这些)
- shell-script ← 脚本必须 chmod +x 才能运行
- systemctl ← 系统服务的脚本需要特定权限
实战
- Minecraft-Bedrock-Server ← bedrock_server 需要 chmod +x