Linux 权限详解:谁能改、谁能删,一篇讲明白

举报
yd_290604680 发表于 2025/08/28 16:54:56 2025/08/28
【摘要】 一、先搞懂一个关键:有权限 ≠ 能执行在 Linux 里,哪怕给了你“执行权限”,也不一定能运行文件——得满足两个条件:能执行 = 是可执行文件 + 有执行权限比如 .out 后缀的文件是编译后的可执行文件,但像 whb.txt 这种文本文件,就算给了执行权限也没用(本质就不是能跑的程序)。看这张图,whb.txt 明确标了“文本文件”,根本没法执行: 二、Linux 里的“三类身份”:谁...

一、先搞懂一个关键:有权限 ≠ 能执行

在 Linux 里,哪怕给了你“执行权限”,也不一定能运行文件——得满足两个条件:
能执行 = 是可执行文件 + 有执行权限

比如 .out 后缀的文件是编译后的可执行文件,但像 whb.txt 这种文本文件,就算给了执行权限也没用(本质就不是能跑的程序)。看这张图,whb.txt 明确标了“文本文件”,根本没法执行:
image.png

二、Linux 里的“三类身份”:谁能操作文件?

Linux 用三种身份控制文件权限,简单说就是“归谁、跟谁一伙、其他人”:

  • user(所属者):文件的“主人”,比如你创建的文件,你就是所属者;
  • group(所属组):相当于“小组”,组里的人共享同一套权限;
  • other(其他者):既不是主人,也不在小组里的人,权限最严格。

判断权限时,Linux 会按“所属者 → 所属组 → 其他者”的顺序对比,只匹配一次。比如你是文件主人,就只看 user 的权限,不管组和其他者。

三、权限的“三种动作”:读、写、执行

不管是哪种身份,权限都分三种,用字母表示很直观:

  • r(read):读权限,能看文件内容、列目录里的文件;
  • w(write):写权限,能改文件内容、在目录里增删文件;
  • x(execute):执行权限,能运行可执行文件、进入目录。

看这两张图,左边是权限字母的含义,右边是实际文件的权限展示(比如 rw-r--r-- 就是“所属者能读能写,组和其他人只能读”):
image.png
image.png

四、修改权限的核心命令

1. 改所属组:chgrp

想把文件的“所属组”换成另一个组,用 chgrp 命令。注意:只有 root 或文件主人能改,普通用户得加 sudo 提权。

比如把 test.txt 的所属组改成 users 组,命令是:

# 普通用户用 sudo 提权
sudo chgrp users test.txt

# 要是 root 账号,直接输
chgrp users test.txt

看这张图,执行命令后,文件的所属组确实变了:
image.png
image.png
image.png

2. 改权限:chmod(字母/数字两种方式)

chmod 是修改权限的核心命令,有两种常用方式:用字母(直观)或数字(简洁)。

先讲数字方式:八进制权限

计算机只认 0 和 1,所以把 r/w/x 转换成二进制(有权限是 1,没权限是 0):

  • r = 100(二进制)= 4(十进制)
  • w = 010(二进制)= 2(十进制)
  • x = 001(二进制)= 1(十进制)

三种权限的组合就是“加起来的数字”,比如 rw- 是 4+2=6,r-x 是 4+1=5。因为每个身份(user/group/other)的权限最大是 7(4+2+1),所以用 3 位八进制数表示权限(第一位 user,第二位 group,第三位 other)。

看这张图,二进制和数字的对应关系很清楚:
image.png
![[…/…/…/…/…/attchment/Pasted image 20250812094720.png]]
![[…/…/…/…/…/attchment/Pasted image 20250812094814.png]]

比如 644 权限,就是“user 能读能写(6=4+2),group 和 other 只能读(4)”。用 chmod 修改时,直接输数字:

# 把 test.txt 权限改成 644
chmod 644 test.txt

看这张图,执行命令后,权限确实变成了 rw-r--r--(对应 644):
image.png

3. 改所属者:chown

想换文件的“主人”,用 chown 命令。和 chgrp 一样,需要 root 权限,普通用户加 sudo

命令格式:chown 新所属者 文件名,比如把 test.txt 的主人改成 maxue

sudo chown maxue test.txt

还能同时改所属者和所属组,用“所属者:所属组”的格式:

# 把 test.txt 的主人改成 maxue,所属组改成 users
sudo chown maxue:users test.txt

看这张图,红色框是新所属者,绿色框是新所属组,一次就改好了:
image.png
image.png
image.png

五、容易踩坑的 3 个权限问题

1. 目录权限:和文件不一样!

目录的 r/w/x 权限含义和文件完全不同,记准这三点:

  • 要进入目录,必须有 x 权限(没 x 连 cd 都进不去);
  • 要查看目录里的文件(比如 ls),必须有 r 权限(没 r 只能看到自己知道的文件名);
  • 要在目录里增删文件/改文件名,必须有 w 权限(没 w 只能看,不能改)。

看这三张图,分别是没 r、没 w、没 x 的效果:
image.png
image.png
image.png

2. 缺省权限:新建文件/目录的默认权限是咋来的?

你有没有发现:新建普通文件默认权限是 644,新建目录默认是 755?这是“起始权限”和“权限掩码(umask)”共同决定的。

核心规则:
最终默认权限 = 起始权限 & (~umask)(& 是按位与,~ 是按位取反)

  • 普通文件起始权限:666(rw-rw-rw-)
  • 目录起始权限:777(rwxrwxrwx)
  • 默认 umask 是 002(只影响 other 的 w 权限)

举个例子:普通文件最终权限 = 666 & (~002) = 664。

如果想改默认权限,直接改 umask 就行,比如把 umask 改成 022(让 group 和 other 都没 w 权限):

# 临时生效(重启终端后失效)
umask 022

# 永久生效(编辑 ~/.bashrc,加一行 umask 022,然后 source ~/.bashrc)
echo "umask 022" >> ~/.bashrc
source ~/.bashrc

看这张图,改完 umask 后,新建文件的权限确实变了:
image.png
image.png
image.png

3. 粘滞位:解决共享目录的“删文件”问题

Linux 多用户是隔离的,但有时候需要共享文件(比如团队共用一个目录)。这时候会遇到一个坑:
就算你没有文件的 w 权限,只要有目录的 w 权限,就能删掉别人的文件!

为了避免这种情况,Linux 引入了“粘滞位(t)”——给目录加了粘滞位后,只有文件主人、目录主人、root 能删这个文件,其他人就算有目录 w 权限也删不了。

怎么加粘滞位?

chmodt 权限,数字方式是在三位权限前加 1(比如 1777):

# 给共享目录 share 加粘滞位
sudo chmod +t share  # 字母方式,直观
# 或
sudo chmod 1777 share  # 数字方式,1 代表粘滞位

看这张图,加了粘滞位后,目录权限最后一位变成了 t
image.png
![[…/…/…/…/…/attchment/Pasted image 20250812103927.png]]
image.png
image.png
image.png

注意:粘滞位只能给目录加,给普通文件加没用。Linux 系统自带的 /tmp 目录(临时文件共享目录),默认就有粘滞位,就是为了防止别人乱删文件。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。