我们怎样才能获得linux上的非系统用户列表?

时间:2015-10-15 13:51:01

标签: linux bash shell unix ubuntu

考虑到id >= 1000的所有用户都是非系统用户,我们如何在一个命令中获取这些用户的列表?

6 个答案:

答案 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等远程服务进行身份验证),您可以使用grepsedawk/etc/passwd中提取数据。 awk是最灵活的,但sed的解决方案如何:

sed -n '/^\([^:]\+\):[^:]\+:[1-9][0-9]\{3\}/ { s/:.*//; p }' /etc/passwd

答案 3 :(得分:0)

系统用户(应该是)/etc/passwd中列出的UID小于1000的用户。实际的数字只是一个约定。非系统用户无需在此列出。您可以使用getentawk忽略"nobody"(也是惯例)来获取列表:

getent passwd |awk -F : '$3 >= 1000 && $3 < 65534'

答案 4 :(得分:0)

这是使用Ansible和awkJNevill'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