当我使用描述符 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
你如何写入文件?
发生的情况是,当您写入文件时,您要么移动它,要么删除它,然后创建一个具有相同名称的新文件,然后写入该文件。所以当你使用
--follow=name: tail 只会关心 file_name,所以在写入之前,当您移动/删除文件时,它会告诉您,
tail: file_name: No such file or directory
当您创建具有相同名称的文件时,它会告诉您tail: 'file_name' has appeared; following new file
并写入文件,您可以看到屏幕上写入的内容。--follow=descriptor:即使在移动/删除文件之后,tail 也会跟随文件描述符,文件描述符将指向旧文件,您可以通过进入
/proc/{tail process id}/fd
.