すべてのユーザーを獲得し、動作するかどうかを確認するには?

すべてのユーザーを獲得し、動作するかどうかを確認するには?

grepユーザーリスト(コマンドラインで提供)とユーザーがログイン/操作中またはログインしていない場合は、その出力をどのように取得できますか?

答え1

 perl -le 'print while $_=getpwent' | sort

ユーザー名のリストが提供されます。

 ps -eo user= | sort -u

そのuidが1つ以上の実行中のプロセスの有効なユーザーIDであるユーザー名のリストが提供されます。

 who | awk '{print $1}' | sort -u

現在のユーザーが一覧表示されます。ログイン

 printf '%s\n' "$@" | sort -u

スクリプトに引数として渡されたユーザーが一覧表示されます。

この4つのリストがあるので、このcommコマンドを使用して、それらのリストのどちらが特定の2つのリストに共通であるか、1つのリストに表示され、他のリストには表示されないかを選択できます。

プロセスの置き換えをサポートするシェルを使用すると、一時ファイルの生成を回避できます。

たとえば、

#! /bin/bash -
comm -12 <(printf '%s\n' "$@" | sort -u) \
         <(ps -eo user= | sort -u)

と呼ばれる:

./my-script root mythul stephane

3人のユーザーのうち誰がプロセスを実行しているかを報告します(システムのユーザー名とuidの間に1対1の関係があるとします)。

関連情報