id 指令:確認 UID 與群組、whoami、groups 與附加群組

測試環境RHEL 系列AlmaLinux 9.8coreutils 8.32root 帳號Debian 12 · coreutils 9.1 一般帳號
使用者 · 群組指令id, whoami, groups位置/usr/bin/id

在 Linux 伺服器上要確認目前帳號的 UID 與群組時使用 id 指令,只需要帳號名稱時使用 whoami,只需要群組名稱時使用 groups。在 AlmaLinux 9 與 Debian 12 伺服器上依序執行三個指令並比較輸出後,id -un 與 whoami 輸出相同的帳號名稱,groups 則把 id 的群組清單只留下名稱輸出。

以下輸出是在 AlmaLinux 9.8 伺服器以 root 帳號、在 Debian 12 伺服器以一般帳號執行的結果。登入帳號的名稱與編號、附加群組已換成範例值(user1、1000、adm、systemd-journal)。

1️⃣ id 指令的基本用法

  • ↪️ 讀懂 uid、gid、groups 三個欄位

不加選項執行 id,會以一行顯示執行目前 Shell 的帳號資訊。以 root 帳號執行時,三個欄位都是 0(root)。

id
uid=0(root) gid=0(root) groups=0(root)

uid 欄位是帳號的編號與名稱,gid 欄位是主要群組(primary group)的編號與名稱。groups 欄位是該帳號所屬的全部群組,主要群組排在最前面。

在 id 後面寫上帳號名稱,就會輸出該帳號的資訊。確認有附加群組的一般帳號 user1 後,groups 欄位在主要群組 user1 之後接著 adm 與 systemd-journal。主要群組以外另外所屬的這些群組就是附加群組(supplementary group)。

id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)

許多帳號的 UID 與 gid 編號相同,容易把兩個數字當成同一個值,但伺服器預設就有的 adm 帳號 UID 是 3,主要群組編號是 4。operator 帳號的主要群組是 root。

id adm
uid=3(adm) gid=4(adm) groups=4(adm)
id operator
uid=11(operator) gid=0(root) groups=0(root)

寫上多個帳號時,會一行輸出一個。

id root bin
uid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)

寫上不存在的帳號時,會出現 [no such user] 錯誤,結束代碼是 1。

id no-such-user9
id: 'no-such-user9': no such user
echo $?
1

寫上存在的帳號時結束代碼是 0,因此可以在指令稿中當作確認帳號是否存在的條件。

2️⃣ id 指令的選項

  • ↪️ -u、-g、-G 編號與 -n 名稱

要從完整輸出中只把一個編號交給指令稿時,用選項只選一個欄位。-u 輸出 UID,-g 輸出主要群組編號,-G 輸出所屬群組的全部編號。

id -u
0
id -u daemon
2
id -G user1
1000 4 190

搭配 -n 時,會顯示名稱而不是編號。用 [id -Gn] 確認 user1 的群組後,三個編號變成了三個名稱。

id -Gn user1
user1 adm systemd-journal
id -gn user1
user1

-n 與 -r 要和 -u、-g、-G 其中之一搭配使用。單獨寫 -n 時出現了下面的錯誤。

id -n
id: cannot print only names or real IDs in default format

-r 會輸出實際(real)ID 而不是有效(effective)ID。在 root 帳號的 Shell 執行 [id -ur] 後輸出 0。像 -u 與 -g 這樣選擇編號的選項同時寫兩個以上時,會出現 [cannot print "only" of more than one choice] 錯誤。選項整理如下。

選項複製說明
-u--user輸出 UID 編號
-g--group輸出主要群組編號
-G--groups輸出所屬群組的全部編號
-n--name與 -u、-g、-G 搭配,輸出名稱而不是編號
-r--real與 -u、-g、-G 搭配,輸出實際(real)ID 而不是有效 ID
選項複製說明
-Z--context只輸出處理程序的安全性內容
-z--zero輸出項目以 NUL 字元而不是空白分隔,預設格式中無法使用
-a為了與其他版本的 id 相容而只接受、不處理
--help輸出說明
--version輸出版本

