Ubuntu 上有类似“lid”的命令吗?

Ubuntu 上有类似“lid”的命令吗?

在RHEL上,有一个命令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 上不存在。有类似的吗?

答案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

最后添加排序和删除重复项。

为了方便起见,可以将该命令做成shell函数,使用组名作为参数:

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

相关内容