Linux 文件权限与 chmod 详解

文章目录

问题场景

最近在玩linux服务器时遇到了一些文件权限相关的问题,故总结本文

  1. 运行脚本/程序提示权限不足,需要添加执行权限
  2. 上传的二进制程序无法启动,需赋予可执行权限
  3. 应用/服务读不到文件,提示权限错误,需开放读权限
  4. 进入目录时报权限拒绝,需给目录添加可进入权限
  5. 其他用户/服务无法访问文件,需调整权限让其可读/可写

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,三个数字分别对应所有者、群组、其他人,每位数字是三种权限的加和。

相关推荐
我去流水了2 小时前
【独家免费】【亲测】在linux下嵌入式linux的web http服务【Get、Post】,移植mongoose,post上传文件
linux·运维·前端
攻城狮在此2 小时前
Rufus使用教程:Windows/Linux 系统启动盘制作
linux·服务器·windows
尽兴-2 小时前
Elasticsearch 8.14.3 安装部署实战:Windows/Linux + Kibana + 常用插件
linux·windows·elasticsearch·kinana·es 浏览器插件
DARLING Zero two♡2 小时前
CentOS 部署 Teemii:打造专属私人漫画阅读库
linux·运维·centos
WHD3062 小时前
苏州服务器维修哪家好/公司推荐
linux·ubuntu·centos·计算机外设·电脑·unix·安全架构
thulium_2 小时前
Rust 编译错误:link.exe 未找到
开发语言·后端·rust
咸鱼梦想家π2 小时前
Linux权限
linux·运维·服务器
SimonKing2 小时前
IntelliJ IDEA 配置与插件全部迁移到其他盘,彻底释放C盘空间
java·后端·程序员
华科易迅2 小时前
Spring 代理
java·后端·spring