Opisujesz tail
narzę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 tail
ten sposób:
$ tail -F /var/log/messages
... i ponownie plik jest obracany, dane wyjściowe będą nadal płynąć w mojej konsoli, ponieważ tail
ponownie 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 -F
opcji, ale tail -f
będzie się zachowywać tak jak tail -F
w 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 myfile
konsoli. Jeśli wrócisz do pierwszej sesji powłoki i wpiszesz coś więcej, dane wyjściowe zostaną natychmiast pokazane przez tail
w drugiej sesji powłoki.
Teraz zamknąć cat
naciskając Ctrl+Di usunąć ten myfile
plik:
$ rm myfile
Następnie ponownie uruchom kota:
$ cat >myfile
... i wpisz coś, kilka wierszy.
W GNU tail
te linie nie pojawią się w drugiej sesji powłoki (gdzie tail -f
nadal działa).
Powtórz ćwiczenie tail -F
i obserwuj różnicę.
tail -f foo.log
a system przejdziefoo.log
do npfoo.log.0.gz
. Wyjścia, które zobaczysz, po prostu przestaną działać . Jeśli użyjesz-F
drugiej strony, zobaczysz zawartość nowegofoo.log
bez żadnych przerw pomiędzy.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 -f
Wypełnij, nie próbuj ponownie i załaduj nowy i-węzeł,tail -F
wykryje to.Ten sam efekt pojawi się, jeśli zmienisz nazwę / przeniesiesz plik. Jeśli na przykład
/var/log/messages
podążysz i logrotate obróci dziennik do/var/log/messages.1
. ogon z-f
nadal będzie słuchać starej i-węzły, która wskazujemessages.1
. ogon z-F
zda sobie z tego sprawę i przeczytaj nowy i-węzeł.źródło