de风——【从零开始学习Linux】(三):全面总结瞧一瞧,权限管理没烦恼

📅 2026/7/6 15:06:25 👁️ 阅读次数 📝 编程学习
de风——【从零开始学习Linux】(三):全面总结瞧一瞧,权限管理没烦恼

📋 前言

操作环境:Xshell 7 + 腾讯云服务器(CentOS 7)
适合人群:Linux 零基础新手
系列文章:Linux专题链接🔗:https://blog.csdn.net/xiao_running/category_13167800.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=13167800&sharerefer=PC&sharesource=Xiao_running&sharefrom=from_link

大家好,我是正在学习 Linux 的小小风呀!

说实话,刚接触 Linux 权限的时候,我是一脸懵的。

什么rwxchmod 755chownumask……一堆概念扑面而来,光是看ls -l的输出都觉得头大。

后来我静下心来,把权限相关的知识点一条条啃下来,整理成了这篇笔记。现在分享出来,希望能帮到和我一样正在入门 Linux 的同学。

本文覆盖的知识点:

  • 权限的基本概念(谁有权限?有什么权限?)
  • 如何修改权限(chmod
  • 如何修改文件归属(chown/chgrp
  • 新文件的默认权限是怎么来的(umask
  • 三个特殊权限位(SUID / SGID / Sticky Bit)
  • 新手常见问题速查

每个知识点下面都有代码示例,可以直接在腾讯云服务器上敲一遍,印象会深刻很多。

文章思维导图

下图梳理了本文所有核心知识点,建议先浏览全图建立整体认知,再逐节深入阅读。
(建议右击图片 → "在新标签页中打开"查看高清大图)



📑 目录

  • 一、权限基本概念
    • 1. 为什么要有权限?
    • 2. 用户分类:root 与普通用户
    • 3. 身份切换:su 与 sudo
    • 4. 角色分类:U / G / O
    • 5. 文件权限:r / w / x
    • 6. 目录权限:r / w / x 的含义不同!
    • 7. 读懂 ls -l 的权限字符串
    • 8. 权限的数字表示法
  • 二、chmod —— 修改文件权限
    • 语法形式
    • 功能说明
    • 代码示例
    • 延伸扩展
  • 三、chown —— 修改文件所有者
    • 语法形式
    • 功能说明
    • 代码示例
    • 延伸扩展
  • 四、chgrp —— 修改文件所属组
    • 语法形式
    • 功能说明
    • 代码示例
    • 延伸扩展
  • 五、umask —— 默认权限掩码
    • 语法形式
    • 功能说明
    • 代码示例
    • 延伸扩展
  • 六、特殊权限(SUID / SGID / Sticky Bit)
    • 6.1 SUID(Set User ID)
    • 6.2 SGID(Set Group ID)
    • 6.3 Sticky Bit(粘滞位)
  • 七、新手常见问题速查
  • 总结

一、权限基本概念

1. 为什么要有权限?

Linux 是一个多用户操作系统,同一台服务器上可能有多个用户同时登录(比如你们团队的几个人共用一台腾讯云服务器)。

如果大家都能随意修改彼此的文件,那不乱套了吗?

所以 Linux 设计了一套权限系统,主要目的有三个:

  1. 控制用户行为:防止误操作破坏系统文件
  2. 安全隔离:不同用户之间的数据相互隔离,A 用户看不到 B 用户的私密文件
  3. 权限 = 角色 + 目标属性:权限首先限制的是"角色"(你是谁),同时要求"目标"(文件/目录)必须具备对应的属性(是否允许读/写/执行)

2. 用户分类:root 与普通用户

Linux 把用户分为两大类:

用户类型说明权限范围
root(超级管理员)系统最高权限用户,UID = 0不受任何权限限制,可以对所有文件为所欲为
普通用户日常使用的账号,如alicebob权限受限,只能操作自己有权限的文件

⚠️重要:root 用户是不受权限约束的。即使某个文件的权限是----------(所有人无任何权限),root 依然可以读写执行它。这是很多 Linux 安全问题的根源——如果黑客拿到了 root 权限,就等于掌控了整台服务器。


3. 身份切换:su 与 sudo

日常操作中,我们经常需要在普通用户和 root 之间切换。

su —— 切换用户身份
# 普通用户 → root(需要输入 root 密码) su # 切换到 root,当前目录不变 su - # 切换到 root,并跳转到 root 的家目录(/root) # root → 普通用户(无需密码) su alice # 切换到 alice 用户 su - alice # 切换到 alice,并跳转到 alice 的家目录 # 退出当前用户,回到上一个用户 exit # 或直接按 Ctrl + D

💡susu -的区别
su只切换用户身份,但保留当前所在目录和环境变量;
su -完全模拟一次登录,会切换到目标用户的家目录并加载其环境变量。
推荐用su -,环境更干净。

sudo —— 短暂提权(推荐!)
# 以 root 权限执行单条命令(输入的是当前用户的密码,不是 root 密码) sudo apt update # Ubuntu/Debian 系统 sudo yum install nginx # CentOS/RHEL 系统

为什么推荐 sudo 而不是 su?
sudo只给单条命令提权,执行完就回到普通用户身份,降低误操作风险。
su切换到 root 后,如果不小心敲了rm -rf /,就真的完了。

📌Ubuntu 的特殊之处:Ubuntu 默认禁用 root 远程登录,只能通过sudo su切换到 root:

sudo su # Ubuntu 上切换到 root 的正确方式

4. 角色分类:U / G / O

权限系统需要知道"谁在访问文件"。Linux 把访问者分为三类角色,简称UGO

角色缩写全称含义
拥有者uUser文件的创建者(owner)
所属组gGroup文件所属的用户组(group)
其他人oOthers既不是拥有者,也不在所属组中的用户

🤔为什么要有所属组?
假设你和同事bobcarol在同一个开发团队,需要共同维护/data/project目录。
如果只用"拥有者"和"其他人"两个角色,你要么给所有人开放权限(不安全),要么只能给自己开放(同事无法协作)。
引入"所属组"后,你可以把/data/project的组设为devteam,然后把bobcarol都加入这个组,这样组内的三个人都有相应权限,组外的人则没有。实现了精细化的权限管理


5. 文件权限:r / w / x

普通文件来说,三种权限的含义:

权限符号数值对文件的意义
r4可以读取文件内容(如catlessvim打开查看)
w2可以修改文件内容(如vim编辑并保存、echo >>追加)
执行x1可以作为程序/脚本执行(如./script.sh

⚠️注意:有x权限只是"有机会"执行,文件本身需要是可执行程序(如编译后的二进制文件)或脚本(如.sh文件且开头有#!/bin/bash)才能真正运行。


6. 目录权限:r / w / x 的含义不同!

目录的权限含义和文件完全不同,这是新手最容易混淆的地方!

权限符号对目录的意义
r可以列出目录内容(如ls命令能看到目录下有哪些文件)
w可以在目录中增删文件(如touch新建、rm删除、mv重命名)
执行x可以进入目录(如cd到该目录),以及访问目录内文件的元数据

🔑核心要点:要操作目录里的文件,首先得有目录的x权限
举个例子:目录权限是r--(只有读,没有执行),你用ls能看到文件名,但用cat filename会报Permission denied,因为你没有x权限进入目录去访问文件内容。


7. 读懂 ls -l 的权限字符串

ls -l命令可以查看文件的详细权限信息:

$ ls -l total 8 -rw-rw-r-- 1 alice alice 1024 Sep 24 19:06 my.txt drwxr-x--- 2 bob devs 4096 Sep 24 20:30 myproject/

下面逐位解读第一列的权限字符串(以-rw-rw-r--为例):

- rw- rw- r-- │ │ │ └── 其他人(Others)的权限:r--(只读) │ │ └─────── 所属组(Group)的权限:rw-(读写,不可执行) │ └──────────── 拥有者(User)的权限:rw-(读写,不可执行) └──────────────── 文件类型:- 普通文件,d 目录,l 软链接
位置字符含义
第 1 位-/d/l文件类型
第 2~4 位rw-拥有者(User)权限
第 5~7 位rw-所属组(Group)权限
第 8~10 位r--其他人(Others)权限

再来看第二列1 alice alice的含义:

  • 1:硬链接数量
  • 第一个alice拥有者(owner)
  • 第二个alice所属组(group)

8. 权限的数字表示法

除了用rwx字母表示,Linux 还支持用八进制数字来表示权限,这在chmod命令中非常常用。

计算方法:把r/w/x分别对应的数值相加。

权限二进制八进制
---0000
--x0011
-w-0102
-wx0113
r--1004
r-x1015
rw-1106
rwx1117

常见权限组合速查

数字权限字符串含义典型用途
644rw-r--r--所有者读写,其他人只读普通文件的默认权限
755rwxr-xr-x所有者全权限,其他人读和执行可执行文件 / 目录的默认权限
600rw-------只有所有者读写私密文件(如 SSH 私钥)
700rwx------只有所有者有全部权限私密目录
777rwxrwxrwx所有人都有全部权限⚠️ 谨慎使用!

二、chmod —— 修改文件权限

语法形式
chmod [选项] <权限模式> <文件或目录>

常用选项

选项说明
-R递归修改,将目录及其下所有内容一并修改权限
-v显示详细的修改过程(verbose)

权限模式有两种写法:

① 数字模式(推荐,简洁高效)

chmod 755 filename # rwxr-xr-x chmod 644 filename # rw-r--r--

② 符号模式(直观易读)

chmod u+x filename # 给拥有者(u)添加(+)执行(x)权限 chmod g-w filename # 给所属组(g)去掉(-)写(w)权限 chmod o=r filename # 将其他人(o)的权限精确设置为(=)只读(r) chmod a+x filename # 给所有人(a=all)添加执行权限

符号模式中的操作符:

操作符含义
+添加权限(不影响已有权限)
-去除权限
=精确设置权限(覆盖原有权限)

功能说明

chmodchangemode)用于修改文件或目录的访问权限,是 Linux 权限管理中使用频率最高的命令。

谁可以执行 chmod?
文件的拥有者自己就能改,不需要 root 权限。当然 root 也可以改任何文件的权限。


代码示例
① 数字模式(最常用)
# 示例1:刚写好的部署脚本,需要添加执行权限 chmod 755 deploy.sh ls -l deploy.sh # 输出:-rwxr-xr-x 1 alice alice 2048 Sep 24 21:00 deploy.sh # 示例2:私密配置文件,只允许自己读写 chmod 600 /etc/myapp/config.conf ls -l /etc/myapp/config.conf # 输出:-rw------- 1 alice alice 512 Sep 24 21:05 config.conf # 示例3:网站根目录,标准权限 chmod 755 /var/www/html ls -ld /var/www/html # 输出:drwxr-xr-x 2 alice alice 4096 Sep 24 21:10 /var/www/html/
② 符号模式(更直观)
# 示例1:给脚本添加执行权限(最常用场景) chmod u+x backup.sh # 示例2:去掉"其他人"的写权限(防止被篡改) chmod o-w important.txt # 示例3:同时操作多个角色 chmod u+rwx,g+rx,o-rx myapp # 含义:u加读写执行,g加读执行,o去掉读执行 # 示例4:用 = 精确设置权限 chmod u=rw,g=r,o= secret.txt # 含义:u=rw, g=r, o=无权限(等价于 chmod 640)
③ 递归修改目录(部署时常用)
# 将整个网站目录递归设为 755 chmod -R 755 /var/www/mysite # 验证结果 ls -la /var/www/mysite | head -10

延伸扩展

1. 刚创建的脚本无法直接运行?
这是新手最高频的问题!默认新建的.sh文件没有x权限运行时会报Permission denied

./deploy.sh # bash: ./deploy.sh: Permission denied # 解决方法: chmod +x deploy.sh ./deploy.sh # 现在可以运行了

2. 不要随意使用 chmod 777!

chmod 777 /var/www/html # ❌ 危险!所有人都能读写执行

777 意味着"任何人都可以修改这个文件/目录",在公网服务器上等于敞开大门欢迎黑客。
正确做法:先想清楚需要给哪些人什么权限,再用精准的权限设置(如 755、644)。

3. 权限匹配顺序:只匹配一次!
Linux 检查权限时是按顺序匹配的,而且只匹配一次

顺序:拥有者(u)→ 所属组(g)→ 其他人(o)

举例:文件权限是-rw-rw-r--,用户ggb来访问:

  • 先检查:ggb是拥有者吗?不是 → 继续
  • 再检查:ggb在所属组whb里吗?不在 → 继续
  • 最后:ggb属于其他人(o),使用r--权限

重要:如果ggb既是拥有者又在所属组里,系统只会按"拥有者"匹配一次,不会再去检查组权限。


三、chown —— 修改文件所有者

语法形式
chown [选项] <新所有者>[:<新所属组>] <文件或目录>

常用选项

选项说明
-R递归修改目录及其下所有内容
-v显示修改详情

功能说明

chownchangeowner)用于修改文件或目录的拥有者,也可以同时修改所属组

⚠️重要限制只有 root 才能执行 chown!
普通用户(即使是文件的当前拥有者)也无法把文件"转让"给另一个用户。这和 Windows 不一样,Windows 里你可以把自己的文件赠予别人,但 Linux 不行。
原因:如果允许普通用户随意chown,他可以先把别人的文件chown给自己,修改完再chown回去,就能绕过权限限制了。


代码示例
① 只修改拥有者
# 把 myfile.txt 的拥有者改为 alice(需要 root 权限) sudo chown alice myfile.txt # 验证 ls -l myfile.txt # 输出:-rw-r--r-- 1 alice alice 0 Sep 24 21:30 myfile.txt # ↑ 拥有者已变为 alice
② 同时修改拥有者和所属组
# 把 project/ 的拥有者改为 alice,所属组改为 devteam sudo chown alice:devteam project/ # 查看结果 ls -ld project/ # 输出:drwxr-xr-x 2 alice devteam 4096 Sep 24 21:35 project/ # 也可以只改组(保留冒号,省略拥有者) sudo chown :devteam myproject/
③ 递归修改(部署 Web 项目时必用)
# 把网站目录的所有者和组都改为 nginx(Nginx 运行用户) sudo chown -R nginx:nginx /var/www/mysite # 验证 ls -la /var/www/mysite | head -5

延伸扩展

1. 冒号(:)与点号(.)的区别
老版本 Linux 支持用点号.分隔拥有者和组

chown alice.devteam project/ # 老写法,不推荐 chown alice:devteam project/ # 新写法,推荐

现在统一用冒号:,更清晰,也不会和文件名中的点号混淆。

2. 部署 Web 项目时的标准操作
在腾讯云服务器上部署网站,通常需要把网站目录的拥有者改为 Web 服务器运行用户

# Nginx 用户通常是 nginx 或 www-data(取决于系统) sudo chown -R nginx:nginx /var/www/mysite sudo chmod -R 755 /var/www/mysite

这样 Nginx 进程才能读取(和写入)网站文件。

3. chown vs chmod:别搞混!

  • chmod:改的是"权限"(谁能读/写/执行)→ 拥有者自己就能改
  • chown:改的是"归属"(文件属于谁)→ 只有 root 能改

四、chgrp —— 修改文件所属组

语法形式
chgrp [选项] <新所属组> <文件或目录>

常用选项

选项说明
-R递归修改目录及其下所有内容

功能说明

chgrpchangegroup)用于修改文件或目录的所属组

其实chgrp能做的事,chown也能做(用chown :组名的语法)。chgrp作为一个独立命令存在,主要是语义更清晰——当你只想改组、不想改拥有者的时候,chgrp的意图更明确,不容易误操作。


代码示例
① 修改文件的所属组
# 把 report.txt 的组改为 finance(财务组) sudo chgrp finance report.txt # 验证 ls -l report.txt # 输出:-rw-r--r-- 1 alice finance 2048 Sep 24 21:40 report.txt # ↑ 组已变为 finance
② 递归修改目录的所属组
# 把项目目录的组改为 developers sudo chgrp -R developers /data/project # 验证 ls -la /data/project | head -5
③ chgrp 与 chown 的等价写法
# 以下两条命令效果完全相同: sudo chgrp developers myfile.txt sudo chown :developers myfile.txt

延伸扩展

1. 如何查看系统中有哪些组?

# 查看所有组(每行格式:组名:x:GID:成员列表) cat /etc/group # 查看当前用户属于哪些组 groups # 输出:alice : alice devteam sudo # 查看指定用户属于哪些组 groups alice

2. 如何把用户加入某个组?

# 把用户 bob 加入 developers 组(需要 root) sudo usermod -aG developers bob

⚠️ 注意:-aGa是 append(追加),如果漏掉a,会覆盖用户原有的组!
修改后需要重新登录才能生效。

3. 用组来管理团队权限(最佳实践)
场景:你和bobcarol需要共同维护/data/shared目录

# 步骤1:创建 devteam 组(root 操作) sudo groupadd devteam # 步骤2:把三个人加入 devteam 组 sudo usermod -aG devteam alice sudo usermod -aG devteam bob sudo usermod -aG devteam carol # 步骤3:设置目录权限 sudo chgrp -R devteam /data/shared sudo chmod -R 2770 /data/shared # 2770 = rwxrws---(含 SGID,见第六节)

这样,devteam 组内的三个人都有读写权限,组外人员完全无法访问。


五、umask —— 默认权限掩码

语法形式
umask # 查看当前 umask 值(数字形式) umask -S # 查看当前 umask 值(符号形式) umask <新值> # 临时修改 umask(仅当前 Shell 会话有效)

功能说明

umask(user file-creationmask)是一个权限掩码,它决定了新创建的文件和目录的默认权限

理解 umask 需要先知道两个"起始权限":

文件类型起始权限(最大可能权限)含义
普通文件666rw-rw-rw-文件默认不应该有执行权限
目录777rwxrwxrwx目录需要 x 权限才能进入

🤔为什么文件的起始权限是 666 而不是 777?
因为 Linux 认为:一个普通文件被创建出来时,不应该自动获得执行权限。如果你需要执行它,必须明确地给它加x权限。这是安全设计——防止某些攻击手法通过上传文件+自动执行来入侵系统。

最终权限的计算公式(重要!):

最终权限 = 起始权限 & (~umask)

这里的&按位与~按位取反。umask 中起作用的位,会在最终权限中被"遮罩"掉。


代码示例
① 查看当前 umask
# 查看 umask 值 $ umask 0022 # 最前面的 0 是八进制前缀,实际 umask 值是 022 # 以符号形式查看(更直观) $ umask -S u=rwx,g=rx,o=rx # 含义:umask 遮罩掉了 g 的 w 权限和 o 的 w 权限
② 验证 umask 对新文件/目录的影响
# 当前 umask = 022 $ umask 0022 # 创建一个新文件 $ touch testfile.txt $ ls -l testfile.txt -rw-r--r-- 1 alice alice 0 Sep 24 22:00 testfile.txt # 权限 = 644(计算过程见下方) # 创建一个新目录 $ mkdir testdir $ ls -ld testdir drwxr-xr-x 2 alice alice 4096 Sep 24 22:01 testdir/ # 权限 = 755(计算过程见下方)

权限计算过程(umask = 022)

文件:起始 666,umask 022 666 = 110 110 110 (二进制) 022 = 000 010 010 (二进制) ~022 = 111 101 101 (二进制,按位取反) 666 & ~022 = 110 100 100 = 644 ✓ 目录:起始 777,umask 022 777 = 111 111 111 022 = 000 010 010 ~022 = 111 101 101 777 & ~022 = 111 101 101 = 755 ✓

💡注意:umask 的计算是位运算,不是简单的减法。大多数情况下减法结果一样,但某些特殊值(如 umask=023)会有差异:

umask=023,文件权限: 错误算法:666 - 023 = 643(rw-r---wx)❌ 正确算法:666 & ~023 = 644(rw-r--r--)✓
③ 临时修改 umask
# 把 umask 改为 0077(只有拥有者有权限,组和其他人完全无权) $ umask 0077 $ umask 0077 # 此时新建文件的权限 $ touch private.txt $ ls -l private.txt -rw------- 1 alice alice 0 Sep 24 22:10 private.txt # 权限 = 600(666 & ~077 = 600)✓ # 注意:umask 修改只在当前 Shell 会话有效,退出后恢复默认

延伸扩展

1. 如何永久修改 umask?
临时修改只对当前 Shell 有效。如需永久修改:

# 修改当前用户的 umask(写入 ~/.bashrc) echo "umask 027" >> ~/.bashrc source ~/.bashrc # 修改系统全局 umask(影响所有用户,需 root) # 编辑 /etc/profile 或 /etc/login.defs sudo vim /etc/profile # 在文件中找到 umask 行,改为 umask 027

2. 常见 umask 值及其适用场景

umask文件默认目录默认适用场景
022644755最常用默认值,平衡安全与便利
027640750更严格,组外用户无任何权限
077600700最严格,只有拥有者有权限
002664775团队协作环境,组成员也有写权限

六、特殊权限(SUID / SGID / Sticky Bit)

除了标准的rwx权限,Linux 还有三个特殊权限位,它们会改变权限检查的行为。

6.1 SUID(Set User ID)

语法形式
chmod u+s <可执行文件> # 设置 SUID chmod 4<权限> <文件> # 数字模式(4 代表 SUID) chmod u-s <文件> # 取消 SUID
功能说明

SUID 只对可执行文件有效。设置了 SUID 后,无论谁执行这个程序,程序都会以文件拥有者的身份运行

经典例子:passwd命令

$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 68208 Mar 14 2022 /usr/bin/passwd # ↑ 这个 s 就是 SUID 标志!

普通用户alice执行passwd修改自己的密码时,需要写入/etc/shadow文件(这个文件只有 root 能写)。但因为passwd有 SUID,alice 执行passwd时,进程的实际有效用户 ID 变成了root,所以才能写入/etc/shadow

代码示例
# 查看系统中的 SUID 程序 $ find /usr/bin -perm -4000 -type f 2>/dev/null /usr/bin/passwd /usr/bin/sudo /usr/bin/su # 这些程序都需要以 root 身份运行部分操作 # SUID 在 ls -l 中的显示 $ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root ... # ↑ User 的 x 位显示为 s(小写)= SUID 生效 # 如果 User 本身没有 x 权限,会显示为大写 S(无效状态)
延伸扩展

⚠️SUID 是双刃剑!
SUID 让普通用户能以高权限执行程序,如果被恶意利用,就是提权漏洞。
安全原则

  1. 不要随意给程序设置 SUID
  2. 定期检查系统中的 SUID 文件:find / -perm -4000 -type f 2>/dev/null
  3. 重点排查:不属于系统默认、但是有 SUID 的程序

6.2 SGID(Set Group ID)

语法形式
chmod g+s <目录或文件> # 设置 SGID chmod 2<权限> <文件> # 数字模式(2 代表 SGID) chmod g-s <文件> # 取消 SGID
功能说明

SGID 有两种作用:

① 对可执行文件:类似 SUID,执行时以文件所属组的身份运行(不常用)

② 对目录(常用!):在该目录下创建的新文件/子目录,会自动继承该目录的所属组(而不是创建者自己的默认组)

这是团队协作目录的最佳实践

代码示例

6.3 Sticky Bit(粘滞位)

语法形式
chmod +t <目录> # 设置 Sticky Bit chmod 1<权限> <目录> # 数字模式(1 代表 Sticky Bit) chmod -t <目录> # 取消 Sticky Bit
功能说明

Sticky Bit 只对目录有效。

设置了 Sticky Bit 的目录中,即使用户对目录有写权限(w),也只能删除自己创建的文件,不能删除别人的文件。

经典例子:/tmp目录

$ ls -ld /tmp drwxrwxrwt 15 root root 4096 Sep 24 22:40 /tmp/ # ↑ 最后的 t 就是 Sticky Bit 标志!

/tmp是系统临时文件目录,权限是 777(所有人可读写),但有了 Sticky Bit,你只能删除自己创建的文件,不能删除别人的临时文件。

代码示例
# 创建一个公共上传目录,设置粘滞位 sudo mkdir /data/uploads sudo chmod 1777 /data/uploads $ ls -ld /data/uploads drwxrwxrwt 2 root root 4096 Sep 24 22:45 /data/uploads/ # ↑ Others 的 x 位显示为 t = Sticky Bit 生效 # 测试:alice 创建文件,bob 尝试删除 $ su - alice $ touch /data/uploads/alice_file.txt $ su - bob $ rm /data/uploads/alice_file.txt rm: cannot remove '/data/uploads/alice_file.txt': Operation not permitted # ✅ bob 无法删除 alice 的文件!
延伸扩展

小写 t 和大写 T 的区别

  • 小写t:Sticky Bit 生效(目录同时有x权限)
  • 大写T:Sticky Bit 已设置,但目录没有x权限,实际上不生效
$ chmod 1666 bad_dir $ ls -ld bad_dir drw-rw-rwT 2 root root 4096 ... # 大写 T = 无效!

七、新手常见问题速查

Q1:执行脚本时报Permission denied怎么办?

原因:脚本文件没有执行(x)权限。

解决

chmod +x your_script.sh ./your_script.sh

Q2:chown时报Operation not permitted怎么办?

原因chown需要 root 权限,普通用户不能执行。

解决

sudo chown alice:alice myfile.txt

Q3:新建文件的默认权限是什么?为什么是 644?

原因:由umask决定。默认umask=022时:

  • 文件:666 & ~022 = 644rw-r--r--
  • 目录:777 & ~022 = 755rwxr-xr-x

修改默认权限

umask 027 # 改为更严格的默认权限

Q4:为什么我对文件有r权限,但cat文件时还是Permission denied

原因:你可能没有目录x权限!访问文件需要先"进入"目录(x权限),才能访问目录里的文件。

解决:给目录加上执行权限:

chmod +x /path/to/directory

Q5:特殊权限的数字是怎么算的?

特殊权限数字写法示例
SUID4chmod 4755 file
SGID2chmod 2755 dir
Sticky Bit1chmod 1777 dir

数字写法是把特殊权限数字放在普通权限数字的前面,如4755= SUID(4) + 755。


总结

恭喜你读完了本文!🎉 让我们用一张表回顾所有核心知识点:

命令/概念作用常用示例注意事项
ls -l查看文件权限信息ls -l第一列是权限字符串
chmod修改文件/目录权限chmod 755 file拥有者自己就能改
chown修改文件拥有者(可同时改组)sudo chown alice:devs file只有 root 能执行
chgrp修改文件所属组sudo chgrp devs file也可用chown :devs
umask控制新文件的默认权限umask 022修改后只对当前 Shell 有效
SUID执行时以文件拥有者身份运行chmod 4755 /usr/bin/passwd有安全风险,谨慎使用
SGID目录下新文件自动继承组chmod 2775 /data/shared团队协作目录必备
Sticky Bit只能删除自己的文件chmod 1777 /tmp公共目录必备

权限数字速查表

数字权限用途
644rw-r--r--普通文件默认值
755rwxr-xr-x可执行文件 / 目录默认值
600rw-------私密文件(SSH密钥等)
700rwx------私密目录
777rwxrwxrwx⚠️ 所有人全权限,慎用!

📝下一篇预告:《Linux 文本编辑器 Vim 从入门到实用》—— 再也不用担心"怎么退出 Vim"了!


如果本文对你有帮助,欢迎点赞 👍 收藏 ⭐ 关注 ➕!
有任何问题欢迎在评论区留言,博主会及时回复 😊
关注我,持续更新「从零开始学习 Linux」系列教程!