CPIO(複製輸入和輸出)歸檔格式是一種用於在 Unix 和類 Unix 作業系統上歸檔和解壓縮檔案的檔案格式。它最初於 1980 年代初期作為 UNIX System V 作業系統的一部分開發,並從此成為在各種平台上歸檔和分發檔案的標準格式。
CPIO 格式旨在簡單且有效率,允許建立包含多個檔案和目錄的歸檔。它支援二進位和 ASCII 檔案格式,使其與廣泛的系統和應用程式相容。
CPIO 歸檔包含一系列檔案標頭,後接檔案資料。每個檔案標頭都包含有關檔案的元資料,例如其名稱、大小、擁有權、權限和修改時間。檔案資料儲存在標頭之後,下一個檔案標頭緊接在資料之後。
CPIO 標頭格式隨著時間演進,不同的版本支援不同的功能和限制。最常見的標頭格式是二進位標頭格式和 ASCII 標頭格式,也稱為「新」標頭格式。
二進位標頭格式使用固定大小的結構來儲存檔案元資料,每個欄位佔用特定數量的位元組。此格式更緊湊且有效率,但由於潛在的位元序和對齊問題,在不同系統之間的可移植性較低。
ASCII 標頭格式在 SVR4(System V Release 4)中引入,使用可變長度結構,其中 ASCII 編碼的欄位以換行符號分隔。此格式更易於人類閱讀和移植,但在空間和處理方面效率較低。
若要建立 CPIO 歸檔,請使用「cpio」指令加上「-o」(輸出)選項,後接所需的格式和要包含的檔案或目錄清單。例如,「cpio -o -H newc < file_list > archive.cpio」會使用 ASCII 標頭格式建立歸檔,從「file_list」中讀取檔案清單,並將歸檔寫入「archive.cpio」。
若要從 CPIO 歸檔中解壓縮檔案,請使用「cpio」指令加上「-i」(輸入)選項,後接所需的格式和任何其他選項。例如,「cpio -i -d < archive.cpio」會從「archive.cpio」中解壓縮檔案,並建立任何必要的目錄。
CPIO 歸檔可以串接以建立包含多組檔案的較大歸檔。這對於分發軟體套件或建立備份歸檔很有用。若要串接歸檔,只需使用類似「cat archive1.cpio archive2.cpio > combined.cpio」的指令將一個歸檔附加到另一個歸檔即可。
CPIO 歸檔也可以使用各種壓縮演算法(例如 gzip、bzip2 或 xz)進行壓縮,以減小其大小。壓縮歸檔通常具有表示壓縮方法的檔案副檔名,例如 gzip 壓縮歸檔的「.cpio.gz」。
CPIO 格式的優點之一是它能夠保留檔案權限、擁有權和時間戳記,使其適合建立檔案階層的精確副本。但是,它不支援加密、完整性檢查或多卷歸檔等功能,這些功能在較進階的歸檔格式(例如 tar)中可用。
儘管 CPIO 格式簡單,但它已在 Unix 和 Linux 環境中廣泛使用數十年。它通常與其他工具(例如「find」或「rpm」)結合使用,以建立軟體套件、initramfs 映象或備份歸檔。
近年來,CPIO 格式已在很大程度上被更現代且功能更豐富的歸檔格式(例如 tar 和 ZIP)所取代。然而,它仍然是 Unix 歷史的重要組成部分,並且仍用於某些情況,特別是在嵌入式系統和低階系統工具中。