tail f 失效的情況分析

2021-08-20 18:34:11 字數 1614 閱讀 9532

我們使用tail -f tmp.test對tmp.test檔案進行動態追蹤,輸出如下:

然後我們再開乙個新的shell終端,然後用vim開啟tmp.test並將檔案內容修改為:

儲存退出後,我們再切換回原來的終端,發現tail命令失效,並沒有輸出新的內容"hello2":

發生上述情況的原因是:vim是將原來的檔案刪除後,然後再生成乙個新的檔案,而tail -f命令是根據檔案的inode來追蹤檔案的,vim把原來的檔案刪除,新生成的同名檔案的inode已經發生了變化,所以導致tail -f命令失效。

我們來驗證一下我們上述的結論:

檢視tmp.test的檔案的inode

ls -i tmp.test
輸出:

我們可以看到inode的值是278578

使用vim對tmp.test進行修改

vim tmp.test
輸出:

我們再次檢視inode的值

ls -i tmp.test
輸出:

我們看到經過vim的修改後,現在新的檔案inode變成了256162,至此,證明了vim會刪除原有的檔案,並生成新的同名檔案。

驗證echo命令是否會影響inode

echo "hello3"

>> tmp.test

再次執行:

ls -i tmp.test
輸出:

我們發現inode沒有發生改變,這也解釋了:為什麼vim修改檔案讓tail -f命令失效,而使用echo "hello3" >> tmp.test不會令tail -f命令失效。

結論:tail -f通過inode追蹤檔案,如果檔案的inode發生了變化,將會使tail -f失效。

使用tail -f替代tail -f,根據man tail的說明,tail -f在檔案不可以開啟的時候,會重試開啟該檔案,也就是在vim刪除舊檔案,建立新檔案的過程中,tail短暫性失去了對tmp.test檔案的訪問許可權,加上-f選項後,tail在檔案恢復訪問後可以重新對檔案實施跟蹤。

出處:

tail f失效原因(vim修改檔案)

tail f 失效的情況分析 im是將原來的檔案刪除後,然後再生成乙個新的檔案,而tail f命令是根據檔案的inode來追蹤檔案的,vim把原來的檔案刪除,新生成的同名檔案的inode已經發生了變化,所以導致tail f命令失效。而echo 123 a.txt是可以生效的 結論 tail f通過i...

mysql索引失效的幾種情況分析

1 最佳左字首原則 如果索引了多列,要遵守最左字首原則。指的是查詢要從索引的最左前列開始並且不跳過索引中的列。前提條件 表中已新增復合索引 use程式設計客棧rname,password,age 分析 該查詢缺少username,查詢條件復合索引最左側username缺少,違反了最佳左字首原則,導致...

Mysql索引會失效的幾種情況分析

在做專案的過程中,難免會遇到明明給mysql建立了索引,可是查詢還是很緩慢的情況出現,下面我們來具體分析下這種情況出現的原因及解決方法 索引並不是時時都會生效的,比如以下幾種情況,將導致索引失效 1.如果條件中有or,即使其中有條件帶索引也不會使用 這也是為什麼盡量少用or的原因 注意 要想使用or...