web-dev-qa-db-ja.com

リピートモードのLsofコマンド間隔なし

Lsofのタイミングを1秒未満に設定するにはどうすればよいですか? lsof -r(リピートモード)では、最小値は1秒ですか?どのユーザーが特定のファイルにアクセスしたかを確認するために、2つの連続するlsofコマンドの間隔を空けずにlsofを使用して継続的に監視する方法はありますか?

1
updude

inotifywaitがインストールされていない場合(これはこれに最適です)、lsofwatchを組み合わせると、リアルタイムに近づくことができます。

$ watch -n0.1 lsof

これにより、0.1秒ごとに更新されます。

1
Zlemini

現在のディレクトリの下にあるファイルアクセスを「リアルタイム」で監視するには、ターミナルを開いて次のコマンドを実行します。

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形式の微妙な点を理解するコードとともに使用する必要があります。

1
John1024