我想tail -f
提交文件,但是在之后会跟踪它mv
。
尾部手册页告诉我:-f
意味着不--follow=descriptor
应该mv
改变 inode?
为什么tail -f
重命名后停止工作?
答案1
阅读tail
源代码后,看来它并没有无法读取重命名的文件,但无法监视文件状态。
更准确地说,tail
似乎以这种(简化的)方式表现:
- 它读取文件直到最后;
- 然后设置一个
inotify
监视,以便在文件发生某些事情时得到通知; - 当文件附加新内容时,再次读取至末尾;
- 然后跳回步骤 2。
当您移动文件时,inotify
会通知tail
,然后决定将文件从受监视文件列表中删除。这似乎是故意的,尽管我不清楚为什么会这样(我希望它在重命名后继续监视文件)。相关行似乎是这些。
因此,问题不在于底层 Linux 操作系统,而在于tail
处理文件重命名的方式。