您是否曾经想要列出 Linux 系统中的所有用户或统计系统中的用户数量?有创建用户、删除用户、列出登录用户的命令,但是在Linux中列出所有用户的命令是什么?
本教程将向您展示如何列出 Linux 系统中的用户。
使用以下命令获取所有用户的列表/etc/passwd
File #
本地用户信息存储在/etc/密码文件。该文件中的每一行代表一个用户的登录信息。要打开该文件,您可以使用cat
or less
:
less /etc/passwd
文件中的每一行都有七个由冒号分隔的字段,其中包含以下信息:
- 用户名。
- 加密密码(
x
意味着密码存储在/etc/影子
file).
- 用户 ID 号 (UID)。
- 用户的组 ID 号 (GID)。
- 用户的全名 (GECOS)。
- 用户主目录。
- 登录 shell(默认为
/bin/bash
).
如果您只想显示用户名,您可以使用awk
or cut仅打印包含用户名的第一个字段的命令:
awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
root
daemon
bin
sys
sync
...
...
sshd
vagrant
jack
anne
使用 getent 命令获取所有用户的列表#
The getent
命令显示配置的数据库中的条目/etc/nsswitch.conf
文件,包括passwd
数据库,可用于查询所有用户的列表。
要获取所有 Linux 用户的列表,请输入以下命令:
getent passwd
如您所见,输出与显示内容时相同/etc/passwd
文件。如果您使用 LDAP 进行用户身份验证,getent
将显示来自两者的所有 Linux 用户/etc/passwd
文件和 LDAP 数据库。
您还可以使用awk
or cut
仅打印包含用户名的第一个字段:
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
检查Linux系统中是否存在用户#
现在我们知道如何列出所有用户,为了检查 Linux 机器中是否存在用户,我们可以通过将列表传递到grep
命令。
例如,要查明某个用户的名称是否为jack
在我们的Linux系统中存在我们可以使用以下命令:
getent passwd | grep jack
如果用户存在,上面的命令将打印用户的登录信息。没有输出意味着该用户不存在。
我们还可以检查用户是否存在而不使用grep
命令如下图:
getent passwd jack
和以前一样,如果用户存在,该命令将显示用户的登录信息。
如果您想了解系统上有多少个用户帐户,请使用管道getent passwd
输出到wc
命令:
getent passwd | wc -l
33
从上面的输出中可以看到,我的 Linux 系统有 33 个用户帐户。
系统用户和普通用户#
该系统和普通(普通)用户之间没有真正的技术差异。通常,系统用户是在安装操作系统和新软件包时创建的。在某些情况下,您可以创建将由某些应用程序使用的系统用户。
普通用户是由 root 或其他具有 sudo 权限的用户创建的用户。通常,普通用户有一个真正的登录 shell 和一个主目录。
每个用户都有一个称为 UID 的数字用户 ID。如果在创建新用户时未指定useradd
命令,UID将自动从/etc/login.defs
文件取决于UID_MIN
and UID_MAX
values.
要检查UID_MIN
and 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}
vagrant:x:1000:1000:vagrant,,,:/home/vagrant:/bin/bash
jack:x:1001:1001:,,,:/home/jack:/bin/bash
anne:x:1002:1002:Anne Stone,,,:/home/anne:/bin/bash
patrick:x:1003:1003:Patrick Star,,,:/home/patrick:/usr/sbin/nologin
你的系统UID_MIN
and UID_MIN
值可能不同,因此上面命令的更通用版本将是:
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 用户之间的主要区别是什么。
相同的命令适用于任何 Linux 发行版,包括 Ubuntu、CentOS、RHEL、Debian 和 Linux Mint。
如果您有任何疑问,请随时发表评论。