Lsof Befehl im Wiederholungsmodus kein Intervall

1

Wie können Sie das Timing von lsof auf unter 1 Sekunde einstellen? Ist bei lsof -r (Wiederholungsmodus) der Mindestwert 1 Sekunde? Gibt es eine Möglichkeit, eine kontinuierliche Überwachung mit lsof durchzuführen, ohne dass zwischen zwei aufeinander folgenden lsof-Befehlen Intervalle liegen, um zu überprüfen, welcher Benutzer auf eine bestimmte Datei zugegriffen hat?

aktualisieren
quelle

Antworten:

1

Öffnen Sie ein Terminal und führen Sie Folgendes aus, um alle Dateizugriffe im aktuellen Verzeichnis in Echtzeit zu überwachen:

inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname; do [ -f "$fname" ] && lsof "$fname"; done

Oder über mehrere Zeilen verteilt:

inotifywait -r -m -e access --format '%w%f' . | while IFS='' read -r fname
do
    [ -f "$fname" ] && lsof "$fname"
done

Dies setzt ein Betriebssystem wie Linux voraus, das dies unterstützt inotifywait.

Der Körper der whileSchleife kann durch alles ersetzt werden, was Ihrem Zweck entspricht.

Die Optionen haben folgende Bedeutung inotifywait:

  • -r

    Rekursiv über Unterverzeichnisse überwachen.

  • -m

    Kontinuierlich überwachen.

  • -e access

    Überwachen Sie ACCESS-Ereignisse. Es gibt viele mögliche Ereignisse, die von Interesse sein könnten, aber dies scheint am ehesten mit dem übereinzustimmen, wonach Sie gefragt haben.

  • --format '%w%f'

    Schreiben Sie den Pfad und die Datei jeder aufgerufenen Datei nach Standard heraus.

  • .

    Überwachen Sie das aktuelle Verzeichnis ..

Verjährung

Der obige Code behandelt keine Dateinamen, die Zeilenumbrüche enthalten. Um das zu handhaben, muss man die -csvOption inotifywait zusammen mit mehr Code verwenden, der die Feinheiten des CSV-Formats versteht.

John1024
quelle
1

Wenn Sie nicht inotifywaitinstalliert haben , (die für dieses Ideal ist), dann kann man näher an Echtzeit erhalten , wenn Sie kombinieren lsofmit watch:

$ watch -n0.1 lsof

Dies wird jede 0.1Sekunde aktualisiert .

Zlemini
quelle