名称
chmod - 更改文件模式位(权限)
简介
chmod [选项]... 模式[,模式]... 文件...
chmod [选项]... 八进制模式 文件...
chmod [选项]... --reference=参考文件 文件...描述
chmod 用于更改指定文件或目录的访问权限。权限决定了文件所有者、所属组以及其他用户对文件的读、写、执行权限。可以使用符号模式(如 u+x)或八进制数字模式(如 755)来设置权限。
权限位分为三类:
所有者(user):文件的所有者。
组(group):文件所属组的成员。
其他用户(others):既不是所有者也不在所属组中的用户。
每个类别可设置以下权限:
读(r):允许读取文件内容或列出目录内容。
写(w):允许修改文件或在目录中创建/删除文件。
执行(x):允许执行文件或进入目录。
此外,还有特殊权限位(setuid、setgid、sticky bit),可通过符号模式或额外的数字位设置。
选项
模式说明
符号模式
格式:[ugoa...][[+-=][perms...]...]
用户标识(可组合):
u:所有者(user)g:组(group)o:其他用户(others)a:所有用户(all,等同于ugo)
操作符:
+:添加权限-:移除权限=:设置精确权限(现有权限被覆盖)
权限:
r:读w:写x:执行X:仅当文件是目录或已有执行权限时才添加执行权限(对目录总是可执行)s:setuid/setgid(根据用户标识而定)t:sticky bitu、g、o:将权限设置为与当前所有者、组或其他用户的权限相同
多个模式可以用逗号分隔(无空格),例如 u+r,g-w。
八进制数字模式
使用3或4位八进制数表示权限:
第一位(可选):特殊权限(setuid=4,setgid=2,sticky=1)
第二位:所有者权限(读=4,写=2,执行=1,和值如7=rwx)
第三位:组权限(同上)
第四位:其他用户权限(同上)
例如:
755:所有者 rwx(7),组 r-x(5),其他 r-x(5)644:所有者 rw-(6),组 r--(4),其他 r--(4)4755:setuid + 所有者 rwx,组 r-x,其他 r-x
退出状态
0 – 成功。
>0 – 发生错误(例如文件不存在、权限不足等)。
常用示例
1. 使用符号模式添加或移除权限
chmod u+x script.sh # 为所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户权限为只读(覆盖原有)
chmod a+x script.sh # 为所有用户添加执行权限
chmod u=rw,g=r,o= file.txt # 所有者读写,组只读,其他无权限2. 使用八进制模式设置权限
chmod 755 script.sh # 所有者可读写执行,组和其他只读执行 chmod 644 file.txt # 所有者可读写,组和其他只读 chmod 600 private.key # 所有者可读写,其他无权限
3. 递归修改目录权限
chmod -R 755 /path/to/dir # 将目录及其内部所有文件设为 755注意:递归修改时,对文件通常只需 644,对目录需要 755,可使用 find 配合 chmod 分别处理。
4. 使用参考文件复制权限
chmod --reference=template.txt target.txt5. 设置特殊权限
chmod u+s executable # 设置 setuid 位(执行时以所有者身份运行)
chmod g+s shared_dir # 设置 setgid 位(新文件继承目录的组)
chmod +t /tmp # 设置 sticky 位(仅文件所有者可删除)使用八进制:
chmod 4755 executable # setuid + 755
chmod 2755 shared_dir # setgid + 755
chmod 1777 /tmp # sticky + 7776. 显示详细更改信息
chmod -v 644 file.txt输出类似:
mode of 'file.txt' changed from 0644 (rw-r--r--) to 0644 (rw-r--r--)仅在实际更改时显示:
chmod -c 644 file.txt7. 使用大写 X 为目录添加执行权限
chmod -R u+X dir/ # 为目录添加所有者执行权限,文件保持原样这对于确保目录可进入但普通文件不被意外添加执行权限很有用。
注意事项
只有文件所有者或超级用户(root)才能更改文件权限。
使用
-R递归时要格外小心,避免设置错误的权限导致系统安全问题或功能异常。对于符号链接,
chmod通常不影响链接本身,而是修改链接指向的文件(如果支持)。要更改链接自身的权限,可使用-h选项(某些系统支持,如chmod -h),但并非所有chmod实现都有此选项。使用八进制模式时,前导零可省略,但建议保持三位数清晰。
权限更改立即生效,无需重启任何服务。
相关命令
chown– 更改文件所有者和组。chgrp– 更改文件所属组。umask– 设置默认权限掩码,影响新创建文件的默认权限。ls -l– 查看文件权限。stat– 显示详细的文件状态(包括权限)。getfacl/setfacl– 管理访问控制列表(ACL),提供更细粒度的权限控制。