Jaka jest różnica między „tail -f” a „tail -F”?


41

Nigdy nie użyłem tail -Fpolecenia zamiast tego zawsze użyłem, tail -fjednak ktoś powiedział mi, że -Flepiej bez większego wyjaśnienia.

Poszukałem strony podręcznika użytkownika w poszukiwaniu polecenia ogona.

-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

Łatwo jest zrozumieć, co -frobi niższe , ale nie podążam za tym, co -Fstara się robić wielka litera . Byłbym wdzięczny, że ktoś może mi wyjaśnić różnice.

Odpowiedzi:


75

Opisujesz tailnarzędzie GNU . Różnica między tymi dwiema flagami polega na tym, że jeśli otworzę plik, na przykład plik dziennika, taki jak ten:

$ tail -f /var/log/messages

... a jeśli funkcja obracania dziennika na moim komputerze zdecyduje się obrócić ten plik dziennika podczas oglądania zapisywanych w nim wiadomości („obrót” oznacza usunięcie lub przeniesienie w inne miejsce itp.), wynik, który zobaczę, będzie po prostu zatrzymać.

Jeśli otworzę plik w tailten sposób:

$ tail -F /var/log/messages

... i ponownie plik jest obracany, dane wyjściowe będą nadal płynąć w mojej konsoli, ponieważ tailponownie otworzą plik, gdy tylko stanie się ponownie dostępny, tj. gdy program (programy) zapisujący dziennik zaczną zapisywać do nowego /var/log/messages .

W darmowych systemach BSD nie ma -Fopcji, ale tail -fbędzie się zachowywać tak jak tail -Fw systemach GNU, z tą różnicą, że otrzymasz komunikat

tail: file has been replaced, reopening.

w danych wyjściowych, gdy monitorowany plik znika i pojawia się ponownie.


MOŻESZ TESTOWAĆ

W jednej sesji powłoki wykonaj

$ cat >myfile

To będzie teraz czekać na wpisanie rzeczy. Po prostu napisz bełkot, kilka wierszy. Wszystko zostanie zapisane w pliku myfile.

W innej sesji powłoki (może w innym terminalu, bez przerywaniacat ):

$ tail -f myfile

Spowoduje to wyświetlenie (końca) zawartości myfilekonsoli. Jeśli wrócisz do pierwszej sesji powłoki i wpiszesz coś więcej, dane wyjściowe zostaną natychmiast pokazane przez tailw drugiej sesji powłoki.

Teraz zamknąć catnaciskając Ctrl+Di usunąć ten myfileplik:

$ rm myfile

Następnie ponownie uruchom kota:

$ cat >myfile

... i wpisz coś, kilka wierszy.

W GNU tailte linie nie pojawią się w drugiej sesji powłoki (gdzie tail -fnadal działa).

Powtórz ćwiczenie tail -Fi obserwuj różnicę.


Rozumiem. Mam systemowy plik dziennika, taki jak foo.log, a następnie czasami widzę foo_06242016.log wraz z foo.log. Więc uruchamiam tail -f foo.log, będzie wskazywał na foo_06242016.log?
DaeYoung

1
@DaeYoung Nie, niezupełnie. Jeśli uruchomisz, tail -f foo.loga system przejdzie foo.logdo np foo.log.0.gz. Wyjścia, które zobaczysz, po prostu przestaną działać . Jeśli użyjesz -Fdrugiej strony, zobaczysz zawartość nowego foo.log bez żadnych przerw pomiędzy.
Kusalananda

4
+1 ... dziękuję, że nie ograniczyłeś swojej odpowiedzi do implementacji GNU, ale także poinformowałeś ludzi, czego można oczekiwać w innym środowisku.
TOOGAM

2
Bardzo ładna ilustracja z przykładem.
CVn

1
@Kusalananda: Dziękuję za ćwiczenie. Zauważyłem różnicę i pomogło mi to lepiej zrozumieć, co robią tail -f i tail -F. błogosławionego dnia!
DaeYoung

14

Uproszczone, gdy otworzysz plik, otrzymasz i-węzeł zawierający niektóre metadane, gdzie dokładnie znajduje się plik na dysku. Następnie Tail będzie nasłuchiwał zmian w tym pliku.

Jeśli usuniesz plik i utworzysz nowy o tej samej nazwie, nazwa pliku będzie taka sama, ale będzie to inny i-węzeł (i prawdopodobnie przechowywany w innym miejscu na dysku). tail -fWypełnij, nie próbuj ponownie i załaduj nowy i-węzeł, tail -Fwykryje to.

Ten sam efekt pojawi się, jeśli zmienisz nazwę / przeniesiesz plik. Jeśli na przykład /var/log/messagespodążysz i logrotate obróci dziennik do /var/log/messages.1. ogon z -fnadal będzie słuchać starej i-węzły, która wskazuje messages.1. ogon z -Fzda sobie z tego sprawę i przeczytaj nowy i-węzeł.


Dziękuję za wyjaśnienie. Ma to dla mnie teraz duży sens.
DaeYoung

2
W porządku. Rozumiem, że takie podejście może być łatwym błędem. Szczególnie cieszy mnie fakt, że twój poprzedni błąd pisowni został naprawiony i potwierdzono ... z innym błędem pisowni. :)
TOOGAM,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.