如何在 Linux 中列出用户

Linux 是一个多用户操作系统,因此创建多个用户帐户很容易。随着时间的推移,很容易忘记需要哪些帐户。列出用户帐户有助于您管理它们。
用户帐户
技术的进步往往会带来新的问题。一旦计算机能够支持多个用户,隔离和封装每个人的工作与其他人的需求就变得很明显了。这导致了用户帐户的概念。每个用户都有一个命名的 ID 和一个密码。这些是让他们登录帐户的凭据。他们的文件保存在每个用户私有的区域中。
在繁忙的系统中,很容易忘记您创建了哪些帐户,哪些不再需要。从安全的角度来看,保留您不再需要在计算机上配置和访问的用户帐户是一种不好的做法。您应该删除这些用户。
即使您没有其他人使用您的计算机,您也可能创建了一些帐户只是为了学习如何操作,或者学习和练习管理流程。
第一步是列出在您的计算机上配置的用户帐户。这使您可以查看它们并判断哪些可以删除。有几种方法可以列出用户。无论您使用哪种发行版,这些技术都应该适用于您,而无需安装任何应用程序或实用程序。
使用 cat 命令列出用户
在“/etc/passwd”文件中维护了已配置用户的列表以及有关每个用户的信息。这是一个文本文件,普通用户可以将其列在终端窗口中。您不需要使用 sudo
来查看“/etc/passwd”文件。
我们可以使用 cat
命令将“/etc/passwd”文件的内容发送到终端窗口。这将列出文件的全部内容。这意味着您还将看到由进程和系统拥有的用户帐户的条目,而不是由人拥有的。
cat /etc/passwd

每个用户帐户都会报告一行密集的信息。

名为“dave”的用户帐户的信息包含这些信息,它们之间有冒号“:
”。
- dave:用户帐户的名称。通常是帐户所有者的姓名。
- x:曾经,它保存着该帐户的密码。如今,密码存储在“/etc/shadow”文件中。 “x”表示密码在该文件中。
- 1000:此帐户的用户 ID。所有用户帐户都有一个唯一的数字 ID。普通用户帐户通常从 1000 开始,每个新帐户使用下一个免费 ID,例如 1001、1002 等。
- 1000:用户所属的默认组的组ID。在正常情况下,默认组与用户ID具有相同的值。
- dave,,,:有关用户的可选额外信息的集合。该字段包含数据,数据之间有逗号“
,
”。他们可以保存用户的全名、办公室号码和电话号码等内容。用户帐户“mary”的条目显示她的全名是 Mary Quinn。 - /home/dave:用户主文件夹的路径。
- /bin/bash:该用户的默认 shell。
如果我们通过 wc
实用程序管道输出此命令并使用 -l
(行数)选项,我们可以计算文件中的行数。这将为我们提供这台计算机上配置的帐户数量。
cat /etc/passwd | wc -l

该数字包括应用程序创建的系统帐户和用户。这台计算机上配置了大约 400 个普通用户。你的结果可能会少很多。
账户那么多,使用less
查看“/etc/passwd”文件会更方便。
less /etc/passwd

如果您想查找特定的用户帐户,使用 less
还允许您在输出中进行搜索。

awk 命令
使用 awk
命令我们可以只显示用户名。当您编写需要对大量用户帐户执行某些操作的脚本时,这会很有用。列出用户帐户名并将它们重定向到文本文件中可以节省大量时间。然后您需要做的就是将命令的其余部分复制并粘贴到每一行。
我们将告诉 awk 使用冒号“:”作为字段分隔符,并打印第一个字段。我们将使用 -F(字段分隔符)选项。
awk -F: '{print $1}' /etc/passwd

用户帐户名被写入终端窗口,没有任何其他帐户信息。

剪切命令
我们可以使用 cut
命令实现相同的目的。我们需要使用 -d
(定界符)选项并要求它仅选择第一个字段,使用 -f
(字段)选项。
cutr -d: -f1

这会列出所有用户帐户,包括系统帐户和其他非人类帐户。
compgen 命令
compgen
命令可以与 -u
(用户)选项一起使用以列出用户帐户。我们将通过 column
命令通过管道输出,以在列中列出用户帐户,而不是每行一个用户名的长列表。
compgen -u | column

同样,列出的第一个用户帐户属于进程,而不是人类。
UID MIN 和 UID MAX
用户帐户被赋予一个我们之前看到的数字 ID。通常,普通人类用户帐户从 1000 开始,系统、非人类用户帐户从 0 开始。root 帐户的 ID 为 0。
如果我们可以验证可能的最低和最高用户 ID,我们就可以使用该信息来选择介于这两个值之间的用户帐户。这将使我们只选择属于真人的用户帐户。
Linux 使用名为 UID_MIN
和 UID_MAX
的配置参数来跟踪这两个值。这些都保存在“/etc/login.defs”文件中。我们可以使用 grep
轻松查看这些值。
我们将使用 -E
(扩展正则表达式)选项。我们的搜索字符串在“/etc/login.defs”文件中查找以“UID_MIN”或“UID_MAX”开头的行。插入符号“^
”代表一行的开始。
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs

此计算机上的用户 ID 范围是从 1000 到 60,000。
getent 命令
getent
命令从系统数据库中读取信息。我们可以通过使用“passwd”作为参数告诉它列出“/etc/passwd”文件中的条目。
getent passwd

这为我们提供了与使用 cat
相同的读数。但是 getent
的亮点在于接受称为“键”的值。一个键决定了 getent
报告的信息。如果我们想查看单个用户的条目,我们可以在命令行中传入他们的用户帐户名。
getent passwd Sarah
请注意,用户帐户名称区分大小写。
getent passwd sarah

我们也可以传入我们想要查看的用户账号ID的上限和下限。要完全查看所有常规用户帐户,我们可以使用 UID_MIN
和 UID_MAX
中的值。
getent passwd {1000..60000}

这需要一些时间来运行。最终,您将返回到命令提示符。

执行时间长的原因是 getent
尝试为所有用户帐户值找到匹配项,直到 60000。
让我们看看最高的用户帐户 ID 是什么。我们将使用 cut
命令,但这次我们需要第三个字段,即用户 ID 字段。我们将通过 sort
管道输出并使用 -g
(通用数字排序)选项。
cut -d: -f3 /etc/passwd | sort -g

人类拥有的用户帐户的最高 ID 值是 1401。

用户 id 65534 被分配给“nobody”的系统概念。
getent passwd {65534..65534}

所以我们知道,在这台计算机上,我们可以使用更实际的值,如 1500,而不是使用 60000 的 UID_MAX
值。这会很好地加快速度。我们还将通过 cut
传输输出以仅提取用户帐户的名称。
获取密码 {1000..1500} |剪切-d:-f1

列出了用户,我们立即返回到命令提示符。
我们不再通过 cut
管道输出,而是通过 wc
管道输出并再次计算行数。这将为我们提供“真实”用户帐户的数量。
getent passwd {1000..1500} | wc -l

我们现在可以看到,在这台计算机上,肯定有 400 个配置的、人类拥有的用户帐户。
强大而简单
当您需要查看 Linux 计算机上的用户帐户时,其中一种技术肯定能满足您的需要。这些命令应该存在于所有发行版中,并且它们都不需要 sudo
访问权限,因此每个用户都可以使用它们。