您是否曾经想列出Linux 所有用户或统计用户数量,有创建用户,删除用户,列出已登录用户的命令,但是如何检查用户是否存在。
本教程将向您展示如何在Linux 检查用户是否存在。在检查用户是否存在之前你可能需要列出Linux 所有用户。
要列出Linux 所有用户可以查看/etc/passwd文件,也可以运行命令getent列出所有用户。
本地用户信息存储在文件/etc/passwd。文件中的每一行代表一个用户的登录信息。要查看/etc/passwd文件,您可以使用cat
或less
命令。
less /etc/passwd
从命令less /etc/passwd
的输出中可以看到,每行有七个用冒号分隔的字段,其中包含以下信息。
用户名。加密的密码,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
...
getent 命令列出所有用户
getent
命令打印来自/etc/nsswitch.conf
文件中配置的数据库的条目,包括passwd
数据库,我们可以用来列出所有用户。
要获取所有Linux用户的列表,请运行命令getent passwd
。您也可以使用awk
或cut
仅打印用户名的第一列。
如您所见,输出与查看/etc/passwd
文件的内容时相同。如果您使用LDAP进行用户身份验证,则getent
将打印/etc/passwd
文件和LDAP数据库中的所有Linux用户。
getent passwd
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
Linux 检查用户是否存在
现在,我们知道了如何列出所有用户,要检查Linux是否存在用户,我们可以将用户列表传递给grep命令来简单地过滤用户列表,确认是否存在用户。
例如,要确定我们的Linux系统是否存在名为myfreax
的用户,运行命令getent passwd | grep myfreax
。
如果用户存在,命令将打印用户的登录信息。如果没有输出,则表示该用户不存在。
getent passwd | grep myfreax
我们还可以在不使用grep
命令检查用户是否存在,例如命令getent passwd myfreax
。
与命令getent passwd | grep myfreax
相同,如果用户存在,命令将显示用户的登录信息。
除了检查用户是否存在之外你可能还想列出Linux 系统有多少个用户。例如命令getent passwd | wc -l
将会统计所有用户。
getent passwd myfreax
getent passwd | wc -l
33
系统用户和普通用户
系统与普通用户之间没有真正的技术区别。通常,系统用户是在安装操作系统创建的用户。在某些情况下,您可能需要创建用户运行指定的应用程序。
普通用户是由root用户创建的用户。通常,普通用户具有真实的登录shell和家目录。
每个用户都有一个称为UID的用户数字ID。如果在使用useradd
命令创建用户时未指定,则系统将根据UID_MIN
和UID_MIN
值从/etc/login.defs
文件中自动选择UID。
要检查系统的UID_MIN
和UID_MIN
值,可以运行命令grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
。
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN 1000
UID_MAX 60000
从命令输出中,我们可以看到所有普通用户的UID应该在1000到60000之间。知道最小值和最大值后,我们就可以查询系统中所有普通用户的列表。
例如命令getent passwd {1000..60000}
将列出Linux 所有普通用户。您的系统UID_MIN
和UID_MIN
值可能不同。
如果不想将列出所有普通用户,分成两个步骤。可以组合两个命令到一个命令中。
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
你将活得同样的结果,在一个命令中。如果只想打印用户名,只需将输出通过管道传递到cut
命令:
getent passwd {1000..60000}
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
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
结论
在本教程中,您学习了如何列出和过滤Linux 用户,以及了解系统用户与普通Linux用户区别。
相同的命令适用于任何Linux发行版,包括Ubuntu,CentOS,RHEL,Debian和Linux Mint。
如有任何疑问,请随时发表评论。