Linux FAQ : 刪除各種檔案
刪除各種檔案
參考 :
- https://blog.longwin.com.tw/2016/12/linux-delete-many-files-quick-2016/
- https://kknews.cc/zh-tw/code/o38nvn5.html
- https://yonglhuang.com/rm-file/
- https://www.baeldung.com/linux/delete-large-directory
- https://juejin.cn/post/6844903766366371854
- https://www.firbug.com/a/202106/216584.html
<檔案要清理 第一步先找出檔名>
- 檔案名稱有空格
範例 : azzi000 648116.tmp
step 1 :
find . -name '* *'
step 2 :
find . -name '* *' | awk -F / '{print "\""$2"\""}'
step 3 :
find . -name '* *' | awk -F / '{print "\""$2"\""}' | xargs rm -f
<Linux 清理檔案沒釋放空間>
參考 :
https://unix.stackexchange.com/questions/68523/find-and-remove-large-files-that-are-open-but-have-been-deleted
https://serverfault.com/questions/207100/how-can-i-find-phantom-storage-usage
可以用 lsof 檢查已清理 程序卻卡住 process
lsof | grep deleted
<刪除檔案介紹>
平時刪除檔案可以用 rm
也可以用到 unlink
Linux 檔案關聯簡介
可如檔案還在被程序使用
delete 後會進入到 背景
查看方式可以用
find /proc/*/fd -ls | grep deleted
- 查看檔案大小 ( 第 11 個欄位 )
lsof | grep deleted
要回收空間 ( 暫時 )
: > /proc/process id/fd/號碼
永久需用到
- 執行寫入指令程序 跑 exec
關閉 stderr
exec 2>&-
- gdb 或 reredirect
gdb 方式 參考
找到要重新導向 pid
文章介紹 :
假設要重定向 PID 為 14560 的進程的輸出。因此,應該首先將 gdb 附加到該 PID:
gdb -p 14560
一旦我們附加到進程,可以將文件描述符 1 重定向到 /tmp/process_stdout:
(gdb) p dup2(open("/tmp/process_stdout", 1089, 0777), 1)
請注意,使用了數字 1089,因為它代表 O_WRONY | O_CREAT | O_APPEND。
也可以通過使用 2 作為文件描述符以完全相同的方式重定向標準錯誤:
(gdb) p dup2(open("/tmp/process_stderr", 1089, 0777), 2)
此時,輸出已被重定向。但是,該進程已停止並且 gdb 已附加到該進程。
把通道 1 導向 /dev/null
(gdb) p dup2(open("/dev/null"), 1)
退出 gdb
(gdb) q
上述指令撰寫執行檔
p dup2(open("/tmp/process_stdout", 1089, 0777), 1)
p dup2(open("/tmp/process_stderr", 1089, 0777), 2)
q
例如執行檔名為 test
gdb -p process id -x test
gdb 內核出現異常
'open64' has unknown return type; cast the call to its declared return type
參考 :
可改用
(gdb) p (int)dup2((int)open("/tmp/my_stdout", 1089, 0777), 1)
reredirect
安裝
make;make install
用法 : 找出所有撰寫 檔案 pid
把 pid 通道 2 給 /dev/null
reredirect -e /dev/null pid
留言
張貼留言