cat /etc/passwd
查看所有本地账户;通过getent passwd
查询包括LDAP等的用户;执行id [用户名]
验证特定用户存在性及所属组;compgen -u
列出所有用户名。了解谁在使用您的 Linux 系统:查询用户信息的全面指南
在 Linux 系统管理中,无论是排查问题、审核安全、分配资源还是进行日常维护,查询用户信息都是一项基础且至关重要的任务,Linux 提供了多种强大而灵活的命令和文件来帮助您获取所需的用户信息,本文将系统地介绍最常用、最可靠的方法。
核心命令:快速获取当前和登录用户信息
-
who
命令:查看当前登录用户- 功能: 这是最直接的方式,显示当前有哪些用户登录到了系统,以及他们登录的时间、终端和来源(如果来自远程连接)。
- 用法: 直接在终端输入
who
。 - 输出示例:
user1 tty1 2025-10-27 09:30 user2 pts/0 2025-10-27 10:15 (192.168.1.100)
- 解读:
user1
,user2
: 登录的用户名。tty1
: 表示用户user1
在本地控制台 1 登录。pts/0
: 表示用户user2
通过伪终端登录(通常是 SSH 远程连接)。2025-10-27 09:30
: 登录时间。(192.168.1.100)
: 远程登录用户的源 IP 地址。
- 常用选项:
who -b
: 显示系统最后一次启动(引导)的时间。who -r
: 显示当前的运行级别。
-
w
命令:增强版登录用户信息- 功能:
w
命令在who
的基础上提供了更丰富的信息,包括用户正在运行的进程、系统负载、登录时长以及 CPU 占用情况。 - 用法: 直接在终端输入
w
。 - 输出示例:
10:25:03 up 1:05, 2 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT user1 tty1 - 09:30 1:05m 0.10s 0.10s -bash user2 pts/0 192.168.1.100 10:15 5.00s 0.05s 0.01s w
- 解读:
- 第一行:当前时间、系统已运行时间 (
up 1:05
)、登录用户数、系统负载(1分钟、5分钟、15分钟平均值)。 USER
: 用户名。TTY
: 登录终端。FROM
: 来源 IP (远程登录) 或 (本地登录)。LOGIN@
: 登录时间。IDLE
: 用户空闲时间(无键盘/鼠标操作)。JCPU
: 该终端所有进程占用的 CPU 时间。PCPU
: 当前进程占用的 CPU 时间。WHAT
: 用户当前正在运行的命令(如-bash
表示 shell,w
表示正在运行w
命令本身)。
- 第一行:当前时间、系统已运行时间 (
- 优势: 快速了解用户活动状态和系统负载。
- 功能:
-
id
命令:查询用户身份信息- 功能: 显示指定用户(或当前用户)的用户 ID (
UID
)、主组 ID (GID
) 以及所属的所有附加组 (groups
)。 - 用法:
id
: 显示当前用户的信息。id username
: 显示指定用户username
的信息。
- 输出示例:
$ id user1 uid=1001(user1) gid=1001(user1) groups=1001(user1),10(wheel),100(developers)
- 解读:
uid=1001(user1)
: 用户user1
的 UID 是 1001。gid=1001(user1)
: 用户user1
的主组 GID 是 1001,组名也是user1
(通常与用户名相同)。groups=...
: 用户user1
还属于wheel
(GID 10) 和developers
(GID 100) 组。权限管理的关键在于用户所属的组!
- 常用选项:
id -u username
: 仅显示用户的 UID。id -g username
: 仅显示用户的主组 GID。id -G username
: 仅显示用户所属的所有组的 GID。id -Gn username
: 仅显示用户所属的所有组的组名。
- 功能: 显示指定用户(或当前用户)的用户 ID (
深入用户数据库:查询 /etc/passwd
文件
- 功能:
/etc/passwd
文件是 Linux 系统存储所有用户账户核心信息的数据库(密码本身存储在/etc/shadow
中),它包含了系统上每个用户的基本配置。 - 查看方法:
cat /etc/passwd
: 直接显示所有用户条目。less /etc/passwd
或more /etc/passwd
: 分页查看,更友好。grep 'username' /etc/passwd
: 精确查找特定用户username
的信息。
- 条目结构 (每行一个用户,由冒号 分隔为 7 个字段):
username:x:UID:GID:GECOS:home_directory:login_shell
username
: 用户登录名。x
: 历史遗留字段,表示用户密码已加密并存储在/etc/shadow
文件中(x
是占位符)。UID
: 用户 ID。关键标识符! 系统内部使用 UID 识别用户。0
: 超级用户root
。1-999
: 系统用户/服务账户 (通常保留给系统进程使用)。1000+
: 普通用户 (起始 UID 可在/etc/login.defs
中配置)。
GID
: 用户的主组 ID,该组在用户创建文件时作为文件的默认属组。GECOS
或Comment
: 用户全名或描述信息(可选字段),管理员常在此填写用户真实姓名或部门。home_directory
: 用户的主目录绝对路径 (如/home/user1
)。login_shell
: 用户登录后默认启动的 shell (如/bin/bash
),如果设置为/sbin/nologin
或/bin/false
,则该用户通常不能用于交互式登录(常用于服务账户)。
- 重要性: 这是查询系统上所有用户(包括系统用户和普通用户)最全面的方式,提供了 UID、GID、主目录和默认 shell 等核心元数据。
查询用户登录历史:last
命令
- 功能: 查询
/var/log/wtmp
文件(记录成功登录和注销的历史),显示用户的登录历史记录(包括登录、注销时间、终端、来源 IP 以及持续时间),对于审计和安全调查非常有用。 - 用法:
last
: 显示所有用户的登录历史(按时间倒序排列,最近的在最前面)。last username
: 仅显示指定用户username
的登录历史。
- 输出示例:
user2 pts/0 192.168.1.100 Fri Oct 27 10:15 still logged in user1 tty1 Fri Oct 27 09:30 - 10:20 (00:50) reboot system boot 5.4.0-135-gene Fri Oct 27 09:28 still running ...
still logged in
: 用户当前仍在登录状态。(00:50)
: 该次登录会话的持续时间(50分钟)。reboot
: 显示系统重启事件。
- 相关命令:
lastb
: 查询/var/log/btmp
文件,显示失败的登录尝试记录(需要root
权限),是重要的安全审计工具。
查询用户所属组:groups
命令
- 功能: 快速查看指定用户(或当前用户)属于哪些组。
- 用法:
groups
: 显示当前用户所属的组。groups username
: 显示指定用户username
所属的组。
- 输出示例:
$ groups user1 user1 : user1 wheel developers
- 用户
user1
属于user1
(主组)、wheel
和developers
组,这与id -Gn user1
的输出核心信息一致。
- 用户
查找正在运行进程的用户:ps
命令
- 功能: 虽然
ps
主要用于查看进程,但它也是识别哪个用户正在运行特定进程的关键工具。 - 用法:
ps aux
: 查看系统上所有用户运行的所有进程的详细信息(BSD 风格)。ps -ef
: 查看系统上所有用户运行的所有进程的详细信息(标准 UNIX/SysV 风格)。ps -u username
: 查看指定用户username
运行的所有进程。
- 输出解读 (
ps aux
示例列):USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 169048 13120 ? Ss 09:28 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 31 user1 1234 0.0 0.5 251212 51244 tty1 Sl+ 09:30 0:00 /usr/bin/firefox ...
USER
列: 明确显示了运行该进程的用户名(如root
,user1
)。
重要提示与最佳实践
- 权限要求:
- 查看
/etc/passwd
、/etc/shadow
(需要root
)、/etc/group
等系统文件,以及使用lastb
或查看某些日志,通常需要root
权限或使用sudo
。 - 命令如
who
,w
,id
(查看自己或他人公开信息),last
(查看公开登录历史) 通常普通用户也可执行。
- 查看
- 安全操作:
- 永远不要直接编辑
/etc/passwd
或/etc/shadow
文件! 使用专门的命令修改用户属性(如usermod
,useradd
,userdel
,passwd
),直接编辑极易出错导致系统无法登录。 - 定期审查用户列表 (
/etc/passwd
) 和登录历史 (last
,lastb
),删除或禁用不再需要的账户 (usermod -L username
或passwd -l username
),是重要的安全措施。
- 永远不要直接编辑
- 理解 UID/GID: 系统通过 UID 和 GID 识别用户和组,而非用户名,理解这一点对权限管理和问题诊断至关重要。
- 组合使用: 实际工作中,经常需要组合使用这些命令,用
w
看到异常活跃用户,用id
查其组权限,用ps
看其在运行什么,用last
查其登录历史。
掌握这些查询用户的方法 (who
, w
, id
, last
, groups
, ps
, 查看 /etc/passwd
) 是 Linux 系统管理员的必备技能,它们不仅能帮助您了解系统状态、管理用户账户和权限,更是进行系统监控、故障排除和安全审计的基石,始终牢记安全操作规范,优先使用专用命令而非直接修改关键系统文件。
引用说明:
- 基于 Linux 核心工具(如
coreutils
,util-linux
,shadow-utils
软件包)的标准手册页 (man
pages),可通过man who
,man w
,man id
,man passwd
,man last
,man groups
,man ps
等命令获取最权威、最详细的技术参数和说明。 - 用户和组管理的概念及文件格式 (
/etc/passwd
,/etc/shadow
,/etc/group
) 遵循 Linux 标准基础 (LSB) 和 POSIX 规范。 - 安全最佳实践参考了诸如 Linux 基金会、SANS Institute 和主要 Linux 发行商 (Red Hat, Canonical, SUSE) 发布的系统管理指南和安全加固建议。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/39220.html