как работает параметр "-f" команды "tail"?

<pre><code>$ tail -f testfile команда должна показывать последние записи в указанном файле в реальном времени, верно? но этого не происходит. пожалуйста, поправьте меня, если то, что я намерен сделать, неправильно ...я создал новый файл "aaa", добавил строку текста и закрыл ее. затем выполните эту команду (первая строка):$ tail -f aaa xxx xxa axx </code></pre><p>последние три строки - содержимое файла aaa. теперь, когда команда все еще выполняется (так как я использовал <code>-f</code>), я открыл файл aaa через графический интерфейс и начал добавлять еще несколько строк вручную. но терминал не показывает новые строки, добавленные в файл.</p><p>что здесь не так? <code>tail -f</code> команда показывает только новые записи, если они записаны только системой? (например, файлы журналов и т. д.)</p>

<p>из <code>tail(1)</code> <a href="https://linux.die.net/man/1/tail">man-страница</a> :</p><blockquote> <pre><code> with --follow (-f), tail defaults to following the file descriptor, which means that even if a tail’ed file is renamed, tail will continue to track its end. this default behavior is not desirable when you really want to track the actual name of the file, not the file descrip- tor (e.g., log rotation). use --follow=name in that case. that causes tail to track the named file in a way that accommodates renaming, removal and creation. </code></pre></blockquote><p>ваш текстовый редактор переименовывает или удаляет исходный файл и сохраняет новый файл под тем же именем файла. используйте <code>-f</code> вместо.</p>

<p>ваш редактор имеет свой собственный буфер для файла. когда вы изменяете текст в редакторе, в сам файл ничего не записывается.</p><p>когда вы сохраняете изменения, скорее всего, редактор просто удаляет старый файл и создает новый. <code>tail -f</code> по-прежнему будет подключен к удаленному файлу, поэтому ничего нового не отобразится.</p>

<p><code>tail</code> "обновлять" каждую 1 секунду по умолчанию, а не в реальном времени.</p><p>попробуйте с этим (вам нужен bash4):</p><ul> <li>откройте 2 терминала.</li> <li>в первом терминале выполните <code>touch ~/output.txt</code> а также <code>tail -f ~/output.txt</code>.</li> <li>во втором терминале выполните <code>for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done</code></li> <li>посмотрите на вывод tail в первом терминале.</li> </ul>