Linux - 4 用户管理篇(用户、组、文件属性权限)
| 命令 | 核心功能 | 高频参数 | 典型示例 | 适用场景 |
|---|---|---|---|---|
| 用户管理类 | ||||
| useradd | 创建新用户 | -m:自动创建用户家目录-s Shell路径:指定登录 Shell-r:创建系统用户(无家目录)-u UID:指定用户 UID |
1. 创建普通可登录用户:useradd -m -s /bin/bash zhangsan2. 创建 nginx 系统用户: useradd -r -s /sbin/nologin nginx |
新增团队成员登录账号、创建服务专用系统账号(如 mysql、redis) |
| passwd | 设置 / 修改用户密码 | -d:清空用户密码(无需密码登录)-l:锁定用户账号-u:解锁用户账号 |
1. 给 zhangsan 设密码:passwd zhangsan2. 锁定用户账号: passwd -l zhangsan |
新用户创建后初始化密码、用户遗忘密码时重置、临时锁定 / 解锁账号 |
| usermod | 修改已有用户属性 | -aG 组名:追加用户到附加组-d 目录:修改用户家目录-s Shell路径:修改登录 Shell-c 备注:添加用户备注信息 |
1. 把 zhangsan 加入 dev 组:usermod -aG dev zhangsan2. 禁止用户登录: usermod -s /sbin/nologin zhangsan |
用户调岗时追加 / 修改所属组、调整用户家目录、更新用户登录权限 |
| userdel | 删除用户 | -r:彻底删除用户及家目录 / 邮件缓存-f:强制删除(即使用户正登录) |
1. 彻底删除用户及家目录:userdel -r zhangsan2. 强制删除登录中用户: userdel -rf zhangsan |
用户离职、账号废弃时清理账号,避免权限泄露 |
| id | 查询用户身份信息 | 无核心参数,直接跟用户名 | 1. 查看 zhangsan 的 UID/GID 及所属组:id zhangsan2. 查看当前用户信息: id |
确认用户是否存在、验证用户 UID/GID 是否正确、排查账号身份异常 |
| su | 切换用户 | -:切换用户并加载其完整环境-c 命令:切换用户执行单次命令 |
1. 切换到 root 并加载环境:su - root2. 用 root 执行单次命令: su - root -c "useradd lisi" |
普通用户切换到其他用户、临时用目标用户身份执行少量操作 |
| sudo | 普通用户临时提权 | 需配合 /etc/sudoers 配置-l:查看当前用户可执行的 sudo 命令 |
1. 用 sudo 创建用户:sudo useradd wangwu2. 查看 sudo 权限: sudo -l |
普通用户执行高权限操作(如创建用户、修改系统配置),避免直接使用 root 登录 |
| 组管理类 |
||||
| groupadd | 创建用户组 | -g GID:指定组的 GID |
1. 创建 dev 开发组:groupadd dev2. 指定 GID 创建 test 组: groupadd -g 1005 test |
搭建团队权限组、按业务划分用户组(如运维组、测试组) |
| groupdel | 删除用户组 | 无核心参数,直接跟组名 | 删除无用的 test 组:groupdel test |
清理空的废弃组、业务调整后删除不再使用的用户组 |
| gpasswd | 管理用户组 | -a 用户名:添加用户到组-d 用户名:从组中移除用户-A 用户名:设置组管理员 |
1. 把 lisi 加入 dev 组:gpasswd -a lisi dev2. 把 lisi 移出 dev 组: gpasswd -d lisi dev |
批量管理组内用户、设置组管理员分配组管理权限 |
| groups | 查看用户所属组 | 无核心参数,直接跟用户名 | 1. 查看 zhangsan 所属组:groups zhangsan2. 查看当前用户所属组: groups |
快速验证用户是否加入目标组、排查组权限分配问题 |
| 文件权限类 |
||||
| chmod | 修改文件 / 目录权限 | 数字法:r=4、w=2、x=1-R:递归修改目录及子内容权限 |
1. 给文件所有者读写执行权限:chmod 700 file.txt2. 递归开放目录权限: chmod -R 755 /data/dev |
控制文件读写执行范围、开放 / 限制目录访问权限、配置程序运行权限 |
| chown | 修改文件 / 目录所有者 | -R:递归修改目录及子内容所有者 |
1. 把文件所有者改为 zhangsan:chown zhangsan file.txt2. 递归修改目录所有者: chown -R nginx /usr/local/nginx |
文件权限交接、配置服务文件归属(如 nginx 配置文件归 nginx 用户) |
| chgrp | 修改文件 / 目录所属组 | -R:递归修改目录及子内容所属组 |
1. 把文件所属组改为 dev:chgrp dev file.txt2. 递归修改目录所属组: chgrp -R dev /data/dev |
团队内共享文件时,统一文件所属组,方便组内成员访问 |
一、用户管理
1)useradd 添加用户
useradd 是 Linux 创建新用户的命令,核心只记 2 个常用场景,无需复杂参数:
| 选项 | 英文含义 | 功能描述 |
|---|---|---|
| -m(常用) | create home directory | 自动创建用户家目录(/home/用户名),并复制 /etc/skel 下的默认配置(如 .bashrc) |
-M |
no home directory | 不创建家目录(默认行为,需显式指定) |
| -s(常用) | shell | 指定用户登录 Shell(如 /bin/bash、/bin/zsh,需是 /etc/shells 中存在的 Shell) |
-u |
user ID | 指定用户的 UID(用户唯一标识,默认自动分配,0 为 root,1-999 为系统用户,1000 + 为普通用户) |
-g |
group ID | 指定用户的主组(必须是已存在的组,默认创建同名组) |
-G |
groups | 指定用户的附加组(多个组用逗号分隔,需已存在) |
-c |
comment | 添加用户注释(如用户全名、用途,会写入 /etc/passwd 的第 5 字段) |
-d |
home directory | 自定义家目录路径(默认 /home/用户名,配合 -m 生效) |
-e |
expiration date | 设置用户过期时间(格式 YYYY-MM-DD,过期后无法登录) |
-f |
inactive days | 密码过期后,账号仍可登录的天数(0 = 立即失效,-1 = 永不过期,默认 - 1) |
一、创建普通用户(能登录、有家目录)
root 用户
# 1. 创建用户
useradd 用户名
# 2. 必须给用户设密码(否则无法登录)
passwd 用户名
# 添加用户到用户组group1
useradd -g group1 用户名
# 1. 创建用户(自动建家目录 /home/用户名,支持正常登录)
sudo useradd -m -s /bin/bash 用户名
# 2. 必须给用户设密码(否则无法登录)
sudo passwd 用户名
- 示例:创建用户
zhangsan并设密码sudo useradd -m -s /bin/bash zhangsan sudo passwd zhangsan # 按提示输密码(无回显,输完回车)
二、创建系统用户(服务用,不能登录)
用于运行 nginx、mysql 等服务,无需登录权限:
sudo useradd -r -s /sbin/nologin 服务名
- 示例:创建 nginx 服务用户
sudo useradd -r -s /sbin/nologin nginx
三、关键说明
- 必须加
sudo(普通用户没权限创建用户); -m= 自动建家目录(普通用户必备);-s /bin/bash= 支持正常登录(否则可能无法登录);- 设密码后,用
su - 用户名可切换到该用户。
四、无权限问题
[tony@node01 ~]$ sudo useradd tonydemo
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] tony 的密码:
tony 不在 sudoers 文件中。此事将被报告。
root查看
[root@node01 ~]# tail /var/spool/mail/root
To: root@node01.localdomain
From: tony@node01.localdomain
Auto-Submitted: auto-generated
Subject: *** SECURITY information for node01 ***
Message-Id: <20251105023417.E5D763117257@node01.localdomain>
Date: Wed, 5 Nov 2025 10:34:17 +0800 (CST)
node01 : Nov 5 10:34:17 : tony : user NOT in sudoers ; TTY=pts/1 ; PWD=/home/tony ; USER=root ; COMMAND=/sbin/useradd tonydemo
用户 tony 想在自己的家目录下,通过 sudo useradd tonydemo 创建一个新用户 tonydemo,但因为:
-
useradd是系统级命令,必须有 root 权限才能执行; -
tony没有被授予sudo权限(不在/etc/sudoers列表里);
所以系统直接拒绝了这个操作,并且自动给 root 管理员发了一封安全告警邮件,告知 “有未授权用户尝试执行高权限操作”,方便管理员排查是否存在异常。
后续处理(可选,若需让 tony 有创建用户的权限)
如果是合法需求(比如让 tony 能创建用户),root 可以这样做:
-
编辑
sudoers文件(必须用visudo,避免语法错误导致权限问题):visudo -
在文件中添加一行(授予
tony执行useradd命令的权限):tony ALL=(ALL) /sbin/useradd # 仅允许执行 useradd,更安全 # 或 授予所有 root 权限(不推荐,风险高):tony ALL=(ALL) ALL -
保存退出后,
tony再执行sudo useradd tonydemo,输入自己的密码即可成功。
2)设置密码
passwd 用户名
3)id 查看用户是否存在
[tangge@node01 ~]$ id root
uid=0(root) gid=0(root) 组=0(root)
[tangge@node01 ~]$ id tangge
uid=1000(tangge) gid=1000(tangge) 组=1000(tangge)
[tangge@node01 ~]$ id tony
uid=1001(tony) gid=1001(tony) 组=1001(tony)
4)less /etc/passwd 查看创建的用户
less /etc/passwd
# 使用 //bin/bash 或者 /home 查看哪些是创建的用户

