在 Linux 中建立空檔案,請執行 touch filename 來建立真正的零位元組檔案,或使用 shell 重新導向搭配 > filename 將現有檔案截斷為空。這兩個指令在每個發行版上都是標準答案,且不需要額外的套件。除了教科書式的答案之外,Linux 實際上至少提供六種可靠的路徑來產生零位元組或精確大小的空檔案,而正確的選擇取決於你在意的是 inode、磁碟上的配置空間、檔案的位元組數,還是其內容。一個檔案在邏輯上也可能是空的,但仍會透過檔案系統的配置區塊佔用空間。對大多數開發者來說,touch 和 > filename 已能滿足日常需求。當測試環境要求特定位元組大小的檔案時,truncate、fallocate 和 dd 等指令就會派上用場。而當目標是在不接觸終端機的情況下,於任何作業系統上重現一個精確大小的空檔案時,一個在本機執行的瀏覽器生成工具就值得了解了。

how to create empty file in linux
如何在 Linux 中逐步建立空檔案

六個可在 Linux 中建立空檔案的指令

每個主流的 Linux 發行版都已將下列指令內建於 coreutils 或 shell 本身,因此不需要額外安裝。它們的差異在細微之處,而這些差異在腳本、CI 管線或測試套件開始依賴它們時就會變得重要。

  • touch filename 會在檔案不存在時建立一個沒有內容的普通檔案;否則它只會更新存取與修改時間戳記。所產生的檔案是真正的零位元組檔案,佔用一個 inode 但沒有資料區塊。
  • > filename 是 shell 重新導向,若檔案不存在則會建立,若已存在則會將其截斷為零位元組。當檔案很大時,它比 touch 更快,因為它不會逐步重新配置區塊。
  • : > filename 會產生與 > filename 相同的結果,但開頭的冒號讓意圖更明確,並可避免因遺失指令的殘留重新導向而產生的 shell 錯誤。
  • echo -n > filename 或 printf '' > filename 在腳本中需要以引號表示空字串以求清晰時相當實用,雖然最終檔案仍然是零位元組。
  • truncate -s 0 filename 會將檔案大小精確設定為零位元組,並在檔案不存在時建立它。預設情況下,這會產生一個稀疏檔案,雖然回報為零位元組,但幾乎不配置磁碟區塊,直到有東西寫入為止。
  • dd if=/dev/null of=filename 會從 /dev/null 讀取、寫入空內容,並建立一個普通的零位元組檔案。速度比 touch 稍慢,但它是其他方法都不可用時的備用方案,包括精簡容器在內。

上述六個選項產生的檔案,透過 stat 檢視都會回報為零位元組。它們的差異在於如何處理磁碟配置,以及在檔案已存在時的行為表現。

在 Linux 中指定精確的位元組大小

有時候「空的」其實代表「精確 N 個位元組」。對於只接受特定大小範圍檔案的上傳驗證器、會雜湊固定長度二進位區塊的校驗碼管線,或是需要呈現特定百分比的下載進度指示器,位元組數必須完全相符。

指令產生的檔案備註
truncate -s N file預設為稀疏檔案;回報為 N 位元組若檔案必須先存在,請使用 --no-create。搭配 -s 時,稀疏檔案為預設行為。
fallocate -l N file完整配置;未寫入實際的零對大檔案而言速度最快,因為核心保留了空間卻不實際填入。
dd if=/dev/zero of=file bs=1 count=N完整配置並填入 0x00速度最慢,但會產生實際位元組全為零的檔案,這對於壓縮與雜湊測試很重要。
head -c N /dev/zero > file完整配置並填入 0x00上述 dd 指令的便捷簡寫。

這裡的 MiB 與位元組之間的換算很重要。邊界值 50 MiB 等於 50 × 1024 × 1024 = 52,428,800 位元組,這也是下文將介紹的瀏覽器工具所能接受的最大虛擬檔案大小。根據你希望使用稀疏空間還是完整配置空間來選擇 truncate、fallocate 或 dd,然後在正式環境中沿用開發時所用的同一個指令,以確保磁碟上的行為一致。

如何在 Linux 中建立空檔案

  1. 在想要建立檔案的資料夾中開啟終端機,或使用 cd 切換到該目錄。
  2. 執行 touch newfile.txt 以建立一個普通的零位元組檔案。將 newfile.txt 替換為你的檔案系統所接受的名稱,避免使用斜線與保留的裝置名稱,例如 NUL 或 COM1。
  3. 使用 stat newfile.txt 或 wc -c newfile.txt 確認大小。對於真正的空檔案,兩者都應回報 0。
  4. 如果你需要特定位元組大小的檔案,請將步驟 2 替換為 truncate -s 52428800 newfile.bin、fallocate -l 52428800 newfile.bin,或 dd if=/dev/zero of=newfile.bin bs=1 count=52428800。
  5. 使用 stat --format=%s newfile.bin 重新確認位元組數是否符合要求。
  6. 視需要將該檔案用於上傳測試、附件驗證、進度指示器或校驗碼管線。

