文章目录
-
- 问题场景
- [1、Linux 权限的基本概念](#1、Linux 权限的基本概念)
- [2、用 ls -l看懂权限字符串](#2、用 ls -l看懂权限字符串)
- 3、数字的含义:八进制权限
- 4、常用权限数字速查
- [5、chmod 的几种用法](#5、chmod 的几种用法)
- 6、实际场景
- 7、一张图记住所有数字
问题场景
最近在玩linux服务器时遇到了一些文件权限相关的问题,故总结本文
- 运行脚本/程序提示权限不足,需要添加执行权限
- 上传的二进制程序无法启动,需赋予可执行权限
- 应用/服务读不到文件,提示权限错误,需开放读权限
- 进入目录时报权限拒绝,需给目录添加可进入权限
- 其他用户/服务无法访问文件,需调整权限让其可读/可写
1、Linux 权限的基本概念
在 Linux 中,每个文件和目录都有三类"使用者":
| 身份 | 英文 | 说明 |
|---|---|---|
| 文件所有者 | User (u) | 创建该文件的用户 |
| 所属群组 | Group (g) | 与所有者同组的用户 |
| 其他人 | Others (o) | 除以上两类之外的所有人 |
每类使用者都有三种权限:
| 权限 | 英文 | 对文件的意义 | 对目录的意义 |
|---|---|---|---|
| 读 | Read ® | 可以读取文件内容 | 可以列出目录内容(ls) |
| 写 | Write (w) | 可以修改文件内容 | 可以在目录中创建/删除文件 |
| 执行 | Execute (x) | 可以运行该文件 | 可以进入该目录(cd) |
2、用 ls -l看懂权限字符串
运行 ls -l,你会看到这样的输出:
bash
-rwxr-xr-- 1 alice dev 4096 Jun 10 10:00 deploy.sh
drwxr-x--- 2 alice dev 4096 Jun 10 10:00 config/
第一列的 10 个字符就是权限信息,拆解如下:
- rwx r-x r--
│ │ │ │
│ │ │ └── Others(其他人):r-- = 只读
│ │ └────── Group(群组):r-x = 读+执行
│ └────────── User(所有者):rwx = 读+写+执行
└──────────── 文件类型:- 普通文件,d 目录,l 软链接
3、数字的含义:八进制权限
这才是重点。chmod 755 里的数字是怎么来的?
每种权限对应一个固定的数值:
r = 4
w = 2
x = 1
- = 0
三个权限相加,就得到该身份的权限数字:
| 权限组合 | 计算 | 数字 | 含义 |
|---|---|---|---|
rwx |
4+2+1 | 7 | 读、写、执行 |
rw- |
4+2+0 | 6 | 读、写 |
r-x |
4+0+1 | 5 | 读、执行 |
r-- |
4+0+0 | 4 | 只读 |
-wx |
0+2+1 | 3 | 写、执行 |
-w- |
0+2+0 | 2 | 只写 |
--x |
0+0+1 | 1 | 只执行 |
--- |
0+0+0 | 0 | 无权限 |
所以 chmod 755 就是:
7 5 5
rwx r-x r-x
所有者 群组 其他人
4+2+1 4+0+1 4+0+1
4、常用权限数字速查
| 命令 | 权限字符串 | 适用场景 |
|---|---|---|
chmod 777 |
rwxrwxrwx |
所有人可读写执行(危险,慎用) |
chmod 755 |
rwxr-xr-x |
可执行脚本、目录(最常用) |
chmod 644 |
rw-r--r-- |
普通文件、配置文件(最常用) |
chmod 600 |
rw------- |
私钥文件(如 SSH key) |
chmod 700 |
rwx------ |
私有脚本,只有自己能用 |
chmod 664 |
rw-rw-r-- |
团队协作文件 |
chmod 400 |
r-------- |
只读保护,防止误修改 |
5、chmod 的几种用法
数字方式(常用)
bash
chmod 755 deploy.sh
chmod -R 644 /var/www/html
-R = Recursive(递归)
即:不仅改这个目录,还把它里面所有的子文件夹、所有文件,全部一起改权限。
符号方式(直观)
bash
# 给所有者添加执行权限
chmod u+x deploy.sh
# 去掉其他人的写权限
chmod o-w config.txt
# 给群组设置读写权限
chmod g=rw data.csv
# 给所有人添加读权限
chmod a+r readme.md
符号说明:
u/g/o/a= 所有者 / 群组 / 其他人 / 所有人+/-/== 添加 / 移除 / 精确设置
6、实际场景
bash
# Web 服务器静态文件
chmod 644 index.html
# Shell 脚本(需要执行权限)
chmod 755 start.sh
# SSH 私钥(权限太宽会报错)
chmod 600 ~/.ssh/id_rsa
# 目录(需要 x 才能进入)
chmod 755 /var/www/html
# 敏感配置文件(只有自己能读)
chmod 600 .env
7、一张图记住所有数字
r=4 w=2 x=1
┌─────────────────────────┐
7 = │ 4 + 2 + 1 │ rwx │
6 = │ 4 + 2 + 0 │ rw- │
5 = │ 4 + 0 + 1 │ r-x │
4 = │ 4 + 0 + 0 │ r-- │
3 = │ 0 + 2 + 1 │ -wx │
2 = │ 0 + 2 + 0 │ -w- │
1 = │ 0 + 0 + 1 │ --x │
0 = │ 0 + 0 + 0 │ --- │
└─────────────────────────┘
chmod 7 5 5
│ │ └── 其他人: r-x
│ └─────── 群组: r-x
└──────────── 所有者: rwx
r=4, w=2, x=1,三个数字分别对应所有者、群组、其他人,每位数字是三种权限的加和。