linux shell 重定向到檔案後,刪除該檔案會發生什麼?
- 2022-07-20
rm刪除的是那個檔案的索引,tail已經把索引記錄在記憶體了
指令碼也把索引記錄在記憶體了,幹掉了索引,檔案依然在寫,記錄一直在被讀取,當你都中斷,再次讀取的時候索引找不到了,的確被刪了
linux的rm只是刪除索引,檔案塊依然存在的,下次利用的時候這個檔案塊會被其他內容覆蓋
重定向就是這樣的,命令的結果只能輸出到一個地方,瞭解原理就可以理解了。
在 io redirection 中,stdout 或 stderr 的管道總是會先準備好,然後才將命令執行結果給匯入。
你給的例子中,先重定向到/111。txt,再重定向到/222。txt,因此管道最終是接入了/222。txt。stdout只有一根管道,輸入端是固定的,你只是在不停地移動輸出端,當然是以最後的為準啦。
建議你去看看《shell十三問》,裡面有關於 io redirection 的詳細解釋。
解決方法就是用 tee 命令:
ls -l | tee /111。txt > /222。txt
上一篇:什麼是三角形的穩定性?