如何使用Linux命令行列出用户

时间:2020-03-05 15:28:49  来源:igfitidea点击:

在Linux或者Unix的操作系统中,'/etc/passwd'文件存储所有用户信息。
此文件包含正常(常规)和系统用户。

在本教程中,将介绍如何使用命令行列出Linux中的用户。

我下面列出的命令将适用于像Ubuntu/CentOS和Arch Linux这样的所有Linux发行版。

1)来自"/etc/passwd - 使用cut&awk命令

如上所述文件/etc/passwd存储所有用户列表,而不管人员,服务相关帐户或者系统功能用户的创建帐户。

每行/etc/passwd是一个不同的用户。
这些命令也应该在CentOS/Ubuntu/Arch和其他Linux Distr上工作。

使用以下命令列出所有用户

$cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
...

使用,使用无需信息获取列表,

$cut -d : -f 1 /etc/passwd

此处Cut命令用于使用Derimiter(;)从名为"/etc/passwd"的文件中提取第1字段,并在控制台上显示所需输出

请记住,剪切命令需要选项否则会出错。

root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
proxy
www-data
backup
....

让我们尝试更多的东西,

$cat /etc/passwd | grep "/home" |cut -d: -f1
syslog
administrator
theitroad
...

现在我们所做的就是,我们将以前的命令输出分配给另一个变量"切"

$cut -d: -f1

-d定义分隔符":"-f1显示第一个行(例如:用户名)。

让我们使用awk实用程序尝试更多格式化。
此工具使系统管理员能够构建定义需要在文件中搜索的文本模式的命令。

以下AWK命令将列出所有具有全名和主目录的用户以及登录,

$awk -F":" '{print "Login:"  "\tName:"  "\tHome:" }' /etc/passwd

看看输出,我们将看到一个格式化的装饰输出。

Login:root	Name:root	Home:/root
Login:daemon	Name:daemon	Home:/usr/sbin
Login:bin	Name:bin	Home:/bin
Login:sys	Name:sys	Home:/dev
Login:sync	Name:sync	Home:/bin
Login:games	Name:games	Home:/usr/games
Login:man	Name:man	Home:/var/cache/man
Login:lp	Name:lp	Home:/var/spool/lpd
Login:mail	Name:mail	Home:/var/mail
Login:gnats	Name:Gnats Bug-Reporting System (admin)	Home:/var/lib/gnats
...

以下命令将列出所有用户,包括系统和常规(普通)用户:

$awk -F: '{print }' /etc/passwd
Sample Output
$awk -F: '{print }' /etc/passwd
root
daemon
bin
sys
sync
games
man
lp
mail
www-data
backup
list
irc
gnats
testuser

列出所有常规用户(仅限)

Linux系统将"系统"帐户保持在特定用户ID以下,因此使用AWK搜索高于CERTIAN限制的UID。

$awk -F: ' >= 500 {print}' /etc/passwd

2)GetEts命令

Getent命令执行与之前所见的剪切命令相同,Getent命令获取名称服务库支持的数据库中的条目。
如果提供了一个或者多个选项以命令,则仅显示匹配选项的条目。
否则,将显示所有条目。
获取结束命令的语法,

getent [option] [database]

显示所有用户

这与使用CAT/etc/passwd列出用户的情况相同,如果没有提供其他选项,则Getent命令用Passwd用作数据库引用并列出所有用户。

$getent passed
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
saslauth:x:996:76:"Saslauthd user":/run/saslauthd:/sbin/nologin
libstoragemgmt:x:995:994:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
vivek:x:1000:1000:vivek:/home/vivek:/bin/bash
vboxadd:x:991:1::/var/run/vboxadd:/bin/false
theitroad:x:9999:9999:official:/home/lino_dir:/bin/bash
...

查找所有组

下面的命令列出所有组而没有任何条件或者匹配,如果没有其他选项,则Getent命令使用组作为数据库引用并列出所有组。

$getent group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
haclient:x:189:
unbound:x:997:
colord:x:996:
dip:x:40:
usbmuxd:x:113:
...

使用特定用户搜索所有组

$getent group | grep username

上面的命令获取所有组,将用户名传递给Pipe列出匹配的行。
输出具有属于该组的组和用户名。

下面的命令是使用awk,cut和sed命令一起列出所有用户和用户属于特定组的高级格式。

cat /etc/group | awk -F: '{print , , }' | while read group gid members; do members=$members,$(awk -F: "$4 == $gid {print \",\" $1}" /etc/passwd);
echo "$group: $members" | sed 's/,,*//g';done