- 在我是用 tail -f file.txt 对这个文件进行动态追踪时:
- 我重新打开一个新的终端进行vim编辑这个文件并且保存
-
这是我们发现,tail -f file.txt'动态追踪的这个文件没有任何的变化,失去了效果
-
发生上述情况的原因是:vim是将原来的文件删除后,然后再生成一个新的文件,而
tail -f
命令是根据文件的inode来追踪文件的,vim把原来的文件删除,新生成的同名文件的inode已经发生了变化,所以导致tail -f
命令失效。
我们来验证一下:
-
首先查看file.txt的文件的inode
ls -i file.txt
-
当我们使用vim进行编辑保存后:
vim file.txt
-
再查看file.txt文件的inode
ls -i file.txt
- 可以看到vim命令在将这个文档编辑之后删除重新生成一个同名文件
结论:tail -f
通过inode追踪文件,如果文件的inode发生了变化,将会使tail -f
失效。
解决方案
使用tail -F
替代tail -f
,根据man tail
的说明,tail -F
在文件不可以打开的时候,会重试打开该文件,也就是在vim删除旧文件,创建新文件的过程中,tail短暂性失去了对tmp.test文件的访问权限,加上-F选项后,tail在文件恢复访问后可以重新对文件实施跟踪。