straceは、システムコールとシグナルのトレーサーです。 ファイルを操作するには、 「open」システムコールが使用されるため、追跡する必要があるだけです。 コマンド例:
$ strace -xf -eopen -o /path/to/log /path/to/program
ここでは、すべての子プロセスを追跡し、印刷できない文字を16進表現に置き換え、呼び出しログをファイル/パス/ to / logに保存するよう指示します。 次に、受信したログを適切なツールで処理できます。 以下は、ログから必要な情報をすべて抽出する方法の例です。
Nanoテキストエディターの監視
まず、最も単純なnanoテキストエディターがアクセスするファイルを見てみましょう。
$ strace -xf -eopen -o out.log nano temp.txt
$ sed -n 's/.*open(\(.*\))\s*=.*/\1/p' out.log | sort
sedでは、ログを読みやすいように短い形式に変換し、行を並べ替えます。 その結果、次のようなものが表示されるはずです。
"/etc/ld.so.cache", O_RDONLY
"/etc/nanorc", O_RDONLY
"/home/nuald/.nano_history", O_RDONLY
"/home/nuald/.nano_history", O_WRONLY|O_CREAT|O_TRUNC, 0666
"/home/nuald/.nanorc", O_RDONLY
"/lib/libc.so.6", O_RDONLY
"/lib/libdl.so.2", O_RDONLY
"/lib/libncursesw.so.5", O_RDONLY
"/lib/terminfo/x/xterm", O_RDONLY
"temp.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666
"/usr/lib/gconv/gconv-modules.cache", O_RDONLY
"/usr/lib/locale/en_US.utf8/LC_ADDRESS", O_RDONLY
...
"/usr/lib/locale/locale-archive", O_RDONLY
"/usr/share/locale/en/LC_MESSAGES/nano.mo", O_RDONLY
...
"/usr/share/locale/locale.alias", O_RDONLY
プログラムがアクセスするファイルの次のカテゴリを区別できます。
- ナノ構成(nanorc、〜/ .nano_history)
- プログラムが使用する動的ライブラリ(libcなど)
- ローカリゼーションファイル
- そして実際に編集されたファイル
つまり その過程で、プログラムは十分な数のファイルにアクセスする必要があり、読み取りアクセスを制限するとプログラムのパフォーマンスに悪影響が及びます。
Mplayerビデオプレーヤーの監視
次に、mplayerを実行して、書き込みのみを行うファイルを確認してください。 おそらくこれにより、プログラムの安全なプロファイルを作成する機会が得られます。
$ strace -xf -eopen -o out.log mplayer test.mp4
$ sed -n 's/.*open(\(.*\))\s*=.*/\1/p' out.log | grep -v O_RDONLY | sort
"/dev/3dfx", O_RDWR
"/dev/fb0", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/mga_vid", O_RDWR
"/dev/shm/pulse-shm-3056117003", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0400
"/home/nuald/.mplayer/config", O_WRONLY|O_CREAT|O_EXCL, 0666
"/home/nuald/.pulse-cookie", O_RDWR|O_CREAT|O_NOCTTY, 0600
ここでは、 grepコマンドで出力を制限し、O_RDONLYフラグ(読み取り専用)で開かれたファイルを含めませんでした。 ご覧のとおり、ここではすべてがスムーズではありません。mplayerは他のファイルに書き込む必要があり、アクセスを制限すると完全に破損し、ビデオを再生できなくなります。 したがって、アクセスを制限するという上記のアイデアは、実装するのがそれほど簡単ではなく、元の意味で実装することは確かではありません。
おわりに
この短いエッセイでは、 straceの適用分野は1つだけでした。 このプログラムには多くの優れた機能があり、デバッガーを使用しなくても、アプリケーションの動作不能の理由を探して眠れぬ夜を取り除くのに役立ちます。 これは、Linux開発者が知っておくべきツールであり、多くのバグとの戦いであなたに利益をもたらし、開発中のソフトウェアの品質を向上させることを願っています。
PSファイルアクセスの監視に役立つ他のツールのリストを次に示します。
- SystemTapは、統計を収集するためのツールです。 注意-デバッグバージョンのカーネルが必要です(デバッグシンボルと情報を取得します)。 「オープン」操作を監視する例は、 ドキュメントに記載されています 。
- / proc / sys / vm / block_dump-ブロックI / Oをデバッグします
- inotifyは Linuxカーネルのサブシステムで、ファイルシステムの変更の通知を受け取ることができます。 inotifyツールを使用して使用できます 。