作成したすべての人間のユーザーを一覧表示するにはどうすればよいですか? cat /etc/passwd
を試してみましたが、それは多くのものをリストしています。
人間のユーザーは1000から始まるUIDを持っているので、その事実を使用して非人間を除外できます。
cut -d: -f1,3 /etc/passwd | egrep ':[0-9]{4}$' | cut -d: -f1
これは、最初の(ユーザー名)および3番目(UID)のコロンで区切られたフィールドを/etc/passwd
から切り取り、次にコロンと4桁で終わる結果の行をフィルタリングし、その後、最初の(ユーザー名)フィールドを切り取ります。 UIDが1000から9999のユーザーのリストがあります。
システムに9000人以上のユーザーがいる場合、これは失敗しますが、nobody
(UID 65534)をキャッチしないために、結果を4桁のUIDに制限する必要があります。
これは 受け入れられた答え が行うこととほぼ同じことを行い、3つではなく1つのコマンドで実行されます。
awk -F: '$3 >= 1000 && $1 != "nobody" {print $1}' /etc/passwd
コメントのKarelのおかげで、nobody
ユーザーも除外されています。
私は個人的にちょうど使用したい:
ls /home
確かに、これはユーザーのリストではなく、ホームディレクトリのリストです。現在システムに存在する人間のユーザーは、/home
にホームディレクトリがありますが、削除された過去のユーザーのホームディレクトリも表示される場合があります。
これは私の目的のために機能し、あなたのものにも機能する可能性があります。たとえば、存在しないことが判明したユーザーアカウント(nonexistent-user
)を削除してコマンドを実行する場合
Sudo deluser nonexistent-user
このユーザーが存在しないことがわかります。
TL; DR:SystemAccount = falseを持つのは人間のユーザーのみです
もう1つの方法は、ルートls /var/lib/AccountsService/users/ | grep -v root
を無視しながらの出力をリストすることです。奇妙なことに、gdm、グリーター/ログイン画面(または正式にはデスクトップマネージャー)もユーザーとしてリストされます。リストからだけでは、gdmが人間であるかどうかはわかりません。
より効率的で正しいアプローチは、そのフォルダー内のファイルを調べて、どのユーザーがSystemAccount=false
を持っているとしてリストされているかを調べることです。ワンライナーベローズはそれを達成します
grep SystemAccount=false /var/lib/AccountsService/users/* | awk -F '/' '{gsub(":","/");print $6}'
Buntuシステムでは、通常のユーザー(人間のユーザー)には、アカウントが最初に作成されたときに順番に割り当てられる1000で始まるUIDがあります。要するに、buntuシステムで作成された最初のアカウントのUIDは1000です。次に作成されたアカウントのUIDは1001です。以下同様です。
したがって、システム上に存在するすべての人間のユーザーアカウントをリストする最も簡単な方法は、私の意見では、ユーザーのUIDを含む/etc/passwd
ファイルの3番目の列が1000以上であるかどうかを確認することです、たとえば、2000(一般的なデスクトップPCが1,000を超えるユーザーアカウントを持つことはほとんどありません、そうは思いませんか?):
$ awk -F$':' '{ if ($3 >= 1000 && $3 < 2000) print $1; }' /etc/passwd
パーティに参加して、LDAPを使用するネットワークシステムを監督します。/home
の外部にホームディレクトリがあり、数百万のUID(スクリプトの不具合)があります。したがって、現在の答えはどれも機能しません。私のために働くテストは、ユーザーが有効なログインシェルを持っているかどうかをチェックしています。有効なシェルは /etc/shells
にリストされているものです。最も単純な形式:
getent passwd | grep -wFf /etc/shells
ファイルにはコメント(または空の行)が含まれている可能性があるため、コメントを除外する必要がある場合があります。
getent passwd | grep -wFf <(grep '^/' /etc/shells)