次の手順を実行するには、どのコマンドラインを使用する必要がありますか? [閉鎖]

次の手順を実行するには、どのコマンドラインを使用する必要がありますか? [閉鎖]

どのコマンドラインを使用する必要がありますか?

  1. 次に、bashを実行しているユーザーのリストをアルファベット順に印刷します。
  2. 現在bashを実行しているユーザーの数を印刷します。
  3. 現在bashを実行しているユーザーのリストを保存し、数を印刷します。

答え1

私はあなたがまだUnixに慣れていないか、この質問をしないと仮定しているので、このようなコマンドに到達するためのあなたの思考プロセスを含めます。その後、次のものを直接見つけることができます。

まず、実行中のプロセスのリストを取得する必要があります。実行中のプロセスを一覧表示するには、を使用できますps。すでに知っているかもしれませんが、始めることをお勧めします。同様のコマンドを見たことがあります。つまり、関連した tty がないコマンドps ax( ) もすべてリスト ( ) することを意味します。ax

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

関連情報