web-dev-qa-db-ja.com

Linuxでファイルシステムの読み取り/書き込みをファイル名でログに記録するにはどうすればよいですか?

ファイルシステムの操作をログに記録する簡単な方法を探しています。アクセスまたは変更されているファイルの名前が表示されます。

私はpowertopに精通していますが、これはある程度機能しているようで、書き込まれたユーザーファイルが表示されるほどです。この機能をサポートする他のユーティリティはありますか?.

私の発見のいくつか:

powertop:書き込みアクセスロギングに最適ですが、CPUアクティビティに重点を置いています
iotop:プロセス別のリアルタイムディスクアクセスを表示しますが、ファイル名は表示しません
lsof:プロセスごとの開いているファイルを表示しますが、リアルタイムのファイルアクセスは表示しません
iostat:ディスク/アレイのリアルタイムのI/Oパフォーマンスを表示しますが、ファイルやプロセスは示しません

17
cmcginty

これまでのところ、iotopは全体的な最善のソリューションです。次のコマンドは、ディスクを使用するすべてのプロセスのリアルタイム出力を提供します。

iotop -bktoqqq -d .5

where: -b     is batch mode
       -k     is kilobytes/s
       -t     adds timestamp
       -o     only show processes or threads actually doing I/O
       -qqq   removes output headers
       -d .5  updates every .5 seconds

偶然にも、プロセスがディスクにアクセスすることがわかります。調査する簡単な方法は、プロセスを停止し、straceで開始することです。例えば:

Sudo strace -f nmbd -D

これにより、ファイルシステムアクセスのsyscallが表示されます。

別のオプションは inotify(7) で、多くのディストリビューションが「inotify-tools」を提供しているため、

inotifywait -r -mpath_you_want_to_watch

17
cmcginty

別のオプションは http://linux.die.net/man/7/inotify で、多くのディストリビューションが「inotify-tools」を提供しているため、パスを監視できます。

inotifywait -r -m /<path you want to watch>
9
x29a

私は最近遭遇しました fatrace これはfanotifyを使用しています。私は共有するだろうと思ったので美しい作品。これは、標準出力へのオープン/作成/変更、またはオプションでファイルを含むすべてのタイプのファイル操作をログに記録し、一部のタイプの操作のみを取得するようにフィルタリングすることもできます。デフォルトでは、仮想マウントを除くすべてのマウントを監視します。 著者自身がここでそれをうまく説明しています。

3
turbofan

loggingの場合(監視ではなく)、カーネル2.6で導入された Linux監査デーモン の使用を検討する必要があります。

2
RedGrittyBrick