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