如何在 Linux 中列出用戶
已發表: 2022-06-25
Linux 是一個多用戶操作系統,因此創建大量用戶帳戶很容易。 隨著時間的推移,很容易忘記需要哪些帳戶。 列出用戶帳戶可幫助您管理它們。
用戶帳戶
技術的進步往往會帶來新的問題。 一旦計算機能夠支持多個用戶,將每個人的工作與其他人隔離並封裝起來的需求就變得很明顯。 這導致了用戶帳戶的概念。 每個用戶都有一個命名的 ID 和一個密碼。 這些是讓他們登錄帳戶的憑據。 他們的文件保存在每個用戶私有的區域中。
在繁忙的系統上,很容易忘記您創建了哪些帳戶,哪些不再需要。 從安全的角度來看,保留不再需要在計算機上配置和訪問的用戶帳戶是一種不好的做法。 您應該刪除這些用戶。
即使您沒有其他人使用您的計算機,您也可能創建了一些帳戶只是為了學習如何操作,或者學習和練習管理流程。
第一步是列出在您的計算機上配置的用戶帳戶。 這使您可以查看它們並做出可以刪除的判斷。 列出用戶的方法有多種。 無論您使用哪種發行版,這些技術都應該適用於您,而無需安裝任何應用程序或實用程序。
使用 cat 命令列出用戶
在“/etc/passwd”文件中維護了已配置用戶的列表以及有關每個用戶的信息。 這是普通用戶可以在終端窗口中列出的文本文件。 您不需要使用sudo
來查看“/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
該數字包括應用程序創建的系統帳戶和用戶。 這台計算機上配置了大約 400 個普通用戶。 你的結果可能會少很多。
有那麼多賬號,用less
來查看“/etc/passwd”文件更方便。
少 /etc/passwd
如果您想查找特定的用戶帳戶,使用less
還允許您在輸出中進行搜索。
awk 命令
使用awk
命令我們可以只顯示用戶名。 當您編寫需要對大量用戶帳戶執行某些操作的腳本時,這可能很有用。 列出用戶帳戶名稱並將它們重定向到文本文件可以節省大量時間。 然後,您需要做的就是將命令的其餘部分複制並粘貼到每一行。
我們將告訴 awk 使用冒號“:”作為字段分隔符,並打印第一個字段。 我們將使用 -F(字段分隔符)選項。
awk -F: '{print $1}' /etc/passwd
用戶帳戶名稱將寫入終端窗口,而沒有任何其他帳戶信息。

剪切命令
我們可以使用cut
命令實現相同的目的。 我們需要使用-d
(分隔符)選項並要求它僅選擇第一個字段,使用-f
(字段)選項。
切割器 -d: -f1
這列出了所有用戶帳戶,包括系統和其他非人類帳戶。
compgen 命令
compgen
命令可以與-u
(user) 選項一起使用來列出用戶帳戶。 我們將通過column
命令管道輸出以在列中列出用戶帳戶,而不是一個長列表,每行只有一個用戶名。
補償-u | 柱子
同樣,列出的第一個用戶帳戶屬於進程,而不是人類。
UID 最小值和 UID 最大值
用戶帳戶有一個數字 ID,我們之前看到過。 通常,普通人類用戶帳戶從 1000 開始,系統、非人類用戶帳戶從 0 開始。root 帳戶的 ID 為 0。
如果我們可以驗證可能的最低和最高用戶 ID,我們可以使用該信息來選擇介於這兩個值之間的用戶帳戶。 這將讓我們只選擇屬於真人的用戶帳戶。
Linux 使用稱為UID_MIN
和UID_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”文件中的條目。
獲取密碼
這給了我們使用cat
可以獲得的相同讀數。 但是getent
的亮點在於接受被稱為“密鑰”的值。 一個鍵決定了getent
報告的信息。 如果我們想查看單個用戶的條目,我們可以在命令行中傳入他們的用戶帳戶名。
獲取密碼 Sarah
請注意,用戶帳戶名區分大小寫。
getent 密碼 sarah
我們還可以傳入我們想要查看的用戶帳戶 ID 的上限和下限。 要查看所有常規用戶帳戶,我們可以使用UID_MIN
和UID_MAX
中的值。
獲取密碼 {1000..60000}
這需要一些時間來運行。 最終,您將返回到命令提示符。
執行時間長的原因是getent
會嘗試查找所有用戶帳戶值的匹配項,最高可達 60000。
讓我們看看最高的用戶帳戶 ID 是多少。 我們將使用cut
命令,但這次我們將要求輸入字段 3,即用戶 ID 字段。 我們將通過sort
管道輸出並使用-g
(通用數字排序)選項。
剪切 -d: -f3 /etc/passwd | 排序 -g
人類擁有的用戶帳戶的最高 ID 值為 1401。
用戶 ID 65534 被分配給“nobody”的系統概念。
獲取密碼 {65534..65534}
所以我們知道,在這台計算機上,我們可以使用更真實的值,比如 1500,而不是使用 60000 的UID_MAX
值。這樣可以很好地加快速度。 我們還將通過cut
管道輸出以僅提取用戶帳戶的名稱。
獲取密碼 {1000..1500} | 剪切-d:-f1
列出了用戶,我們立即返回到命令提示符。
不是通過cut
管道輸出,而是通過wc
管道輸出並再次計算行數。 這將為我們提供“真實”用戶帳戶的數量。
獲取密碼 {1000..1500} | wc -l
我們現在可以看到,在這台計算機上,肯定有 400 個已配置的、人擁有的用戶帳戶。
力量和簡單
當您需要在 Linux 計算機上查看用戶帳戶時,其中一種技術肯定會滿足您的需求。 這些命令應該存在於所有發行版中,並且它們都不需要sudo
訪問權限,因此每個用戶都可以使用它們。
相關:如何在 Linux 上控制 sudo 訪問