myfreax

Linux 检查用户是否存在

您是否曾经想列出Linux 所有用户或统计用户数量,有创建用户,删除用户命令,但是如何检查用户是否存在

5 min read
By myfreax
Linux 检查用户是否存在
Linux 检查用户是否存在

您是否曾经想列出Linux 所有用户或统计用户数量,有创建用户,删除用户,列出已登录用户的命令,但是如何检查用户是否存在。

本教程将向您展示如何在Linux 检查用户是否存在。在检查用户是否存在之前你可能需要列出Linux 所有用户。

要列出Linux 所有用户可以查看/etc/passwd文件,也可以运行命令getent列出所有用户。

本地用户信息存储在文件/etc/passwd。文件中的每一行代表一个用户的登录信息。要查看/etc/passwd文件,您可以使用catless命令。

less /etc/passwd

从命令less /etc/passwd的输出中可以看到,每行有七个用冒号分隔的字段,其中包含以下信息。

用户名。加密的密码,x表示密码存储在/etc/shadow文件中。用户ID号,UID。

用户的组ID号 GID。用户的全名 GECOS。用户的主目录。登录shell,默认是/bin/bash

如果只想显示用户名,则可以使用awkcut命令仅打印第一个列用户名。

awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
root
daemon
...

getent 命令列出所有用户

getent命令打印来自/etc/nsswitch.conf文件中配置的数据库的条目,包括passwd数据库,我们可以用来列出所有用户。

要获取所有Linux用户的列表,请运行命令getent passwd。您也可以使用awkcut仅打印用户名的第一列。

如您所见,输出与查看/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_MINUID_MIN值从/etc/login.defs文件中自动选择UID。

要检查系统的UID_MINUID_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_MINUID_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。

如有任何疑问,请随时发表评论。