在 Linux 中列出用户的 3 种方法

今天,不同的操作系统能够使用多个用户,每个用户都有自己的设置和自定义配置,以使管理员和操作员更容易在同一系统上一起工作。

另一方面,Linux 在这方面非常强大,因为它允许多个用户以独立的方式同时在系统上工作。 它甚至可以允许单个用户甚至从不同的位置打开多个会话,以便在系统上工作。

以下是在 Linux 中处理用户的一些提示和技巧。

列出 Linux 上的所有用户

假设您要创建一个 sudo Linux 中的用户。 可能,首先要知道的是如何知道我的系统中有哪些用户。 您可以通过多种方式获取 Linux 中的用户列表。

1. 在 Linux 中使用 less /etc/passwd 显示用户

此命令允许管理员列出系统中本地存储的用户。 它将以结构化的方式列出清单:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
johndoe:x:1000:1000:John Doe,,,:/home/helder:/bin/bash
davmail:x:127:65534::/var/lib/davmail:/usr/sbin/nologin
statd:x:128:65534::/var/lib/nfs:/usr/sbin/nologin
/etc/passwd (END)

上述输出中的结构如下:

  • 用户名
  • 加密密码(x 表示密码已存储)
  • 用户 ID 号 (UID)
  • 用户组 ID 号 (GID)
  • 全名
  • 用户的主目录
  • 用户的登录 shell(默认为 bash 贝壳)

为什么会有这么多用户? 哪些是“真实的”?

该列表显示的用户比您预期的要多得多,因为它也列出了所有系统用户。

现在如果要区分普通用户和系统用户,可以参考用户标识符(UID)编号。

一般普通用户的 UID 大于等于 1000。这提示您 UID >=1000 的用户是普通用户,而 UID <1000 的用户是系统用户。

您还会注意到一些用户在他们的行尾有“nologin”。 这意味着这些用户无法登录系统。 这些用户也称为伪用户。

2.使用getent passwd查看用户

此命令将为您提供与“less /etc/passwd”类似的输出,但是,此命令实际上是查询 GNU 名称服务切换 功能配置文件(位于 /etc/nsswitch.conf)。

这个 conf 包含 passwd,因此它会显示非常相似,但如果您使用 LDAP 进行身份验证,它也会包含它。

3.用compgen列出Linux用户

如果您只想列出所有用户名而不需要任何其他信息,您可以使用 compgen 命令-u 选项。

compgen -u

输出将是这样的:

compgen -u
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
list
irc
gnats
nobody
systemd-network
systemd-resolve
syslog
messagebus
_apt
uuidd
avahi-autoipd
usbmux
dnsmasq
rtkit
cups-pk-helper
speech-dispatcher
whoopsie
kernoops
saned
pulse
avahi
colord
hplip
geoclue
gnome-initial-setup
gdm
abhishek 

提示:您可以使用带有 -c 选项的 compgen 命令来列出所有可用的命令。 当您不是 admin 在 Linux 系统上并且没有 sudo 使用权。

关于在 Linux 中列出用户的一些技巧

您刚刚看到了在 Linux 中查看用户的三种方式。 在处理用户列表时,这里有一些提示可以帮助您。

仅列出用户名

您已经有 compgen 命令,但您不必一直记住它。

如果我们只想获取系统中的用户名列表,您可以使用 awk 命令或 cut 命令过滤我们之前看到的其他两个命令的输出。

cut -d: -f1 /etc/passwd

或者

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

其中任何一个都会给我们一个过滤的用户列表,只显示第一列是用户名:

root
daemon
bin
sys
sync
games
man
lp
mail
news
johndoe
davmail
statd

检查系统中是否已存在用户名

如果您想知道系统中是否已存在特定用户名,这可能很有用:

getent passwd | grep johndoe

这是输出:

johndoe:x:1000:1000:John Doe,,,:/home/johndoe:/bin/bash

列出所有连接的用户

如果您想知道当前有哪些用户登录到您的 Linux 系统,那么您需要使用一个简单的 who 命令,这将立即列出当前用户名以及与您系统的活动会话

[email protected]:~$ who
johndoe   :0           2019-01-28 21:35 (:0)
harrysmith   pts/0        2019-02-01 09:51 (192.168.1.1)
stevejones   pts/1        2019-02-02 09:51 (192.168.1.173)

在这种情况下,列表不仅会为您提供连接的用户名列表,还会提供它们的连接方式,因为它们何时连接以及从何处连接。

第一列将告诉您它是什么用户名。

第二列会告诉你它是什么类型的连接:如果它用“:X”表示,其中 X 是一个数字,这意味着它正在使用图形用户界面 (GUI) 或桌面会话,例如 Gnome、XDE 等; 如果它显示“pts/X”,其中 X 是一个数字,则表示它是通过 SSH 协议(命令行)建立的连接。

第三列将告诉您该会话连接到服务器的时间(日期和时间)。 第四列也是最后一列将为您提供连接的位置,如果是远程的,它将显示建立连接的 IP,如果是本地的(如 GUI),它将显示“(:X)”,其中 X 是在这种情况下,会话将匹配该行第二列中的数字。

包起来

如您所见,在 Linux 中列出用户一点也不难。 它由简单的命令组成,这些命令将为您输出所有信息,无论您想做什么或获取该信息,都需要根据您要在系统上检查的内容进行过滤。

为了 example,如果您想在 Linux 中列出组中的用户,您也可以这样做。 在相关主题中,您还可以阅读有关在 Linux 命令行中更改用户的信息。

我希望你喜欢这个教程。 如果您有任何问题或建议,请在评论中告诉我们。