Linux

Linux 列出所有使用者清單教學與範例

介紹如何在 Linux 中清查系統上所有的使用者帳號,列出一般使用者的帳號清單。

/etc/passwd 檔案

Linux 的 /etc/passwd 檔案中記錄了系統上所有的帳號,所以我們可以從其中查閱整個系統的所有帳號:

# 輸出 /etc/passwd 檔案內容
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon: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
[略]

/etc/passwd 檔案的內容中,每一行就是一個帳號,第一個冒號之前的部分就是使用者帳號名稱。

亦可使用 moreless 來查閱 /etc/passwd 檔案內容:

# 查閱 /etc/passwd 檔案內容
less /etc/passwd

產生帳號清單

我們可以利用 cut 指令將 /etc/passwd 中的帳號名稱取出,產生一份帳號清單:

# 產生所有帳號的清單
cut -d: -f1 /etc/passwd
root
daemon
bin
sys
sync
games
man
lp
mail
[略]

以下 awk 指令亦可達到相同的效果:

# 產生所有帳號的清單
awk -F: '{print $1}' /etc/passwd

getent 指令

getent 指令也可以用來查詢系統上的帳號清單:

# 輸出 passwd 資料庫
getent passwd
root:x:0:0:root:/root:/bin/bash
daemon: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
[略]

getent 指令的輸出導向至 cutawk 產生帳號清單:

# 產生所有帳號的清單
getent passwd | cut -d: -f1

# 產生所有帳號的清單
getent passwd | awk -F: '{print $1}'
root
daemon
bin
sys
sync
games
man
lp
mail
[略]

檢查指定使用者帳號

若要檢查指定的使用者帳號資訊,可以執行:

# 查詢指定帳號資訊
getent passwd myuser
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

如果指定的使用者帳號不存在,就不會有任何輸出訊息。

統計帳號數量

若要統計整個系統上有多少帳號,可以搭配 wc 指令:

# 統計帳號數量
getent passwd | wc -l
48

系統帳號與一般使用者帳號

系統帳號是用於系統服務或軟體,而一般使用者帳號則是給實際的使用者登入使用,在本質上兩者並沒有太大的差異。

在建立一般使用者帳號時,系統會自動根據 /etc/login.defsUID_MINUID_MAX 的設定值,選擇使用者帳號的 UID,通常來說一般使用者帳號的 UID 都會選在這個區間之內。

# 檢查 UID_MIN 與 UID_MAX 設定值
grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
UID_MIN                  1000
UID_MAX                 60000

透過這個規則,我們就可以列出系統上所有的一般使用者帳號(UID 介於 UID_MINUID_MAX 的使用者):

# 查詢一般使用者帳號資訊
getent passwd {1000..60000}
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

我們可以將查詢 UID_MINUID_MAX 的動作一起放進來,變成單一指令:

# 查詢一般使用者帳號資訊
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)}
ubuntu:x:1000:1000:Ubuntu:/home/ubuntu:/bin/bash
myuser:x:1001:1001:My User,123,02-12345678,03-1234567:/home/myuser:/bin/bash

再配合 cut 指令即可產生一般使用者的帳號清單:

# 產生一般使用者帳號清單
eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
ubuntu
myuser

參考資料

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

10 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

10 個月 ago