Rm
tee -a 不重新創建文件
我在 Raspberry Pi 3 Debian 最新版本上執行以下命令:
cat /dev/ttyUSB0 | tee -a /media/pi/KINGSTON/klima.out | grep -F $ | tee -a /media/pi/KINGSTON/log
該命令可以正常工作並執行應有的操作;但是,當我(手動或通過 CRON)刪除
klima.out
文件時,它不會重新創建。命令繼續執行,日誌文件繼續附加,但klima.out
文件沒有回來。(也沒有緩衝)。我想每週刪除一次,以免它越過所有界限。有什麼建議麼?
如果要恢復文件塊,則需要清空文件,而不是取消連結:
這種可移植的方式應該適用於大多數 shell:
: > /media/pi/KINGSTON/klima.out
取消連結文件(即
rm
)會刪除目錄條目,但不會影響文件內容(inode),只要文件被讀取器或寫入器保持打開狀態。
我假設你的管道執行了很長時間,並且你試圖在它執行時刪除日誌文件。
當您刪除文件時,該
tee
程序仍然將其打開以進行寫入,這意味著磁碟空間沒有交還給系統。在所有引用該文件的打開文件描述符都關閉之前,這種情況不會發生。只要在刪除之前分配了文件描述符,就可以寫入已刪除的文件。
您必須重新啟動管道才能重新創建文件,並允許回收舊(現在無名)日誌文件佔用的空間。
為避免重新啟動管道,您可以選擇截斷文件,即將其大小縮減為零而不刪除它。這將允許
tee
繼續附加到文件而無需重新打開它。可以像 jlliagre 在他的答案中顯示的那樣截斷文件,或者使用
truncate
(GNU coreutils 的非標準實用程序):truncate -s 0 /media/pi/KINGSTON/klima.out
有關該實用程序的更多資訊,請參閱手冊。
truncate