目录
[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 超级用户(拥有系统最高权限),也可指定切换到其他普通用户,适合临时获取目标用户的操作权限(如执行管理员命令、访问其他用户的文件)。
核心功能
- 切换到 root 用户(默认行为):无需指定目标用户名,输入
su后验证 root 密码即可获得超级权限; - 切换到指定普通用户:输入
su 用户名,验证该普通用户的密码后,切换到其身份; - 临时执行单条命令(配合选项):无需完整切换用户,仅以目标用户身份执行一条命令后返回原用户。
基本语法
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,即原用户的家目录),仅切换用户身份和权限。
代码中的第二步:执行 exit 或 Ctrl+D 退出 root,返回原用户
[root@iZ2vc15k23y9vpuyi3tiqzZ ranjiaju]# exit //Ctrl+D
[ranjiaju@iZ2vc15k23y9vpuyi3tiqzZ ~]$
- 退出方式:两种等价操作均可返回原用户身份:
- 输入
exit命令并回车; - 按下快捷键
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 更贴合 "完全使用目标用户身份" 的需求。
核心功能
- 切换用户身份(默认 root):验证目标用户密码后,切换到其身份,获得对应权限;
- 加载完整环境:切换后自动进入目标用户的家目录,加载其专属环境变量(如
HOME、PATH)、Shell 配置文件(如~/.bashrc、~/.bash_profile); - 保留登录记录:会更新目标用户的 "最后登录时间",终端显示登录提示信息,模拟真实登录体验。
基本语法
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); - 其他环境变量:
PATH、USER、SHELL等均会同步切换为目标用户的配置(如 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仅能访问数据库相关文件,无法修改其他系统资源)。 - 登录用户:日常办公、学习、开发等操作,即使误操作也不会影响系统核心功能。
- 系统用户:保障服务的独立运行和权限隔离(如 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)权限,通过精确控制权限,保障文件安全(避免误修改、未授权访问),是系统权限管理的核心工具。
核心功能
- 新增权限:为指定用户组添加某类权限(如给所属组添加写权限);
- 移除权限:从指定用户组撤销某类权限(如取消其他用户的读权限);
- 覆盖权限:直接设定指定用户组的权限(忽略原有权限,统一设置为目标权限);
- 递归修改:批量修改目录及内部所有文件 / 子目录的权限(需配合选项)。
基本语法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),以下逐一拆解命令效果:
-
命令
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。
- 解析:
-
命令
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。
- 解析:
-
命令
chmod o-r test_1.c- 解析:
o(其他用户)+-(移除)+r(读权限); - 效果:移除其他用户的读权限,权限字符串变为
----------(所有用户均无任何权限); - 对应输出:
---------- 1 ranjiaju ranjiaju 0 Dec 2 16:37 test_1.c(俗称 "零权限",仅拥有者可通过 chmod 恢复)。
- 解析:
-
命令
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。
- 解析:
-
命令
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。
- 解析:
-
命令
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.c或chown 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 root和chgrp root修改); - 执行后状态:
ll输出显示1 ranjiaju ranjiaju,说明:- 拥有者已从
root恢复为ranjiaju; - 所属组已从
root恢复为ranjiaju; - 文件权限(
-rwxrw---x)未变,仅归属权变更 ------ 归属权与权限是独立属性,chown 仅改归属,不影响 chmod 设置的权限。
- 拥有者已从
关键细节与等价写法
-
分隔符灵活:冒号(
:)可替换为点号(.),效果完全一致,即chown ranjiaju.ranjiaju test_1.c与原命令等价(推荐用冒号,兼容性更强); -
等价分步操作:该命令等同于同时执行以下两条命令,仅一步完成更高效:
chown ranjiaju test_1.c # 单独改拥有者 chgrp ranjiaju test_1.c # 单独改所属组 -
执行权限要求:只有
root用户或文件原拥有者(此处原拥有者是root)能执行该命令 ------ 普通用户ranjiaju无法直接修改归属为root的文件,必须通过su切换到root操作; -
用户名 / 组名有效性:
ranjiaju(用户名)和ranjiaju(组名)必须是系统中已存在的(可通过cat /etc/passwd查用户、cat /etc/group查组),否则会提示「无效的用户 / 组」。
典型使用场景
- 恢复文件归属:如示例中,此前将文件归属改为
root,现在需恢复给普通用户ranjiaju,让其重新获得文件控制权; - 新文件移交:
root下载或创建的文件(默认归属root),需交给普通用户使用时,一次性改完拥有者和所属组,避免后续权限冲突; - 统一归属配置:团队协作中,将文件归属统一设置为「指定用户 + 指定团队组」,比如
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 进制4w(写权限):二进制010→ 8 进制2x(执行权限):二进制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 进制数组成(如 0002、0555),最开头的 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,仅对当前终端会话有效,关闭终端或切换用户后失效; - 永久修改:需写入用户配置文件(仅对当前用户生效)或系统配置文件(对所有用户生效):
- 对当前用户永久生效:编辑
~/.bashrc文件,添加umask 0002(默认值),执行source ~/.bashrc立即生效; - 对所有用户永久生效:编辑
/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 权限作为目录基础权限的关键作用 ------ 没有 x,r 和 w 几乎无法发挥作用。
粘滞位
[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 可删除)。
简单说:粘滞位让共享目录的 "写权限" 仅作用于 "创建自己的文件",而非 "删除别人的文件",是共享目录的 "安全防护盾"。
三、共享目录必须用粘滞位的原因
共享目录(如团队协作目录、系统临时目录)的本质是 "多用户共同使用",需满足两个矛盾需求:
- 开放权限:允许所有授权用户创建、修改自己的文件(需目录的
w+x权限); - 保护隐私:禁止用户删除 / 篡改他人的文件(避免数据丢失或恶意破坏)。
粘滞位恰好解决了这个矛盾 ------ 它不剥夺用户的 "创建 / 修改自己文件" 的权限,仅限制 "删除他人文件" 的行为,让共享目录既能 "共享使用",又能 "安全隔离",是共享场景下的必备权限配置。
四、系统默认共享目录 /tmp 的粘滞位应用
/tmp 是 Linux 系统自带的「全局共享临时目录」,所有用户(包括普通用户)都能在其中创建、存放临时文件(权限为 rwxrwxrwt),其粘滞位的作用至关重要:
- 基础权限
rwxrwxrwx:允许所有用户自由创建(touch)、进入(cd)、访问临时文件; - 粘滞位
t:防止用户 A 删除用户 B 的临时文件(如程序运行产生的临时缓存、脚本临时文件),避免因临时文件被误删导致程序崩溃或数据丢失。
可以说,/tmp 目录的 rwxrwxrwt 权限组合是 "共享目录的标准安全配置"------ 开放使用权限,同时用粘滞位保障数据安全,这也是所有 Linux 发行版默认给 /tmp 配置粘滞位的原因。
五、粘滞位的补充说明(实用细节)
- 适用范围:仅对「目录」有效,对普通文件设置粘滞位(如
chmod o+t file.txt)无任何意义(系统会忽略); - 设置方法:
- 符号模式(推荐):
chmod o+t 目录名(给目录添加粘滞位),chmod o-t 目录名(移除粘滞位); - 数字模式:粘滞位对应的数字是
1,放在权限数字组合的最前面(如1777表示rwxrwxrwt,1755表示rwxr-xr-t);
- 符号模式(推荐):
- 权限优先级:粘滞位的限制优先级高于目录的
w权限 ------ 即便用户拥有目录w权限,也无法突破粘滞位的删除限制。