$ tail -f testfile
polecenie ma pokazywać najnowsze wpisy w określonym pliku, w czasie rzeczywistym, prawda? Ale tak się nie dzieje. Proszę mnie poprawić, jeśli to, co zamierzam zrobić, jest złe ...
Utworzyłem nowy plik „aaa”, dodałem wiersz tekstu i zamknąłem go. następnie wydał polecenie (pierwszy wiersz):
$ tail -f aaa
xxx
xxa
axx
ostatnie trzy wiersze to zawartość pliku aaa. Teraz, gdy polecenie wciąż działa (odkąd go użyłem -f
), otworzyłem plik aaa przez GUI i zacząłem ręcznie dodawać kilka kolejnych wierszy. Ale terminal nie pokazuje nowych linii dodanych do pliku.
Co tu jest nie tak? tail -f
Komenda pokazuje tylko nowe wpisy o ile są one napisane przez jedynego systemu? (jak pliki dziennika itp.)
źródło
$ tail -F filename
cały czas używać polecenia,$ tail -f filename
prawda?lsof
może to pokazać - na przykładlsof -Fpcftni
pokazałby, że i-węzeł, po którymtail
następuje, nie jest już tym samym, który otworzył edytor.Twój edytor ma własny bufor dla pliku. Po zmodyfikowaniu tekstu w edytorze nic nie jest zapisywane w samym pliku.
Po zapisaniu zmian istnieje prawdopodobieństwo, że edytor po prostu usunie stary plik i utworzy nowy.
tail -f
nadal będzie połączony z usuniętym plikiem, więc nie pokaże nic nowego.źródło
tail
„odświeżanie” domyślnie co 1 sekundę, nie w czasie rzeczywistym.Spróbuj tego (potrzebujesz bash4):
touch ~/output.txt
itail -f ~/output.txt
.for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
źródło
echo $i >> ~/output.txt
? Również ta odpowiedź nie ma sensu pytania.tailf
ma implementację opartą na inotify. Więc odświeży się w czasie rzeczywistym.tailf
, aletail
używa inotify ?. Nie wiedziałemtailf
. Strona ogona pokazuje domyślnie 1 sekundę dla-s
.tail
śledziłem i używa teraz inotify, jeśli jest dostępny.tailf
wcale nie odpytuje, po prostu śpi, gdy w pliku nie ma żadnej aktywności.tail -f
pokazuje pewną aktywność (patrzstrace
dane wyjściowe).