如何在Linux中列出用户?

评论 0 浏览 0 2018-07-09

你是否曾经想列出你的Linux系统中的所有用户,或者统计系统中的用户数量?有一些命令可以创建用户、删除用户、列出已登录的用户,但在Linux中列出所有用户的命令是什么?

本教程将向你展示如何在Linux系统中列出用户。

使用/etc/passwd文件获取所有用户的列表

本地用户信息被存储在/etc/passwd文件中。该文件中的每一行代表一个用户的登录信息。要打开该文件,你可以使用catless

less /etc/passwd
linux etc passwd list users

文件中的每一行都有七个以冒号为界的字段,其中包含以下信息。

  • 用户的名字。
  • 加密的密码(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
bin
sys
sync
...
...
sshd
vagrant
jack
anne

使用getent命令获取所有用户的列表

getent命令显示在/etc/nsswitch.conf文件中配置的数据库中的条目,包括passwd数据库,它可以用来查询所有用户的列表。

要获得所有Linux用户的列表,请输入下面的命令。

getent passwd
linux getent list users

正如你所看到的,输出结果与显示/etc/passwd文件的内容时相同。如果你使用LDAP进行用户认证,getent将显示/etc/passwd文件和LDAP数据库中的所有Linux用户。

你也可以使用awkcut,只打印包含用户名的第一个字段。

getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1

检查一个用户是否存在于Linux系统中

现在我们知道了如何列出所有的用户,为了检查一个用户是否存在于我们的Linux盒子里,我们可以简单地通过管道将用户列表输送到grep命令来过滤用户列表。

例如,要想知道在我们的Linux系统中是否存在一个名字为jack的用户,我们可以使用以下命令。

getent passwd | grep jack
Check whether a user exists in the Linux system

如果用户存在,上面的命令将打印用户的登录信息。没有输出,说明用户不存在。

我们也可以在不使用grep命令的情况下检查一个用户是否存在,如下所示。

getent passwd jack

和以前一样,如果用户存在,该命令将显示用户的登录信息。

如果你想知道你的系统有多少个用户账户,用管道将getent passwd的输出接到wc的命令上。

getent passwd | wc -l

输出

33

从上面的输出结果可以看出,我的Linux系统有33个用户账户。

系统和普通用户

系统用户和普通(正常)用户之间没有真正的技术区别。通常,系统用户是在安装操作系统和新软件包时创建的。在某些情况下,你可以创建一个系统用户,该用户将被一些应用程序使用。

普通用户是指由root或其他具有sudo权限的用户创建的用户。通常,一个普通用户有一个真正的登录shell和一个主目录。

每个用户都有一个数字的用户ID,称为UID。如果在用useradd命令创建一个新用户时没有指定,UID将根据UID_MINUID_MAX的值从/etc/login.defs文件中自动选择。

要检查你系统上的UID_MINUID_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 System and Normal Users

输出

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_MINUID_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。

如果您有任何问题,请随时留言咨询。

最后更新2023-09-24
0 个评论
标签