Rm

tee -a 不重新創建文件

  • May 29, 2017

我在 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

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