linux裏的文件被刪除後,空間沒有被釋放是由於在Linux系統中,經過rm或者文件管理器刪除文件將會從文件系統的目錄結構上解除連接(unlink).然而若是文件是被打開的(有一個進程正在使用),那麼進程將仍然能夠讀取該文件,磁盤空間也一直被佔用。
解決方法:
一、先df -lh查看一下磁盤使用情況
二、找到被刪除文件所在的分區,eg.opt分區
三、查看被刪除了的全部文件: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)
四、kill 8195
五、再運行lsof -n /opt |grep delete,應該沒上面的結果了。
六、再運行df -lh看是否是空間已經釋放了?linux
1. 經過重定向到 Null 來清空文件內容清空或者讓一個文件成爲空白的最簡單方式,是像下面那樣,經過 shell 重定向 null (不存在的事物)到該文件:shell
# > access.logapp
2.使用 : 符號jvm
使用 : 符號,它是 shell 的一個內置命令,等同於 true 命令,它可被用來做爲一個 no-op(即不進行任何操做)。另外一種清空文件的方法是將 : 或者 true 內置命令的輸出重定向到文件中,具體以下:.net
# : > access.log # true > access.logblog
4. 使用 echo 命令清空文件進程
在這裏,你可使用 echo命令 將空字符串的內容重定向到文件中,具體以下:字符串
# echo "" > access.log 或者 # echo > access.logget
注意:你應該記住空字符串並不等同於 null 。字符串代表它是一個具體的事物,只不過它的內容多是空的,但 null 則意味着某個事物並不存在。基於這個緣由,當你將 echo命令 的輸出做爲輸入重定向到文件後,使用cat命令來查看該文件的內容時,你將看到一個空白行(即一個空字符串)。要將 null 作爲輸出輸入到文件中,你應該使用 -n 選項,這個選項將告訴 echo 再也不像上面的那個命令那樣輸出結尾的那個新行。test
# echo -n "" > access.log