Linux 【01- chmod命令超详细教程】
Linux chmod 超详细完整教程
一、基础概念:Linux 文件权限三角色
Linux 每个文件/目录权限分为三类用户,权限互不干扰:
- u = user:文件所有者(创建文件的用户)
- g = group:文件所属用户组
- o = other:其他所有人(既不是所有者、也不在用户组)
- a = all:u+g+o 全部用户
三种权限标识
| 符号 | 名称 | 文件作用 | 目录作用 |
|---|---|---|---|
| r | 读(read) | 查看文件内容 | 列出目录内文件列表(ls) |
| w | 写(write) | 修改、覆盖、删除文件 | 新增/删除/重命名目录内文件 |
| x | 执行(execute) | 运行脚本/二进制程序 | 进入目录(cd)、访问内部文件 |
关键区别:目录没有x权限,就算有r也无法读取里面文件;目录w权限可以删文件,和文件本身权限无关。
二、查看权限:ls -l
执行ls -l查看文件权限示例:
-rwxr-xr-- 1 root test 123 Jul 1 10:00 run.sh拆解权限段-rwxr-xr--
- 第1位:文件类型
-普通文件d目录l软链接 - 2~4位 u(所有者):
rwx= 读+写+执行 - 5~7位 g(用户组):
r-x= 读+执行,无写 - 8~10位 o(其他人):
r--= 仅读
三、chmod 两种用法:符号模式 / 数字八进制模式
方式1:符号权限模式(直观,适合微调)
语法:
chmod[角色][操作符][权限]文件/目录- 角色:
u/g/o/a - 操作符:
+:增加权限-:移除权限=:直接赋值权限(覆盖原有)
- 权限:
r/w/x
常用示例
# 给所有者增加执行权限chmodu+x test.sh# 移除其他用户写权限chmodo-w test.sh# 给组和其他人添加读权限chmodg+r,o+r test.sh# 所有人赋予读执行,清除所有写权限chmoda=r-x test.sh# 仅所有者读写,组和其他人只读chmodu=rw,g=r,o=r test.txt# 所有用户增加执行权限chmoda+x *.sh方式2:八进制数字模式(最常用、简洁)
权限对应数值
- r = 4
- w = 2
- x = 1
权限相加得到单个角色数字,三位数字依次对应u g o
| 数字 | 权限组合 | 符号等价 |
|---|---|---|
| 0 | — | 无任何权限 |
| 1 | –x | 仅执行 |
| 2 | -w- | 仅写 |
| 3 | -wx | 写+执行 |
| 4 | r– | 仅读 |
| 5 | r-x | 读+执行 |
| 6 | rw- | 读+写 |
| 7 | rwx | 读写执行 |
计算示例
755- u=7(rwx)、g=5(r-x)、o=5(r-x) → 程序/目录标准权限
644- u=6(rw-)、g=4(r–)、o=4(r–) → 普通文件标准权限
777- 全部读写执行,生产环境禁止使用,极度不安全
600- 仅所有者读写,密钥、隐私文件专用
数字模式命令示例
# 普通文本文件标准权限chmod644info.txt# 脚本/程序标准权限chmod755startup.sh# 私密密钥文件,仅自己可读可写chmod600id_rsa# 目录全开(慎用)chmod777temp/# 批量修改当前目录所有sh脚本权限chmod755*.sh四、递归修改目录权限 -R 参数
目录内部所有子目录、文件同步修改权限,必须加 -R
# 递归给网站目录全部755权限chmod-R755/home/www# 递归移除所有其他人写权限chmod-Ro-w /data/logs# 符号模式递归增加执行权限chmod-Ra+x scripts/⚠️ 注意:不要随便chmod -R 777,极易造成安全漏洞。
五、特殊权限(SUID / SGID / Sticky粘滞位)
1. 三位数字扩展为四位权限
第一位特殊权限:
- 4 = SUID
- 2 = SGID
- 1 = Sticky(粘滞位)
完整格式:chmod 特殊位ugo,如4755
SUID (4xxx) 二进制文件专用
程序运行时临时拥有文件所有者权限
示例:passwd命令权限4755
chmod4755/usr/bin/mycmdSGID (2xxx) 目录/文件
- 文件:运行时拥有文件组权限
- 目录:新建文件自动继承目录所属组
chmod2775/shared/groupdirSticky粘滞位 (1xxx) 公共目录
目录内文件仅文件所有者能删除,典型/tmp
chmod1777/tmp查看特殊权限
ls -l权限位会出现 s/t 标识:
- SUID:所有者x位变为
s - SGID:组x位变为
s - Sticky:其他x位变为
t
六、目录 vs 文件 权限最佳实践
1. 普通静态文件(txt/html/js/css)
推荐:644
chmod644*.html2. 可执行脚本/程序(sh/python二进制)
推荐:755
chmod755run.sh3. 隐私文件(密钥、证书、数据库配置)
推荐:600
chmod600~/.ssh/id_rsachmod600config/db.ini4. 普通业务目录
推荐:755
chmod755/project5. 多人共享协作目录
推荐:2770(SGID,同组可读写)
chmod2770/team/share6. 公共临时目录(任何人可写,只能删自己文件)
推荐:1777
chmod1777/public/tmp七、常见实用场景命令
- 批量修改所有文件为644,目录为755(网站常用)
# 文件统一644find/www-typef-execchmod644{}\;# 目录统一755find/www-typed-execchmod755{}\;- 只给脚本添加执行权限,其他文件不变
find./-name"*.sh"-execchmodu+x{}\;- 禁止任何人写入日志目录
chmod-Rgo-w /var/log- 移除所有文件SUID高危权限(服务器安全加固)
find/-perm-4000-typef-execchmodu-s{}\;八、常见坑与注意事项
目录缺少x权限无法进入
例:chmod 644 testdir无x,ls能看到目录,但cd进去报错。目录最低权限建议755。777极度危险
任何用户都能修改、删除文件,线上生产环境严禁使用。-R递归慎用
不要执行chmod -R 644 /,会把系统目录执行权限全部抹除,系统直接崩溃。软链接修改权限无效
chmod 作用于链接指向的真实文件,而非链接本身。root用户不受权限限制
root无视rwx权限,可读写删除任意文件。
九、快速记忆总结
- 数字模式优先:文件644、脚本755、密钥600、目录755
- 符号模式适合临时加减权限:
u+x、o-w - 修改文件夹内部全部内容必须加
-R - 四位数字首位控制SUID/SGID/粘滞位
- 目录x权限是进入目录的必要条件
