使用单个命令仅列出本地用户帐户

使用单个命令仅列出本地用户帐户

我正在使用 Ubuntu 18.04,我需要列出计算机上的所有用户帐户,但不是所有帐户,只列出本地用户。命令cut -d: -f1 /etc/passwd给出:

root
daemon
bin
sys
sync
games
...
pulse
avahi
colord
hplip
geoclue
gnome-initial-setup
gdm
esnow
stuartsnow
samsnow

是否有人知道只输出本地用户的命令,例如:

root
esnow
stuartsnow
samsnow

答案1

如果您需要可以实际登录到机器的用户列表,请查找登录 shell( 中的最后一个字段/etc/passwd)未设置为/bin/false或 的用户/sbin/nologin

$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
terdon:x:1000:1000::/home/terdon:/bin/bash
git:x:996:996:git daemon user:/:/bin/bash
bib:x:1001:1001::/home/bib:/bin/bash
bob:x:1002:1002::/home/bob:/bin/bash

并仅获取用户名:

$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/{print $1}' /etc/passwd
root
sync
terdon
git
bib
bob

如果您只想要“普通”用户,即使用标准方法创建的用户,并且他们在 下有一个主目录/home,请使用:

$ awk -F: '$6~/\/home/' /etc/passwd
syslog:x:101:104::/home/syslog:/bin/false
terdon:x:1000:1000::/home/terdon:/bin/bash
bib:x:1001:1001::/home/bib:/bin/bash
bob:x:1002:1002::/home/bob:/bin/bash

并且仅适用于用户名:

$ awk -F: '$6~/\/home/{print $1}' /etc/passwd
syslog
terdon
bib
bob

最后,你可以将两者结合起来,让所有拥有住房的用户/home 有效的登录 shell:

$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd
terdon
bib
bob

在正常的 Ubuntu 系统上,所有非系统用户用户 ID 应介于 1000 和 29999 之间。因此,假设您尚未创建任何具有较低 UID 的用户,您可以执行以下操作:

awk -F: '$3>999 && $3<30000{print $1}' /etc/passwd

而且你可以将所有内容再次组合起来(某些服务有常规用户 ID,但没有登录 shell,例如我工作服务器上的 jira):

awk -F: '$3>999 && $3<30000 && $NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd

相关内容