cpio VS tar 和 cp

cpio VS tar 和 cp

我剛剛了解到cpio有三種模式:copy-out、copy-in和pass-through。

我想知道 cpio 在複製輸出和複製輸入模式下相對於 tar 的優點和缺點是什麼。什麼時候使用 cpio 比較好,什麼時候使用 tar 比較好?

直通模式下的 cpio 與 cp 的類似問題。

感謝致敬!

答案1

這是一個非常籠統的概述:

CPIO 在複製檔案系統方面做得更好,包括備份。它保留了硬連結、fifo 和其他非標準檔案功能。 CPIO 的大多數實作都執行 TAR 執行的所有操作,包括讀取和寫入 .tar 檔案。 CPIO 通常會從標準輸入取得檔案清單以進行歸檔;這使得從其他東西(例如)透過管道傳輸清單變得非常容易find

如果您想要從目錄 A 複製到目錄 B 的檔案清單很長,則 CPIO 直通非常有用find

TAR 做得更好,只需將所有標準檔案轉儲到磁帶(或存檔檔案)或從磁帶(或存檔檔案)轉儲即可。使用起來更簡單(對於大多數常見任務)。輕鬆滿足大多數人簡單的備份需求;而它的受歡迎大部分就是源自於這個事實。

現在是細則。 CPIO 和 TAR 有多個不同的版本和實作。每一種都有不同的功能,有些有不同的命令列選項。有些事情彼此可以做,對方則不能;如果您發現自己受到其中一種限制,請嘗試另一種。每個人都有自己最喜歡的,在 99% 的情況下,其中一個都能完成任務。

答案2

在 AE 3 redhat 上,我發現 cpio 對輸出流的大小限制為 2 GB。然而,tar 沒有這個限制。

其他系統可能有不同的限制。

答案3

我從評論和其他背景中了解到,cpio現在不太普遍並且版本之間不一致。但cpio我最近發現,在處理大量損壞的 tar 檔案時,有一個優點非常寶貴。它不會在 tar 檔案中出現第一個錯誤時停止,而是嘗試跳過錯誤資料並盡可能提取資料。例如,

tar xf ./sample.corrupt.tar

將列印

tar: Skipping to next header
tar: Exiting with failure status due to previous errors

在第一次遇到錯誤之後,而

cpio -F ./sample.corrupt.tar -i -v

將列印提取的文件,並且對於每個錯誤將列印:

cpio: invalid header: checksum error
cpio: warning: skipped 6 bytes of junk

cpio: invalid header: checksum error
cpio: warning: skipped 2 bytes of junk

etc...

tar 格式期望每個存檔標頭在 512 邊界上對齊,但如果損壞導致標頭未對齊,cpio請盡最大努力提取盡可能多的內容

答案4

我認為除了翻錄打開的 RPM 檔案之外,沒有任何理由使用 cpio,透過解調或者rpm2cpio,但可能存在 cpio 優於 tar 的極端情況。

歷史和受歡迎程度

兩個都柏油CPIO是引進的競爭存檔格式版本 7 Unix1979年,然後納入POSIX.1-1988,儘管下一個標準 POSIX.1-2001 中僅保留 tar1

cpio 的檔案格式已更改多次,且版本之間並未保持完全相容。例如,現在有二進位檔案資訊資料的 ASCII 編碼表示。

Tar 更廣為人知,多年來變得更加通用,並且更有可能在給定係統上得到支援。 CPIO 仍在少數領域使用,例如紅帽包格式 (RPM),不過轉速 v5(這確實是晦澀難懂的)使用西拉而不是 cpio。

兩者都存在於大多數類 Unix 系統上,儘管 tar 更常見。這裡有Debian 的安裝統計:

#rank  name    inst    vote    old  recent  no-files  (maintainer)
   13   tar  189206  172133   3707   13298        68  (Bdale Garbee)
   61  cpio  189028   71664  96346   20920        98  (Anibal Monsalve Salazar)

模式

複印輸出:這用於存檔創建,類似於tar -pc

抄入:這是用於存檔提取,類似於tar -px

直通:這基本上是上述兩者,類似於tar -pc … |tar -px但在單一命令中(因此微觀上更快)。它與 類似cp -pdr,儘管 cpio 和(尤其是)tar 都具有更多的可自訂性。也要考慮rsync -a人們經常忘記的,因為它更通常透過網路連線使用。

我沒有比較它們的性能,但我預計它們在 CPU、記憶體和存檔大小(壓縮後)方面將非常相似。

相關內容