为什么 tail 命令不实时跟踪文件中的更改?

为什么 tail 命令不实时跟踪文件中的更改?

当我使用描述符 ie 实时跟踪文件时tail --follow=descriptor file_name,它不会显示文件中所做的更改,而如果我使用名称 ie 实时跟踪文件tail --follow=name file_name,它会显示对文件所做的更改。另外,每次我在使用 tail 跟踪文件的同时写入文件时--follow=name,tail 输出都会显示该文件被删除然后重新出现,这是输出tail: file_name: No such file or directory tail: 'file_name' has appeared; following new file,发生了什么?文件是否从头开始重写?每次写入文件时文件描述符是否都会更改?

答案1

你如何写入文件?

发生的情况是,当您写入文件时,您要么移动它,要么删除它,然后创建一个具有相同名称的新文件,然后写入该文件。所以当你使用

  1. --follow=name: tail 只会关心 file_name,所以在写入之前,当您移动/删除文件时,它会告诉您,tail: file_name: No such file or directory当您创建具有相同名称的文件时,它会告诉您tail: 'file_name' has appeared; following new file并写入文件,您可以看到屏幕上写入的内容。

  2. --follow=descriptor:即使在移动/删除文件之后,tail 也会跟随文件描述符,文件描述符将指向旧文件,您可以通过进入/proc/{tail process id}/fd.

相关内容