如何在Linux中列出用户
您是否曾经想列出Linux系统中的所有用户或计算系统中的用户数量?有创建用户,删除用户,列出已登录用户的命令,但是列出Linux中所有用户的命令是什么?
本教程将向您展示如何列出Linux系统中的用户。
使用/etc/passwd
文件获取所有用户的列表
本地用户信息存储在/etc/passwd
文件中。该文件中的每一行代表一个用户的登录信息。要打开文件,您可以使用 cat
或 less
:
less /etc/passwd
从上面的输出中可以看到,每行有七个用冒号分隔的字段,其中包含以下信息:
- 用户名
- 加密的密码(
x
表示密码存储在/etc/shadow
文件中) - 用户ID号(UID)
- 用户的组ID号(GID)
- 用户的全名(GECOS)
- 用户的主目录
- 登录shell(默认为
/bin/bash
)
如果只想显示用户名,则可以使用awk
或 cut
命令仅打印包含用户名的第一个字段:
awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
rootdaemon
bin
sys
sync
...
...
sshd
vagrant
jack
anne
使用getent命令获取所有用户的列表
getent
命令显示来自/etc/nsswitch.conf
文件中配置的数据库的条目,包括passwd
数据库,我们可以用来查询所有用户的列表。
要获取所有Linux用户的列表,请输入以下命令:
getent passwd
如您所见,输出与显示/etc/passwd
文件的内容时相同。如果您使用LDAP进行用户身份验证,则getent
将显示/etc/passwd
文件和LDAP数据库中的所有Linux用户。
您也可以使用awk
或cut
仅打印包含用户名的第一个字段:
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
linux-">检查Linux系统中是否存在用户
现在,我们知道了如何列出所有用户,要检查Linux框中是否存在用户,我们可以通过将列表传递给grep命令来简单地过滤用户列表。
例如,要确定我们的Linux系统中是否存在名称为jack
的用户,我们可以使用以下命令:
getent passwd | grep jack
如果用户存在,则上面的命令将打印用户的登录信息。如果没有输出,则表示该用户不存在。
我们还可以检查用户是否存在,而无需使用grep
命令,如下所示:
getent passwd jack
与以前相同,如果用户存在,该命令将显示用户的登录信息。
如果要找出系统上有多少个用户帐户,请将getent passwd
输出传送到wc
命令:
getent passwd | wc -l
33
从上面的输出中可以看到,我的Linux系统有33个用户帐户。
系统用户和普通用户
系统与普通(普通)用户之间没有真正的技术区别。通常,系统用户是在安装操作系统和新软件包时创建的。在某些情况下,您可以创建将由某些应用程序使用的系统用户。
普通用户是由root用户或具有sudo特权的其他用户创建的用户。通常,普通用户具有真实的登录外壳和主目录。
每个用户都有一个称为UID的数字用户ID。如果在使用useradd
命令创建新用户时未指定,则将根据UID_MIN
和UID_MIN
值从/etc/login.defs
文件中自动选择UID。
要检查系统上的UID_MIN
和UID_MIN
值,可以使用以下命令:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN 1000UID_MAX 60000
从上面的输出中,我们可以看到所有普通用户的UID应该在1000到60000之间。知道最小值和最大值后,我们就可以查询系统中所有普通用户的列表。
以下命令将列出您的Linux系统中的所有普通用户:
getent passwd {1000..60000}
vagrant:x:1000:1000:vagrant,,,:/home/vagrant:/bin/bashjack: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_MIN
和UID_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。
如有任何疑问,请随时发表评论。
以上是 如何在Linux中列出用户 的全部内容, 来源链接: utcz.com/z/507136.html