Sie beschreiben das GNU- tail
Dienstprogramm. Der Unterschied zwischen diesen beiden Flags besteht darin, dass ich, wenn ich eine Datei öffne, beispielsweise eine Protokolldatei wie die folgende:
$ tail -f /var/log/messages
... und wenn die Protokollrotationsfunktion auf meinem Computer beschließt, diese Protokolldatei zu rotieren, während Nachrichten darauf geschrieben werden ("rotieren" bedeutet Löschen oder Verschieben an einen anderen Ort usw.), wird die angezeigte Ausgabe nur angezeigt halt.
Wenn ich die Datei so öffne tail
:
$ tail -F /var/log/messages
... und wieder wird die Datei gedreht, die Ausgabe würde weiterhin in meiner Konsole fließen, da tail
die Datei erneut geöffnet wird, sobald sie wieder verfügbar ist, dh wenn das oder die Programme, die in das Protokoll schreiben, mit dem Schreiben in das neue beginnen /var/log/messages
.
Auf den freien BSD-Systemen gibt es keine -F
Option, aber tail -f
sie verhalten sich wie tail -F
auf GNU-Systemen, mit dem Unterschied, dass Sie die Nachricht erhalten
tail: file has been replaced, reopening.
in der Ausgabe, wenn die von Ihnen überwachte Datei verschwindet und erneut angezeigt wird.
DAS KÖNNEN SIE TESTEN
Tun Sie dies in einer Shell-Sitzung
$ cat >myfile
Das wird nun darauf warten, dass Sie etwas eingeben. Mach einfach weiter und tippe ein paar Zeilen Kauderwelsch. Es wird alles in der Datei gespeichert myfile
.
In einer anderen Shell-Sitzung (möglicherweise in einem anderen Terminal, ohne das zu unterbrechencat
):
$ tail -f myfile
Dies zeigt den (Ende des) Inhalts myfile
in der Konsole an. Wenn Sie zur ersten Shell-Sitzung zurückkehren und etwas mehr eingeben, wird diese Ausgabe sofort tail
in der zweiten Shell-Sitzung angezeigt .
Beenden cat
Sie nun Ctrl+Dmit und entfernen Sie die myfile
Datei:
$ rm myfile
Führen Sie dann die Katze erneut aus:
$ cat >myfile
... und etwas eintippen, ein paar Zeilen.
Mit GNU tail
, werden diese Linien nicht zeigen in der zweiten Shell - Sitzung auf (wo tail -f
noch läuft).
Wiederholen Sie die Übung mit tail -F
und beobachten Sie den Unterschied.
tail -f foo.log
und Ihr Systemfoo.log
z. B. zufoo.log.0.gz
der Ausgabe wechselt, die Sie sehen, wird dies einfach gestoppt. Wenn Sie-F
andererseits verwenden, würden Sie den Inhalt des neuenfoo.log
ohne Pause dazwischen sehen.Vereinfacht ausgedrückt, wenn Sie eine Datei öffnen, erhalten Sie den Inode, der einige Metadaten darüber enthält, wo genau sich die Datei auf Ihrer Festplatte befindet. Tail wartet dann auf Änderungen an dieser Datei.
Wenn Sie die Datei entfernen und eine neue mit demselben Namen erstellen, ist der Dateiname derselbe, aber es ist ein anderer Inode (und wahrscheinlich an einem anderen Ort auf Ihrer Festplatte gespeichert).
tail -f
Füllen Sie nicht erneut und laden Sie die neue Inode, diestail -F
wird erkannt.Der gleiche Effekt tritt auf, wenn Sie eine Datei umbenennen / verschieben. Wenn Sie zum Beispiel folgen
/var/log/messages
und logrotate dreht sich das Protokoll um/var/log/messages.1
. tail with-f
hört sich immer noch die alte inode an, die darauf verweistmessages.1
. Schwanz mit-F
wird dies erkennen und die neue Inode lesen.quelle