CentOS如何用命令查看所有用户和当前登录的用户?

在 CentOS 及其他类 Linux 系统中,用户管理是系统管理员的核心职责之一,了解如何有效地查看系统中的用户信息,对于日常维护、安全审计和故障排查至关重要,CentOS 提供了多种命令和工具,从简单地列出用户名到深入分析用户的活动状态,功能丰富且强大,本文将系统性地介绍在 CentOS 中查看用户的各种方法,涵盖基础查询与高级技巧,帮助您全面掌握用户信息的管理。

CentOS如何用命令查看所有用户和当前登录的用户?

理解 Linux 用户基础

在深入探讨具体命令之前,有必要先理解 CentOS 中用户的分类,用户可以分为三类:

  1. root 用户:也称为超级用户,其用户 ID (UID) 为 0,拥有系统的最高权限,可以执行任何操作。
  2. 系统用户:用于运行系统服务或应用程序,通常不需要登录,它们的 UID 范围一般在 1 到 999 之间(在 CentOS 7 及更新版本中)。
  3. 普通用户:由管理员创建,用于日常操作和登录系统,它们的 UID 从 1000 开始。

这些用户信息,连同其基本属性,都记录在系统的关键配置文件中。

核心信息存储文件:/etc/passwd

系统上所有用户的基本信息都存储在 /etc/passwd 文件中,这是理解用户信息的基石,虽然可以通过直接查看此文件来获取用户列表,但更推荐使用专门为此设计的命令,因为它们通常提供更友好的格式和更广泛的信息源。

/etc/passwd 文件中的每一行代表一个用户,并由冒号(:)分隔为七个字段,其结构如下表所示:

字段顺序 字段名称 描述
1 用户名 登录系统时使用的唯一名称。
2 密码占位符 已弃用的字段,真正的密码哈希值存储在 /etc/shadow 文件中,此处通常为 x
3 用户ID (UID) 用户的唯一数字标识符,0 为 root,1-999 为系统用户,1000+ 为普通用户。
4 组ID (GID) 用户所属的主组的唯一数字标识符。
5 描述信息 用户的注释字段,通常包含用户的全名、联系方式等。
6 主目录 用户登录后默认所在的目录。
7 登录Shell 用户登录后启动的 Shell 程序,若为 /sbin/nologin/bin/false,则该用户不能登录系统。

查看用户的基本命令

掌握了基础知识后,我们可以开始使用各种命令来查询用户信息。

查看所有系统用户

这是最常见的需求,即获取系统中所有已定义用户的列表。

getent passwd

这是最推荐的方法。getent 命令不仅会读取本地的 /etc/passwd 文件,还会查询名称服务切换(NSS)库配置(/etc/nsswitch.conf),这意味着它除了能显示本地用户,还能显示来自网络服务(如 LDAP、NIS)的用户,信息更全面。

getent passwd

输出格式与 /etc/passwd 文件内容完全一致,每一行代表一个用户及其详细信息。

cat /etc/passwd

这是一个更直接的方法,它只是简单地打印出 /etc/passwd 文件的内容,对于纯粹查看本地用户而言,它足够快且简单,但会遗漏网络用户。

cat /etc/passwd

查看当前登录用户

了解“谁”正在使用系统,对于多用户环境和安全监控非常重要。

who

CentOS如何用命令查看所有用户和当前登录的用户?

who 命令显示当前已登录系统的用户信息,包括登录终端、登录时间和远程主机地址。

who
# 输出示例:
# root     pts/0        2025-10-27 10:30 (192.168.1.101)
# centos   pts/1        2025-10-27 11:15 (192.168.1.102)

w

w 命令是 who 的增强版,它不仅显示当前登录用户,还提供了他们正在执行的进程以及资源使用情况(如 CPU 时间)。

w
# 输出示例:
#  USER     TTY      FROM           LOGIN@   IDLE   JCPU   PCPU WHAT
#  root     pts/0    192.168.1.101  10:30    1.00s  0.12s  0.00s w
#  centos   pts/1    192.168.1.102  11:15    2:00m  0.05s  0.05s -bash

