考虑到id >= 1000
的所有用户都是非系统用户,我们如何在一个命令中获取这些用户的列表?
答案 0 :(得分:8)
您需要获取gid
大于或等于1000的所有用户。请使用此命令:
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
如果你想要系统用户(gid <1000),它将是:
awk -F: '($3<1000){print $1}' /etc/passwd
答案 1 :(得分:4)
您可以使用awk
执行此任务:
awk -F: '$3 >= 1000' /etc/passwd
这将按冒号分割/etc/passwd
文件,如果字段3(userid)大于或等于1000,则会打印整个/etc/passwd
记录。
如果您只想从此列表中获取用户名,请:
awk -F: '$3 >= 1000 {print $1}' /etc/passwd
其中$ 1是etc/passwd
的第一个字段,即用户名。
答案 2 :(得分:1)
假设系统仅识别本地用户(即/etc/passwd
中记录的用户,而不是通过LDAP,NIS或Winbind等远程服务进行身份验证),您可以使用grep
, sed
或awk
从/etc/passwd
中提取数据。 awk
是最灵活的,但sed
的解决方案如何:
sed -n '/^\([^:]\+\):[^:]\+:[1-9][0-9]\{3\}/ { s/:.*//; p }' /etc/passwd
答案 3 :(得分:0)
系统用户(应该是)/etc/passwd
中列出的UID小于1000的用户。实际的数字只是一个约定。非系统用户无需在此列出。您可以使用getent和awk忽略"nobody"(也是惯例)来获取列表:
getent passwd |awk -F : '$3 >= 1000 && $3 < 65534'
答案 4 :(得分:0)
这是使用Ansible和awk
在JNevill's答案的基础上,在您的所有计算机上执行此操作的答案:
ansible -i inventories/cd_staging all -m shell -a "awk -F: '\$3 >= 1000 && \$7 \!~ /nologin/ {print \$1}' \/etc\/passwd |sort"
答案 5 :(得分:0)
您将要忽略小于1000的GID,但也要忽略大于60000的GID。Ubuntu/ Debian将它们保留用于各种系统服务。
awk -F: '($3>=1000)&&($3<60000)&&($1!="nobody"){print $1}' /etc/passwd