Lsof-Befehl im Wiederholungsmodus kein Intervall

881
updude

Wie können Sie den Zeitpunkt 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 Intervalle zwischen zwei aufeinanderfolgenden lsof-Befehlen verwendet werden, um zu prüfen, auf welchen Benutzer eine bestimmte Datei zugegriffen hat?

1

2 Antworten auf die Frage

1
John1024

Um in Echtzeit alle Dateizugriffe unter dem aktuellen Verzeichnis zu überwachen, öffnen Sie ein Terminal und führen Sie Folgendes aus:

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 erfordert ein Betriebssystem wie Linux, das unterstützt wird inotifywait.

Der Körper der whileSchleife kann durch alles ersetzt werden, das zu Ihrem Zweck passt.

Die Bedeutung der Optionen inotifywaitist:

  • -r

    Überwachen Sie rekursiv durch Unterverzeichnisse.

  • -m

    Überwachen Sie kontinuierlich.

  • -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'

    Geben Sie den Pfad und die Datei jeder aufgerufenen Datei als Standard ein.

  • .

    Überwachen Sie das aktuelle Verzeichnis ..

Verjährung

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

1
Zlemini

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 .