5)su 切换用户
[tony@node01 ~]$ su tangge
密码:
[tangge@node01 tony]$ pwd
/home/tony
6)who 查看登录用户信息
我用的 tony登录的会话
[tangge@node01 tony]$ who am i
tony pts/1 2025-11-05 13:07 (192.168.49.1)
[tangge@node01 tony]$ whoami
tangge
7)sudo 临时获取 root 管理员权限
sudo(全称 superuser do)是 Linux 系统中 临时获取 root 管理员权限 的核心命令,核心价值是“安全地让普通用户执行高权限操作”,无需切换到 root 账号。以下是极简实用的用法总结,覆盖日常90%场景:
| 参数 | 英文含义 | 功能描述 | 实用示例 |
|---|---|---|---|
-i |
simulate initial login | 模拟 root 登录环境(加载 root 的家目录、环境变量),持续使用管理员权限 | sudo -i → 输入当前用户密码,进入 root 终端(提示符 #,退出用 exit) |
-l |
list privileges | 列出当前用户的 sudo 授权范围(能执行哪些 root 命令) | sudo -l → 输出:User tangge may run the following commands on node01: (ALL) /sbin/useradd |
-u 用户名 |
user | 以指定用户(而非 root)的身份执行命令(需授权) | sudo -u tangge touch /home/tangge/test.txt → 以 tangge 身份创建文件 |
一、核心用法(3个必记)
1. 单条命令用 sudo 权限(最常用)
sudo 需root权限的命令
- 示例:普通用户创建用户、修改系统配置
sudo useradd tanggedemo # 创建用户(之前报错的场景,授权后可用) sudo vim /etc/sudoers # 编辑授权文件(需root权限) - 执行后输入 当前普通用户的密码(不是 root 密码),回车即可执行。
2. 切换到 root 环境(持续用管理员权限)
sudo -i # 登录到 root 的完整环境,提示符变 #
- 适合需要连续执行多个 root 命令的场景(比如批量操作系统配置);
- 退出 root 环境:输入
exit或按Ctrl+D。
3. 查看自己的 sudo 授权范围
sudo -l # 列出当前用户能执行的所有 root 命令
- 示例输出:显示“允许执行
/sbin/useradd”或“允许执行所有命令”。
二、关键知识点(避坑必备)
- 权限来源:普通用户能用 sudo,必须在
/etc/sudoers文件中授权(默认只有 root 能编辑); - 密码时效:输对密码后,5分钟内再次用 sudo 无需重复输密码(超时后需重新验证);
- 安全原则:授权时尽量“最小权限”(比如只允许用户执行
useradd,而非所有命令),避免误操作; - 常见错误:
- 报错
user XXX is not in sudoers:用户未授权,需 root 编辑/etc/sudoers添加权限; - 密码输错3次:临时锁定 sudo 权限,等待几分钟后重试。
- 报错
三、授权普通用户使用 sudo(管理员操作)
如果普通用户(如 tangge)需要用 sudo,root 按以下步骤授权:
1. 编辑授权文件(必须用 visudo,避免语法错误):
visudo # 自动打开 /etc/sudoers 文件
#或者 vim /etc/sudoers # 编辑授权文件(需root权限)
2. 添加授权行(二选一):
- 仅允许执行
useradd命令(推荐,安全):tangge ALL=(ALL) /sbin/useradd - 允许执行所有 root 命令(不推荐,风险高):
tangge ALL=(ALL) ALL
3. 保存退出(vim 操作:按 Esc,输入 :wq 回车)。
授权后,tangge 即可用 sudo useradd 等命令。
8)userdel 删除用户
userdel 是 Linux 用于删除系统用户账号的命令,核心参数 -r 可同时删除用户家目录和邮件缓存,避免残留。以下是参数表格+常用示例,清晰好记:
sudo userdel 用户名 #如果 home 目录有用,一般不使用 -r 删除, 例如员工离职
一、userdel 常用参数表格
| 参数 | 英文含义 | 功能描述 | 实用示例 |
|---|---|---|---|
-r(推荐) |
remove home directory and mail spool | 同时删除用户的家目录(/home/用户名)和邮件缓存(/var/spool/mail/用户名),彻底清理残留 |
sudo userdel -r tangge(删除用户 tangge 及所有相关文件) |
-f |
force | 强制删除用户(即使用户当前正登录系统,或有进程在运行) | sudo userdel -rf tangge(强制删除,慎用!) |
-Z |
remove SELinux user mapping | 删除用户对应的 SELinux 安全上下文映射(仅 SELinux 启用时有效) | sudo userdel -Z tangge |
| 无参数 | - | 仅删除用户账号(不删家目录和邮件,会残留文件) | sudo userdel tangge(不推荐,残留 /home/tangge) |
二、高频使用示例(必记)
1. 彻底删除用户(推荐,日常首选)
sudo userdel -r 用户名 # 如:sudo userdel -r tangge
- 效果:删除用户账号 + 家目录(
/home/tangge) + 邮件缓存(/var/spool/mail/tangge),无残留。
2. 强制删除正在登录的用户
如果用户当前正登录系统,直接删除会报错,加 -f 强制删除:
sudo userdel -rf 用户名 # 如:sudo userdel -rf tangge
- 注意:强制删除可能导致用户正在运行的进程异常,尽量先让用户退出(
pkill -u 用户名结束用户进程)再删除。
3. 仅删除用户账号(保留家目录,特殊场景用)
sudo userdel 用户名 # 如:sudo userdel tangge
- 适用场景:需要保留用户家目录下的文件(后续可手动备份或删除
/home/用户名)。
三、关键提醒
- 必须加
sudo(普通用户无权限删除用户); - 优先用
-r参数,避免残留文件占用磁盘; - 若删除后想重新创建同名用户,需先手动删除残留的家目录(否则
useradd -m会报错“目录已存在”):sudo rm -rf /home/用户名 # 清理残留家目录 - 无法删除当前正在使用的用户(比如 root 不能删除自己,普通用户不能删除自己),需切换到其他用户(如 root)执行。
二、用户管理组
在 Linux 中,用户组(Group) 是用于管理多个用户权限的工具——通过将用户加入同一组,可批量赋予/回收权限(如让多个用户共同访问某文件夹),避免对每个用户单独设置权限,提升管理效率。以下是用户组的核心概念、常用命令及实战示例:
2.1、用户组的核心概念
- 主组(Primary Group):每个用户默认有且只有一个主组,创建用户时默认生成同名主组(如创建
tangge,会自动创建tangge组),用户的文件默认归属主组; - 附加组(Supplementary Group):一个用户可加入多个附加组,附加组的权限是对主组权限的补充(如用户
tangge主组是tangge,附加组是sudo和docker); - 系统组 vs 普通组:系统组(GID 1-999)用于运行服务(如
nginx组),普通组(GID 1000+)用于管理普通用户。
2.2、用户组高频命令(表格总结)
| 需求场景 | 命令 | 示例 |
|---|---|---|
| 1. 创建用户组 | groupadd 组名 |
sudo groupadd dev(创建 dev 组) |
| 2. 删除用户组 | groupdel 组名 |
sudo groupdel dev(删除 dev 组,需组内无用户) |
| 3. 查看所有用户组 | cat /etc/group 或 getent group |
cat /etc/group(查看系统所有组信息) |
| 4. 查看用户所属组 | groups 用户名 或 id 用户名 |
groups tangge(查看 tangge 所属组) |
| 5. 给用户添加附加组 | usermod -aG 组名 用户名 |
sudo usermod -aG dev tangge(将 tangge 加入 dev 组) |
| 6. 修改用户主组 | usermod -g 组名 用户名 |
sudo usermod -g dev tangge(将 tangge 主组改为 dev) |
| 7. 查看组内所有用户 | grep "组名" /etc/group |
grep "dev" /etc/group(查看 dev 组的用户) |
| 8. 修改用户组名 | groupmod -n 新组名 旧组名 |
sudo groupmod -n dev_team dev(将 dev 改名为 dev_team) |
2.3、实战示例(常用场景)
实战
[tangge@node01 ~]$ sudo groupadd group1
[sudo] tangge 的密码:
# 1.查看所有用户组
[tangge@node01 ~]$ cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
tony:x:1001:
group1:x:1002:
# 2.修改用户组 - 没权限
[tangge@node01 ~]$ usermod -g group1 tangge
usermod: Permission denied.
usermod:无法锁定 /etc/passwd,请稍后再试。
# 3.修改用户组
[tangge@node01 ~]$ sudo usermod -g group1 tangge
# 4.查看用户id
[tangge@node01 ~]$ id tangge
uid=1000(tangge) gid=1002(group1) 组=1002(group1),1000(tangge)
1. 场景1:创建组并添加多个用户(团队权限管理)
需求:创建 test_group 组,将 user1、user2 加入该组,让他们共同访问 /data/test 文件夹。
# 1. 创建用户组
sudo groupadd test_group
# 2. 将用户加入附加组(-aG 避免覆盖原有附加组)
sudo usermod -aG test_group user1
sudo usermod -aG test_group user2
# 3. 验证用户是否加入组
groups user1 # 输出应包含 test_group
# 4. 设置文件夹权限(让 test_group 组有读写权限)
sudo chgrp test_group /data/test # 改文件夹所属组为 test_group
sudo chmod 770 /data/test # 组内用户有 rwx 权限,其他用户无权限
2. 场景2:移除用户的附加组
需求:将 user1 从 test_group 组中移除。
# 1. 先查看用户当前所属组,确认要移除的组
groups user1
# 2. 用 gpasswd 移除(更灵活,避免手动编辑文件)
sudo gpasswd -d user1 test_group # 输出:Removing user user1 from group test_group
# 3. 验证
groups user1 # 输出中已无 test_group
3. 场景3:修改用户主组(用户文件默认归属变更)
需求:将 user1 的主组从默认的 user1 改为 dev 组,后续 user1 创建的文件默认归属 dev 组。
# 1. 修改主组
sudo usermod -g dev user1
# 2. 验证(gid 对应的组是 dev)
id user1 # 输出:uid=1001(user1) gid=1002(dev) groups=1002(dev),...
# 3. 测试:user1 创建文件,默认归属 dev 组
su - user1
touch test.txt
ls -l test.txt # 输出:-rw-rw-r-- 1 user1 dev ... test.txt(所属组是 dev)
四、关键注意事项
- 删除组的前提:
groupdel只能删除“无用户”的组,若组内有用户,需先将用户移出组(或删除用户); -aG的重要性:给用户加附加组必须用usermod -aG(-a=append,追加),若只写-G会覆盖原有附加组;- 权限生效时机:修改用户所属组后,用户需重新登录(或执行
newgrp 组名临时切换),权限才会生效; - 系统组保护:不要删除系统默认组(如
sudo、root、docker),否则会导致对应服务或权限异常。
总结
用户组的核心价值是“批量管理权限”,日常高频操作是:
- 创建组:
groupadd; - 加用户到组:
usermod -aG; - 查用户/组关系:
groups/id/cat /etc/group。
通过用户组,可高效管理多用户的权限共享(如团队协作文件夹、服务权限分配),是 Linux 权限管理的核心工具之一。
三、文件属性和权限

