在 Linux 或類 Unix 操作系統中,’/etc/passwd’ 文件存儲所有用戶信息。 該文件包含普通(普通)用戶和系統用戶。
在本教程中,我將向您展示如何使用命令行在 Linux 中列出用戶。
我在下面列出的命令適用於所有 Linux 發行版,如 Ubuntu/Centos 和 Arch Linux。
1) 從“/etc/passwd – 使用 Cut & Awk 命令
如上所述,文件 /etc/passwd 存儲所有用戶列表,而不管為人類、服務關聯帳戶或系統功能用戶創建的帳戶。 每一行 /etc/passwd
是一個獨特的用戶。 這些命令也適用於 Centos/Ubuntu/Arch 和其他 Linux 發行版。
使用以下命令列出所有用戶
$ 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 命令用於使用分隔符 (;) 從名為 ‘/etc/passwd’ 的文件中提取第一個字段並在控制台上顯示所需的輸出
請記住, cut 命令需要選項,否則會出錯。
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
linoxide
...
現在我們所做的是,我們將之前的命令輸出通過管道傳輸到另一個變量“cut”
$ cut -d: -f1
-d 定義分隔符“:”
-f1 顯示行的第一個字段,即用戶名。
讓我們嘗試使用 Awk 實用程序進行更多格式化。 該工具使系統管理員能夠構建定義需要在文件中搜索的文本模式的命令。
以下 awk 命令將列出所有用戶的全名和主目錄以及登錄名,
$ awk -F":" '{print "Login:" $1 "tName:" $5 "tHome:" $6}' /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 $1}' /etc/passwd
Sample Output
$ awk -F: '{print $1}' /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: '$3 >= 500 {print}' /etc/passwd
2) Getent 命令
getent 命令的作用與我們之前看到的 cut 命令相同,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
linoxide: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
上面的命令獲取所有組,將用戶名傳遞給管道只列出匹配的行。 輸出具有屬於該組的組和用戶名。
以下命令用於使用 awk、cut 和 sed 命令進行高級格式化,以列出所有用戶和屬於特定組的用戶。
cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do members=$members,$(awk -F: "$4 == $gid {print "," $1}" /etc/passwd);
echo "$group: $members" | sed 's/,,*/ /g';done
另請閱讀:
- Linux id 命令 – 打印用戶 ID 和組 ID 信息
繼續喜歡和喜歡我們的帖子,並評論更多您知道的以不同方式列出用戶的命令。