Ich habe kürzlich versucht tail -f
, einige Textdateien wie folgt zu überwachen : tail -f /var/sometext
.
Als ich einige Tests durchgeführt habe, scheint es jedoch nicht zu funktionieren. Ich habe eine neue Datei erstellt und ausgeführt: tail -f /home/name/text
Dann habe ich das Protokoll in vim geöffnet und einige Änderungen vorgenommen, es gespeichert, und es scheint, dass tail die Änderung nicht "sieht".
Das Seltsame ist, dass das Laufen gut echo "hello" >> /home/name/text
zu funktionieren scheint (Schwanz sieht die Veränderung). Ich habe irgendwo gelesen, dass dies etwas mit Dateideskriptoren und neuen Inodes zu tun hat, die beim Speichern einer Datei erstellt werden.
Kann mir das jemand erklären? Ich habe nicht ganz verstanden, wie das tatsächlich funktioniert, aber ich habe eine Idee, was Dateideskriptoren sind.
quelle
tail -f überwacht das Dateiende. Wenn sich das Dateiende verschiebt, wird der neue Inhalt gedruckt und darauf gewartet, dass das Dateiende erneut verschoben wird. Mit anderen Worten, Änderungen in der Mitte des Dokuments werden nicht durch tail -f gefunden, sondern nur durch Anhängen.
quelle
Eigentlich ist die wahre Geschichte:
tail -f überwacht den Speicher, nicht die Festplatte. Es kann jedoch nicht auf geschützten Speicher zugreifen, z. B. Änderungen an einer Datei, die einen Texteditor geöffnet hat.
quelle
tail -f
Befehl bearbeitet eine Datei (Dateideskriptor nach dem Öffnen der Datei). Obwohl sich die neuen Änderungen der Datei noch im Speicher befinden (Puffer, Cache), spielt dies keine Rolle.tail
greift weiterhin über den Dateideskriptor auf die Datei zu. Es spielt keine Rolle, wie die Datei geändert wird. --- Die Antwort von Ignacio Vazquez-Abrams ist richtig - der Editor ändert die aktuelle Datei (die geöffnet isttail
) nicht, sondern speichert die Änderungen in einer neuen Datei mit demselben Namen wie die alte.