私は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
実際にマシンにログインできるユーザーのリストが必要な場合は、ログインシェル(/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
最後に、2つを組み合わせて、/home
とのホームを持つすべてのユーザーを有効なログインシェルに取得できます。
$ awk -F: '$NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd
terdon
bib
bob
正気のUbuntuシステムでは、すべての非システムユーザー 1000から29999のユーザーIDが必要です 。したがって、より低いUIDでユーザーを作成していないと想定すると、次のようにできます。
awk -F: '$3>999 && $3<30000{print $1}' /etc/passwd
そして、すべてを再度組み合わせることができます(一部のサービスには通常のユーザーIDがありますが、たとえばログインシェル、私のワークサーバーにjiraがありません)。
awk -F: '$3>999 && $3<30000 && $NF!~/\/false$/ && $NF!~/\/nologin$/ && $6~/\/home/{print $1}' /etc/passwd