Files

為什麼tail命令不實時跟踪文件中的更改?

  • May 23, 2021

當我使用描述符 ie 實時跟踪文件時tail --follow=descriptor file_name,它不會顯示文件中所做的更改,而如果我使用名稱 ie 實時跟踪文件tail --follow=name file_name,它會顯示對文件所做的更改。此外,每次我在使用 tail using 跟踪文件時寫入文件時--follow=name,tail 輸出顯示文件已被刪除然後重新出現,tail: file_name: No such file or directory tail: 'file_name' has appeared; following new file這是輸出,發生了什麼?文件是否從頭開始重寫?每次寫入文件時文件的描述符也會改變嗎?

你是如何寫入文件的?

發生的情況是,當您寫入文件時,您要麼移動它,要麼刪除它,然後創建一個具有相同名稱的新文件,然後寫入該文件。所以當你使用

  1. –follow=name: tail 只關心文件名,所以在寫入之前,當你移動/刪除文件時,它會告訴你,tail: file_name: No such file or directory當你創建一個同名的文件時,它會告訴你,tail: 'file_name' has appeared; following new file它會寫入文件,你可以看到寫在螢幕上的內容。
  2. –follow=descriptor:tail 將跟隨文件描述符,即使在移動/刪除文件後文件描述符將指向舊文件,您可以通過進入/proc/{tail process id}/fd.

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