straceは、プログラムがファイルシステムに書き込む場所を見つけるのに適したツールですか?

straceは、プログラムがファイルシステムに書き込む場所を見つけるのに適したツールですか?

特定のアプリケーションの場所を確認したいです(例:サーフィンする) は、トレースが残らないようにファイルシステムに書き込まれます。専用のサンドボックスシステムがなければ簡単ではないかもしれませんが、strace

たとえば、次は簡単なスクリプトですrun

#!/bin/bash

mkdir history
echo foo bar > history/hist.db
echo hello > test

私はstrace次のように実行します:

strace ./run 2>&1 | sed -n '/^open.*WRONLY/p' | sed 's/.*"\(.*\)"[^"]*$/\1/'

作成されたすべてのファイル(ディレクトリを除く)を確認します。 (生成されたファイルのように作成されたが作成されていないファイルはキャプチャできないようですtouch)。

history/hist.db
test

マイナーなアプリケーション以外はstrace扱いにくいので、これを行うより良い方法はありますか?それとも、より強力にするというオプション(またはより良い正規表現?)がありますか?ファイルシステムに書き込まれたファイルが失われる危険はありますか?

答え1

lsofディスクにファイルを書き込むときにプロセスを「監視」するためにも使用できます。これはポーリングソリューションに近いため、ファイルが小さくディスクにすばやく書き込まれる場合は一部のファイルを見逃すことがありますが、ディスクにファイルを書き込むアプリケーションがサーバー/サービスの場合はこれを使用して表示できますlsof。このタイプのファイルはかなり簡単です。扱う。

$ lsof -p PID

はい

$ lsof -p `pidof gnome-terminal` | head -5
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
gnome-ter 7423 saml  cwd    DIR              253,2    32768  10354689 /home/saml
gnome-ter 7423 saml  rtd    DIR              253,0     4096         2 /
gnome-ter 7423 saml  txt    REG              253,0   338632   1220790 /usr/bin/gnome-terminal
gnome-ter 7423 saml  mem    REG              253,0   614032   1192949 /usr/lib64/libfreetype.so.6.6.0

関連情報