如何在 Linux 中列出用户

已发表: 2022-06-25
显示 bash 提示符的 Linux 笔记本电脑
fatmawati achmad zaenuri/Shutterstock.com

Linux 是一个多用户操作系统,因此创建大量用户帐户很容易。 随着时间的推移,很容易忘记需要哪些帐户。 列出用户帐户可帮助您管理它们。

用户帐户

技术的进步往往会带来新的问题。 一旦计算机能够支持多个用户,将每个人的工作与其他人隔离并封装起来的需求就变得很明显。 这导致了用户帐户的概念。 每个用户都有一个命名的 ID 和一个密码。 这些是让他们登录帐户的凭据。 他们的文件保存在每个用户私有的区域中。

在繁忙的系统上,很容易忘记您创建了哪些帐户,哪些不再需要。 从安全的角度来看,保留不再需要在计算机上配置和访问的用户帐户是一种不好的做法。 您应该删除这些用户。

即使您没有其他人使用您的计算机,您也可能创建了一些帐户只是为了学习如何操作,或者学习和练习管理流程。

如何在 Linux 上删除用户(并删除每个跟踪)
相关如何在 Linux 上删除用户(并删除每个跟踪)

第一步是列出在您的计算机上配置的用户帐户。 这使您可以查看它们并做出可以删除的判断。 列出用户的方法有多种。 无论您使用哪种发行版,这些技术都应该适用于您,而无需安装任何应用程序或实用程序。

使用 cat 命令列出用户

在“/etc/passwd”文件中维护了已配置用户的列表以及有关每个用户的信息。 这是普通用户可以在终端窗口中列出的文本文件。 您不需要使用sudo来查看“/etc/passwd”文件。

如何在 Linux 上使用 chfn 和 usermod 更改用户数据
相关如何在 Linux 上使用 chfn 和 usermod 更改用户数据

我们可以使用cat命令将“/etc/passwd”文件的内容发送到终端窗口。 这将列出文件的全部内容。 这意味着您还将看到由进程和系统拥有的用户帐户条目,而不是由人拥有的。

 猫 /etc/passwd 

使用 cat 将 /etc/passwd 文件的内容发送到终端窗口

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

/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 (行)选项,我们可以计算文件中的行数。 这将为我们提供这台计算机上配置的帐户数量。

 猫 /etc/passwd | wc -l 

计算 /etc/passwd 文件中的帐户数

该数字包括应用程序创建的系统帐户和用户。 这台计算机上配置了大约 400 个普通用户。 你的结果可能会少很多。

有那么多账号,用less来查看“/etc/passwd”文件更方便。

 少 /etc/passwd 

在 less 中打开 /etc/passwd 文件

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

在 /etc/passwd 文件中搜索 mary 帐户,在 less

awk 命令

使用awk命令我们可以只显示用户名。 当您编写需要对大量用户帐户执行某些操作的脚本时,这可能很有用。 列出用户帐户名称并将它们重定向到文本文件可以节省大量时间。 然后,您需要做的就是将命令的其余部分复制并粘贴到每一行。

如何在 Linux 上使用 awk 命令
相关如何在 Linux 上使用 awk 命令

我们将告诉 awk 使用冒号“:”作为字段分隔符,并打印第一个字段。 我们将使用 -F(字段分隔符)选项。

 awk -F: '{print $1}' /etc/passwd 

仅从 /etc/passwd 中选择用户名的 awk 命令

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

终端窗口中显示的用户帐户名称

剪切命令

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

 切割器 -d: -f1 

使用 cut 命令仅显示 /etc/passwd 文件中的用户名

这列出了所有用户帐户,包括系统和其他非人类帐户。

compgen 命令

compgen命令可以与-u (user) 选项一起使用来列出用户帐户。 我们将通过column命令管道输出以在列中列出用户帐户,而不是一个长列表,每行只有一个用户名。

 补偿-u | 柱子

使用 compgen 和 column 命令在列中列出 /etc/passwd 文件中的用户帐户名称

同样,列出的第一个用户帐户属于进程,而不是人类。

UID 最小值和 UID 最大值

用户帐户有一个数字 ID,我们之前看到过。 通常,普通人类用户帐户从 1000 开始,系统、非人类用户帐户从 0 开始。root 帐户的 ID 为 0。

如果我们可以验证可能的最低和最高用户 ID,我们可以使用该信息来选择介于这两个值之间的用户帐户。 这将让我们只选择属于真人的用户帐户。

Linux 使用称为UID_MINUID_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。

相关:如何在 Linux 上使用正则表达式(regexes)

getent 命令

getent命令从系统数据库中读取信息。 我们可以通过使用“passwd”作为参数告诉它列出“/etc/passwd”文件中的条目。

 获取密码

使用 getent 将 /etc/passwd 文件转储到终端窗口

这给了我们使用cat可以获得的相同读数。 但是getent的亮点在于接受被称为“密钥”的值。 一个键决定了getent报告的信息。 如果我们想查看单个用户的条目,我们可以在命令行中传入他们的用户帐户名。

 获取密码 Sarah

请注意,用户帐户名区分大小写。

 getent 密码 sarah 

使用 getent 寻找单个用户帐户

我们还可以传入我们想要查看的用户帐户 ID 的上限和下限。 要查看所有常规用户帐户,我们可以使用UID_MINUID_MAX中的值。

 获取密码 {1000..60000} 

在 getent 中使用上限和下限帐户 ID

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

getent发送到终端窗口的/etc/passwd文件内容

执行时间长的原因是getent会尝试查找所有用户帐户值的匹配项,最高可达 60000。

让我们看看最高的用户帐户 ID 是多少。 我们将使用cut命令,但这次我们将要求输入字段 3,即用户 ID 字段。 我们将通过sort管道输出并使用-g (通用数字排序)选项。

 剪切 -d: -f3 /etc/passwd | 排序 -g 

将 cut 的输出通过管道传输到 sort 命令的命令

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

用户帐户 ID 的排序列表

用户 ID 65534 被分配给“nobody”的系统概念。

 获取密码 {65534..65534} 

系统用户nobody,ID 65534

所以我们知道,在这台计算机上,我们可以使用更真实的值,比如 1500,而不是使用 60000 的UID_MAX值。这样可以很好地加快速度。 我们还将通过cut管道输出以仅提取用户帐户的名称。

获取密码 {1000..1500} | 剪切-d:-f1

getent 的输出通过 cut 管道输出以列出用户帐户名称

列出了用户,我们立即返回到命令提示符。

不是通过cut管道输出,而是通过wc管道输出并再次计算行数。 这将为我们提供“真实”用户帐户的数量。

 获取密码 {1000..1500} | wc -l 

用 getent 和 wc 计算普通用户帐户

我们现在可以看到,在这台计算机上,肯定有 400 个已配置的、人拥有的用户帐户。

力量和简单

当您需要在 Linux 计算机上查看用户帐户时,其中一种技术肯定会满足您的需求。 这些命令应该存在于所有发行版中,并且它们都不需要sudo访问权限,因此每个用户都可以使用它们。

相关:如何在 Linux 上控制 sudo 访问