對於腳本,建議使用 : > "$path" 或 truncate -s 0 "$path",因為兩者在檔案已存在以及 shell 中設定了 noclobber 時,行為都可預期。

何時瀏覽器工具是更合適的選擇

當你已經登入 Linux 伺服器、CI 執行器或容器時,shell 指令就是正確的答案。但當你需要將同一個精確大小的檔案交給使用 macOS 或 Windows 的同事、想要在不啟動 Linux 虛擬機的情況下測試網頁上傳表單,或不想在精簡容器上安裝 fallocate 等工具時,shell 指令就會變得不便。一個在本機產生檔案的瀏覽器工具可以避開這些步驟,並讓所有位元組保留在當前的分頁中。

Dummy File Generator 會在記憶體中建構一個 Blob、根據要求的大小進行驗證,並提供一般下載連結。建構與下載過程都在當前的瀏覽器分頁中進行;不會上傳到任何後端。該工具接受安全的檔案名稱、介於 1 到 52,428,800 位元組(恰好 50 MiB)之間的整數位元組大小,以及從零位元組、安全隨機位元組或重複 UTF-8 文字中選擇的內容模式。

在瀏覽器中產生精確大小的空檔案

  1. 在任何現代瀏覽器中開啟 Dummy File Generator。
  2. 輸入安全的檔案名稱,例如 test-50mb.bin。該工具會拒絕空名稱、前後空白、點路徑、路徑分隔符號、控制字元,以及 Windows 的裝置名稱(例如 CON 和 NUL)。
  3. 輸入精確的整數位元組大小。最小檔案為一個位元組,可接受的最大值恰好是 52,428,800 位元組。大小欄位僅接受數字,不接受正負號、小數點、單位後綴或前後空白。
  4. 選擇內容模式:
    • 零位元組(Zero bytes) 會使用有界 Uint8Array 區段,在整個檔案中僅寫入 0x00 位元組值。這是最接近「仍具有非零位元組數」的空檔案。
    • 安全隨機位元組(Secure random bytes) 會使用瀏覽器的 Crypto.getRandomValues API,每次最多處理 65,536 位元組的區塊(這是 API 的上限)。其結果無法壓縮,非常適合用於校驗碼測試。
    • 重複 UTF-8 文字(Repeated UTF-8 text) 會使用 TextEncoder 將你提供的模式編碼,並重複擴充至所要求的位元組數。如果結尾處只能放入部分字元,工具會以 ASCII 空白字元填充,以確保檔案保持有效的 UTF-8 編碼。
  5. 點擊 Generate,確認顯示的位元組摘要與所揭露的內容政策,然後點擊下載連結。在發布之前,Blob 會經過驗證以符合所要求的大小,因此畫面上顯示「52,428,800 bytes」的檔案,下載到磁碟上恰好也是 52,428,800 位元組。

由於位元組是在瀏覽器中產生,且下載連結為本機的 ObjectURL,因此不會將任何位元組、檔案名稱或文字模式傳送至後端服務。關閉或編輯頁面會撤銷該 URL,因此如果你再次需要該檔案,請重新產生。

在 Shell 方法與瀏覽器工具之間做選擇

使用下列比較表為你的團隊挑選一個預設方案,無須重讀每一個章節。

情境最佳選擇原因
在 Linux 伺服器上快速建立佔位檔案touch 或 > file速度最快、零相依性,並回傳真正的零位元組檔案。
上傳限制所需的精確位元組數檔案truncate -s N 或 dd if=/dev/zero可預測、可腳本化,且在 Linux 主機間具有可重現性。
用於校驗碼測試的不可壓縮資料dd if=/dev/urandom bs=1 count=N 或瀏覽器隨機模式兩者皆產生非重複位元組;shell 版本只能透過重新執行指令來重現。
無需終端機的跨平台範例檔瀏覽器工具適用於 Windows 與 macOS,在本機產生,且無須安裝 coreutils。
副檔名僅供命名、不代表格式的檔案使用零位元組模式的瀏覽器工具.png 或 .pdf 的下載名稱並不會產生真正的圖片或 PDF;它只是一個內部為零或重複位元組的檔名。
大於 50 MiB 的檔案Shell 指令瀏覽器工具要求的大小上限恰好為 52,428,800 位元組;shell 指令則可依可用磁碟空間進行擴充。

一個實用的經驗法則:對線上伺服器、CI 執行器以及任何已呼叫 coreutils 的工作流程使用 shell;而當你需要一個可攜的產出檔、離線建置,或是一個能在下載前透過畫面上的摘要來驗證其精確大小與內容政策的檔案時,請選擇瀏覽器工具。

如果你正在權衡各種選項,如何在瀏覽器中於 Windows 建立空檔案 對此有詳細說明。

如果你正在權衡各種選項,在 Linux 中不使用 tree 指令取得目錄樹 對此有詳細說明。