tail -f nie śledzi zmian w pliku

14

Byłem niedawno patrząc w użyciu tail -fmonitorować niektóre pliki tekstowe tak: tail -f /var/sometext.

Jednak kiedy przeprowadziłem testy, wydaje się, że to nie działa. Stworzyłem nowy plik i uruchomiłem: tail -f /home/name/textNastępnie otworzyłem dziennik w vimie i dokonałem edycji, zapisałem go i wydaje się, że ogon nie „widzi” zmiany.

Dziwne jest to, echo "hello" >> /home/name/textże bieganie działa dobrze (ogon widzi zmianę). Czytałem gdzieś, że ma to związek z deskryptorami plików i tworzeniem nowych i-węzłów podczas zapisywania pliku.

Czy ktoś może mi to wyjaśnić? Nie do końca zrozumiałem, jak to naprawdę działa, ale mam pojęcie, jakie są deskryptory plików.

Alex.K.
źródło

Odpowiedzi:

30

-fnastępuje przez i-węzeł. Jeśli chcesz śledzić według nazwy, na przykład gdy program całkowicie odtwarza plik, użyj -Fzamiast tego.

Ignacio Vazquez-Abrams
źródło
Zgrabne, nigdy tego nie wiedziałem. Warto czytać strony narzędzi, nawet (szczególnie?), Jeśli używasz ich przez cały czas!
Lyle
1

tail -f ogląda koniec pliku, a gdy koniec pliku się przesuwa, drukuje nową zawartość i czeka na ponowne przeniesienie końca pliku. Innymi słowy, zmiany w środku dokumentu nie zostaną znalezione przez tail -f, tylko przez dodanie.


źródło
-1

W rzeczywistości prawdziwa historia to:

tail -f monitoruje pamięć, a nie dysk. Ale nie może uzyskać dostępu do chronionej pamięci, takiej jak zmiany w pliku otworzyły edytor tekstu.

fragileswan
źródło
tail -fKomenda działa na plik (deskryptor pliku po otwarciu pliku). Chociaż w rzeczywistości świeże modyfikacje pliku są nadal w pamięci (bufory, pamięć podręczna), nie ma to znaczenia. tailnadal uzyskuje dostęp do pliku za pomocą deskryptora pliku. Nie ma znaczenia, w jaki sposób plik jest modyfikowany. --- Odpowiedź Ignacio Vazquez-Abramsa jest prawidłowa - edytor nie modyfikuje bieżącego pliku (który jest otwierany tail), zapisuje zmiany w nowym pliku o tej samej nazwie co stary.
pabouk