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。
例题精讲
📗 初探 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