Byłem niedawno patrząc w użyciu tail -f
monitorować 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/text
Nastę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.
źródło
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
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.
źródło
tail -f
Komenda 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.tail
nadal 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 otwieranytail
), zapisuje zmiany w nowym pliku o tej samej nazwie co stary.