
不明な場所にある特定の構成ファイルを見つけようとするデーモンを Kubuntu システムにインストールしました。ファイルシステムを構成ファイルへのシンボリック リンクで文字通り埋め尽くしましたが、それでも「ファイルが見つかりません」というエラーが表示されます。
ハードドライブ上の存在しないファイルへのアクセス試行をすべてログに記録し、ファイルの検索を試行した場所を見つけることができるコマンドはありますか?
答え1
プロセスの PID がわかっている場合は、プロセスに対して strace を使用できます。
strace -f -p 123 | tee testoutput.txt
(pid が 123 であると仮定)。"-f" は "follow forks" (簡単に言うと、フォークに従う) を意味し、"-p" は "PID に従う" を意味します。man strace
詳細については、を参照してください。簡単に言うと、strace はプロセスが試行するすべてのアクション (ファイルのオープン、ファイルの読み取り、ファイルへの書き込みなど) を追跡します。分析のために出力をファイルにリダイレクトするのが最善の方法です。私の例では、これを tee にパイプすることで実現しています。これにより、出力が分割され、コンソールに表示されるとともに、指定されたファイルに書き込まれます。
出力では、次のようなものを探します
read(51, 0x7f287a7b36f0, 4096) = -1 EAGAIN (Resource temporarily unavailable)
(はい、それは間違ったエラーですが、今のところ私が見つけることができたのはこれだけです) つまり、a の後にread
括弧で囲んだ何かが続き、その後にスペースがいくつか続き、その後に "=" と負の数 (= エラー) が続きます。見つからないファイルを示す "ENOTFOUND" のようなものが見つかると思います (正確なエラー コードはわかりません)。