web-dev-qa-db-ja.com

1つのコマンドでローカルユーザーアカウントのみを一覧表示する

私は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
3
Greer Page

実際にマシンにログインできるユーザーのリストが必要な場合は、ログインシェル(/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
5
terdon