Frage Shell-Kommando zum Überwachen von Änderungen in einer Datei - Wie heißt es nochmal?


Ich weiß, dass es unter Unix einen Befehl gab, mit dem ich eine Datei überwachen und Änderungen sehen konnte, die darauf geschrieben wurden. Dies war besonders nützlich zum Überprüfen von Protokolldateien.

Weißt du, wie es heißt?


139
2018-04-30 21:00


Ursprung




Antworten:


Meinst du

tail -f logfile.log

?

(Man-Seite für den Schwanz)


188
2018-04-30 21:01



Ja, es ist Echtzeit. - Adam Gibbins
Hinweis: Wenn Ihre Distribution den Befehl tailf enthält, verwenden Sie diesen vorzugsweise tail -f. tailf ist effizienter, weil es nicht auf die überwachte Datei zugreifen muss, wenn es nicht beschrieben wird (Poll-Zugriffe sind ärgerlich, wenn Sie das Dateisystem mit der Aktualisierung von atime mounten). - Mihai Limbăşan
Beim Super User habe ich eine Antwort gefunden empfehle Schwanz -F anstatt -f , auch - Rafa
tail -F folgt Dateinamen anstelle von Dateiobjekten, was besonders im Falle einer Protokolldateirotation nützlich ist. - Amir Ali Akbari
Update, ein paar Jahre später: tailf ist jetzt veraltet und tail -f ist sicher. (Bestätigen Sie dies auf Ihrem System mit man tailf.) Siehe Dokumentation: man7.org/linux/man-pages/man1/tailf.1.html - exp1orer


Wahrscheinlich meintest du Schwanz, wie Jon Skeets Antwort sagt.

Ein anderer nützlicher ist sehen; Es ermöglicht Ihnen, einen Befehl regelmäßig auszuführen und die Ausgabe im Vollbildmodus anzuzeigen. Zum Beispiel:

watch -n 10-d ls -l / var / adm / Nachrichten

Wird den Befehl ausführen ls -l /var/adm/messages alle 10 Sekunden, und markieren Sie den Unterschied in der Ausgabe zwischen nachfolgenden Läufen. (Nützlich, um zB zu beobachten, wie schnell ein Logfile wächst).


114
2018-04-30 21:07





Ich bevorzuge es zu benutzen less +FG1 Über tail -f weil ich finde, dass ich eine Protokolldatei nach einem spezifischen Fehler oder einer ID suchen muss. Wenn ich nach etwas suchen muss, tippe ich ^C aufhören, der Datei zu folgen und ? um rückwärts zu suchen.

Tastenbelegungen sind ziemlich genau so wie in vi. Jeder Befehl kann beim Start mit dem Befehl initialisiert werden + Möglichkeit:

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

Für wirklich lange Protokolle finde ich es bequem, das zu verwenden -n Option, die die Zeilennummerierung deaktiviert. Von der Manpage:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. Hut-Spitze zu rgmarcha um dies in den Kommentaren zu erwähnen.


33
2018-04-30 23:44



Denken Sie daran, ein zu setzen alias mit Ihren gewünschten Optionen, damit Sie sie nicht jedes Mal neu eingeben müssen. - Michael Hampton♦
Eigentlich sollten Sie Shell-Funktionen in den meisten Fällen den Aliasnamen vorziehen. - tripleee


inotifywait von Inotify-Tools ist nützlich, wenn Sie jedes Mal einen Befehl ausführen möchten, wenn sich eine Datei (oder Dateien in einem Verzeichnis) ändert. Zum Beispiel:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

27
2018-06-02 12:13





Der Schwanz ist großartig ... weniger kann auch verwendet werden, fang weniger an der Datei an, d. H. Weniger myfile, drücke dann F. Dies hat weniger Wirkung als Schwanz.


19
2018-04-30 21:04



weniger + F myfile wird es auch machen - rgmarcha


Ich bearbeite eine LaTeX-Datei und wollte sie auch auf Änderungen in der Mitte überwachen. Ich schlug das folgende kleine Shell-Skript auf, das sich für mich als nützlich erwies. Ich hoffe, es wird auch für jemand anderen nützlich sein.

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

Speichere es als watch.sh und TU chmod u+x watch.sh. Dann führe ich es wie folgt aus:

./watch.sh file.tex pdflatex

Wenn Sie möchten, dass der Befehl nur ausgeführt wird, wenn die tatsächliche Änderung stattfindet, können Sie verwenden `md5sum "$FILE"` anstatt `ls -l "$FILE"`.


12
2017-10-10 09:32



um Verzeichnisse und ihre Inhalte statt einer einzigen Datei anzusehen: NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'` - Andy


du kannst den ... benutzen Schwanz  befehle sein sehr leichtes

tailf logfile.log

7
2017-10-15 13:26





Sie können auch inotifywatch / inotifywait verwenden, die in das Kernels inotify-Subsystem einhängen. Auf diese Weise können Sie auch nach "Öffnen", "Schließen" oder "Zugriff" suchen.

Aber wenn du nur angehängte Zeilen zu stdout bekommen willst, stimme ich dem Schwanz zu.


5
2018-04-30 22:40





Tail ist das standardmäßige, traditionelle, überall verfügbare Unix-Tool. Ein etwas ausgefeilteres Werkzeug ist Multitail welches mehrere Dateien gleichzeitig überwachen kann und Syntax-Highlighting durchführt.


2
2018-04-30 22:58





Wenn ich in der Lage sein möchte, um die Datei herumzusuchen und sie nur zu tailen, verwende ich weniger mit dem Befehl "F".

Beachten Sie bei der Verwendung von Tail, dass zusätzliche Argumente erforderlich sind, wenn die Datei überschrieben oder durch Bearbeiten ersetzt wird (Standardmodus für vim's: w).

tail -f veranlasst tail, den Dateideskriptor zu speichern und ihm zu folgen. Wenn die Datei ersetzt wird, wird der Deskriptor geändert. Der Vorteil der Befolgung des Dateideskriptors besteht darin, dass Sie die Datei weiterhin verwenden, wenn sie umbenannt wird.

tail --follow = macht den Tail zur Verfolgung der benannten Datei, indem er sie regelmäßig wieder öffnet, um zu sehen, ob er ersetzt wurde.

--retry ist eine weitere nützliche Option, wenn Sie eine Protokolldatei beenden möchten, die Datei jedoch noch nicht erstellt wurde.

tail -F ist eine Abkürzung für --follow = --retry.


2
2018-05-27 15:47





Während tail -f somefile.txt Scrollen mit neuen Daten, ich manchmal bevorzugen less +G somefile.txt sowie ein Patch der neuesten Daten in der Datei zu sehen.


0
2017-11-25 20:51



Ich denke, das ist alles abgedeckt diese Antwort vor 7 Jahren. - kasperd