状態
サーバーに/home/foo
不要になったディレクトリがあります。
残念ながら、このディレクトリがまだ必要かどうかは誰にも教えられません。
ターゲット
このディレクトリがまだ必要な場合は、どのプロセスがそれにアクセスするのかを知りたいです。
現在の戦略
このディレクトリに開いているすべてのファイルを観察します。
Inotifyを使用しない理由
残念ながら、ディレクトリには多くのサブディレクトリが含まれているため、inotifyを使用したくありません。
- 1604508ファイル
- 287253 サブディレクトリ
質問
ディレクトリ(再帰)ツリーの下で開いているすべてのファイルを表示するには?どのプロセスがアクセスしているかを知りたいです。
環境
/home
ext4 ファイルシステムです。- スースLinux 12.3。カーネル: 3.7.10
繰り返さない
私の質問は重複しませんどのプログラムやスクリプトが特定のファイルを生成したかを調べることは可能ですか?から....:
- ディレクトリツリーにサブディレクトリが多すぎるため、inotifyは使用できません。
- Loggingfs は使用できません。このディレクトリのファイルシステムタイプを変更できません。
下品
すでに2つの良い答えがあります。でも気になります。他の方法もあります。賞金50 :-)
答え1
これは利用可能でなければなりませんauditd
(利用可能な場合はLinuxディストリビューションによって異なります)。
このauditctl
コマンドは監査を構成するために使用され、マニュアルページでは要件を実装する方法を説明する必要があります。
それはまるで、
auditctl -w /home/foo -p war -k foo-watch
その後、後で以下を使用して監査ログを取得できます。
ausearch -k foo-watch
SUSEでこれを行う例は次のとおりです。ここで発見。
答え2
SuSEで有効になっているかどうかはわかりませんが、ファン通知APIはファイルシステム全体を監視します。シンプルなユーティリティもありますパトラスこれには、すべてのファイルを開く、読み取り、書き込み、および閉じるが表示されます。はい
$ cd; sudo fatrace -f O -c
tail(1500): CO /home/meuh/dot/privoxy/logs/160426
ls(28599): O /home/meuh
bash(2075): O /home/meuh/dot/bashhistory.xt-right
-f O
-c
現在の作業ディレクトリを保持しているファイルシステム全体だけでなく、開いている部分も追跡します。タイムスタンプをインポートすることもできます。
答え3
いくつかのアプローチを見ることができます。
/home/fooを含むファイルシステムがatime(またはファイルシステムタイプに対応するもの)を使用してマウントされている場合は、atimeを使用して
find /home/foo -atime +10 -ls
11日以内にそのファイルにアクセスしたことを確認できます。または「刺されて」確認することを好む場合今このディレクトリのエントリにアクセスすると、いくつかの手がかりを得ることができます
lsof | grep /home/foo
(test ::cd /home/foo ; lsof | grep /home/foo
は現在、そのパスの下に現在の作業ディレクトリ(cwd)があるので、少なくともシェルのpidを出力する必要があります...)
(注:今はどちらもテストできません。Linuxはありません...しかし、両方とも動作する必要があると思います。)