Users

Ubuntu上是否有類似“lid”的命令?

  • June 4, 2022

在 RHEL 上,有一個 command lid,它列出了組使用者,無論是主要組還是次要組。

[root@192 ~]# id user1
uid=1000(user1) gid=1000(user1) groups=1000(user1),1001(g1)
[root@192 ~]# id user2
uid=1001(user2) gid=1002(user2) groups=1002(user2),1001(g1)
[root@192 ~]# id user3
uid=1002(user3) gid=1001(g1) groups=1001(g1)
[root@192 ~]# lid -g g1
user3(uid=1002)
user1(uid=1000)
user2(uid=1001)
[root@192 ~]#

但它在 Ubuntu 上不存在。有沒有類似的?

它確實存在於 Ubuntu 中,但以不同的名稱提供:

sudo libuser-lid -g g1

它是libuser軟體包的一部分,如有必要,請安裝:

sudo apt install libuser

它沒有命名的原因lid是它lidid-utils包中提供並且具有不同的用途。

可以使用標準實用程序來實現所描述的功能:

for u in $(grep '^g1:' /etc/group | cut -d: -f4 | tr , '\n'); do
   printf "%s(uid=%d)\n" $u $(id -u "$u")
done

**更新:**命令:

grep -E '^([^:]+:){3}'$(grep '^g1:' /etc/group | cut -d: -f3)':' /etc/passwd | cut -d: -f1

將從 /etc/passwd 中檢索與主要組為g1. 這可以與前面的命令結合使用:

for u in $({ grep -E '^([^:]+:){3}'$(grep '^g1:' /etc/group | \
       cut -d: -f3)':' /etc/passwd | cut -d: -f1; \
   grep '^g1:' /etc/group | cut -d: -f4 | tr , '\n'; }); do
   printf "%s(uid=%d)\n" $u $(id -u "$u")
done | sort | uniq

最後增加了對重複項的排序和刪除。

為方便起見,可以將該命令做成一個 shell 函式,使用組名作為參數。

**編輯:**更新正則表達式以匹配確切的組名。

引用自:https://unix.stackexchange.com/questions/704962