Ich weiß, dass es unter Unix einen Befehl gab, mit dem ich eine Datei überwachen und Änderungen feststellen konnte, die darauf geschrieben werden. Dies war insbesondere zum Überprüfen von Protokolldateien sehr nützlich.
Weißt du, wie es heißt?
Ich weiß, dass es unter Unix einen Befehl gab, mit dem ich eine Datei überwachen und Änderungen feststellen konnte, die darauf geschrieben werden. Dies war insbesondere zum Überprüfen von Protokolldateien sehr nützlich.
Weißt du, wie es heißt?
Antworten:
tail -F
folgt Dateinamen anstelle von Dateiobjekten, was insbesondere bei der Rotation von Protokolldateien hilfreich ist.
tailf
Ist mittlerweile veraltet und tail -f
sicher. (Bestätigen Sie dies auf Ihrem System mit man tailf
.) Siehe Dokumentation: man7.org/linux/man-pages/man1/tailf.1.html
Sie meinten wahrscheinlich Schwanz, wie Jon Skeet antwortete.
Ein weiterer nützlicher Punkt ist die Uhr . Hiermit können Sie einen Befehl in regelmäßigen Abständen ausführen und die Ausgabe im Vollbildmodus anzeigen. Zum Beispiel:
watch -n 10 -d ls -l / var / adm / messages
Führt den Befehl ls -l /var/adm/messages
alle 10 Sekunden aus und hebt den Unterschied in der Ausgabe zwischen den nachfolgenden Durchläufen hervor. (Nützlich, um beispielsweise zu beobachten, wie schnell eine Protokolldatei wächst.)
inotifywait
von inotify-tools ist nützlich, wenn Sie einen Befehl jedes Mal 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
path
die nicht die beste Wahl für einen Variablennamen ist. Bei zsh
Umgebungsvariablen wird anscheinend nicht zwischen Groß- und Kleinschreibung unterschieden. Für mich path
bewirkt das Setzen, dass PATH
es auch gesetzt wird, und das bedeutet im Grunde, dass nichts ausgeführt wird, bis Sie das beheben. Ein bash
, Einstellung path
hat keine Auswirkung auf PATH
.
Ich bevorzuge die Verwendung von less +FG
1 gegenüber der Verwendung von 1,tail -f
da ich eine Protokolldatei nach einem bestimmten Fehler oder einer bestimmten ID durchsuchen muss. Wenn ich nach etwas suchen muss, gebe ich ein ^C
, um die Datei nicht weiter ?
zu verfolgen und rückwärts zu suchen.
Die Tastenbelegungen sind fast die gleichen wie in vi
. Jeder Befehl kann beim Start mit der folgenden +
Option initialisiert werden :
+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.
Bei sehr langen Protokollen ist es praktisch, die -n
Option zu verwenden, mit der die Zeilennummerierung deaktiviert wird. Aus 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 ab vor rgmarcha, um in den Kommentaren darauf hinzuweisen.
alias
mit den gewünschten Optionen festzulegen, damit Sie diese nicht jedes Mal eingeben müssen.
Ich bearbeite eine LaTeX-Datei und wollte sie auch auf Änderungen irgendwo in der Mitte überwachen. Ich habe das folgende kleine Shell-Skript geschrieben, das sich für mich als nützlich erwiesen hat. Ich hoffe, es wird auch jemand anderem 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
Speichern Sie es als watch.sh
und tun Sie es 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 tatsächlich Änderungen vorgenommen werden, können Sie `md5sum "$FILE"`
statt verwenden `ls -l "$FILE"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
Sie können auch inotifywatch / inotifywait verwenden, das sich in das inotify-Subsystem des Kernels einhakt. Auf diese Weise können Sie auch nach Dingen wie "Öffnen", "Schließen" oder "Zugriff" Ausschau halten.
Aber wenn Sie einfach nur Zeilen an stdout anhängen möchten, stimme ich dem Schwanz zu.
Tail ist das übliche, traditionelle und überall verfügbare Unix-Tool. Ein etwas ausgefeilteres Tool ist Multitail, das mehrere Dateien gleichzeitig überwachen und die Syntax hervorheben kann.
Wenn ich in der Lage sein möchte, die Datei zu durchsuchen und sie nur zu verfolgen, verwende ich mit dem Befehl "F" weniger.
Beachten Sie bei der Verwendung von tail, dass zusätzliche Argumente erforderlich sind, wenn die Datei verschoben oder durch Bearbeiten ersetzt werden soll (Standardmodus für vim's: w).
tail -f bewirkt, dass tail den Dateideskriptor speichert und ihm folgt. Wenn die Datei ersetzt wird, wird der Deskriptor geändert. Der Vorteil des Verfolgens des Dateideskriptors besteht darin, dass Sie der Datei auch dann folgen, wenn sie umbenannt wird.
tail --follow = bewirkt, dass tail die benannte Datei nachverfolgt, indem es regelmäßig erneut geöffnet wird, um festzustellen, ob sie ersetzt wurde.
--retry ist eine weitere nützliche Option, wenn Sie eine Protokolldatei mit einem Tail versehen möchten, die Datei jedoch noch nicht erstellt wurde.
tail -F ist eine Abkürzung für --follow = --retry.
Vergiss Schwanz, diff ist der Befehl, den du willst. Hier ist ein guter Trick, um die Unterschiede zu beobachten, die in Echtzeit (oder beim Schließen) zwischen zwei Dateien oder in einer Datei auftreten, in die geschrieben wird.
Mit diesen Methoden können Sie das Verhalten beliebig ändern, z. B. die Änderungen in eine Datei schreiben, um Aufzeichnungen zu führen. Spielen Sie mit dem Überwachungsintervall oder anderen Optionen für die folgenden Befehle.
Sie haben 1 Datei und möchten beobachten, wie Änderungen daran vorgenommen werden:
Also hier ist was zu tun:
cp file file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
#!/bin/bash
diff file file2
cp file file2
watch ./check-differences
Dies wird standardmäßig alle 2 Sekunden aktualisiert. Wenn Sie also zurückgehen und sie lesen müssen, schreiben Sie die Ausgabe von diff in eine Datei im Skript.
oder verwenden Sie cron, um Ihr Skript regelmäßig auszuführen, wenn Sie keine Ausgabe sehen müssen.
Während tail -f somefile.txt
ich mit neuen Daten scrolle, bevorzuge ich manchmalless +G somefile.txt
auch, einen Patch mit den neuesten Daten in der Datei anzusehen.