Ubuntuに「lid」に似たコマンドがありますか?

Ubuntuに「lid」に似たコマンドがありますか?

lidRHELには、プライマリまたはセカンダリグループのユーザーを一覧表示するコマンドがあります。

[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には存在しません。似たようなものがありますか?

答え1

Ubuntuには存在しますが、別の名前で存在します。

sudo libuser-lid -g g1

パッケージの一部なので、libuser必要に応じてインストールしてください。

sudo apt install libuser

名前がない理由は次のとおりですlidlidid-utilsパッケージにはさまざまな目的があります。

答え2

説明した機能を達成するために標準ユーティリティを使用できます。

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

修正する:注文する:

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

デフォルトグループを持つユーザーに対応する行は/ etc / passwdで検索されますg1。これは前のコマンドで使用できます。

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

最後に、重複した項目の並べ替えと削除を追加します。

便宜上、グループ名をパラメータとして使用して、このコマンドをシェル関数にすることができます。

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

# call as: `lid_replacement g1`

編集する:正確なグループ名と一致するように正規表現が更新されました。

編集2:getent(1) を使用するように更新され、機能が追加されましたlid_replacement

関連情報