実行時にAが開いたすべてのファイルを一覧表示する特定のコマンドA「内部」を実行できるユーティリティはありますか?
一部のパスワード要件を変更するためにユーティリティ(A)を実行しましたが、問題が発生しました。そのため、変更されたファイルを手動で開いて内容を見る必要があります。コマンドは約1秒で完了しますが、これはlsof
目的と比較して遅すぎます。
答え1
これを達成する1つの方法は、プログラムで実行されたシステムコールを追跡し、フィルタopen
/openat
システムコールまたは名前ルックアップを実行することです。
最初の2つのツールはそれぞれtruss
AT&T Unix System 5とktrace
4.4BSDにあります。 (後者のペアは、機械が読める出力を人間が読める形式にktrace
変換しますkdump
。)数十年後の発明は、DTraceフレームワークでした。
いくつかのコマンドの実行を追跡するには、次の手順を実行しますwibble
。
- Illumosおよび関連オペレーティングシステムでは、このユーティリティは
truss
SunOS から継承されます。例えばtruss -o truss.out -t オープン、オープンスイング
- OpenBSDでは、このユーティリティは
ktrace
4.4BSDから始めて、kdump
。例えばktrace -tnスイング
- たとえば、MacOSでは、このユーティリティはです
dtruss
。dtruss -t スイングオン
- Linuxベースのオペレーティングシステムでは、このユーティリティは
strace
。例えばstrace -o strace.out -e を開く、Wibble を開く
- FreeBSDとその派生オペレーティングシステムには以下が含まれます。
FreeBSD、Illumos、およびその派生物もdtrace
DTraceフレームワークの一部として含まれていますが、ここでは特定の目的と比較して過剰です。 MacOSはdtruss
実際にはDTraceフレームワークに基づいて構築されているため、ここに記載されている他のツールにはない欠点であるスーパーユーザー権限が必要です。