如何在 Linux 中列出所有組?


Linux 中的組是系統中所有使用者的集合。這些組為系統使用者提供了一種便捷且簡單的方式來共享目錄,而不會出現任何問題。一個 Linux 系統可以擁有許多使用者,這些使用者被分成多個組。管理員必須對這些組的每個成員進行排名,以分配資源驅動的許可權特權。使用者主要屬於兩種型別的組:

主組 / 登入組

輔助組 / 附加組

使用者建立的檔案分配給此組。主組通常與使用者名稱的名稱相同。

授予一組使用者某些許可權。

使用者只能屬於一個主組。

使用者可以是零個或多個輔助組的成員。

然而,許多 Linux 使用者對如何列出可用的組感到困惑。在本簡短教程中,我們將解釋在 Linux 中列出所有組的簡單方法。

如何在 Linux 中列出所有組?

您可以使用以下任何命令在 Linux 中顯示所有組:

  • /etc/group/檔案

  • compgen 命令

  • getent 命令

/etc/group 檔案

/etc/group 檔案控制組成員身份並在 Linux 系統中定義組。這是一個簡單的路徑,包含資訊和屬於每個組的使用者列表。如您所知,/etc/group 是一個純文字檔案,因此您可以使用以下任何命令開啟此檔案並列出所有組:

cat /etc/group
less /etc/group
more /etc/group

此檔案的每一行都提供了一個組的資訊。您可以透過以下 cut 命令從該檔案中提取所有資料:

cut -d: -f1 /etc/group

在上面的命令中,我們使用 cut 命令僅過濾組名。因此,輸出顯示所有組的列表。

getent 命令

使用 getent 命令,您可以顯示在 /etc/nsswitch.conf 檔案中配置的資料庫中的條目,包括組資料庫。您可以使用這些條目查詢所有組的列表。

如果您正在網路系統上工作,則此命令可以從 /etc/group 檔案中讀取本地組,並從網路服務(如 LDAP)中讀取組。因此,您可以使用 getent 命令透過讀取組資料庫來列出所有組。

getent group

此命令的輸出與 /etc/group 檔案的內容相同。當使用 LDAP 進行使用者身份驗證時,getent 會顯示 LDAP 資料庫和 /etc/group 中的所有組。如果您列印組名的第一個欄位,則可以執行以下命令:

getent group | cut -d: -f1
Or 
getent group | awk -F: '{ print $1}'

compgen 命令

compgen 命令是屬於 bash 系列的內建命令。您可以透過以下命令顯示所有活動和已註冊的組:

compgen -g

這裡我們使用了 -g 選項來顯示組。現在,讓我們討論在 Linux 中列出所有組的上述所有命令的不同方法。

列出使用者的組

您可以透過兩種方式找出組的成員,即 groups 命令和 id 命令。

  • 將使用者名稱與“groups”命令一起傳遞,您希望找出該使用者的組。

:~$ groups prateek
prateek : prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare

當您在沒有使用者輸入的情況下執行“groups”命令時,它會列印當前使用者的組。

:~$ groups
prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare 
  • “id”命令詳細說明了指定使用者及其組。例如,我們將使用以下 id 命令列印使用者“prateek”的所有組:

:~$ id prateek
uid=1000(prateek) gid=1000(prateek) groups=1008(prateek),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev) 122(1padmin),134(lxd),135(sambashare)

上面的命令為您提供了與使用者 UID(使用者 ID)、GID(使用者的初級組)和組(使用者的輔助組)相關的資訊。如果您只想列印使用者的組名,則可以使用 -Gn 選項與上述命令一起過濾它。

:~$ id -Gn prateek
prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare

與“groups”命令一樣,如果您沒有使用任何使用者名稱傳遞 id 命令,它會提供當前使用者的詳細資訊。

:~$ id -Gn 
prateek adm cdrom sudo dip plugdev lpadmin lxd sambashare 
:~$ id
uid=1000(prateek) gid=1000(prateek) groups=1008(prateek),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev) 122(1padmin),134(lxd),135(sambashare)

所有 Linux 組的計數

您可以使用以下任何命令找出 Linux 組的總數:

:~$ cat /etc/group | grep -c ""
76
:~$ getent group | grep -c ""
76
:~$ getent group | wc -l
76

按字母順序排序所有 Linux 組名

您可以將 getent 或 /etc/group 檔案命令與 sort 命令一起使用,以按字母順序對組名進行排序:

getent group | cut -d: -f1 | sort
cat /etc/group | cut -d: -f1 | sort

列出組的所有成員

這樣,我們可以使用 getent 命令列出所有組使用者:

getent group <group_name>

例如,這裡我們將找出名為“dip”的組的成員。如果存在此名稱的組,則該命令將列印其名稱作為輸出,反之亦然。如果您收到,則表示沒有輸出,意味著不存在此名稱的組:

getent group dip

:~$ getent group dip
dip:x:30:prateek

同樣,您可以找出其他組的成員。

結論

Linux 中的不同檔案都有其組和使用者。有時使用者必須知道他們屬於哪個組。在 Linux 中,您可以藉助一些命令獲取有關使用者、組名和活動使用者的完整資訊。在這裡,我們解釋了一些在 Linux 中列出所有組的示例。

您可以將所有上述命令用於任何 Linux 發行版,包括 Linux Mint、CentOS、Debian 和 RHEL。如您在上面所見,我們主要使用 /etc/group 檔案和 getent 命令來獲取 Linux 的所有組詳細資訊。我們還使用 cut、count 和 sort 命令來更好地呈現從這些命令獲得的輸出。

更新於:2023 年 5 月 18 日

1K+ 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

立即開始
廣告

© . All rights reserved.