Linux 一切皆文件,权限是系统安全与访问控制的核心。
1.先看懂 ls -l 权限字段
执行 ls -l 查看文件 / 目录详情,输出第一列共 10 个字符,分为两大块:
-rw-r--r-- 1 root root 120 Jun 9 14:00 a.txt drwxr-xr-x 2 root root 4096 Jun 9 14:01 mydir10 位权限拆分:
| 位置 | 含义 | 说明 |
|---|---|---|
| 第 1 位 | 文件类型 | -普通文件、d目录、l软链接、b块设备、c字符设备 |
| 2~4 位 | 属主权限 (u) | 文件所有者的权限 |
| 5~7 位 | 属组权限 (g) | 文件所属用户组的权限 |
| 8~10 位 | 其他用户权限 (o) | 系统内其余所有用户的权限 |
简写标识:
1.u = 属主(user)
2.g = 属组(group)
3.o = 其他用户(other)
4.a = 所有人(all,u+g+o)
2.r /w/x 权限含义(文件 vs 目录 完全不同)
权限字符只有三个:r(读)、w(写)、x(执行),对文件和目录作用天差地别,这是最容易踩坑的点。
1. 对【普通文件】的作用
文件的核心是内容:
- r (Read 可读):可以查看文件内容(
cat/less/vim浏览) - w (Write 可写):可以修改、覆盖、追加文件内容
- x (Execute 可执行):文件是脚本 / 程序时,能够运行它(
./xxx.sh)
2. 对【目录】的作用
目录的核心是进入、浏览、管理内部文件:
- r (可读):仅能
ls列出目录内的文件名,无法 cd 进入、无法访问内部文件 - w (可写):可以在目录内新建、删除、重命名文件 / 子目录(重点:删除文件看父目录 w 权限,不是文件本身)
- x (可执行):可以
cd 进入目录、正常访问目录内文件(目录必须有 x 权限才能正常使用)
3.易错示例(目录权限坑)
现有目录权限:drw-r--r--(有 r、w,无 x)
ls mydir→ 能看到里面的文件名(r 生效)cd mydir→ 报错Permission denied(无 x,无法进入)cat mydir/a.txt→ 同样报错(无 x,无法访问内部文件)
3.权限两种表示方式:符号模式 + 八进制数字模式
1. 八进制数字权限(工作最常用)
规则:r=4、w=2、x=1、-=0
每组权限(u/g/o)单独求和,三组数字组成完整权限。
计算示例:
例 1:属主 rwx、属组 r-x、其他 r-x
属主:4+2+1 = 7
属组:4+0+1 = 5
其他:4+0+1 = 5
完整权限:755 → 对应字符 rwxr-xr-x
例 2:属主 rw-、属组 r--、其他 r--
属主:4+2+0 = 6
属组:4+0+0 = 4
其他:4+0+0 = 4
完整权限:644 → 对应字符 rw-r--r--
高频常用权限对照表:
| 八进制 | 字符权限 | 适用场景 |
|---|---|---|
| 644 | -rw-r--r-- | 普通文本文件(默认文件权限) |
| 755 | drwxr-xr-x | 普通目录、可执行程序(默认目录权限) |
| 600 | -rw------- | 私密文件(仅自己可读可写) |
| 700 | drwx------ | 私人目录(仅自己能进入 / 操作) |
| 777 | rwxrwxrwx | 全开权限(生产环境禁止使用,安全风险极高) |
2. 符号权限模式(局部修改权限,不改动原有位)
格式:[u/g/o/a] [+/-/=] [r/w/x]
+:增加权限-:移除权限=:直接设置为指定权限(覆盖原有)
示例:
u+x:给属主增加执行权限o-r:移除其他用户的读权限g=rw:把属组权限设置为 读 + 写
4.核心权限命令 + 完整实战举例
命令 1:chmod 修改文件 / 目录权限
语法:
chmod [选项] 权限 文件/目录常用选项:
-R:递归修改(目录及其内部所有文件 / 子目录)
场景 1:数字模式(推荐,简单高效)
普通文件设为标准权限 644:
chmod 644 a.txt # 结果:-rw-r--r--目录设为标准权限 755,递归内部所有内容:
chmod -R 755 mydir/ # 目录结果:drwxr-xr-x私密文件(仅自己读写)600:
chmod 600 secret.txt # 结果:-rw-------私人目录(仅自己访问)700:
chmod 700 private_dir/ # 结果:drwx------场景 2:符号模式(局部微调)
给 Shell 脚本增加执行权限:
chmod u+x run.sh # 原权限 -rw-r--r-- → 变为 -rwxr--r--所有人设为只读权限:
chmod a=r a.txt # 结果:-r--r--r--移除属组所有权限:
chmod g= a.txt # 属组位变为 ---