为什么某些文件更改未显示在 tail -f 中?

rub*_*o77 3 tail mysql files

我尝试使用以下 mysql 历史记录文件:

tail -f ~/.mysql_history
Run Code Online (Sandbox Code Playgroud)

在我作为同一用户输入的另一个窗口中:

mysql -u someotheruser -p
Run Code Online (Sandbox Code Playgroud)

并且我的尾巴中没有显示以下命令。当我退出 mysql 控制台时, 中仍然没有显示任何内容tail -f,但是,当cat我查看历史文件时,我看到文件末尾有新条目

rus*_*ush 8

那是因为mysql完全重新创建.mysql_history在运行期间文件。

因此,当您cat ~/.mysql_historymysql执行后运行时,您会看到完全不同的文件。不是那个tail在读书。

您可以通过一个简单的测试轻松检查它:

 $ ls -li .mysql_history 
6685441 -rw------- 1 user user 1570 Sep 15 21:26 .mysql_history
 $ mysql i_test
...
mysql> Bye
 $ ls -li .mysql_history
6685474 -rw------- 1 user user 1592 Nov 29 20:27 .mysql_history
Run Code Online (Sandbox Code Playgroud)

如您所见,inode 有所不同。所以这就是答案。

  • GNU tail 有一个 `-F` 选项,它会定期按名称重新打开文件,以便它可以在这种情况下工作。 (5认同)