原文地址:How to List Users in Linux | Linuxize
你是否也希望列出你的 Linux 系统中的所有用户,或者统计一下系统中的用户数量?已经有一些用于创建、删除用户以及列出已登录的命令了,但哪个命令才是在 Linux 中列出用户的呢?
本教程将告诉你如何在 Linux 系统中列出用户。
使用 /etc/passwd
文件
本地用户信息存储在 /etc/passwd
文件中。这个文件中的每一行代表一个用户的登录信息。你可以使用 cat
或者 less
来打开这个文件:
less /etc/passwd
文件的每一行都有用冒号分割的 7 个字段,包含如下信息:
- 用户名
- 加密的密码(
x
表示密码是存储在/etc/shadow
文件中的) - 用户 ID 号(UID)
- 用户的组 ID 号(GID)
- 用户的全名(GECOS)
- 用户的家目录
- 登录 shell(默认是
/bin/bash
)
如果你只想显示用户名,可以使用 awk
或者 cut
命令打印只包含用户名的第一个字段:
awk -F: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
root daemon bin sys sync ... ... sshd vagrant jack anne
使用 getent
命令
getent
命令显示来自 /etc/nsswitch.conf
文件中配置的数据库条目,包括 passwd
数据库,可用于查询全部用户列表。
要获取全部的 Linux 用户列表,输入如下命令:
getent passwd
正如你所见,输出跟 /etc/passwd
文件的内容是一样的。如果你使用 LDAP 进行用户身份认证,则 getent
会显示包括 /etc/passwd
文件和 LDAP 数据库中的所有 Linux 用户。
你也可以使用 awk
和 cut
来打印只包含用户名的第一个字段:
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
检查一个用户是否已经在 Linux 系统中
现在我们知道如何去列出所有用户,要检查一个用户是否存在于我们的 Linux 中,可以简单的用 grep
命令过滤一下用户列表。
例如,想要从我们的 Linux 系统中找出一个名为 jack
的用户,我们使用如下的命令:
getent passwd | grep jack
系统和普通用户
对于系统和普通用户,没有真正的技术区别。通常系统用户是通过安装操作系统和新的包创建的。一些场景下,你可以自行创建用于某系应用的系统用户。
普通用户是有 root 或者其他拥有 sudo 权限的用户创建的。通常,一个普通用户有一个真实的登录 shell 和家目录。
每个用户都有一个叫做 UID 的数字用户 ID,如果在使用 useradd
命令创建新用户的时候没有指定,则 UID 会从 /etc/login.defs
文件中自动选出来,依赖于 UID_MIN
和 UID_MAX
的值。
要检查你系统的 UID_MIN
和 UID_MAX
的值,你可以使用如下命令:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN 1000
UID_MAX 60000
从上面的输出中,我们可以看到所有普通用户的 UID 应该在 1000 到 60000 之间。知道最小和最大的值,就允许我们去查询我们系统中所有普通用户的列表了。
下面的命令将列出我们 Linux 系统中的所有普通用户
getent passwd {1000..60000}
结论
在这个教程中,你学习到了如何列出和过滤 Linux 系统中的用户,并且知道系统用户和普通用户之间的主要区别。
同样的命令适用于任何 Linux 发行版,包括 Ubuntu、CentOS、RHEL、Debian 和 Linux Mint。
如果您有任何问题,请随时发表评论。