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

当文本编辑器保存文件时,经常发生的情况是将其保存到暂时的文件,清空(截断)原始文件,并将临时文件中的内容复制到原始文件中。这样做是为了不改变原始文件的权限、所有权和其他元数据。

这意味着从 的角度来看tail,文件被截断(清空),因此它开始显示文件的最后一行因为编辑正在重写它(这就是它显示整个文件的原因)。

要将行添加到文件中,使tail命令始终仅显示文件的最后一行而不显示其他内容,您必须确保附加行到文件。由于文本编辑器通常改写文件,您可能必须使用其他方式来执行此操作。

将数据附加到文件的一个非常基本的方法是使用cat

cat >>Entrie.txt

这将cat追加到文件中Entrie.txt。它会等待您的输入,您可以直接从终端输入文件。按 后,当前行将立即写入文件末尾Enter。要停止输入数据,请Ctrl+D按空行。

显然,一旦您按下,这显然不会给您任何机会来更正您在前几行中所写的内容Enter

另一种选择是使用additions.txt编辑器在单独的文件(例如 )中编辑新行。保存该文件然后执行

cat additions.txt >>Entrie.txt

这会将 的完整内容添加additions.txt到文件末尾Entrie.txt

相关内容