以 dr-xr-x---. 为例,逐位解释:
-
第 1 位:文件类型
d:目录(directory),如.、..、.pki-:普通文件(file),如anaconda-ks.cfg、default.confl:符号链接(link)(当前输出中没有)b:块设备文件(如硬盘)c:字符设备文件(如键盘)
-
第 2-4 位:所有者权限(u)
所有者对该文件 / 目录的操作权限,3 位分别对应
读(r)、写(w)、执行(x):-
示例
r-x:所有者拥有「读(r=4)+ 执行(x=1)」权限,无写权限(-表示无此权限) -
常见组合:
rwx(完全控制)、rw-(读 + 写,无执行)、r--(仅读)
-
-
第 5-7 位:所属组权限(g)
同组用户的操作权限,格式和含义和「所有者权限」一致:
- 示例
r-x:所属组用户拥有「读 + 执行」权限,无写权限
- 示例
-
第 8-10 位:其他用户权限(o)
系统中除所有者、所属组外的其他用户的权限,格式同上:
- 示例
---:其他用户无任何权限(读、写、执行都禁止)
- 示例
Linux 文件权限是系统安全的核心,通过控制 所有者(user)、所属组(group)、其他用户(other) 三类对象的 读(r)、写(w)、执行(x) 权限,实现文件/目录的访问控制。
1)核心基础:权限的3种对象+3种操作
1. 权限控制对象(3类)
| 对象 | 英文 | 含义 | 对应符号 |
|---|---|---|---|
| 所有者 | User | 文件/目录的创建者 | u |
| 所属组 | Group | 文件/目录归属的用户组 | g |
| 其他用户 | Other | 既不是所有者,也不在所属组的用户 | o |
| 所有对象 | All | 同时包含 u、g、o | a |
2. 权限操作(3种)
| 权限符号 | 英文 | 数字标识 | 对文件的作用 | 对目录的作用 |
|---|---|---|---|---|
r |
Read | 4 | 查看内容(cat/less) |
列出目录文件(ls) |
w |
Write | 2 | 修改/删除文件(vim/rm) |
创建/删除/移动目录内文件(touch/mv) |
x |
Execute | 1 | 执行文件(脚本/程序) | 进入目录(cd) |
3. 权限组合表示(数字/符号)
- 符号格式:用
rwx组合(缺省用-表示),如rwxr-xr--(所有者rwx、组r-x、其他r--); - 数字格式:3位数字(分别对应 u、g、o),每位是
r/w/x的数字和(如754=rwxr-xr--,7=4+2+1,5=4+1,4=4)。
4. 文件权限核心命令
| 需求场景 | 命令 | 语法/示例 | 关键说明 |
|---|---|---|---|
| 1. 查看权限 | ls -l |
ls -l /data/test.txt |
第1列是权限位,第3列所有者,第4列所属组 |
| 2. 修改权限(符号格式) | chmod |
给组添加写权限:chmod g+w 目标 给所有对象移除执行权限: chmod a-x 目标 |
+=添加,-=移除,==覆盖 |
| 3. 修改权限(数字格式) | chmod |
所有者 rwx、组 rw-、其他 r--:chmod 764 目标 |
数字顺序:u→g→o(必须3位) |
| 4. 递归修改权限 | chmod -R |
递归给目录及子内容设权限:chmod -R 770 /data/share |
仅对目录有效,谨慎使用(避免误改系统目录) |
| 5. 修改文件所有者 | chown |
把所有者改为 tangge:chown tangge 目标 |
需 root 权限(sudo) |
| 6. 修改文件所属组 | chgrp |
把所属组改为 dev:chgrp dev 目标 |
等价于 chown :dev 目标 |
| 7. 同时修改所有者+所属组 | chown |
所有者 tangge、组 dev:chown tangge:dev 目标 |
递归修改:chown -R tangge:dev 目标 |
| 8. 查看文件特殊权限 | ls -l 或 stat |
stat /usr/bin/sudo |
特殊权限(SUID/SGID/Sticky)显示在权限位第1位(如 rwsr-xr-x 中 s 是 SUID) |
2)chmod 修改文件/目录权限
chmod(英文全称 change mode)是 Linux 中 修改文件/目录权限 的核心命令,通过调整 所有者(u)、所属组(g)、其他用户(o) 的 读(r)、写(w)、执行(x) 权限,控制文件的访问范围。以下是极简实用的用法总结,覆盖日常90%场景:
一、核心基础:权限符号与数字(必记)
1. 3类权限(r/w/x)
| 权限符号 | 功能(文件) | 功能(目录) | 数字标识 |
|---|---|---|---|
r |
查看内容(cat/less) | 列出文件(ls) | 4 |
w |
修改/删除内容(vim/rm) | 创建/删除文件(touch/rm) | 2 |
x |
执行文件(脚本/程序) | 进入目录(cd) | 1 |
2. 3类控制对象
| 对象符号 | 含义 |
|---|---|
u |
所有者(文件创建者) |
g |
所属组(文件归属组) |
o |
其他用户(非u非g) |
a |
所有用户(u+g+o) |