IDLE 表示用户空闲时间,JCPU 是该终端所有进程占用的总 CPU 时间,PCPU 是当前 WHAT 字段显示的进程所占用的 CPU 时间。

users

这是最简单的命令,仅用一行列出当前所有登录用户的用户名,不提供其他细节。

users
# 输出示例:
# root centos

查看用户历史登录记录

审计用户的历史登录行为是安全审计的关键环节。

last

last 命令会读取 /var/log/wtmp 文件,显示用户的历史登录记录,包括登录时间、登出时间、持续时长和来源 IP。

last
# 输出示例:
# root     pts/0        192.168.1.101  Fri Oct 27 10:30   still logged in
# centos   pts/1        192.168.1.102  Fri Oct 27 11:15 - 11:45  (00:30)
# reboot   system boot  5.4.17-2136.3. Fri Oct 27 09:00   still running

lastb

last 相反,lastb 用于查看失败的登录尝试,它读取的是 /var/log/btmp 文件,这是检测暴力破解攻击的重要工具。

lastb
# 输出示例:
# sshd:nobody    Fri Oct 27 12:00 - 12:00  (00:00)
# sshd:admin     Fri Oct 27 11:58 - 11:58  (00:00)

深入查询特定用户信息

当您需要关注某个特定用户的详细信息时,id 命令是最佳选择。

id

CentOS如何用命令查看所有用户和当前登录的用户?

id 命令可以显示指定用户的 UID、GID 以及所属的所有组。

id centos
# 输出示例:
# uid=1000(centos) gid=1000(centos) groups=1000(centos),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

如果不指定用户名,id 将显示当前执行命令的用户信息。

高级技巧与组合使用

在实际工作中,我们常常需要对这些命令的输出进行筛选和处理,结合 grepawk 等工具可以实现更强大的功能。

要快速筛选出所有 UID 大于等于 1000 的普通用户,可以使用 awk 命令:

getent passwd | awk -F: '$3 >= 1000 {print $1}'
# 输出示例:
# centos
# testuser

这里,-F: 指定冒号为分隔符,$3 >= 1000 是筛选条件(第三个字段 UID 大于等于 1000),{print $1} 表示只打印第一个字段(用户名)。

相关问答FAQs

Q1: cat /etc/passwdgetent passwd 之间有什么核心区别?我应该优先使用哪个?

A: 核心区别在于它们的数据来源。cat /etc/passwd 只是简单地读取并显示本地 /etc/passwd 文件的内容,而 getent passwd 会调用系统的名称服务切换(NSS)机制,这意味着它不仅能获取本地用户,还能从配置的网络服务(如 LDAP、NIS、Active Directory 等)中获取用户信息,在现代企业环境中,用户账户常常是集中管理的。getent passwd 是更全面、更推荐的命令,它能确保您看到的是系统所“认知”的全部用户,而不仅仅是存储在本地硬盘上的用户。

Q2: 如何快速筛选出所有能够通过 shell 登录的普通用户,并排除系统用户和服务账户?

A: 要实现这个目标,需要结合两个条件:UID 在普通用户范围内(>= 1000)并且其登录 Shell 不是禁止登录的(如 /sbin/nologin/bin/false),您可以使用 awk 命令精确地完成这个筛选:

getent passwd | awk -F: '($3 >= 1000) && ($7 != "/sbin/nologin") && ($7 != "/bin/false") {print $1}'

这个命令的解释如下:

  • getent passwd:获取所有用户信息。
  • awk -F::设置字段分隔符为冒号。
  • '($3 >= 1000) && ($7 != "/sbin/nologin") && ($7 != "/bin/false")':这是筛选条件,$3 是 UID 字段,$7 是 Shell 字段,该条件要求 UID 大于等于 1000,Shell 不是禁止登录的类型。
  • {print $1}:对于满足条件的行,只打印第一个字段,即用户名。

这个组合命令非常实用,可以帮您快速生成一份可用于系统登录的真实用户清单。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-13 18:29
下一篇 2025-10-13 18:32

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信