Group
刪除組 ID 為使用者主要組的非唯一組
所以說我有兩個名稱為testing1和testing2的組。兩個組具有相同的組 ID 2000。然後我添加了一個名為testing-user 的使用者,其 GID 為 2000。一路上我想刪除組 testing2,但我不能,因為當我嘗試時我得到以下響應
groupdel: cannot remove the primary group of user 'testing-user'
以下是我嘗試過的成功方法:
- 修改 testing1 的 GID,然後刪除 testing2,然後將 testing1 的 GID 改回 2000
- 將 testing-user 的主 GID 修改為單獨的組,刪除 testing2 然後將 testing-user 分配給 testing1
是否有更好的方法不涉及修改相關使用者或組 ID?
您遇到的錯誤是groupdel編寫方式的限制以及系統是圍繞數字(ID)而不是名稱設計的事實。正如您在groupdel的原始碼中看到的那樣,它僅檢查是否存在具有您要刪除的 GID 的使用者作為其主要組。如果有另一個組具有相同的 ID,但名稱不同,這並不重要。
/* [ Note: I changed the style of the source code for brevity purposes. ] * group_busy - check if this is any user's primary group * * group_busy verifies that this group is not the primary group * for any user. You must remove all users before you remove * the group. */ static void group_busy (gid_t gid) { struct passwd *pwd; /* Nice slow linear search. */ setpwent (); while ( ((pwd = getpwent ()) != NULL) && (pwd->pw_gid != gid) ) ; endpwent (); /* If pwd isn't NULL, it stopped because the gid's matched. */ if (pwd == (struct passwd *) 0) return; /* Can't remove the group. */ fprintf (stderr, _("%s: cannot remove the primary group of user '%s'\n"), Prog, pwd->pw_name); exit (E_GROUP_BUSY); }
因此,您要麼在mtm 的答案中使用 Perl 等其他工具弄亂配置文件,要麼臨時更改該使用者的 GID,這樣就
group_busy
不會再失敗了。