Tail

“tail -f”和“tail -F”有什麼區別?

  • September 18, 2018

我從來沒有使用過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

很容易理解 lower 的-f作用,但我不遵循大寫-F試圖做的事情。我很感激有人可以向我解釋這些差異。

您描述了 GNUtail實用程序。這兩個標誌之間的區別在於,如果我打開一個文件,例如一個日誌文件,如下所示:

$ tail -f /var/log/messages

…如果我的機器上的日誌輪換工具決定在我查看寫入它的消息時輪換該日誌文件(“旋轉”意味著刪除或移動到另一個位置等),我看到的輸出將只是停止。

如果我這樣打開文件tail

$ tail -F /var/log/messages

…再次,文件被旋轉,輸出將繼續在我的控制台中流動,因為tail一旦文件再次可用就會重新打開文件,即當寫入日誌的程序開始寫入 /var/log/messages的.

在免費的 BSD 系統上,沒有-F選項,但tail -f會像tail -F在 GNU 系統上一樣,不同之處在於您收到消息

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並觀察差異。

引用自:https://unix.stackexchange.com/questions/291932