どのコマンドラインを使用する必要がありますか?
- 次に、bashを実行しているユーザーのリストをアルファベット順に印刷します。
- 現在bashを実行しているユーザーの数を印刷します。
- 現在bashを実行しているユーザーのリストを保存し、数を印刷します。
答え1
私はあなたがまだUnixに慣れていないか、この質問をしないと仮定しているので、このようなコマンドに到達するためのあなたの思考プロセスを含めます。その後、次のものを直接見つけることができます。
まず、実行中のプロセスのリストを取得する必要があります。実行中のプロセスを一覧表示するには、を使用できますps
。すでに知っているかもしれませんが、始めることをお勧めします。同様のコマンドを見たことがあります。つまり、関連した tty がないコマンドps ax
( ) もすべてリスト ( ) することを意味します。a
x
a
すべてのプロセスを選択し()、実行可能ファイル名を表示するように指示する必要があります(c
)。含めることx
も含まない場合もあります。すべてのインタラクションにはbash
間違いなく関連付けられたttyがありますが、シェルスクリプトはそうではないかもしれないので、含めるかどうかは必要に応じて異なります。出力をより簡単に解析できるように、出力を興味のある値、つまりユーザーとコマンド(o user,command
)に制限することも便利です。
これは以下を提供します:
$ ps aco user,command
root login
root bash
user bash
root bash
user lynx
...
bash
これでフィルタリングして各ユーザーのインスタンスを見つける必要があります。これを行うには、awk
スクリプトを使用してパイプするだけです$2=="bash" { print $1 }
。これは、「2番目の列が「bash」の場合、最初の列を印刷します」を意味します。
$ ps aco user,command | awk '$2=="bash" {print $1}'
root
user
root
sort
最後に、出力を並べ替えて重複項目を削除しようとしていますuniq
。
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq
root
user
欲しいなら数量「bash」を実行するユーザ数は、出力の行数を数えることができます。
$ ps aco user,command | awk '$2=="bash" {print $1}' | sort | uniq | wc -l
2
次に、出力リダイレクトを使用してこれらの出力をファイル(たとえばcommand > file
。