2017-08-31 5 views
0

他のスクリプトを実行して別のものをコンパイルするスクリプトを端末で実行すると、ファイルXXXが存在しないことを示すエラーが表示されます。しかし、私はスクリプトを実行する前に存在していた。したがって、どのスクリプト/プログラム/プロセスがバグを修正するためにファイルを削除したのか調べたいと思います。ファイルの削除の理由を見つける

私はthisを見ましたが、それは私を助けませんでした:私は、ユーザーではなく、削除の起源でプログラムを探しています。さらに、私が使用しているマシンにauditctlとiwatchは存在しません。

私はwhat files are deletedに興味がありませんのでご注意ください。

また、XXXを再作成してスクリプトを再実行することもできます。

XXXの削除の原因を簡単に特定するにはどうすればよいですか?

+2

書き込み禁止にする( 'chmod 440 XXX')ことができます。あなたは 'make'を使っていますか? 'make'は中間生成物を削除します。 – sauerburger

+0

'chmod'はXXXが実際にシンボリックリンクであるため動作しません。したがって、パーミッションは' lrwxrwxrwx'のままであり、ファイルは削除されます。私はXXXがMakefileのターゲットだとは思わない。私もシェルスクリプトを使用しています。 – Codoscope

+0

XXXを通常のファイルに置き換えて 'chmod 440'を使用しましたが、まだ削除されています。しかし、私は最初のスクリプトを実行するときに 'sudo'を使用していません。 – Codoscope

答えて

1

2つの可能性は、シェルスクリプトをデバッグする方法を気にしています:

  1. 使用strace。あなたが探している関数呼び出しはおそらくunlink()です。周囲の呼び出しから削除が呼び出されるコンテキストを差し引くことができるはずです。
  2. コマンドエコーをset -xまたはshebang #!/bin/bash -x(Bashの場合)に、grepをrm、おそらくunlinkに切り替えます。しかし、削除は、どこかで呼ばれるいくつかのバイナリで発生することがあります。その場合、この方法では何も見つかりません。

出力をファイルにリダイレクトすると、検索が容易になります。

関連する問題