如何在 Linux 中列出用戶

已發表: 2022-06-25
顯示 bash 提示符的 Linux 筆記本電腦
fatmawati achmad zaenuri/Shutterstock.com

Linux 是一個多用戶操作系統,因此創建大量用戶帳戶很容易。 隨著時間的推移,很容易忘記需要哪些帳戶。 列出用戶帳戶可幫助您管理它們。

用戶帳戶

技術的進步往往會帶來新的問題。 一旦計算機能夠支持多個用戶,將每個人的工作與其他人隔離並封裝起來的需求就變得很明顯。 這導致了用戶帳戶的概念。 每個用戶都有一個命名的 ID 和一個密碼。 這些是讓他們登錄帳戶的憑據。 他們的文件保存在每個用戶私有的區域中。

在繁忙的系統上,很容易忘記您創建了哪些帳戶,哪些不再需要。 從安全的角度來看,保留不再需要在計算機上配置和訪問的用戶帳戶是一種不好的做法。 您應該刪除這些用戶。

即使您沒有其他人使用您的計算機,您也可能創建了一些帳戶只是為了學習如何操作,或者學習和練習管理流程。

如何在 Linux 上刪除用戶(並刪除每個跟踪)
相關如何在 Linux 上刪除用戶(並刪除每個跟踪)

第一步是列出在您的計算機上配置的用戶帳戶。 這使您可以查看它們並做出可以刪除的判斷。 列出用戶的方法有多種。 無論您使用哪種發行版,這些技術都應該適用於您,而無需安裝任何應用程序或實用程序。

使用 cat 命令列出用戶

在“/etc/passwd”文件中維護了已配置用戶的列表以及有關每個用戶的信息。 這是普通用戶可以在終端窗口中列出的文本文件。 您不需要使用sudo來查看“/etc/passwd”文件。

如何在 Linux 上使用 chfn 和 usermod 更改用戶數據
相關如何在 Linux 上使用 chfn 和 usermod 更改用戶數據

我們可以使用cat命令將“/etc/passwd”文件的內容髮送到終端窗口。 這將列出文件的全部內容。 這意味著您還將看到由進程和系統擁有的用戶帳戶條目,而不是由人擁有的。

 貓 /etc/passwd 

使用 cat 將 /etc/passwd 文件的內容髮送到終端窗口

每個用戶帳戶都會報告一行密集的信息。

/etc/passwd 文件的內容

名為“dave”的用戶帳戶的信息包含這些信息,它們之間有冒號“ : ”。

  • dave :用戶帳戶的名稱。 通常是擁有帳戶的人的姓名。
  • x :有一次,它保存了帳戶的密碼。 如今,密碼存儲在“/etc/shadow”文件中。 “x”表示密碼在該文件中。
  • 1000 :此帳戶的用戶 ID。 所有用戶帳戶都有一個唯一的數字 ID。 普通用戶帳戶通常從 1000 開始,每個新帳戶使用下一個免費 ID,例如 1001、1002 等。
  • 1000 :用戶所屬的默認組的組 ID。 在正常情況下,默認組與用戶 ID 具有相同的值。
  • dave,,, :有關用戶的可選額外信息的集合。 該字段包含數據,它們之間用逗號“ , ”。 他們可以保存用戶的全名、辦公室號碼和電話號碼等信息。 用戶帳戶“mary”的條目顯示她的全名是 Mary Quinn。
  • /home/dave :用戶主文件夾的路徑。
  • /bin/bash :此用戶的默認 shell。

如果我們通過wc實用程序將該命令的輸出通過管道傳輸並使用-l (行)選項,我們可以計算文件中的行數。 這將為我們提供這台計算機上配置的帳戶數量。

 貓 /etc/passwd | wc -l 

計算 /etc/passwd 文件中的帳戶數

該數字包括應用程序創建的系統帳戶和用戶。 這台計算機上配置了大約 400 個普通用戶。 你的結果可能會少很多。

有那麼多賬號,用less來查看“/etc/passwd”文件更方便。

 少 /etc/passwd 

在 less 中打開 /etc/passwd 文件

如果您想查找特定的用戶帳戶,使用less還允許您在輸出中進行搜索。

在 /etc/passwd 文件中搜索 mary 帳戶,在 less

awk 命令

使用awk命令我們可以只顯示用戶名。 當您編寫需要對大量用戶帳戶執行某些操作的腳本時,這可能很有用。 列出用戶帳戶名稱並將它們重定向到文本文件可以節省大量時間。 然後,您需要做的就是將命令的其餘部分複制並粘貼到每一行。

如何在 Linux 上使用 awk 命令
相關如何在 Linux 上使用 awk 命令

我們將告訴 awk 使用冒號“:”作為字段分隔符,並打印第一個字段。 我們將使用 -F(字段分隔符)選項。

 awk -F: '{print $1}' /etc/passwd 

僅從 /etc/passwd 中選擇用戶名的 awk 命令

