Last Updated on 2021-10-14 by Clay
當我們在一台遠端的 Linux 伺服器上工作時,若是我們想要知道這台伺服器上究竟有多少使用者,我們該如何列出他們呢?
列出使用者
使用 cat 指令印出 /etc/passwd 文件
一個最簡單的思路是印出 /etc/passwd 這份檔案;/etc/passwd 是一份用來追蹤每一位存取系統的登陸使用者文件,包含下列資訊:
- 使用者名稱
- 使用者的加密密碼
- 使用者 ID(UUID)
- 使用者群組 ID(GID)
- 使用者完整名稱(GECOS)
- 使用者起始目錄
- …
我們可以使用下面指令來印出:
cat /etc/passwd
Output:
不過這樣的格式顯得很亂。以上方的 /etc/passwd 文件介紹來看,我們只需要使用者名稱就可以了。
使用 cut 指令切出 /etc/passwd 使用者名稱
既然只需要使用者名稱,那麼我們可以直接使用 cut
指令來做到這一點。
下方參數中:
-d
:需要填入:
作為我們的分隔符號-f
:需要填入1
代表從印出分隔後的第一個欄位
cut -d: -f1 /etc/passwd
Output:
區分系統用戶(System Users)與普通用戶(Normal Users)
但想必大家都注意到了,root、daemon、bin…… 等等看起來都不像是正常的用戶名稱。是的,這些是所謂的系統用戶,並非人工建立的使用者帳號。
比較複雜的區分方法是使用 getent
指令配合 UID_MIN
、UID_MAX
去查找。因爲系統用戶與普通用戶的 UID 是有差異的。
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
Output:
這樣一來就可以得知究竟有哪些帳號存在於這台伺服器上了。
使用 alias 自定義簡短指令
不過老實說,這條指令實在是太長了,推薦可以寫入自己的 ~/.bashrc 設定檔裡,自定義一個新的指令 lu
。
開啟 ~/.bashrc。
vim ~/.bashrc
在最底下加入:
alias lu = "eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1"
儲存離開後,在終端機中使用 source
讓設定檔生效,接著執行看看自定義指令。
source ~/.bashrc
lu
Output:
很方便吧?
到底有多少用戶在伺服器上
搭配 wc
指令,我們可以得到這台伺服器上究竟有多少註冊過的使用者帳號。(下方範例指令中,我使用了自訂義的指令 lu
)
lu | wc -l
Output:
16
這個數字自然是每台伺服器都不盡相同了。