Linux 文件基本属性
ls -l 每一列的含义、rwx 权限、chmod/chown、umask 与特殊位。
Key Points权限三组九位:属主、属组、其他人;目录的 x 表示「能进入」,没有 x 就连读都不行。
读懂 ls -l
Text
-rwxr-xr-- 1 alice dev 4096 Oct 31 10:00 deploy.sh
│└┬┘└┬┘└┬┘ │ │ │
│ │ │ │ │ │ └── 大小
│ │ │ │ │ └───────── 属组
│ │ │ │ └─────────────── 属主
│ │ │ └───────────────────── 其他人:r--
│ │ └──────────────────────── 属组:r-x
│ └─────────────────────────── 属主:rwx
└───────────────────────────── 类型:- 普通文件,d 目录,l 链接数字与符号
| Value | Symbol | File | Directory |
|---|---|---|---|
| 4 | r | Read content | List names |
| 2 | w | Modify content | Create/delete entries |
| 1 | x | Execute | Enter (cd) and traverse |
Bash
chmod 755 deploy.sh # rwxr-xr-x
chmod u+x,g-w,o= deploy.sh # 符号写法
chmod -R 750 /opt/app
chown alice:dev deploy.sh
chown -R www-data:www-data /var/wwwumask
New files start at 666 and directories at 777, minus the umask. umask 022 gives 644/755; umask 077 gives 600/700 (private).
Bash
umask # 查看
umask 027 # 临时改(当前 shell)特殊位
| Bit | Numeric | Effect | Common use |
|---|---|---|---|
| setuid | 4000 | Run as file owner | /usr/bin/passwd |
| setgid | 2000 | Run as group / inherit dir group | Shared team dirs |
| sticky | 1000 | Only owner can delete | /tmp |
chmod -R 777 is not a fix. It lets anyone modify your code and config, and makes incidents untraceable. Grant the minimum.看权限
Bash
ls -l deploy.sh
stat deploy.sh
namei -l /opt/app/bin/run.sh # 逐级检查路径上每一层目录的权限读懂 ls -l
Text
-rwxr-xr-- 1 alice dev 4096 Oct 31 10:00 deploy.sh
│└┬┘└┬┘└┬┘ │ │ │
│ │ │ │ │ │ └── 大小
│ │ │ │ │ └───────── 属组
│ │ │ │ └─────────────── 属主
│ │ │ └───────────────────── 其他人:r--
│ │ └──────────────────────── 属组:r-x
│ └─────────────────────────── 属主:rwx
└───────────────────────────── 类型:- 普通文件,d 目录,l 链接数字与符号
| 数字 | 符号 | 对文件 | 对目录 |
|---|---|---|---|
| 4 | r | 读内容 | 列出名字 |
| 2 | w | 改内容 | 增删条目 |
| 1 | x | 执行 | 进入、穿过 |
Bash
chmod 755 deploy.sh # rwxr-xr-x
chmod u+x,g-w,o= deploy.sh # 符号写法
chmod -R 750 /opt/app
chown alice:dev deploy.sh
chown -R www-data:www-data /var/wwwumask
新建文件默认 666、目录默认 777,再减去 umask 得到实际权限。umask 022 → 文件 644、目录 755;umask 077 → 文件 600、目录 700(私有)。
Bash
umask # 查看
umask 027 # 临时改(当前 shell)特殊位
| 位 | 数字 | 效果 | 常见用途 |
|---|---|---|---|
| setuid | 4000 | 以文件属主身份运行 | /usr/bin/passwd |
| setgid | 2000 | 以属组运行/目录继承属组 | 团队共享目录 |
| sticky | 1000 | 只有属主能删 | /tmp |
chmod -R 777 不是解决办法。它让任何人能改你的代码和配置,出了问题也查不出是谁改的。按需给最小权限。看权限
Bash
ls -l deploy.sh
stat deploy.sh
namei -l /opt/app/bin/run.sh # 逐级检查路径上每一层目录的权限