Linux怎么查找所有用户
在Linux中有命令可以创建用户,删除用户,列出已登录的用户,你可能会发现,为什么没有列出用户的命令,那么Linux又怎么列出用户,下面的教程告诉大家怎么列出Linux用户
教程顶部使用的配图来自Reddit,这个配图说明各个linux发行版的用户还在人类生命周期的那个阶段,有点搞笑
使用/etc/passwd文件的所有用户
本地用户信息存储在/etc/passwd
文件中。此文件中的每一行代表一个用户的登录信息,您可以使用cat
或less
命令查看
less /etc/passwd
root:x:0:0:root:/root:/bin/bashdaemon: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
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
huangyanxiong:x:1000:1000:huangyanxiong,,,:/home/workspace/huangyanxiong:/usr/bin/zsh
从上面的输出中可以看出,每行有七个由冒号分隔的字段,其中包含以下信息:
- 用户名
- 加密密码(
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用户的信息
要获取所有Linux用户的列表,请键入以下命令:
getent passwd
root:x:0:0:root:/root:/bin/bashdaemon: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
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
.....
如您所见,输出的内容与/etc/passwd
文件的内容是一样的。如果使用LDAP进行用户身份验证,getent
则显示/etc/passwd
文件和LDAP数据库中的所有Linux用户。
您可以使用管道的方式传递给awk
或cut
命令只打印包含用户名的第一个字段
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
检查Linux系统中是否存在该用户
现在我们知道如何列出所有用户,要检查用户是否存在于我们的Linux系统中,我们可以通过将列表传递给grep
命令来过滤用户列表。
例如,要查明myfreax
是否存在于我们的Linux系统中,我们可以使用以下命令
getent passwd | grep jack
myfreax:x:1000:1000:myfreax,,,:/home/workspace/myfreax:/usr/bin/zsh
如果用户存在,则上面的命令将打印用户的登录信息。如果没有输出则表示用户不存在
我们还可以不使用grep
命令的情况下检查用户是否存在,如下所示:
getent passwd myfreax
与之前相同,如果用户存在,该命令将显示用户的登录信息。
如果要查找系统上有多少用户帐户,可以将getent passwd
输出结果通过管道传递给wc
命令:
getent passwd | wc -l
33
从上面的输出可以看出,我的Linux系统有33个用户帐户
系统和普通用户
系统与普通用户之间没有真正的技术差异。通常在安装操作系统和新软件包时会创建系统用户。在某些情况下,您可以创建将由某个应用程序使用的系统用户。
普通用户是由root用户或具有sudo权限的其他用户创建。通常普通用户具有真实的登录shell和家目录。
每个用户都有一个名为UID的数字用户ID。如果在使用该useradd
命令创建新用户时未指定,则将/etc/login.defs
根据UID_MIN
和UID_MIN
值自动从文件中选择UID 。
要检查系统上的值UID_MIN
和UID_MIN
值,可以使用以下命令:
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN 1000UID_MAX 60000
从上面的输出中,我们可以看到所有普通用户都应该具有1000到60000之间的UID。知道最小值和最大值后,我们就可以查询系统中所有普通用户的列表。
以下命令将列出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
值不同,下面的命令将会直接读取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/506925.html