🔲 id 指令模擬器

下方模擬器以有附加群組的 user1 帳號開始。用 [🖊 Other window] 按鈕加入 wheel 群組後,可以比較 [id] 與 [id user1],並用 [🔁 Log in again] 按鈕確認新 Shell 的群組。

id 指令模擬器coreutils 8.32
[root@server work]#
只在瀏覽器內運作。用 [🖊 Other window] 按鈕變更群組後,比較 [id] 與 [id user1],再用 [🔁 Log in again] 按鈕確認新 Shell 的群組。

3️⃣ whoami 指令與 id -un

  • ↪️ 確認目前的帳號名稱與確認其他帳號

只需要目前 Shell 的帳號名稱時,執行 whoami。man 頁面說明 whoami 是與 [id -un] 相同的指令。以 root 帳號執行這兩個指令後,兩者都輸出 root。

whoami
root
id -un
root

在 Debian 12 伺服器的一般帳號下,兩個指令也輸出相同的帳號名稱。

whoami
user1
id -un
user1

whoami 輸出目前有效(effective)UID 對應的帳號名稱。它是只確認目前帳號的指令,因此後面加上帳號名稱會出現錯誤。

whoami user1
whoami: extra operand 'user1'
Try 'whoami --help' for more information.

其他帳號的名稱或編號,是在 id 後面寫上該帳號來確認。

id -un user1
user1

把 -un 換成 -u,同一個位置就會顯示 UID 編號而不是帳號名稱。

4️⃣ groups 指令與附加群組

  • ↪️ 主要群組與附加群組,以及變更群組後的 Shell

groups 只以一行輸出群組名稱。不寫帳號名稱時會顯示目前 Shell 的群組,在 root 帳號下只有 root 一個。

groups
root

寫上帳號名稱時,會顯示帳號名稱與冒號後面的群組。寫上多個帳號時,一行輸出一個。

groups user1 daemon
user1 : user1 adm systemd-journal
daemon : daemon

主要群組與附加群組記錄的位置不同。附加群組在群組資料庫(/etc/group)的第四個欄位寫成成員,主要群組則在帳號資訊(/etc/passwd)的第四個欄位寫成編號。

getent group adm
adm:x:4:user1
getent group user1
user1:x:1000:
getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

user1 的主要群組 user1 群組,第四個欄位是空的,附加群組 adm 則把 user1 寫成成員。daemon 帳號那一行第四個欄位的 2 就是主要群組編號。

要把帳號加入附加群組時,使用 usermod 指令的 [usermod -aG 群組 帳號]。不加 -a 只用 -G 的話,會從沒寫在清單裡的既有附加群組中移除,因此要一併寫上 -a。

不寫帳號名稱執行的 groups,會輸出目前 Shell 處理程序的群組。man 頁面說明,群組資料庫變更後,這個值可能與資料庫不同。

因此剛變更群組後,要用 [groups 帳號] 或 [id 帳號] 確認資料庫中的群組,要套用到 Shell 則重新登入。保持登入狀態下變更目前群組 ID 的指令有 newgrp。

🔢 FAQ & 推薦內容

可以。在 AlmaLinux 9.8 伺服器執行 [id 0] 後,輸出了與 [id root] 相同的 uid=0(root) gid=0(root) groups=0(root)。

從 /etc/login.defs 的 UID_MIN 所寫的編號開始。AlmaLinux 9.8 伺服器是 1000,同一個檔案的 SYS_UID_MIN 與 SYS_UID_MAX 是 201 與 999,屬於系統帳號範圍。

who am i 是在 who 後面加上兩個字詞的寫法,動作與 -m 選項相同,會輸出一行目前輸入所在終端機的登入資訊。whoami 只輸出一行目前有效 UID 的帳號名稱。

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 5   +   9   =