tail -f не отслеживает изменения файла

14

Я недавно был глядя в использовании tail -fдля мониторинга некоторых текстовых файлов , как так: tail -f /var/sometext.

Однако, когда я провел какое-то тестирование, это не сработало. Я создал новый файл и запустил: tail -f /home/name/textЗатем я открыл журнал в vim, отредактировал, сохранил его, и кажется, что tail не «видит» изменения.

Странно то, что бег, echo "hello" >> /home/name/textкажется, работает нормально (хвост видит изменения). Я где-то читал, что это как-то связано с дескрипторами файлов и новыми инодами, создаваемыми при сохранении файла.

Может кто-нибудь объяснить это для меня? Я не совсем понял, как это на самом деле работает, но у меня есть представление о дескрипторах файлов.

Alex.K.
источник

Ответы:

29

-fследует по индоду. Если вы хотите следовать по имени, например, когда программа полностью воссоздает файл, используйте -Fвместо этого.

Игнасио Васкес-Абрамс
источник
Аккуратно, я никогда этого не знал. Полезно читать руководства по утилитам даже (особенно?), Если вы используете их постоянно!
Лайл
1

tail -f наблюдает за концом файла, и когда конец файла перемещается, он печатает новое содержимое и ждет, пока конец файла не переместится снова. Другими словами, изменения в середине документа не будут найдены командой tail -f, только добавлением.


источник
-1

На самом деле правдивая история такова:

tail -f контролирует память, а не диск. Но он не может получить доступ к защищенной памяти, такой как редактирование файла, открытого текстовым редактором.

fragileswan
источник
Команда tail -fработает с файлом (дескриптор файла после открытия файла). Хотя на самом деле свежие модификации файла все еще находятся в памяти (буферы, кеш), это не имеет значения. tailвсе еще обращается к файлу через дескриптор файла. Неважно, как файл изменяется. --- Ответ Игнасио Васкеса-Абрамса правильный: редактор не изменяет текущий файл (который открыт в tail), он сохраняет изменения в новом файле с тем же именем, что и у старого.
Пабук