原文地址: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

我们也可以不使用
grep 命令来检查一个用户是否存在:getent passwd jack就像之前的那样,如果用户存在,命令会显示用户的登录信息。 如果你希望查到你的系统中有多少个用户账户,管道链接
getent passwd 和 wc 命令即可:getent passwd | wc -l33可以看到,上面的输出显示我的 Linux 系统有 33 个用户账户。
系统和普通用户
对于系统和普通用户,没有真正的技术区别。通常系统用户是通过安装操作系统和新的包创建的。一些场景下,你可以自行创建用于某系应用的系统用户。
普通用户是有 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}

UID_MIN 和 UID_MAX 可能不同,所以更通用版本的命令是这样的:eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}如果你只想打印用户名,只需要管道输出到
cut 命令:eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1结论
在这个教程中,你学习到了如何列出和过滤 Linux 系统中的用户,并且知道系统用户和普通用户之间的主要区别。
同样的命令适用于任何 Linux 发行版,包括 Ubuntu、CentOS、RHEL、Debian 和 Linux Mint。
如果您有任何问题,请随时发表评论。