Skip to content

[Linux] 如何列出伺服器上所有使用者

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_MINUID_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


這個數字自然是每台伺服器都不盡相同了。


References


Read More

Tags:

Leave a Reply