在 Linux 中列出用户的 3 种方法
如今,不同的操作系统能够使用多个用户,每个用户都有自己的设置和自定义配置,以便管理员和操作员更轻松地在同一系统上协同工作。
另一方面,Linux 在这方面非常强大,因为它允许多个用户以独立的方式同时在系统上工作。它甚至可以允许单个用户从不同位置打开多个会话以在系统上工作。
这里有一些在 Linux 中处理用户的提示和技巧。
列出 Linux 上的所有用户
假设你想在 Linux 中创建一个 sudo 用户。可能,你首先要知道的是如何知道我的系统中有哪些用户。有几种方法可以获取 Linux 中的用户列表。
1.使用 less /etc/passwd 显示 Linux 中的用户
此命令允许系统管理员列出系统中本地存储的用户。它将以结构化的方式列出,如下所示:
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 shell)
为什么有这么多用户?哪些是“真实的”用户?
该列表显示的用户比您预期的要多得多,因为它也列出了所有系统用户。
现在如果您想区分普通用户和系统用户,您可以参考用户标识符(UID)号码。
一般来说,普通用户的 UID 大于或等于 1000。这提示你,UID >=1000 的用户是普通用户,UID <1000 的用户是系统用户。
您还会注意到,有些用户的行末有“nologin”。这意味着这些用户无法登录系统。这些用户也称为伪用户。
2.使用getent passwd查看用户
此命令将为您提供与“less /etc/passwd”类似的输出,但是,该命令实际上查询GNU 名称服务切换功能配置文件(位于 /etc/nsswitch.conf)。
这个conf包含passwd,所以它会显示非常相似,但如果你使用LDAP进行身份验证它也会包括它。
getent passwd
3. 使用 compgen 列出 Linux 用户
如果您只想列出所有用户名而不包含任何其他信息,则可以使用带有-u选项的compgen 命令。
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
关于在 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 命令,它将立即列出当前与你的系统有活动会话的用户名
user@system:~$ 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 中列出用户一点也不难。它由简单的命令组成,这些命令将为您输出所有信息,无论您想做什么或获取这些信息,您都需要根据要在系统上检查的内容进行过滤。
例如,如果您想在 Linux 中列出某个组中的用户,您也可以这样做。在相关主题中,您还可以阅读有关在 Linux 命令行中更改用户的信息。
希望你喜欢本教程。如果您有任何问题或建议,请在评论中告诉我们。