chmod · 权限钥匙

上游:lsls -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 = 链接)

位置字符意思
rwxuser主人可以读、写、执行
r-xgroup同组用户可以读和执行,不能写
r--others其他人只能读

核心用法

公式(符号法,推荐)

chmod [谁][加/减][什么] 文件
含义
uuser(文件主人)
ggroup(组)
oothers(其他人)
aall(所有人)
操作含义
+增加权限
-删除权限
=设置为(覆盖)

常用命令表

操作命令结果
给文件加可执行权限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 的机器上只有一个用户,暂时无法测试

你学到了什么600rw-------)是私密文件的标准权限。 注意: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


节点链接

上游(先理解这些)

  • ls ← ls -la 查看权限
  • sudo ← 改别人的文件需要 sudo chmod
  • unzip ← 解压出来的文件经常要 chmod

同层(权限体系的另一半)

  • chown ← chmod 改权限,chown 改主人;两个一起才完整

下游(正确权限才能做这些)

  • shell-script ← 脚本必须 chmod +x 才能运行
  • systemctl ← 系统服务的脚本需要特定权限

实战


节点版本:v1.0 · 2026-04-20 下一个节点建议:chowntar