Lsofのタイミングを1秒未満に設定するにはどうすればよいですか? lsof -r(リピートモード)では、最小値は1秒ですか?どのユーザーが特定のファイルにアクセスしたかを確認するために、2つの連続するlsofコマンドの間隔を空けずにlsofを使用して継続的に監視する方法はありますか?
inotifywait
がインストールされていない場合(これはこれに最適です)、lsof
とwatch
を組み合わせると、リアルタイムに近づくことができます。
$ watch -n0.1 lsof
これにより、0.1
秒ごとに更新されます。
現在のディレクトリの下にあるファイルアクセスを「リアルタイム」で監視するには、ターミナルを開いて次のコマンドを実行します。
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done
または、複数の行にまたがって:
inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
[ -f "$fname" ] && lsof "$fname"
done
これには、inotifywait
をサポートするLinuxなどのOSが必要です。
while
ループの本体は、目的に合ったものに置き換えることができます。
inotifywait
のオプションの意味は次のとおりです。
-r
サブディレクトリを介して再帰的に監視します。
-m
継続的に監視します。
-e access
ACCESSイベントを監視します。興味があるかもしれない多くの可能なイベントがありますが、これはあなたが求めたものに最も密接に一致しているようです。
--format '%w%f'
アクセスされた各ファイルのパスとファイルを標準出力に書き込みます。
.
現在のディレクトリ.
を監視します。
上記のコードは、改行文字を含むファイル名を処理しません。これを処理するには、inotifywaitの-csv
オプションを、CSV形式の微妙な点を理解するコードとともに使用する必要があります。