我们在上一节已经搞懂了chown
和chgrp
的用法,现在继续深入,带你掌握更多用户权限管理相关命令和操作技巧!
目录
- ps、grep、getent 是干什么的?
- 用户 & 用户组的管理操作大全
- chown 与 chgrp 的区别总结
1. ps、grep、getent 是干什么的?
1.1 ps:
查看当前正在运行的进程
ps 命令是 Linux 系统中用于查看当前系统上运行的进程信息的强大工具。它提供了多种参数来定制输出的信息。以下是一些常用的 ps 参数及其含义:
常用参数
-A
或-e
:显示所有进程(等效于 --all)。-a:
显示与终端相关的所有用户的进程,除了会话首进程。-u:
显示面向用户的格式(包括用户名、CPU使用率、内存使用情况等),通常与 -a 一起使用。-x
:显示没有控制终端的进程,通常与 -a 和 -u 一起使用。-f:
提供完整格式列表,显示更详细的进程信息。-F:
提供额外的完整格式列表,比 -f 提供更多细节。-j:
以作业格式显示进程信息。-l:
提供长格式显示。-o:
自定义输出格式,允许用户指定需要显示的列(例如:pid, user, cmd 等)。-p:
选择特定PID的进程进行显示。后面跟一个或多个PID值。-t:
选择与指定终端相关的进程。后接终端名称。-U
后接用户名:仅显示属于指定用户的进程。-G
后接组名或GID:显示由指定组运行的进程。-C
后接命令名:列出指定命令的所有进程。
常见组合
ps -ef
:显示所有进程的详细信息,包括UID, PID, PPID, CPU使用率, 启动时间, 终端, 占用CPU时间, 和启动命令等。ps aux
:以面向用户的格式显示所有进程的详细信息,包括USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND等。这是非常常见的一种查看方式。ps -eo pid,user
:自定义输出,只显示进程ID, 用户名和启动命令。ps -p <PID>
:显示特定PID的进程信息。
#示例
ps -ef |grep awk
ps aux |grep ssh
ps -p 3927
1.2 grep:关键词搜索神器
grep
是 Linux 系统中最常用和最强大的文本搜索工具之一,全称是 Global Regular Expression Print。它的作用是在文件中查找符合指定模式(如字符串或正则表达式)的行,并将这些行输出到终端或其他程序。
常用参数
参数 | 含义 |
---|---|
-i | 忽略大小写 |
-n | 显示行号 |
-c | 显示匹配行数 |
-v | 反向匹配 |
-r | 递归搜索目录 |
-l | 只显示匹配的文件名 |
-o | 只输出匹配内容本身 |
-E | 使用扩展正则表达式 |
-q | 静默模式,仅返回状态码 |
常用功能展示
#基本语法
grep [选项] "要查找的内容" 文件名
#在file.txt中搜索某个字符串
grep "hello" file.txt
#忽略大小写搜索
grep -i "hello" file.txt
#搜索显示行号
grep -n "error" file.txt
使用扩展正则表达式,匹配包含 "error" 或 "warning" 的行
egrep "error|warning" file.txt
递归搜索 /path/to/code/ 目录下所有文件中包含 "ABC" 的行
grep -r "ABC" /path/to/code/
#排除某些行(反向匹配)显示不含 "success" 的所有行
grep -v "success" file.txt
实用组合示例
#查看带关键字的进程
ps aux | grep "nginx"
#查看不包括 grep 自身的进程
ps aux | grep "nginx" | grep -v "grep"
#从日志中筛选错误信息并显示行号
grep -n "ERROR" /var/log/syslog
#查找多个文件中的关键字
grep "password" *.conf
小技巧
如果你想高亮显示匹配内容,可以加上 --color=auto
:
grep --color=auto "error" file.txt
使用 grep
和 wc
组合统计匹配行数:
grep "404" access.log | wc -l
1.3 getent:查看系统数据库内容(如用户、组等)
基本语法
getent database [key ...]
database
:指定了你想查询的系统数据库名称。key
:这是你想要查找的具体条目。如果省略,则返回指定数据库中的所有条目。- 支持的数据库
passwd
:用户账户信息。group
:用户组信息。hosts
:主机名及其对应的 IP 地址(类似于 /etc/hosts 文件)。services
:网络服务及它们对应的端口号。protocols
:网络协议信息。networks
:网络名称和地址。aliases
:邮件别名(如果有设置的话)。shadow
:包含用户密码信息(仅限有足够权限的用户可访问)。
例如:
️#查询app用户信息
getent passwd app
#列出所有用户组
getent group
#查找主机名对应的IP地址
getent hosts hostname
这个命令比 cat /etc/passwd
更专业,支持多种用户源(如 LDAP)。
2. 用户 & 用户组的管理操作大全
2.1. ➕ 添加用户
sudo useradd app
#或者
sudo adduser app
adduser
是 useradd
的高级包装,创建时会自动生成 home 目录、提示设置密码。useradd
它允许管理员快速地创建用户账户,但不会提示你输入任何额外的信息。
2.2. ➖ 删除用户
sudo deluser app
#或者
sudo userdel app
推荐使用 deluser
,也可以配合 --remove-home
一并删除用户主目录。
userdel
默认情况下,只会移除用户的账户信息,但不会自动删除该用户的主目录及其邮件假脱机(位于 /var/mail/username)。如果你希望在删除用户的同时也删除其主目录和邮件假脱机,可以使用 -r 选项,即 sudo userdel -r app
。
deluser
默认情况下,在删除用户时会询问你是否要一并删除用户的主目录和邮件假脱机文件。此外,deluser
还可以用于从特定用户组中删除用户,或者列出系统上的所有用户等操作。
2.3. ➕ 添加用户组
sudo addgroup devs
或者
sudo groupadd devs
2.4. ➖ 删除用户组
sudo delgroup devs
#或者:
sudo groupdel devs
两个基本差不多,移除指定的组。然而,请注意,如果该组是某个用户的主组(即,有用户将此组作为其主组),则 groupdel
和delgroup
都不允许删除这个组,以防止数据丢失或其他问题
2.5. 修改用户所属组
👉 将用户加入一个附加组:
sudo usermod -aG devs app
- -a:追加,不会覆盖原来的组
- -G:指定附加组
2.6. 修改主组:
sudo usermod -g devs app
-g
(小写):修改用户主组(Primary Group)
修改完成后可以通过以下命令验证:
#查看用户信息
groups app
3. chown 与 chgrp 的区别总结
项目 | chown | chgrp |
---|---|---|
功能 | 修改文件属主或属组 | 只修改文件的属组 |
语法 | chown 用户:组 文件 |
chgrp 组 文件 |
示例 | chown bob:staff hello.txt |
chgrp staff hello.txt |
权限需求 | 需要 root 或属主权限 | 需要 root 或属主权限 |
使用场景 | 移交文件所有权 | 调整访问用户组权限 |
学会这些能干嘛?
- 给多个用户配置文件访问权限?→ 懂得
chown + chgrp
! - 给用户加进“开发者组”?→ 用
usermod
! - 查找用户归属和组成员?→ 用
getent
! - 脚本里批量设置权限?→ 搭配
ps
、grep
自动化!
📚 小白练习建议
操作内容 | 练习命令 |
---|---|
添加测试用户组 | sudo addgroup testgroup |
创建测试用户 | sudo adduser testuser |
把用户加入组 | sudo usermod -aG testgroup testuser |
创建测试文件 | touch test.txt |
修改文件权限与归属 | sudo chown testuser:testgroup test.txt |
查看用户组关系 | groups testuser |
小结一句话
搞懂权限管理三板斧:用户/组管理、chown & chgrp
、权限位(rwx
)!