Was ist der Unterschied zwischen „tail -f“ und „tail -F“?

Was ist der Unterschied zwischen „tail -f“ und „tail -F“?

Ich habe nie tail -Fden Befehl verwendet, sondern immer. tail -fJemand hat mir jedoch -Fohne große Erklärung gesagt, dass das besser sei.

Ich habe auf der Manpage nach dem Tail-Befehl gesucht.

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

Es ist leicht zu verstehen, was „lower“ -fbewirkt, aber ich verstehe nicht, was „upper case“ -Fbewirkt. Ich wäre dankbar, wenn mir jemand die Unterschiede erklären könnte.

Antwort1

Du beschreibst das GNU- tailDienstprogramm. Der Unterschied zwischen diesen beiden Flags besteht darin, dass wenn ich eine Datei, beispielsweise eine Protokolldatei, öffne, sie so aussieht:

$ tail -f /var/log/messages

... und wenn die Protokollrotationsfunktion auf meinem Computer beschließt, diese Protokolldatei zu rotieren, während ich beobachte, wie Nachrichten in die Datei geschrieben werden („rotieren“ bedeutet löschen oder an einen anderen Ort verschieben usw.), wird die Ausgabe, die ich sehe, einfach gestoppt.

Wenn ich die Datei tailso öffne:

$ tail -F /var/log/messages

... und wieder wird die Datei rotiert, die Ausgabe würde weiterhin in meiner Konsole fließen, weil taildie Datei wieder geöffnet würde, sobald sie wieder verfügbar wäre, d.h. wenn das Programm, das in das Protokoll schreibt, mit dem Schreiben in dasneu /var/log/messages.

Auf den freien BSD-Systemen gibt es keine -FOption, aber tail -fsie verhalten sich wie tail -Fauf GNU-Systemen, mit dem Unterschied, dass Sie die Meldung erhalten

tail: file has been replaced, reopening.

in der Ausgabe, wenn die von Ihnen überwachte Datei verschwindet und wieder erscheint.


DAS KÖNNEN SIE TESTEN

Führen Sie in einer Shell-Sitzung Folgendes aus:

$ cat >myfile

Jetzt wartet es darauf, dass Sie etwas eingeben. Geben Sie einfach ein paar Zeilen Kauderwelsch ein. Es wird alles in der Datei gespeichert myfile.

Inein andererShell-Sitzung (vielleicht in einem anderen Terminal,ohne Unterbrechung dercat):

$ tail -f myfile

Dadurch wird der (Ende des) Inhalts von myfilein der Konsole angezeigt. Wenn Sie zur ersten Shell-Sitzung zurückkehren und etwas mehr eingeben, wird diese Ausgabe sofort tailin der zweiten Shell-Sitzung angezeigt.

Beenden Sie nun catdurch Drücken von Ctrl+Dundentfernendie myfileDatei:

$ rm myfile

Führen Sie dann die Katze erneut aus:

$ cat >myfile

... und tippe etwas, ein paar Zeilen.

Mit GNU tailwerden diese Zeilennichtwird in der zweiten Shell-Sitzung angezeigt (wo tail -fes noch ausgeführt wird).

Wiederholen Sie die Übung tail -Fund beobachten Sie den Unterschied.

Antwort2

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, es handelt sich jedoch um einen anderen Inode (und wahrscheinlich an einer anderen Stelle auf Ihrer Festplatte gespeichert). tail -ffill versucht nicht erneut und lädt den neuen Inode, tail -Fwird dies erkennen.

Derselbe Effekt tritt ein, wenn Sie eine Datei umbenennen/verschieben. Wenn Sie beispielsweise folgen /var/log/messagesund logrotate das Protokoll nach .tail rotiert, hört /var/log/messages.1tail with weiterhin auf den alten Inode, der auf zeigt . tail with erkennt dies und liest den neuen Inode.-fmessages.1-F

verwandte Informationen