/etc/passwd 内のユーザーが別のファイルに存在するかどうかを確認するコマンド

/etc/passwd 内のユーザーが別のファイルに存在するかどうかを確認するコマンド

/etc/passwd ファイルを照会して、200 未満のすべてのユーザー UID を表示し、それらのユーザーが /etc/ftpusers などのファイル内に存在するかどうかを確認することは可能ですか?

これまでのところ、UID が 200 未満のすべてのユーザーをリストする以下のコマンドを作成することはできましたが、リストされたユーザーが /etc/ftpusers ファイル内にあるかどうかを確認する方法がわかりません。

grep -Ev "^\+" /etc/passwd | awk -F: '($3 < 200) {print $1}'

ファイルにユーザーがいない場合は、その違いを出力する必要があります。for ステートメントを使用しようとしましたが、うまく機能しませんでした。

答え1

aix diffと同じオプションがあるかどうかはわかりませんGNU diffが、私の場合、( のデフォルト シェル)linuxで実行すると次のように動作します。kshaix

diff -I "^#" --new-line-format="" --unchanged-line-format="" <(awk -F: '$3 < 200  {print $1}' /etc/passwd) /etc/ftpusers

コマンドが異なる場合は、diffループを試してください。

for u in $(awk -F":" '$3 < 200 {print $1}' /etc/passwd); do
        count=$(grep -scx "$u" /etc/ftpusers)
        [ "$count" -gt 0 ] || echo "$u"
done

私はそれをテストしましたがksh、動作しました。

また、配布された whitgrepで利用可能なオプションも確認しましたが、カウントとエラー メッセージの抑制の両方がサポートされています。grepaix-c-s

関連情報