Linux ——— 系统中的用户身份切换、文件权限管理、特殊权限和粘滞位设置

目录

[su 命令(用户身份切换命令)](#su 命令(用户身份切换命令))
[su - 命令(登录式用户身份切换命令)](#su - 命令(登录式用户身份切换命令))
[Linux 中用户的身份](#Linux 中用户的身份)

[一、核心分类:root 用户(超级用户)](#一、核心分类:root 用户(超级用户))

二、核心分类:普通用户(受限用户)
[Liunx 中对于文件/目录的权限](#Liunx 中对于文件/目录的权限)
[chmod 指令](#chmod 指令)
[chown(修改文件 / 目录拥有者) 命令;chgrp(修改文件 / 目录所属组) 命令](#chown(修改文件 / 目录拥有者) 命令;chgrp(修改文件 / 目录所属组) 命令)

[chown 基本语法](#chown 基本语法)

[chgrp 基本语法](#chgrp 基本语法)

还原权限
[umask 指令](#umask 指令)
普通目录读、写、执行权限的作用

一、核心前提:目录权限的本质

[二、逐个解析目录的 r、w、x 权限](#二、逐个解析目录的 r、w、x 权限)

三、目录权限组合的关键逻辑

[四、总结:目录 r/w/x 权限核心记忆](#四、总结:目录 r/w/x 权限核心记忆)
粘滞位

[一、粘滞位(Sticky Bit)的核心定义与标识](#一、粘滞位(Sticky Bit)的核心定义与标识)

[二、粘滞位的核心作用:解决共享目录的 "删除冲突"](#二、粘滞位的核心作用:解决共享目录的 “删除冲突”)

三、共享目录必须用粘滞位的原因

[四、系统默认共享目录 /tmp 的粘滞位应用](#四、系统默认共享目录 /tmp 的粘滞位应用)

五、粘滞位的补充说明(实用细节)


su 命令(用户身份切换命令

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ pwd
/home/ranjiaju

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ su
Password: 

[root@iZ2vc15k23y9vpuyi3tiqzZ ranjiaju]# pwd
/home/ranjiaju

[root@iZ2vc15k23y9vpuyi3tiqzZ ranjiaju]# exit  //Ctrl+D

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ pwd
/home/ranjiaju

su 是 Linux/Unix 系统中 用户身份切换命令,核心作用是 "switch user"(切换用户),默认切换到 root 超级用户(拥有系统最高权限),也可指定切换到其他普通用户,适合临时获取目标用户的操作权限(如执行管理员命令、访问其他用户的文件)。

核心功能

  1. 切换到 root 用户(默认行为):无需指定目标用户名,输入 su 后验证 root 密码即可获得超级权限;
  2. 切换到指定普通用户:输入 su 用户名,验证该普通用户的密码后,切换到其身份;
  3. 临时执行单条命令(配合选项):无需完整切换用户,仅以目标用户身份执行一条命令后返回原用户。

基本语法

复制代码
su [选项] [目标用户名]  # 切换用户身份(默认目标用户为 root)
su [选项] -c "命令"     # 以目标用户身份执行单条命令(默认 root)
  • 选项:可选,控制切换时的环境变量、登录模式等;
  • 目标用户名:可选,默认值为 root,指定时需输入该用户的密码(而非当前用户密码);
  • -c "命令":临时执行命令的参数,命令需用引号包裹(避免参数被拆分)。

关键细节(结合操作示例) 代码中的第一步:输入 su 切换到 root 用户

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ su
Password: 
[root@iZ2vc15k23y9vpuyi3tiqzZ ranjiaju]# 
  • 核心逻辑:未指定目标用户名,默认切换到 root 用户,系统会提示输入 root 用户的密码 (而非当前 ranjiaju 用户的密码);
  • 身份变化:命令行提示符从 ranjiaju@xxx ~]$ 变为 root@xxx ranjiaju]## 是 root 用户的提示符($ 是普通用户提示符),明确当前为超级权限;
  • 环境变量特性:默认 su 切换后,不改变当前工作目录和部分环境变量 (示例中 pwd 仍为 /home/ranjiaju,即原用户的家目录),仅切换用户身份和权限。

代码中的第二步:执行 exitCtrl+D 退出 root,返回原用户

复制代码
[root@iZ2vc15k23y9vpuyi3tiqzZ ranjiaju]# exit  //Ctrl+D
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ 
  • 退出方式:两种等价操作均可返回原用户身份:
    1. 输入 exit 命令并回车;
    2. 按下快捷键 Ctrl+D(更快捷,无需输入命令);
  • 结果验证:提示符恢复为 ranjiaju@xxx ~]$pwd 仍为 /home/ranjiaju,说明仅退出身份切换,工作目录未变。

su - 命令(登录式用户身份切换命令

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ pwd
/home/ranjiaju

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ su -
Password: 
Last login: Tue Dec  2 14:59:36 CST 2025 on pts/0

[root@iZ2vc15k23y9vpuyi3tiqzZ ~]# pwd
/root

[root@iZ2vc15k23y9vpuyi3tiqzZ ~]# logout  //Ctrl+D

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ pwd
/home/ranjiaju

su - 是 Linux/Unix 系统中 登录式用户身份切换命令 ,核心是在 su(切换用户)的基础上,增加 "模拟完整登录流程" 的特性 ------ 默认切换到 root 超级用户,同时加载目标用户的完整环境变量(家目录、PATH、配置文件等),等同于 "重新登录该用户",比普通 su 更贴合 "完全使用目标用户身份" 的需求。

核心功能

  1. 切换用户身份(默认 root):验证目标用户密码后,切换到其身份,获得对应权限;
  2. 加载完整环境:切换后自动进入目标用户的家目录,加载其专属环境变量(如 HOMEPATH)、Shell 配置文件(如 ~/.bashrc~/.bash_profile);
  3. 保留登录记录:会更新目标用户的 "最后登录时间",终端显示登录提示信息,模拟真实登录体验。

基本语法

复制代码
su - [目标用户名]  # 省略用户名时,默认切换到 root 用户
  • -:等价于 -l--login),是核心选项,触发 "登录式切换";
  • 目标用户名:可选,默认值为 root,指定时需输入该用户的密码(而非当前用户密码);
  • 与普通 su 的核心区别:普通 su 仅切换身份,不改变工作目录和部分环境变量;su - 完全模拟登录,环境与直接登录目标用户一致。

关键细节(结合操作示例) 代码中的第一步:输入 su - 切换到 root 用户

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$ su -
Password: 
Last login: Tue Dec  2 14:59:36 CST 2025 on pts/0
[root@iZ2vc15k23y9vpuyi3tiqzZ ~]# 
  • 密码验证:与普通 su 一致,需输入 root 用户的密码(默认目标用户为 root);
  • 登录提示:成功切换后,终端显示 Last login: ... 记录(普通 su 无此提示),明确本次是 "登录式切换";
  • 提示符变化:从普通用户的 $ 变为 root 的 #,同时主机名后的路径变为 ~(root 的家目录 /root 的简写),与普通 su 切换后仍保留原用户家目录(/home/ranjiaju)形成核心差异。

代码中的第二步:执行 pwd 验证工作目录

复制代码
[root@iZ2vc15k23y9vpuyi3tiqzZ ~]# pwd
/root
  • 环境变量生效:su - 切换后,HOME 环境变量被更新为 root 的家目录 /root,因此 pwd 输出 /root(普通 su 切换后 HOME 仍为原用户的 /home/ranjiaju);
  • 其他环境变量:PATHUSERSHELL 等均会同步切换为目标用户的配置(如 root 的 PATH 包含系统核心命令目录,可直接执行部分普通 su 切换后无法运行的命令)。

Linux 中用户的身份

在 Linux 系统中,用户的核心分类确实是 root 用户和普通用户两种,这是基于权限等级的最根本划分;而广义上的 "细分"(如系统用户、登录用户)只是普通用户内部的功能分类,并未改变 "root vs 普通用户" 的核心逻辑。下面结合权限差异、用途和实际场景详细解释:

一、核心分类:root 用户(超级用户)

root 用户是 Linux 系统的最高权限所有者,拥有对系统的完全控制权

  • 权限特征:不受任何权限限制,可执行所有操作(如修改系统配置文件、删除核心系统目录、安装 / 卸载软件、管理所有用户等),相当于 Windows 的 "管理员账户" 但权限更强。
  • 标识:UID(用户 ID)固定为 0,这是 root 用户的唯一标识(无论用户名是否被修改,UID=0 即为超级用户)。
  • 用途 :仅用于系统管理操作(如配置网络、安装依赖、修改系统参数),禁止日常使用 root 登录 (风险极高:误操作可能直接摧毁系统,如 rm -rf / 会删除所有文件;若被恶意程序入侵,将获得完全控制权)。

二、核心分类:普通用户(受限用户)

普通用户是系统的日常使用者,权限受严格限制,仅能操作自己的家目录和被授权的资源

  • 权限特征 :无法修改系统核心配置、不能删除其他用户的文件、不能直接安装系统级软件,所有涉及系统级的操作都需要通过 sudo 命令临时提升权限(前提是被配置为 sudo 授权用户)。
  • 标识 :UID 范围有明确规范(不同发行版略有差异,以主流发行版为例):
    • 系统用户(也叫 "伪用户""服务用户"):UID 1~999,用于运行系统服务(如 Apache、MySQL、SSH 等),不允许登录系统,仅为服务提供运行身份(避免服务直接使用 root 权限,降低安全风险)。
    • 登录用户(实际使用者):UID ≥ 1000(CentOS 6 及之前是 ≥500),是用户手动创建的、可登录系统的账户,用于日常操作(如编写代码、浏览文件、使用应用程序)。
  • 用途
    • 系统用户:保障服务的独立运行和权限隔离(如 MySQL 服务的运行用户 mysql 仅能访问数据库相关文件,无法修改其他系统资源)。
    • 登录用户:日常办公、学习、开发等操作,即使误操作也不会影响系统核心功能。

Liunx 中对于文件/目录的权限

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ pwd
/home/ranjiaju/test

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 16:06 test_1
-rw-rw-r-- 1 ranjiaju ranjiaju    0 Dec  2 16:03 test_1.c

权限字符串的通用结构

权限字符串共 10 个字符,第 1 个字符表示「文件类型」,后 9 个字符分 3 组(每组 3 个),分别对应「拥有者权限」「所属组权限」「other 权限」,每组内按「读(r)、写(w)、执行(x)」的顺序排列,缺少权限则用 - 表示。

test_1 目录 drwxrwxr-x 的具体含义

  • 第 1 个字符 d:表示该文件类型是「目录」(directory),文件类型标识还有:-(普通文件)、l(软链接)、b(块设备)等;
  • 第 2-4 个字符 rwx:拥有者(第一个 ranjiaju)的权限:r(读,可查看目录内文件)、w(写,可在目录内创建 / 删除文件)、x(执行,可进入该目录);
  • 第 5-7 个字符 rwx:所属组(第二个 ranjiaju)的权限:与拥有者权限一致,组内用户可查看、修改目录内容、进入目录;
  • 第 8-10 个字符 r-x:other(其他用户)的权限:r(读,可查看目录内文件)、-(无写权限,不能创建 / 删除文件)、x(执行,可进入目录)。

test_1.c 文件 -rw-rw-r-- 的具体含义

  • 第 1 个字符 -:表示该文件类型是「普通文件」(无特殊类型);
  • 第 2-4 个字符 rw-:拥有者的权限:r(读,可查看文件内容)、w(写,可修改文件内容)、-(无执行权限,不能作为脚本 / 程序运行);
  • 第 5-7 个字符 rw-:所属组的权限:与拥有者一致,组内用户可读写文件,无执行权限;
  • 第 8-10 个字符 r--:other 的权限:仅 r(读,可查看内容)、无写和执行权限。

拥有者、所属组、other 的定义

  • 拥有者(Owner):创建文件 / 目录的用户,对文件 / 目录拥有最高优先级的控制权,可修改权限、删除文件等;
  • 所属组(Group):拥有者所在的默认用户组(Linux 中每个用户至少属于一个组),组内其他用户会继承该组的权限;
  • Other(其他用户):除「拥有者」和「所属组内用户」之外的所有系统用户,权限最严格,仅能获得公开的基础权限。

test_1 中第一个 ranjiaju 的含义

是 test_1 目录的「拥有者」,即该目录由 ranjiaju 用户创建,默认拥有该目录的最高权限(如 rwx),可自主修改目录的权限、删除目录等。

test_1 中第二个 ranjiaju 的含义

是 test_1 目录的「所属组」,即 ranjiaju 用户所在的默认用户组(通常用户名与默认组名相同),该组内的其他用户(若存在)会继承 rwx 权限,可查看、修改目录内内容。

test_1 中 4096 的含义

表示文件 / 目录的「大小」,单位是字节(Byte):

  • 对于 test_1 目录:Linux 中目录本质是「存储目录项(文件名、索引)的特殊文件」,默认占用一个磁盘块(通常为 4KB = 4096 字节),即使目录内无文件,也会占用该基础空间;
  • 对于 test_1.c 文件:大小为 0 字节,说明该文件是「空文件」,未写入任何内容。

test_1 中Dec 2 16:06 的含义

是文件 / 目录的「最后修改时间(Modify Time)」,即最近一次修改文件 / 目录「内容或属性」的时间,格式为「月份 日期 时:分」:

  • 若修改时间距离当前时间超过 6 个月,会显示「月份 日期 年份」(而非时分);
  • 示例中 test_1 目录的最后修改时间是 12 月 2 日 16:06(可能是创建目录或在目录内添加文件的时间),test_1.c 的时间是 12 月 2 日 16:03(创建空文件的时间)。

chmod 指令

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ pwd
/home/ranjiaju/test

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-rw-rw-r-- 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u-rw test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
----rw-r-- 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod g-rw test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-------r-- 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod o-r test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
---------- 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u+rwx test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-rwx------ 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod g+rw test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-rwxrw---- 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod o+x test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-rwxrw---x 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

chmod 是 Linux/Unix 系统中 文件 / 目录权限修改命令,核心作用是调整文件 / 目录对「拥有者、所属组、其他用户」的读(r)、写(w)、执行(x)权限,通过精确控制权限,保障文件安全(避免误修改、未授权访问),是系统权限管理的核心工具。

核心功能

  1. 新增权限:为指定用户组添加某类权限(如给所属组添加写权限);
  2. 移除权限:从指定用户组撤销某类权限(如取消其他用户的读权限);
  3. 覆盖权限:直接设定指定用户组的权限(忽略原有权限,统一设置为目标权限);
  4. 递归修改:批量修改目录及内部所有文件 / 子目录的权限(需配合选项)。

基本语法chmod 支持两种权限指定方式,核心语法如下:

复制代码
# 1. 符号模式(直观易懂,示例中使用的方式)
chmod [用户类型][操作符][权限类型] 文件名/目录名

# 2. 数字模式(简洁高效,用数字代表权限组合)
chmod [权限数字组合] 文件名/目录名
  • 用户类型:u(拥有者,user)、g(所属组,group)、o(其他用户,other)、a(所有用户,all,等价于 ugo);
  • 操作符:+(新增权限)、-(移除权限)、=(覆盖权限,清除原有未指定的权限);
  • 权限类型:r(读权限)、w(写权限)、x(执行权限,文件:可运行;目录:可进入);
  • 权限数字组合:每类用户的权限用 1 个数字表示(r=4、w=2、x=1,相加得到),共 3 个数字(依次对应 u、g、o),如 755 代表 u=rwx、g=rx、o=rx。

关键细节(结合操作示例) 示例初始状态:test_1.c 的权限为 -rw-rw-r--(u=rw、g=rw、o=r),以下逐一拆解命令效果:

  1. 命令 chmod u-rw test_1.c

    • 解析:u(拥有者)+ -(移除)+ rw(读 + 写权限);
    • 效果:移除拥有者的读和写权限,权限字符串变为 ----rw-r--(拥有者无任何权限,g=rw、o=r);
    • 对应输出:----rw-r-- 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c
  2. 命令 chmod g-rw test_1.c

    • 解析:g(所属组)+ -(移除)+ rw(读 + 写权限);
    • 效果:移除所属组的读和写权限,权限字符串变为 -------r--(u = 无、g = 无、o=r);
    • 对应输出:-------r-- 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c
  3. 命令 chmod o-r test_1.c

    • 解析:o(其他用户)+ -(移除)+ r(读权限);
    • 效果:移除其他用户的读权限,权限字符串变为 ----------(所有用户均无任何权限);
    • 对应输出:---------- 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c(俗称 "零权限",仅拥有者可通过 chmod 恢复)。
  4. 命令 chmod u+rwx test_1.c

    • 解析:u(拥有者)+ +(新增)+ rwx(读 + 写 + 执行权限);
    • 效果:为拥有者添加全部权限,权限字符串变为 rwx------(u=rwx、g = 无、o = 无);
    • 对应输出:rwx------ 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c
  5. 命令 chmod g+rw test_1.c

    • 解析:g(所属组)+ +(新增)+ rw(读 + 写权限);
    • 效果:为所属组添加读和写权限,权限字符串变为 rwxrw----(u=rwx、g=rw、o = 无);
    • 对应输出:rwxrw---- 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c
  6. 命令 chmod o+x test_1.c

    • 解析:o(其他用户)+ +(新增)+ x(执行权限);
    • 效果:为其他用户添加执行权限,权限字符串变为 rwxrw---x(u=rwx、g=rw、o=x);
    • 对应输出:rwxrw---x 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c

chown(修改文件 / 目录拥有者 ) 命令;chgrp(修改文件 / 目录所属组) 命令

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ whoami
ranjiaju

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ su
Password: 

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# whoami
root

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# ll
total 0
-rwxrw---x 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# chown root test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# ll
total 0
-rwxrw---x 1 root ranjiaju 0 Dec  2 16:37 test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# chgrp root test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# ll
total 0
-rwxrw---x 1 root root 0 Dec  2 16:37 test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# exit  //Ctrl+D

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ whoami
ranjiaju

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 0
-rwxrw---x 1 root root 0 Dec  2 16:37 test_1.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ su
Password: 

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# chown ranjiaju:ranjiaju test_1.c

[root@iZ2vc15k23y9vpuyi3tiqzZ test]# ll
total 0
-rwxrw---x 1 ranjiaju ranjiaju 0 Dec  2 16:37 test_1.c

chown 是 Linux/Unix 系统中 修改文件 / 目录拥有者 的核心命令(chown = change owner),chgrp 是 修改文件 / 目录所属组 的专属命令(chgrp = change group),两者配合 chmod 可完整实现文件权限与归属权的精准管理,是系统资源访问控制的关键工具。

chown 核心功能修改文件 / 目录的「拥有者」(即对文件拥有最高控制权的用户),也可通过组合语法同时修改「拥有者 + 所属组」,仅 root 用户或文件原拥有者(需特殊权限)可执行,普通用户无法修改不属于自己的文件归属。

chown 基本语法

复制代码
# 1. 仅修改拥有者
chown 新拥有者用户名 文件名/目录名

# 2. 同时修改拥有者和所属组(用冒号分隔)
chown 新拥有者用户名:新所属组名 文件名/目录名

# 3. 递归修改目录及内部所有内容的拥有者(-R 选项)
chown -R 新拥有者用户名 目录名
  • 新拥有者用户名:必须是系统中已存在的用户(可通过 cat /etc/passwd 查看所有用户);
  • 冒号分隔:中间无空格,等价于 chown 用户名.组名(点号分隔,效果一致);
  • -R:recursive(递归),仅对目录有效,批量修改目录内所有文件、子目录的归属。

chown 关键细节(结合操作示例) 示例初始状态:test_1.c 的拥有者和所属组均为 ranjiaju-rwxrw---x 1 ranjiaju ranjiaju ...),用户切换到 root 后执行以下操作:

代码中的 chown 命令:

复制代码
[root@xxx test]# chown root test_1.c
  • 命令解析:仅修改 test_1.c 的拥有者为 root(系统超级用户),所属组保持不变;
  • 效果验证:执行后 ll 输出 rwxrw---x 1 root ranjiaju ...,第一个字段 root 表示拥有者已变更,第二个字段 ranjiaju 仍为原所属组;
  • 权限依据:只有 root 能修改不属于自己的文件(原拥有者是 ranjiaju)的归属权,普通用户执行此命令会提示「权限被拒绝」。

chgrp 核心功能专门修改文件 / 目录的「所属组」(即拥有者所在的用户组,组内用户继承对应权限),可独立使用,也可被 chown 的组合语法替代,同样仅 root 或文件原拥有者可执行。

chgrp 基本语法

复制代码
# 1. 仅修改所属组
chgrp 新所属组名 文件名/目录名

# 2. 递归修改目录及内部所有内容的所属组
chgrp -R 新所属组名 目录名
  • 新所属组名:必须是系统中已存在的用户组(可通过 cat /etc/group 查看所有组);
  • 与 chown 的关系:chgrp 组名 文件 等价于 chown :组名 文件(chown 仅写冒号和组名,不修改拥有者)。

**chgrp 关键细节(结合操作示例)**代码中的 chgrp 命令:

复制代码
[root@xxx test]# chgrp root test_1.c
  • 命令解析:将 test_1.c 的所属组从 ranjiaju 改为 root 组;
  • 效果验证:执行后 ll 输出 rwxrw---x 1 root root ...,第二个字段 root 表示所属组已变更,此时文件的拥有者和所属组均为 root;
  • 替代写法:该命令等价于 chown :root test_1.cchown root:root test_1.c(后者同时修改拥有者和所属组,与示例中两步操作效果一致)。

还原权限

复制代码
[root@iZ2vc15k23y9vpuyi3tiqzZ test]# chown ranjiaju:ranjiaju test_1.c

chown ranjiaju:ranjiaju test_1.c 是 chown 命令的 组合式用法 ,核心功能是 一次性同时修改文件的「拥有者」和「所属组」,无需分开执行两次命令(单独改拥有者 + 单独改所属组),是日常归属权调整中最高效的写法。

指令各部分拆解

  • chown:命令核心,用于修改文件 / 目录的归属权(拥有者 / 所属组);
  • ranjiaju:ranjiaju:归属权参数,格式为「新拥有者用户名:新所属组名」(冒号无空格,是固定分隔符):
    • 第一个 ranjiaju:指定文件的 新拥有者 ,即修改后文件归 ranjiaju 用户所有,该用户将获得文件的最高控制权(可修改权限、删除文件等);
    • 第二个 ranjiaju:指定文件的 新所属组 ,即修改后文件的所属组为 ranjiaju 组(通常用户名与默认组名相同),组内用户会继承该文件的「所属组权限」;
  • test_1.c:目标文件,即要修改归属权的文件路径(当前目录下的 test_1.c)。

执行效果与验证(结合操作输出)

  • 执行前状态:文件 test_1.c 的拥有者和所属组均为 root(此前通过 chown rootchgrp root 修改);
  • 执行后状态:ll 输出显示 1 ranjiaju ranjiaju,说明:
    1. 拥有者已从 root 恢复为 ranjiaju
    2. 所属组已从 root 恢复为 ranjiaju
    3. 文件权限(-rwxrw---x)未变,仅归属权变更 ------ 归属权与权限是独立属性,chown 仅改归属,不影响 chmod 设置的权限。

关键细节与等价写法

  1. 分隔符灵活:冒号(:)可替换为点号(.),效果完全一致,即 chown ranjiaju.ranjiaju test_1.c 与原命令等价(推荐用冒号,兼容性更强);

  2. 等价分步操作:该命令等同于同时执行以下两条命令,仅一步完成更高效:

    复制代码
    chown ranjiaju test_1.c  # 单独改拥有者
    chgrp ranjiaju test_1.c  # 单独改所属组
  3. 执行权限要求:只有 root 用户或文件原拥有者(此处原拥有者是 root)能执行该命令 ------ 普通用户 ranjiaju 无法直接修改归属为 root 的文件,必须通过 su 切换到 root 操作;

  4. 用户名 / 组名有效性:ranjiaju(用户名)和 ranjiaju(组名)必须是系统中已存在的(可通过 cat /etc/passwd 查用户、cat /etc/group 查组),否则会提示「无效的用户 / 组」。

典型使用场景

  1. 恢复文件归属:如示例中,此前将文件归属改为 root,现在需恢复给普通用户 ranjiaju,让其重新获得文件控制权;
  2. 新文件移交:root 下载或创建的文件(默认归属 root),需交给普通用户使用时,一次性改完拥有者和所属组,避免后续权限冲突;
  3. 统一归属配置:团队协作中,将文件归属统一设置为「指定用户 + 指定团队组」,比如 chown dev:dev project.c,让 dev 用户主导,dev 组内成员协同。

umask 指令

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ pwd
/home/ranjiaju/test

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ umask
0002

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ mkdir test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ touch test_2.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 18:33 test_1
-rw-rw-r-- 1 ranjiaju ranjiaju    0 Dec  2 18:33 test_2.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ umask 0555

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ mkdir test_3

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ touch test_4.c

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 8
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 18:33 test_1
-rw-rw-r-- 1 ranjiaju ranjiaju    0 Dec  2 18:33 test_2.c
d-w--w--w- 2 ranjiaju ranjiaju 4096 Dec  2 18:34 test_3
--w--w--w- 1 ranjiaju ranjiaju    0 Dec  2 18:34 test_4.c

umask 是 Linux/Unix 系统中 控制新创建文件 / 目录初始权限的核心工具,本质是 "权限屏蔽码"------ 新文件 / 目录的初始权限并非直接设定,而是从系统默认的 "最大权限" 中,屏蔽掉 umask 中指定的权限(umask 中为 1 的位对应要屏蔽的权限),最终得到实际初始权限。

权限的二进制与 8 进制换算规则

权限字符串的每组(拥有者 / 所属组 /other)3 个字符(r/w/x),可对应二进制位(有该权限为 1,无则为 0),再换算为 8 进制(3 位二进制对应 1 位 8 进制),核心对应关系:

  • r(读权限):二进制 100 → 8 进制 4
  • w(写权限):二进制 010 → 8 进制 2
  • x(执行权限):二进制 001 → 8 进制 1
  • 组合权限:将对应数值相加,例如 rwx(111)=4+2+1=7,r-x(101)=4+0+1=5,rw-(110)=4+2+0=6,--w(010)=0+2+0=2。

系统默认的 "最大权限"

Linux 对新创建的文件和目录,有固定的 "最大基础权限"(无 umask 屏蔽时的初始权限):

  • 普通文件的最大权限666(8 进制)→ 对应权限字符串 rw-rw-rw-。文件默认不赋予执行权限(避免误执行风险),因此最大权限不含 x,二进制为 110 110 110
  • 目录的最大权限777(8 进制)→ 对应权限字符串 rwxrwxrwx。目录必须有执行权限(才能进入),因此最大权限包含完整的 rwx,二进制为 111 111 111

umask 的核心作用:屏蔽权限的计算逻辑

umask 的值由 4 位 8 进制数组成(如 00020555),最开头的 0 是 "特殊权限位"(日常无需关注),后 3 位分别对应 "拥有者、所属组、other" 的屏蔽规则 ------umask 中某一位为 1,就屏蔽对应用户组的对应权限;为 0 则不屏蔽。计算公式:实际初始权限 = 最大权限 - umask(后 3 位),本质是 "最大权限的二进制" 与 "umask 后 3 位的二进制按位取反" 进行 "按位与" 运算(结果与减法一致,更易理解)。

结合操作示例的具体计算(核心细节)

代码中的第一个场景:默认 umask 为 0002(有效屏蔽位 002

  • 计算普通目录的初始权限(最大权限 777):777(二进制 111 111 111) - 002(二进制 000 000 010)= 775(二进制 111 111 101)→ 权限字符串 rwxrwxr-x,与创建的 test_1 目录权限完全一致;
  • 计算普通文件的初始权限(最大权限 666):666(二进制 110 110 110) - 002(二进制 000 000 010)= 664(二进制 110 110 100)→ 权限字符串 rw-rw-r--,与创建的 test_2.c 文件权限完全一致;
  • 关键说明:umask 002 仅屏蔽 "other 组的写权限"(010),因此 other 组最终无 w 权限,其余权限保留。

代码中的第二个场景:修改 umask 为 0555(有效屏蔽位 555

  • 计算普通目录的初始权限(最大权限 777):777(111 111 111) - 555(101 101 101)= 222(010 010 010)→ 权限字符串 d-w--w--w-(开头 d 表示目录),与创建的 test_3 目录权限一致;
  • 计算普通文件的初始权限(最大权限 666):666(110 110 110) - 555(101 101 101)= 222(010 010 010)→ 权限字符串 --w--w--w-,与创建的 test_4.c 文件权限一致;
  • 关键说明:umask 555 对应的二进制 101,表示屏蔽 "读权限(100)和执行权限(001)",仅保留 "写权限(010)",因此所有用户组最终仅拥有 w 权限。

umask 的修改与生效范围

  • 临时修改:如示例中 umask 0555,仅对当前终端会话有效,关闭终端或切换用户后失效;
  • 永久修改:需写入用户配置文件(仅对当前用户生效)或系统配置文件(对所有用户生效):
    1. 对当前用户永久生效:编辑 ~/.bashrc 文件,添加 umask 0002(默认值),执行 source ~/.bashrc 立即生效;
    2. 对所有用户永久生效:编辑 /etc/profile 文件,添加 umask 0022(系统默认安全值),执行 source /etc/profile 生效。

常见 umask 配置与适用场景

umask 值 文件初始权限 目录初始权限 适用场景
0002(默认) 664(rw-rw-r--) 775(rwxrwxr-x) 个人使用,允许所属组协同编辑
0022(系统推荐) 644(rw-r--r--) 755(rwxr-xr-x) 服务器环境,仅拥有者可修改,其他人只读
0077(严格隐私) 600(rw-------) 700(rwx------) 敏感文件 / 目录,仅自己可访问
0555(示例值) 222(--w--w--w-) 222(-w--w--w-) 特殊场景,仅允许写入不允许读 / 执行(极少用)

普通目录读、写、执行权限的作用

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ pwd
/home/ranjiaju/test

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ mkdir test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 19:17 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u-r test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
d-wxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 19:17 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ cd test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ mkdir test_1_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ ll
ls: cannot open directory .: Permission denied

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ cd ..

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u+r test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ cd test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ ll
total 4
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ cd ..

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u-w test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ cd test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ mkdir test_1_2
mkdir: cannot create directory 'test_1_2': Permission denied

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ ll
total 4
drwxrwxr-x 2 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test_1]$ cd ..

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u+w test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u-x test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drw-rwxr-x 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ cd test_1
-bash: cd: test_1: Permission denied

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod u+x test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1

普通目录的 r(读)、w(写)、x(执行)权限,核心是控制「对目录内文件 / 子目录的操作权限」(而非目录本身的修改),与普通文件的权限含义完全不同 ------ 文件的 x 是 "运行程序",目录的 x 是 "进入目录",且三个权限相互配合才能实现完整操作,结合你的实操示例,具体作用拆解如下:

一、核心前提:目录权限的本质

目录的核心功能是「存储文件 / 子目录的索引(文件名、路径、关联磁盘地址)」,因此目录的 r/w/x 权限,本质是控制 "是否允许访问、修改、进入这个索引",而非修改目录本身(修改目录名称 / 位置需上级目录权限)。

二、逐个解析目录的 r、w、x 权限

1. r 权限:读目录索引 → 允许「查看目录内的文件 / 子目录列表」

  • 核心作用 :能否通过 ls(或 ll)命令,列出目录内的文件 / 子目录名称(即 "看到目录里有什么");

  • r 权限的表现 :无法查看目录内的文件列表,即使能进入目录,执行 ls 也会提示「Permission denied」;

  • 对应你的操作

    复制代码
    chmod u-r test_1  # 移除拥有者对 test_1 的 r 权限
    cd test_1         # 此时仍有 x 权限,能进入目录
    ll                # 报错 "ls: cannot open directory .: Permission denied"

    原因:你能进入目录(有 x 权限),但没有 r 权限读取目录索引,所以无法列出 test_1_1 子目录。

2. w 权限:写目录索引 → 允许「修改目录内的文件 / 子目录(创建、删除、重命名)」

  • 核心作用 :能否在目录内执行 "增删改文件名" 操作,包括:

    • 创建文件 / 子目录(touch/mkdir);
    • 删除文件 / 子目录(rm/rmdir);
    • 重命名文件 / 子目录(mv);
    • 移动文件进 / 出目录(mv);
  • w 权限的表现:无法在目录内创建新内容,也不能删除 / 重命名已有内容;

  • 对应你的操作

    复制代码
    chmod u-w test_1  # 移除拥有者对 test_1 的 w 权限
    cd test_1         # 有 x 权限,能进入目录
    mkdir test_1_2    # 报错 "mkdir: cannot create directory 'test_1_2': Permission denied"

    原因:创建 test_1_2 需要修改 test_1 的目录索引(添加新子目录的记录),但你没有 w 权限,因此被拒绝。

3. x 权限:执行目录 → 允许「进入目录(cd)+ 访问目录内文件 / 子目录的详细信息」

  • 核心作用x 是目录的 "基础权限",没有 x 权限,即使有 r/w 权限也无法实际操作目录:

    • 能否用 cd 命令进入该目录;
    • 能否访问目录内文件 / 子目录的详细信息(如执行 cat 文件名ll 子目录);
  • x 权限的表现:无法进入目录,也无法访问目录内的任何文件 / 子目录(即使知道文件名);

  • 对应你的操作

    复制代码
    chmod u-x test_1  # 移除拥有者对 test_1 的 x 权限
    cd test_1         # 报错 "-bash: cd: test_1: Permission denied"

    原因:cd 进入目录的核心是 "执行目录的索引访问",没有 x 权限,系统拒绝你进入该目录,后续所有操作都无法开展。

三、目录权限组合的关键逻辑

目录的单个权限作用有限,实际使用中需组合:

  • r+x:能进入目录(cd)+ 查看目录内文件列表(ls),但不能创建 / 删除内容(无 w),适合 "只读访问目录" 场景(如查看日志目录);
  • w+x:能进入目录 + 创建 / 删除内容,但不能查看目录内列表(无 r),适合 "只能上传文件,不能查看其他文件" 场景(如临时上传目录);
  • r+w:无实际意义 ------ 不能进入目录(无 x),即使能看到文件列表(有 r),也无法访问或修改文件;
  • r+w+x:完整权限,能进入、查看、创建 / 删除目录内所有内容(如个人工作目录)。

四、总结:目录 r/w/x 权限核心记忆

权限 核心作用 典型操作 无权限时的限制
r 读索引 → 看目录内有什么 ls/ll 目录 无法列出文件 / 子目录
w 写索引 → 改目录内内容 mkdir/touch/rm 无法创建、删除、重命名
x 执行 → 进入目录 + 访问内容 cd 目录、cat 目录内文件 无法进入目录,也无法访问目录内文件

你的操作完美验证了目录权限的核心逻辑:通过 "移除 - 测试 - 恢复" 的流程,清晰展现了每个权限的不可替代性,尤其是 x 权限作为目录基础权限的关键作用 ------ 没有 xrw 几乎无法发挥作用。


粘滞位

复制代码
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ pwd
/home/ranjiaju/test
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-x 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ chmod o+t test_1
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll
total 4
drwxrwxr-t 3 ranjiaju ranjiaju 4096 Dec  2 19:18 test_1

[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ test]$ ll -d /tmp 
drwxrwxrwt. 8 root root 4096 Dec  2 03:31 /tmp

一、粘滞位(Sticky Bit)的核心定义与标识

粘滞位是 Linux 中 目录专属的特殊权限 ,本质是对共享目录的 "删除权限" 做精准限制 ------ 仅允许文件 / 目录的「拥有者」、「目录拥有者」或「root 用户」删除 / 重命名该文件 / 目录,其他用户即便拥有目录的 w(写)权限,也无法删除不属于自己的内容。

粘滞位的标识规则(结合操作):

  • 粘滞位的位置在目录权限字符串的「最后一位」(即 other 权限的 x 位);
  • 若 other 权限原本有 x(可执行 / 进入目录),粘滞位生效后显示为 t(小写);
  • 若 other 权限原本无 x,粘滞位生效后显示为 T(大写,无实际意义,因无 x 无法进入目录)。

操作验证:

  • 初始 test_1 目录权限:rwxrwxr-x(other 有 x 权限);
  • 执行 chmod o+t test_1 后,权限变为 rwxrwxr-t(最后一位 x 变为 t),表示粘滞位已生效;
  • 系统 /tmp 目录权限 drwxrwxrwt(最后一位 t),同样是粘滞位生效的标识,且 rwxrwxrwx 基础权限允许所有用户读写执行,粘滞位是其安全核心。

二、粘滞位的核心作用:解决共享目录的 "删除冲突"

共享目录的核心需求是「多用户可共同创建 / 访问内容,但不能互相删除」,而普通共享目录若设置 rwxrwxrwx(所有用户可读写执行),会出现严重问题:

  • 无粘滞位时:用户 A 在共享目录创建文件 a.txt,用户 B 因拥有目录 w 权限,可直接 rm -rf a.txt 删除用户 A 的文件(恶意删除或误删);
  • 有粘滞位时:用户 B 即便有目录 w 权限,也只能删除自己创建的文件,无法删除 a.txt(仅用户 A、目录拥有者或 root 可删除)。

简单说:粘滞位让共享目录的 "写权限" 仅作用于 "创建自己的文件",而非 "删除别人的文件",是共享目录的 "安全防护盾"。

三、共享目录必须用粘滞位的原因

共享目录(如团队协作目录、系统临时目录)的本质是 "多用户共同使用",需满足两个矛盾需求:

  1. 开放权限:允许所有授权用户创建、修改自己的文件(需目录的 w+x 权限);
  2. 保护隐私:禁止用户删除 / 篡改他人的文件(避免数据丢失或恶意破坏)。

粘滞位恰好解决了这个矛盾 ------ 它不剥夺用户的 "创建 / 修改自己文件" 的权限,仅限制 "删除他人文件" 的行为,让共享目录既能 "共享使用",又能 "安全隔离",是共享场景下的必备权限配置。

四、系统默认共享目录 /tmp 的粘滞位应用

/tmp 是 Linux 系统自带的「全局共享临时目录」,所有用户(包括普通用户)都能在其中创建、存放临时文件(权限为 rwxrwxrwt),其粘滞位的作用至关重要:

  • 基础权限 rwxrwxrwx:允许所有用户自由创建(touch)、进入(cd)、访问临时文件;
  • 粘滞位 t:防止用户 A 删除用户 B 的临时文件(如程序运行产生的临时缓存、脚本临时文件),避免因临时文件被误删导致程序崩溃或数据丢失。

可以说,/tmp 目录的 rwxrwxrwt 权限组合是 "共享目录的标准安全配置"------ 开放使用权限,同时用粘滞位保障数据安全,这也是所有 Linux 发行版默认给 /tmp 配置粘滞位的原因。

五、粘滞位的补充说明(实用细节)

  1. 适用范围:仅对「目录」有效,对普通文件设置粘滞位(如 chmod o+t file.txt)无任何意义(系统会忽略);
  2. 设置方法:
    • 符号模式(推荐):chmod o+t 目录名(给目录添加粘滞位),chmod o-t 目录名(移除粘滞位);
    • 数字模式:粘滞位对应的数字是 1,放在权限数字组合的最前面(如 1777 表示 rwxrwxrwt1755 表示 rwxr-xr-t);
  3. 权限优先级:粘滞位的限制优先级高于目录的 w 权限 ------ 即便用户拥有目录 w 权限,也无法突破粘滞位的删除限制。
相关推荐
Tranquil_ovo2 小时前
【Linux】Makefile 基础
linux
漏洞文库-Web安全2 小时前
Linux逆向学习记录
linux·运维·学习·安全·web安全·网络安全·逆向
无奈笑天下2 小时前
【银河麒麟高级服务器部署本地yum源】
linux·运维·服务器·经验分享
dodod20122 小时前
Ubuntu 24.04 LTS 使用清华大学的 Ubuntu 镜像源以加速下载和更新操作
linux·运维·ubuntu
轻颂呀2 小时前
TCP协议
linux·网络·网络协议·tcp/ip
知识分享小能手2 小时前
CentOS Stream 9入门学习教程,从入门到精通,CentOS Stream 9 用户和组管理 —语法详解与实战案例(6)
linux·学习·centos
松涛和鸣3 小时前
25、数据结构:树与二叉树的概念、特性及递归实现
linux·开发语言·网络·数据结构·算法
runfarther3 小时前
mysql_mcp_server部署及应用案例
linux·mysql·centos·mcp
爱吃番茄鼠骗3 小时前
Linux操作系统———信号量
linux