“ tail -f”和“ tail -F”有什么区别?


41

我从未使用过tail -F命令,而是总是使用过命令,tail -f但是有人告诉我,-F没有太多解释会更好。

我在手册页中查找了tail命令。

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

很容易理解小写的含义-f,但是我不遵循大写的含义-F。我希望有人可以向我解释差异。

Answers:


75

您描述了GNU tail实用程序。这两个标志之间的区别在于,如果我打开一个文件,例如一个日志文件,如下所示:

$ tail -f /var/log/messages

...并且如果我的机器上的日志轮转工具决定在我看着正在写入消息的日志文件时轮换该日志文件(“轮换”表示删除或移动到其他位置等),我看到的输出将停。

如果我这样打开文件tail

$ tail -F /var/log/messages

...再次旋转文件,输出将继续在我的控制台中流动,因为tail一旦文件再次可用,即当写入日志的程序开始写入new 时,它将重新打开文件/var/log/messages

在免费的BSD系统上,没有任何-F选择,但其tail -f行为与tail -FGNU系统上的行为相同,不同之处在于您得到了消息

tail: file has been replaced, reopening.

当您监视的文件消失并重新出现时,将在输出中显示。


你可以测试一下

在一个shell会话中,执行

$ cat >myfile

现在,这将等待您键入内容。只需继续输入一些乱码,几行即可。它将全部保存到文件中myfile

另一个 Shell会话中(可能在另一个终端中,而不会中断cat):

$ tail -f myfile

这将显示myfile控制台中(的结尾)内容。如果返回第一个Shell会话并输入更多内容,则该输出将立即tail在第二个Shell会话中显示。

现在退出cat按下Ctrl+D,并删除myfile文件:

$ rm myfile

然后再次运行猫:

$ cat >myfile

...然后输入几行内容。

使用GNU时tail,这些行将不会在第二个Shell会话中显示(tail -f仍在运行)。

重复练习,tail -F观察差异。


哦,我明白了。我有一个系统日志文件,例如foo.log,然后有时会看到foo_06242016.log和foo.log。所以我运行tail -f foo.log,它将指向foo_06242016.log吗?
DaeYoung

1
@DaeYoung不,不是。如果您运行tail -f foo.log并且系统移至foo.log例如foo.log.0.gz输出,您将看到停止。-F另一方面,如果使用,则可以看到 内容,foo.log而中间没有任何中断。
库沙兰丹

4
+1 ...感谢您不限制您对GNU实现的回答,还让人们知道在其他环境中可以期待什么。
TOOGAM

2
这个例子很好的说明。
CVn

1
@Kusalananda:谢谢你的锻炼。我观察到了差异,这有助于我更好地理解tail -f和tail -F的作用。祝你有美好的一天!
DaeYoung

14

简化后,当您打开文件时,您将获得inode,其中包含一些有关文件在磁盘上确切位置的元数据。然后,Tail将侦听对该文件的更改。

如果删除文件,然后使用相同的名称创建一个新文件,则文件名将相同,但是它是一个不同的inode(可能存储在磁盘上的其他位置)。tail -f填充不重试并加载新的inode,tail -F将检测到这一点。

如果重命名/移动文件,将会发生相同的效果。例如,如果您跟随/var/log/messages并且logrotate将日志旋转到/var/log/messages.1。尾巴-f仍会听指向的旧索引节点messages.1。tail with -F将意识到这一点并读取新的inode。


感谢您的解释。现在对我来说很有意义。
DaeYoung

2
没关系。我知道,这样的拖尾很容易犯错。我特别喜欢这样一个事实,您先前的拼写错误已得到修复,并确认...还有另一个拼写错误。:)
TOOGAM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.