如何使用Linux命令行列出用户
在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