$ tail -f testfile
команда должна показывать последние записи в указанном файле в реальном времени, верно? Но этого не происходит. Пожалуйста, поправьте меня, если то, что я намерен сделать, неправильно ...
Я создал новый файл "aaa", добавил строку текста и закрыл ее. Затем выполните эту команду (первая строка):
$ tail -f aaa
xxx
xxa
axx
последние три строки - содержимое файла aaa. Теперь, когда команда все еще выполняется (так как я использовал -f
), я открыл файл aaa через графический интерфейс и начал добавлять еще несколько строк вручную. Но терминал не показывает новые строки, добавленные в файл.
Что здесь не так? Команда tail -f
только показывает новые записи, если они написаны только системой? (например, файлы журналов и т. д.)
источник
$ tail -F filename
команду все время вместо$ tail -f filename
права?lsof
может показать, что это происходит - напримерlsof -Fpcftni
, показало бы, что индекс, за которым следует индекс,tail
больше не тот, который открыт в редакторе.Ваш редактор имеет свой собственный буфер для файла. Когда вы изменяете текст в редакторе, в сам файл ничего не записывается.
Когда вы сохраняете свои изменения, скорее всего, редактор просто удаляет старый файл и создает новый.
tail -f
будет по-прежнему подключен к удаленному файлу, поэтому ничего нового не отобразится.источник
tail
«обновлять» каждую 1 секунду по умолчанию, а не в реальном времени.Попробуйте с этим (вам нужен bash4):
touch ~/output.txt
иtail -f ~/output.txt
.for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
источник
echo $i >> ~/output.txt
? Кроме того, этот ответ не соответствует сути вопроса.tailf
есть реализация на основе inotify. Так что он будет обновляться в режиме реального времени.tailf
, ноtail
использует inotify ?. Я не зналtailf
. На man-странице tail показано значение по умолчанию 1 секунда для-s
.tail
за ним следуют и теперь используют inotify тоже, когда доступно.tailf
вообще не опрашивает, просто спит, когда нет активности над файлом.tail -f
показывает некоторую активность (см.strace
вывод).