linux里的文件被刪除后,空間沒有被釋放是因為在Linux系統中,通過rm或者文件管理器刪除文件將會從文件系統的目錄結構上解除鏈接(unlink).然而如果文件是被打開的(有一個進程正在使用),那么進程將仍然可以讀取該文件,磁盤空間也一直被占用。
解決方法:
1、先df -lh查看一下磁盤使用狀況
2、找到被刪除文件所在的分區,eg.opt分區
3、查看被刪除了的所有文件:lsof -n /opt |grep deleted
結果如下:[root@test app]# lsof -n /opt |grep delete
sftp-serv 8195 root 5r REG 104,6 8214888448 786452 /opt/software/resin-pro-3.1.10/log/jvm-app-a.log (deleted)
4、kill 8195
5、再運行lsof -n /opt |grep delete,應該沒上面的結果了。
6、再運行df -lh看是不是空間已經釋放了?
快速刪除大文件
1. 通過重定向到 Null 來清空文件內容清空或者讓一個文件成為空白的最簡單方式,是像下面那樣,通過 shell 重定向 null (不存在的事物)到該文件:
# > access.log
2.使用 : 符號
使用 : 符號,它是 shell 的一個內置命令,等同於 true 命令,它可被用來作為一個 no-op(即不進行任何操作)。另一種清空文件的方法是將 : 或者 true 內置命令的輸出重定向到文件中,具體如下:
# : > access.log # true > access.log
4. 使用 echo 命令清空文件
在這里,你可以使用 echo命令 將空字符串的內容重定向到文件中,具體如下:
# echo "" > access.log 或者 # echo > access.log
注意:你應該記住空字符串並不等同於 null 。字符串表明它是一個具體的事物,只不過它的內容可能是空的,但 null 則意味着某個事物並不存在。基於這個原因,當你將 echo命令 的輸出作為輸入重定向到文件后,使用cat命令來查看該文件的內容時,你將看到一個空白行(即一個空字符串)。要將 null 做為輸出輸入到文件中,你應該使用 -n 選項,這個選項將告訴 echo 不再像上面的那個命令那樣輸出結尾的那個新行。
# echo -n "" > access.log
