команда tail не отображает последнюю строку

команда tail не отображает последнюю строку

Я использую следующую команду для чтения последней строки каждый раз при изменении файла.

tail -f -n1 Entrie.txt

Бывает, что первая написанная строка отображается без проблем, но позже, когда я пишу вторую, выдается следующая ошибка

tail: Entrie.txt: file truncated

После того, как показывается эта ошибка, он показывает все значения, записанные в файле. Но дело не только в том, что после записи многих строк ошибка перестает вылезать и исправляется, но мне нужно, чтобы он всегда работал хорошо.

Я запускаю эту команду в Linux.

Я добавляю строки в файл в редакторе и сохраняю.

решение1

Вы можете изменить файл, записав новую его версию или добавив данные к текущей.

Пример в оболочке:

  • date > sample_file.txt- воссоздает файл с новым текстом (вывод dateкоманды)
  • date >> sample_file.txt- добавляет текст в текущий файл

Первый случай - ваш файл был обрезан (контент удален и создан заново, это можно сделать простым "написанием" в текстовом редакторе) и tailпредупреждает об этом. Второй случай - tailработает так, как вы и предполагали.

решение2

Когда текстовый редактор сохраняет файл, очень часто происходит следующее: он сохраняет его ввременныйfile, очищает (обрезает) исходный файл и копирует содержимое из временного файла в исходный файл. Это делается для того, чтобы не изменять разрешения, владельца и другие метаданные исходного файла.

Это означает, что с точки зрения tail, файл обрезается (очищается), поэтому он начинает показывать последнюю строку файлатак как редактор переписывает его(вот почему он отображает весь файл).

Чтобы добавить строки в файл таким образом, чтобы ваша tailкоманда всегда отображала только последнюю строку файла и ничего больше, вам придется убедиться, чтодобавитьстроки в файл. Поскольку текстовые редакторы обычнопереписатьфайл, вам, возможно, придется сделать это другими способами.

Самый простой способ добавления данных в файл — это использование cat:

cat >>Entrie.txt

Это сделает catдобавление в файл Entrie.txt. Он будет ждать ввода от вас, и вы сможете печатать прямо в файле с терминала. Текущая строка записывается в конец файла, как только вы нажмете Enter. Чтобы прекратить ввод данных, нажмите Ctrl+Dна пустой строке.

Однако это, очевидно, не дает вам возможности исправить то, что вы написали в предыдущих строках, после нажатия кнопки Enter.

Другой альтернативой было бы редактирование новых строк в отдельном файле, скажем additions.txt, с помощью вашего редактора. Сохраните этот файл и затем выполните

cat additions.txt >>Entrie.txt

Это добавит все содержимое additions.txtв конец файла Entrie.txt.

Связанный контент