新しいプロセスPIDを出力するLinuxコマンド

新しいプロセスPIDを出力するLinuxコマンド

新しいプロセスを監視する Linux コマンドはありますか?

ここでの私の目標は、新しいコマンドが呼び出されるタイミングを確認しgulp、 のようなものでコマンド ラインを実行しps、 でフィルタリングすることですsed

重要なのは、新しいプロセスを監視することです。プロセスが終了すると PID を検索できなくなるためです。

答え1

サブシステムを使用してauditd、システムで実行されるコマンドをログに記録できます。サブシステムはカーネルに組み込まれているため、実行されるすべてのコマンドをログに記録できます。

私の例は Fedora Linux 上でのものですが、ディストリビューションによっては若干の違いがあるかもしれません。(auditdサブシステムは非常に複雑なので、これを正しく実行するのは難しいかもしれません。)

まず、次のコマンドを実行して、auditd がすでにインストールされ、実行されていることを確認します。

$ systemctl status auditd.service

次に、どのルールがロードされているかを確認します。Fedora では、デフォルトで次のようになります。

$ sudo auditctl -l
-a never,task

したがって、この「タスク」リスト (システムコールを抑制する) を削除し、「execve」(コマンドを実行するシステムコール) をログに記録するリストを追加する必要があります。

$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve

これが完了すると、すべてのコマンドが監査システムに記録されます。

その後、 コマンドを使用して検索できますausearch。たとえば、「gulp」を呼び出すすべての実行を検索するには、次のコマンドを使用します。

$ sudo ausearch -c gulp

出力は非常に冗長になります... type=EXECVE の行に注目してください。引数は次のようにリストされます。a0="gulp" a1="first_argument" a2="second_argument" ...

引用符で囲まれた文字列ではなく長い数字のシーケンスが返された場合は、-iを使用して解釈します。

システムで実行されるすべてのコマンドをログに記録すると、コストがかかり、ディスク領域を大量に消費する可能性があります。パフォーマンスにも影響する可能性があります。これらの変更を元に戻す場合は、次のコマンドでデフォルトのルール セットを再読み込みできます。

$ sudo augenrules --load

また、ログ ルールにフィルターを適用して、たとえば /usr/bin/gulp の実行のみをログに記録することもできます。

$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve

これはやりすぎかもしれませんが... 信頼性は最高です。auditdサブシステムをうまく利用して、探している情報が得られることを願っています。

関連情報