人人都会AI编程

chmod:符号权限与数字权限设置

更新时间:2026-07-12

chmod(change mode)是 Linux 下用来修改文件或目录权限的基本命令。权限决定了谁能读取、写入或执行某个文件。在深入命令之前,先理解权限的三个层面和三种类型:

  • 三个层面:文件所有者(user,简称 u)、所属组(group,简称 g)、其他人(others,简称 o)。
  • 三种类型:读(read,r)、写(write,w)、执行(execute,x)。

ls -l 可以看到类似 -rw-r--r-- 的字符串,第一个字符表示文件类型(- 普通文件,d 目录),后面每三个字符为一组,依次对应所有者、组、其他人的权限。

chmod 支持两种设置方式:符号模式数字模式,掌握它们就能灵活应对所有权限管理场景。

符号模式:直观地增减权限

符号模式下,你通过“谁 + 操作 + 什么权限”的语法来修改权限。

谁(who):

  • u:所有者
  • g:所属组
  • o:其他人
  • a:所有人(相当于 ugo)

操作(operator):

  • +:增加权限
  • -:移除权限
  • =:精确设置为指定权限(会抹掉该对象的原有权限)

权限(permission):

  • r:读
  • w:写
  • x:执行

常用示例:

chmod u+x script.sh      # 给文件所有者加上执行权限
chmod go-w report.txt    # 移除组和其他人的写权限
chmod a=r data.txt       # 所有人都只剩读权限(所有者原来若有写和执行也会被去掉)
chmod u=rwx,g=rx,o= myapp   # 所有者读写执行,组读执行,其他人无任何权限

符号模式的优势是意图清晰,尤其当你只需对某类对象做少量增减时非常方便。

数字模式:一次性精确设定

数字模式(也称八进制模式)用一个三位或四位的八进制数来代表全部权限。每个权限对应一个数值:

  • 读(r)= 4
  • 写(w)= 2
  • 执行(x)= 1

将每类对象的权限数值相加,得到一个 0~7 的数字。三位数字依次代表所有者、组、其他人的权限。

常见组合:

  • 7 = 4+2+1 = rwx
  • 6 = 4+2 = rw-
  • 5 = 4+1 = r-x
  • 4 = 4 = r--
  • 0 = 无任何权限

示例:

chmod 755 script.sh     # 所有者 rwx(7),组 r-x(5),其他人 r-x(5)
chmod 644 document.txt  # 所有者 rw-(6),组 r--(4),其他人 r--(4)
chmod 600 id_rsa        # 只有所有者可读写(6),其他人都无权限(0)——非常适合私钥文件
chmod 777 public_dir    # 所有人都有完整权限(777),通常不推荐,存在安全风险

数字模式特别适合在脚本或配置说明中使用,因为它一次性把权限设到精确状态,无需考虑原有权限是什么。

针对目录的特别说明

目录的执行权限(x)含义与文件不同:它表示能否进入该目录(cd)。如果目录没有 x 权限,即使有读权限也无法访问其中的文件。因此常见的目录权限是 755(所有者可完全管理,其他人可进入浏览)或 700(仅所有者可进入)。

特殊权限(可选了解)

有时你会在数字前面看到一个额外的数字,例如 chmod 4755chmod 2775,那是用来设置 setuid、setgid 和粘滞位(sticky bit)的。它们有专门用途:

  • setuid(4):文件执行时拥有文件所有者的权限,典型如 /usr/bin/passwd
  • setgid(2):文件执行时拥有文件所属组的权限;对目录设置后,目录内新建文件会自动继承该目录的组。
  • sticky(1):多用于共享目录如 /tmp,防止用户删除其他用户的文件。

在日常使用中,掌握基本的 755644600 等组合足以应对 90% 以上的场景,剩余特殊权限在需要时再查文档即可。

实用建议:对于普通数据文件,用 644640;对于可执行程序或脚本,用 755;对于敏感配置文件(如 SSH 私钥),用 600。养成用数字模式快速校准权限的习惯,会让服务器管理更加安全高效。