我們使用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...