這篇文章解決「檔案明明刪除了,`df` 卻顯示磁碟空間沒有釋放」的問題。我會先說明查詢硬碟使用狀況的方法,再教你在刪除檔案後,如何用 `lsof` 找出正在被程序使用而無法釋放空間的檔案,最後提供兩種解決方法。
如何查詢硬碟使用狀況?
```bash
df
```
使用 `df` 可以查看硬碟的使用狀況。
為什麼檔案刪除了空間卻沒釋放?
`lsof`(list open files)可以用來查看正在運行中的進程打開了哪些文件、目錄和套接字,是系統監測工具之一。(參見:好用的網管指令 - lsof)
關鍵在於 unlinked 文件:一個進程打開一個文件,然後將其設為 unlinked 狀態,則此文件資源仍能被進程使用,但是其訪問路徑已經被刪除了。因此,使用 `ls` 不能將其列出,只有當進程結束時,才能釋放文件佔用的資源。
如何找出 unlinked 檔案?
查找 unlinked 文件,選項 `+L`,作用是列出打開文件的連接數:
```cmd
lsof +L
```
指定連接數的上限,例如只列連接數為 0 以下的(即已被刪除但仍被打開的檔案):
```cmd
lsof +L1
```

問題發生的原因是什麼?
該被 deleted 的檔案雖然被刪除了,卻因為正在被某個程序使用著,因此被刪除的檔案沒有辦法釋放所使用的空間。
解決方法有哪些?
- 最簡單的方法是關閉或者重啟使用該檔案的程序(例如 httpd),當然也可以重啟作業系統。
- 若不想中斷服務,可以線上清空這個檔案:
```cmd
echo " " >/tmp/acess.log
```
延伸閱讀
- Linux 檢查硬碟使用量:df 指令完整教學:同樣聚焦 Linux、df,可接著比較不同情境的做法。
- Linux 基本操作指令介紹:同樣聚焦 Linux,可接著比較不同情境的做法。
- Linux 目錄刪除教學:rm 與 rmdir 指令用法整理:同樣聚焦 Linux,可接著比較不同情境的做法。
常見問題
為什麼刪除檔案後 df 顯示的磁碟空間沒有變化?
因為該檔案雖然從目錄結構中被刪除,但仍被某個運行中的程序打開(unlinked 狀態),資源要等到程序結束才會釋放。
用什麼指令可以找出這些被刪除但仍被佔用的檔案?
使用 `lsof +L1`,它會列出連接數為 0、也就是「已刪除但仍被打開」的檔案,並顯示佔用它的程序。
不重啟服務有辦法釋放空間嗎?
有。可以在線上直接清空該檔案,例如 `echo " " >/tmp/acess.log`,把檔案內容清空即可釋放空間,服務不必中斷。
參考資料
最後更新
2026-08-28(原文發布於 2020-03-18,本文保留原始筆記內容並補上 GEO 結構。)
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2020-03-18
