Answers:
从tail(1)
手册页:
With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail’ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descrip- tor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
您的文本编辑器正在重命名或删除原始文件,并将新文件保存在相同的文件名下。使用-F
代替。
lsof
可以显示这种情况-例如,lsof -Fpcftni
将显示后面跟随的inode tail
不再与编辑器打开的inode 相同。
您的编辑器有自己的文件缓冲区。在编辑器中修改文本时,不会将任何内容写入文件本身。
保存更改时,编辑器很可能会删除旧文件并创建一个新文件。tail -f
仍会连接到已删除的文件,因此不会显示任何新内容。
tail
默认情况下(不是实时)每1秒“刷新”一次。
尝试一下(您需要bash4):
touch ~/output.txt
和tail -f ~/output.txt
。for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
echo $i >> ~/output.txt
吗 另外,这个答案也遗漏了问题的重点。
tailf
有一个基于inotify的实现。因此它将实时刷新。
tailf
,但tail
使用inotify ?。我不知道tailf
。tail的联机帮助页显示的默认值为1秒-s
。
tail
紧随其后,并且在可用时也正在使用inotify。tailf
文件上没有任何活动时,根本不轮询,而只是休眠。tail -f
显示一些活动(请参阅strace
输出)。
$ tail -F filename
命令而不是$ tail -f filename
对吗?