哈嘍大家好,我是鹹魚。 接觸過 Linux 的小伙伴們都知道在 Linux (或者說類 Unix)中,有三種類型的用戶: 超級用戶(UID 為 0):即 root 用戶,擁有最高許可權。 系統用戶(UID 為 1~999):系統內建用戶,用於運行系統服務和守護進程。 普通用戶(UID 為 1000~6 ...
哈嘍大家好,我是鹹魚。
接觸過 Linux 的小伙伴們都知道在 Linux (或者說類 Unix)中,有三種類型的用戶:
- 超級用戶(UID 為 0):即 root 用戶,擁有最高許可權。
- 系統用戶(UID 為 1~999):系統內建用戶,用於運行系統服務和守護進程。
- 普通用戶(UID 為 1000~60000):為了讓使用者能夠使用 Linux 系統資源而建立的,用戶新建的賬號一般就是普通賬號。
那麼現在問題來了,如何快速找出 Linux 中的真實用戶(root 用戶和普通用戶)?
正式開始之前,我們先介紹一個工具——getent
getent 命令
getent 其實是 "get entries" 的縮寫,功能是用於查看系統資料庫中(包括 /etc/passwd
、/etc/shadow
、/etc/group
、/etc/hosts
等)的記錄信息,它可以根據指定的資料庫類型和鍵來檢索條目。
1、查看本地的主機文件(/etc/hosts
)中包含的指定功能變數名稱信息。
[root@localhost ~]# getent hosts 127.0.0.1
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
2、查看本地密碼文件(/etc/passwd
)中指定用戶信息。
[root@localhost ~]# getent passwd user1
user1:x:1000:1000::/home/user1:/bin/bash
3、從 /etc/group
資料庫中檢索指定組信息。
[root@localhost ~]# getent group user1
user1:x:1000:
我們回到問題上來:如何快速找出 Linux 中的真實用戶(root 用戶和普通用戶)?
方法一:
getent passwd | awk -F: '$3 >= 1000 && $3 < 65344 || $3 == 0 {print $1}'
getent passwd
用於檢索/etc/passwd
資料庫中的所有用戶信息awk
命令:-F:
:指定欄位分隔符為冒號 (:
)$3 >= 1000 && \$3 < 65344
:表示判斷第三個欄位(用戶 ID)大於或等於 1000 且小於 65344。\$3 == 0
:表示判斷第三個欄位(用戶 ID)等於 0{print $1}
:列印第一個欄位(用戶名)
總結一下:這條命令將檢索 /etc/passwd
資料庫中的所有用戶信息,並列印出用戶 ID 大於或等於 1000 且小於 65344,或者用戶 ID 等於 0 的所有用戶的用戶名。
但是有的小伙伴看到這麼一長串的命令就犯難了,"我文本三劍客掌握的不是很好,這條命令尤其是裡面的判斷看的我頭都暈了,還有沒有更簡單的方法呢?"
方法二:
getent passwd 0 {1000..60000} | awk -F: '{print $1}'
getent passwd 0 {1000..60000}
命令用於檢索系統中用戶 ID 為 0 以及範圍從 1000 到 60000 的所有用戶信息awk -F: '{print $1}
:表示對前面輸出的內容進行處理——列印第一個欄位
這裡補充一下:getent passwd 0 {1000..60000}
命令使用花括弧擴展 ({1000..60000}
) 來生成一個 0 和從 1000 到 60000 的數字序列。
然後,getent passwd
命令使用這些數字作為參數,以檢索系統中用戶 ID 為 0 和從 1000 到 60000 的用戶信息。