$ tail -f testfile
Der Befehl soll die neuesten Einträge in der angegebenen Datei in Echtzeit anzeigen, oder? Aber das passiert nicht. Bitte korrigieren Sie mich, wenn das, was ich vorhabe, falsch ist ...
Ich habe eine neue Datei "aaa" erstellt, eine Textzeile hinzugefügt und diese geschlossen. Geben Sie dann den folgenden Befehl ein (erste Zeile):
$ tail -f aaa
xxx
xxa
axx
Die letzten drei Zeilen sind der Inhalt der Datei aaa. Jetzt, da der Befehl noch ausgeführt wird (seitdem ich ihn verwendet habe -f
), habe ich die Datei aaa über die GUI geöffnet und manuell ein paar weitere Zeilen hinzugefügt. Das Terminal zeigt jedoch nicht die neuen Zeilen an, die in der Datei hinzugefügt wurden.
Was ist hier los? Der tail -f
Befehl zeigt neue Einträge nur an, wenn sie nur vom System geschrieben wurden. (wie Protokolldateien usw.)
quelle
$ tail -F filename
Befehl die ganze Zeit benutzen, anstatt$ tail -f filename
richtig?lsof
kann dies anzeigen - würde zum Beispiellsof -Fpcftni
anzeigen, dass der Inode, auf den gefolgttail
wird, nicht mehr derselbe ist, den der Editor geöffnet hat.Ihr Editor hat einen eigenen Puffer für die Datei. Wenn Sie den Text im Editor ändern, wird nichts in die Datei selbst geschrieben.
Wenn Sie Ihre Änderungen speichern, löscht der Editor möglicherweise einfach die alte Datei und erstellt eine neue.
tail -f
wird weiterhin mit der gelöschten Datei verbunden, sodass nichts Neues angezeigt wird.quelle
tail
"Aktualisieren" Sie standardmäßig alle 1 Sekunde, nicht in Echtzeit.Probieren Sie dies aus (Sie brauchen bash4):
touch ~/output.txt
und austail -f ~/output.txt
.for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
quelle
echo $i >> ~/output.txt
? Auch diese Antwort verfehlt den Punkt der Frage.tailf
eine inotify-basierte Implementierung. So wird es in Echtzeit aktualisiert.tailf
, abertail
verwendet inotify ?. Ich wusste es nichttailf
. Die Manpage von tail zeigt die Standardeinstellung von 1 Sekunde für-s
.tail
gefolgt von und verwendet jetzt auch inotify, wenn verfügbar.tailf
fragt überhaupt nicht ab, sondern schläft nur, wenn in der Datei keine Aktivität vorhanden ist.tail -f
zeigt eine Aktivität (siehestrace
Ausgabe).