grep コマンドの使用に関する 2 つの簡単な質問があります。
私がしたいことは:
- リストの作成に使用したコマンドに加えて、実行中の行(プロセス)の総数を表示します。
- 次に、私が実行している行の全リストを変更し、userIDとPIDのみを新しいリストとして確認したいと思います。
最初のものはps -ef | grep myusername | grep -v "somecommand" | wc -l
()のようなもので十分です。リストを生成するために使用されるコマンドを編集するプロセスで何を入力するのかわかりません。
2番目の質問はどのように処理するのかわかりません。
答え1
ユーザーのすべてのプロセスを一覧表示するには(リストの作成に使用したコマンドに加えて)、次のものを使用できます。
ps -U username -u username u | grep -v ps
開始されたすべてのプロセスをusername
実際のユーザーIDと有効なユーザーIDとしてリストし、リストをps
生成するために使用されたコマンドをリストしないようにプロセスをフィルターします。
別のもの(ユーザーとPID):
ps -U username -u username u | grep -v ps | awk {'print $1, $2'}
awk
結果の1列と2列のみを表示するために使用されます。
答え2
最初の質問では、ps
次のオプションを使用して、ユーザー名で実行されているすべてのプロセスを一覧表示できます。
$ ps -o pid,uid -u 1000|wc -l
1000
この値をユーザーのUIDに置き換えることができます。表示するためだけにpid
追加しましたuid
。必要なものは何でも追加できます。
2番目のケースも最初のケースと同じ
$ ps -o pid,uid -u 1000 > process.list
答え3
最初の質問では、一致の数を提供するgrepの-cコマンドを使用できます。
ps -ef | grep -v "grep" | grep -c "username"
これはすべてのプロセスを一覧表示し、grep自体を削除し(リストを取得するために使用したプロセスはカウントしません)、ユーザー名から合計数を取得します。