我正在编写一个关于基本 Unix 命令等的测试,有一个问题用一个命令显示所有注册用户及其组。同时我无法使用getent
命令。
答案1
一个可能的解决方案是例如使用awk
and 读取/etc/shadow
and /etc/group
(我假设您不需要系统用户,我试图排除它们并锁定用户):
awk -F":" 'NR==FNR {
if ($2 !~ /\!/ && $2 !~ /\*/) {
m[$1] = "";
}
next;
}
{
for (i in m) {
if ($4 ~ i || $1 == i) {
m[i] = m[i] $1 " ";
}
}
}
END {
for (i in m) {
print i ":", m[i];
}
}' /etc/shadow /etc/group
您可以删除if ($2 !~ /\!/ && $2 !~ /\*/)
条件以列出所有用户帐户,并注意!
或*
in 的存在/etc/shadow
意味着用户无法使用 unix 密码登录(但用户可以通过其他方式登录系统,例如基于密钥的登录) 。
答案2
cat /etc/passwd (根据您的要求使用 grep 过滤内容)
干得好:awk -F':' '{ print $1}' /etc/passwd | while read -r line; do id "$line"; done