3. 权限组合(符号/数字)
- 符号组合:如
rwxr-xr--(所有者rwx、组r-x、其他r--); - 数字组合:3位数字(u→g→o),每位是权限数字和(如
754= 4+2+1 / 4+1 / 4)。
二、两种修改方式(符号格式+数字格式)
1. 符号格式(易理解,推荐新手)
语法:chmod 对象±权限 目标文件/目录
chmod [{ugoa}{+-=}{rwx-}] 文件/目录
常用选项
- -c : 若该文件权限确实已经更改,才显示其更改动作
- -f : 若该文件权限无法被更改也不要显示错误讯息
- -v : 显示权限变更的详细资料
- -R(目录常用): 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
+:添加权限;-:移除权限;=:覆盖权限(清除原有权限,只保留指定的)。
| 需求场景 | 命令示例 | 效果 |
|---|---|---|
| 给所有者添加执行权限 | chmod u+x test.sh |
所有者权限增加 x(如 rw-→rwx) |
| 给所属组添加读写权限 | chmod g+rw data.txt |
组权限增加 r+w(如 r--→rw-) |
| 移除其他用户的所有权限 | chmod o-rwx public.txt |
其他用户无任何权限(---) |
| 给所有用户添加读权限 | chmod a+r share.txt |
所有用户都能读(u/g/o均有r) |
| 覆盖所有者权限为 rwx | chmod u=rwx config.sh |
所有者仅保留 rwx(清除原有额外权限) |
# 1. other=---
[root@node01 tangge]# ll
总用量 4
-rwxr-----. 1 root root 1102 11月 5 16:54 default.conf
# 2. other=r
[root@node01 tangge]# chmod o=r default.conf
[root@node01 tangge]# ll
总用量 4
-rwxr--r--. 1 root root 1102 11月 5 16:54 default.conf
# 3. other=rwx,(顺序好像不重要)
[root@node01 tangge]# chmod o=rxw default.conf
[root@node01 tangge]# ll
总用量 4
-rwxr--rwx. 1 root root 1102 11月 5 16:54 default.conf
# 4.设置 other=w(写)
[root@node01 tangge]# chmod o=w default.conf
[root@node01 tangge]# ll
总用量 4
-rwxr---w-. 1 root root 1102 11月 5 16:54 default.conf
# 5. other在w的基础上+r(读)
[root@node01 tangge]# chmod o+r default.conf
[root@node01 tangge]# ll
总用量 4
-rwxr--rw-. 1 root root 1102 11月 5 16:54 default.conf
2. 数字格式(高效,运维常用)
语法:chmod 数字组合 目标文件/目录(数字顺序:u→g→o)
| 常用数字组合 | rwx 二进制 | 符号对应 | 适用场景 | 命令示例 |
|---|---|---|---|---|
754 |
111|101|100 | rwxr-xr-- |
所有者可读写执行,组可读执行,其他只读 | chmod 754 app.sh |
770 |
111|111|000 | rwxrwx--- |
所有者和组可读写执行,其他无权限(团队协作) | chmod 770 team_dir/ |
644 |
110|100|100 | rw-r--r-- |
所有者可读写,其他只读(普通文件) | chmod 644 note.txt |
777 |
rwxrwxrwx |
所有用户可读写执行(慎用,安全风险) | chmod 777 temp_dir/ |
|
444 |
100|100|100 | r--r--r-- |
所有用户只读(禁止修改) | chmod 444 readme.txt |
三、高频实战示例
1. 给脚本添加执行权限(最常用)
chmod u+x run.sh # 仅所有者可执行
# 或 所有用户可执行(如公共脚本)
chmod a+x run.sh
2. 递归修改目录及子内容权限(团队共享目录)
# 递归给 team_dir 及子文件设权限:所有者和组可读写执行,其他无权限
sudo chmod -R 770 team_dir/
-R:递归(Recursive),仅对目录有效,会修改目录下所有文件/子目录权限。
3. 修复文件“只读”问题(添加写权限)
chmod u+w edit.txt # 给所有者添加写权限,可修改文件
4. 禁止其他用户访问文件
chmod o-rwx private.txt # 移除其他用户的所有权限
四、关键注意事项
- 权限优先级:所有者权限 > 所属组权限 > 其他用户权限;
- 目录必须有x权限:目录没有
x权限时,即使有r权限,也无法cd进入,ls只能看到文件名(无详情); - 普通用户权限限制:只能修改自己拥有的文件/目录权限,修改他人文件需
sudo(root 权限); - 慎用
777:所有用户可读写执行,可能导致文件被恶意修改(仅临时测试用); - 递归修改谨慎:
chmod -R不要用于/etc、/bin等系统目录,会导致系统崩溃。
总结
chmod 核心用法:
- 新手用 符号格式(如
chmod g+rw 目标),易理解; - 熟手用 数字格式(如
chmod 754 目标),高效; - 目录递归修改加
-R,系统目录禁用递归。
简单记:chmod + 权限组合 + 目标,按“最小权限原则”授权(只给需要的权限)。
3)chown 改文件/目录的所有者
chown(英文全称 change owner)是 Linux 中 修改文件/目录的所有者(owner)和所属组(group) 的核心命令——简单说就是“变更文件/目录的归属权”,需 root 权限(sudo)执行,日常用于权限交接、团队协作等场景。以下是极简实用的用法总结:
一、核心语法(3种常用格式)
# 1. 仅修改所有者(格式:chown 新所有者 目标)
sudo chown 用户名 文件/目录
# 2. 仅修改所属组(格式:chown :新所属组 目标)
sudo chown :组名 文件/目录
# 3. 同时修改所有者+所属组(格式:chown 新所有者:新所属组 目标)
sudo chown 用户名:组名 文件/目录
- 关键:必须加
sudo(普通用户无权修改他人文件的归属权); - 递归修改(目录及子内容):加
-R参数(Recursive)。
选项 :
- -R, --recursive: 递归更改目录及其子目录中所有文件的所有者
- -v, --verbose: 显示详细操作信息
- -c, --changes: 只显示实际发生更改的文件
- -f, --silent, --quiet: 抑制错误信息
- --reference=文件: 使用参考文件的所有者和组设置
- -h, --no-dereference: 影响符号链接本身,而不是链接指向的文件
- --from=当前所有者: 只有当前所有者匹配时才更改
二、高频实战示例(覆盖90%场景)
1. 仅修改文件所有者
需求:把 /home/tangge/note.txt 的所有者改为 user1
sudo chown user1 /home/tangge/note.txt
# 验证(第3列变为 user1)
ls -l /home/tangge/note.txt
2. 仅修改目录所属组
需求:把 /data/share 的所属组改为 dev 组(团队协作,让组内用户有权访问)
sudo chown :dev /data/share
# 验证(第4列变为 dev)
ls -l /data | grep share
3. 同时修改所有者和所属组
需求:把 /opt/project 的所有者改为 user2,所属组改为 test_group
sudo chown user2:test_group /opt/project
# 验证
ls -l /opt | grep project
4. 递归修改目录及所有子内容(重点)
需求:把 /home/user1 及里面所有文件/子目录的所有者和所属组,统一改为 user1:user1(修复误改的归属权)
sudo chown -R user1:user1 /home/user1
# 验证子文件(所属者和组均为 user1)
ls -l /home/user1/test.txt
三、关键注意事项
- 所有者/组必须存在:修改后的用户名、组名必须是系统中已存在的(用
id 用户名或grep 组名 /etc/group验证),否则报错“无效的用户”“无效的组”; - 递归修改谨慎用:
-R会修改目录下所有内容,避免对/etc、/bin等系统目录使用(会导致系统权限混乱); - 软链接的特殊处理:
chown默认只修改软链接本身的归属权,不影响源文件;若想修改源文件,需加-L参数(chown -L 用户名 软链接名); - 普通用户的限制:普通用户只能修改自己拥有的文件的归属权(且只能转给其他存在的用户),修改他人文件必须用
sudo。
四、常见错误与解决
| 错误提示 | 原因 | 解决方法 |
|---|---|---|
chown: 无效的用户: 'user3' |
用户名 user3 不存在 |
先创建用户:sudo useradd user3,再执行 chown |
chown: 无法访问 '/data/share/file.txt': 权限不够 |
普通用户无权限修改 | 加 sudo:sudo chown user1 /data/share/file.txt |
chown: 递归操作时不能操作 '/proc/1': 是目录 |
对系统特殊目录用了 -R |
停止操作,仅对自定义目录(如 /data、/home)用 -R |
总结
chown 核心用途是“变更文件/目录归属”,日常高频用法:
- 单独改所有者:
sudo chown 用户名 目标; - 单独改所属组:
sudo chown :组名 目标; - 递归改目录:
sudo chown -R 用户名:组名 目录。
记住“先验证用户/组存在,再执行命令”,避免权限错误。
4)chgrp 专门修改文件/目录所属组
chgrp(英文全称 change group)是 Linux 中 专门修改文件/目录所属组 的命令——功能单一且精准,无需像 chown 那样兼顾所有者,仅聚焦“所属组变更”,适合团队权限协作场景。以下是极简实用的用法总结:
一、核心语法(2种常用格式)
# 1. 基础用法:修改目标的所属组
sudo chgrp 新组名 文件/目录
# 2. 递归用法:修改目录及所有子文件/子目录的所属组(重点)
sudo chgrp -R 新组名 目录
- 关键:必须加
sudo(普通用户无权修改文件的所属组); - 等价关系:
chgrp 组名 目标≈chown :组名 目标(两者功能完全一致,chgrp更直观)。
选项 :
- -R, --recursive: 递归更改目录及其子目录中所有文件的所有者
二、高频实战示例
1. 修改单个文件的所属组
需求:把 /home/tangge/report.txt 的所属组改为 dev 组(让 dev 组用户有权访问)
sudo chgrp dev /home/tangge/report.txt
# 验证(第4列变为 dev)
ls -l /home/tangge/report.txt
2. 修改目录的所属组(团队协作常用)
需求:把 /data/team_project 的所属组改为 test_group,组内用户可共享访问
sudo chgrp test_group /data/team_project
# 验证(第4列变为 test_group)
ls -l /data | grep team_project
3. 递归修改目录及所有子内容
需求:把 /opt/docs 及里面所有文件/子目录的所属组,统一改为 doc_group
sudo chgrp -R doc_group /opt/docs
# 验证子文件(所属组均为 doc_group)
ls -l /opt/docs/readme.md
4. 结合 chmod 配置组权限(完整协作流程)
需求:dev 组内用户可读写 /data/share 目录,步骤如下:
# 1. 创建 dev 组(若未创建)
sudo groupadd dev
# 2. 把目录所属组改为 dev
sudo chgrp dev /data/share
# 3. 给 dev 组添加 rwx 权限
sudo chmod g+rwx /data/share
# 4. 验证(权限位为 drwxrwxr--,所属组为 dev)
ls -l /data | grep share
三、关键注意事项
- 目标组必须存在:修改后的组名必须是系统中已存在的(用
grep 组名 /etc/group验证),否则报错“无效的组”; - 递归参数
-R慎用:仅对自定义目录(如/data、/home)使用,避免对/etc、/bin等系统目录递归修改(会导致系统权限混乱); - 软链接的特殊处理:
chgrp默认只修改软链接本身的所属组,不影响源文件;若想修改源文件,需加-L参数(chgrp -L dev 软链接名); - 与
chown的区别:chgrp仅改所属组,chown可改所有者+所属组,日常单纯改组用chgrp更清晰。
四、常见错误与解决
| 错误提示 | 原因 | 解决方法 |
|---|---|---|
chgrp: 无效的组: 'dev_team' |
组名 dev_team 不存在 |
先创建组:sudo groupadd dev_team,再执行 chgrp |
chgrp: 无法访问 '/data/share/file': 权限不够 |
普通用户无权限修改 | 加 sudo:sudo chgrp dev /data/share/file |
chgrp: 递归操作时跳过目录 '/sys/xxx': 不允许的操作 |
对系统特殊目录用了 -R |
停止操作,仅对自定义目录使用递归 |
总结
chgrp 核心用途是“单独修改所属组”,日常高频用法:
- 改单个文件/目录:
sudo chgrp 组名 目标; - 递归改目录:
sudo chgrp -R 组名 目录; - 配合
chmod实现团队权限共享(先改组,再设组权限)。
简单记:chgrp = 专门改所属组的命令,直观且不易出错。

浙公网安备 33010602011771号