用戶帳戶名稱將寫入終端窗口,而沒有任何其他帳戶信息。

終端窗口中顯示的用戶帳戶名稱

剪切命令

我們可以使用cut命令實現相同的目的。 我們需要使用-d (分隔符)選項並要求它僅選擇第一個字段,使用-f (字段)選項。

 切割器 -d: -f1 

使用 cut 命令僅顯示 /etc/passwd 文件中的用戶名

這列出了所有用戶帳戶,包括系統和其他非人類帳戶。

compgen 命令

compgen命令可以與-u (user) 選項一起使用來列出用戶帳戶。 我們將通過column命令管道輸出以在列中列出用戶帳戶,而不是一個長列表,每行只有一個用戶名。

 補償-u | 柱子

使用 compgen 和 column 命令在列中列出 /etc/passwd 文件中的用戶帳戶名稱

同樣,列出的第一個用戶帳戶屬於進程,而不是人類。

UID 最小值和 UID 最大值

用戶帳戶有一個數字 ID,我們之前看到過。 通常,普通人類用戶帳戶從 1000 開始,系統、非人類用戶帳戶從 0 開始。root 帳戶的 ID 為 0。

如果我們可以驗證可能的最低和最高用戶 ID,我們可以使用該信息來選擇介於這兩個值之間的用戶帳戶。 這將讓我們只選擇屬於真人的用戶帳戶。

Linux 使用稱為UID_MINUID_MAX的配置參數來跟踪這兩個值。 這些保存在“/etc/login.defs”文件中。 我們可以使用grep輕鬆查看這些值。

我們將使用-E (擴展正則表達式)選項。 我們的搜索字符串在“/etc/login.defs”文件中查找以“UID_MIN”或“UID_MAX”開頭的行。 插入符號“ ^ ”表示一行的開頭。

 grep -E '^UID_MIN|^UID_MAX' /etc/login.defs 

此計算機上的用戶 ID 範圍是 1000 到 60,000。

相關:如何在 Linux 上使用正則表達式(regexes)

getent 命令

getent命令從系統數據庫中讀取信息。 我們可以通過使用“passwd”作為參數告訴它列出“/etc/passwd”文件中的條目。

 獲取密碼

使用 getent 將 /etc/passwd 文件轉儲到終端窗口

這給了我們使用cat可以獲得的相同讀數。 但是getent的亮點在於接受被稱為“密鑰”的值。 一個鍵決定了getent報告的信息。 如果我們想查看單個用戶的條目,我們可以在命令行中傳入他們的用戶帳戶名。

 獲取密碼 Sarah

請注意,用戶帳戶名區分大小寫。

 getent 密碼 sarah 

使用 getent 尋找單個用戶帳戶

我們還可以傳入我們想要查看的用戶帳戶 ID 的上限和下限。 要查看所有常規用戶帳戶,我們可以使用UID_MINUID_MAX中的值。

 獲取密碼 {1000..60000} 

在 getent 中使用上限和下限帳戶 ID

這需要一些時間來運行。 最終,您將返回到命令提示符。

getent發送到終端窗口的/etc/passwd文件內容

執行時間長的原因是getent會嘗試查找所有用戶帳戶值的匹配項,最高可達 60000。

讓我們看看最高的用戶帳戶 ID 是多少。 我們將使用cut命令,但這次我們將要求輸入字段 3,即用戶 ID 字段。 我們將通過sort管道輸出並使用-g (通用數字排序)選項。

 剪切 -d: -f3 /etc/passwd | 排序 -g 

將 cut 的輸出通過管道傳輸到 sort 命令的命令

人類擁有的用戶帳戶的最高 ID 值為 1401。

用戶帳戶 ID 的排序列表

用戶 ID 65534 被分配給“nobody”的系統概念。

 獲取密碼 {65534..65534} 

系統用戶nobody,ID 65534

所以我們知道,在這台計算機上,我們可以使用更真實的值,比如 1500,而不是使用 60000 的UID_MAX值。這樣可以很好地加快速度。 我們還將通過cut管道輸出以僅提取用戶帳戶的名稱。

獲取密碼 {1000..1500} | 剪切-d:-f1

getent 的輸出通過 cut 管道輸出以列出用戶帳戶名稱

列出了用戶,我們立即返回到命令提示符。

不是通過cut管道輸出,而是通過wc管道輸出並再次計算行數。 這將為我們提供“真實”用戶帳戶的數量。

 獲取密碼 {1000..1500} | wc -l 

用 getent 和 wc 計算普通用戶帳戶

我們現在可以看到,在這台計算機上,肯定有 400 個已配置的、人擁有的用戶帳戶。

力量和簡單

當您需要在 Linux 計算機上查看用戶帳戶時,其中一種技術肯定會滿足您的需求。 這些命令應該存在於所有發行版中,並且它們都不需要sudo訪問權限,因此每個用戶都可以使用它們。

相關:如何在 Linux 上控制 sudo 訪問