cpio と tar および cp

cpio と tar および cp

cpio には、コピーアウト、コピーイン、パススルーの 3 つのモードがあることを知りました。

コピーアウト モードとコピーイン モードにおける cpio の tar に対する利点と欠点は何でしょうか。cpio を使用する方がよい場合と、tar を使用する方がよい場合とでは、どのような違いがあるのでしょうか。

パススルー モードと cp の cpio についても同様の質問があります。

ありがとう、よろしく!

答え1

これは非常に一般的な概要です:

CPIO は、バックアップの取得を含め、ファイル システムの複製をより適切に実行します。ハードリンク、FIFO、その他の非標準ファイル機能などを保持します。CPIO のほとんどの実装は、.tar ファイルの読み取りと書き込みを含め、TAR が実行するすべてのことを実行します。CPIO は通常、標準入力からアーカイブにファイルのリストを取得します。これにより、他のもの (などfind) からリストをパイプすることが非常に簡単になります。

CPIO パススルーは、ディレクトリ A からディレクトリ B にコピーするファイルのリストが非常に長い場合に非常に便利です。(たとえば、findシステム上で過去 2 年間に変更されたすべてのファイルを見つけるために使用できます)

TAR は、すべての標準ファイルをテープ (またはアーカイブ ファイル) にダンプするだけの優れた機能を備えています。使い方も少し簡単です (ほとんどの一般的なタスクの場合)。ほとんどの人の単純なバックアップ要求を簡単に満たします。これが TAR が人気を博している理由です。

さて、細かい点についてです。CPIO と TAR には、いくつかの異なるバージョンと実装があります。それぞれに異なる機能があり、コマンドライン オプションが異なるものもあります。一方ができて他方ができないことがあります。どちらかに制限がある場合は、もう一方を試してください。誰もがお気に入りのものを持っており、99% の確率でどちらかでタスクを達成できます。

答え2

AE 3 redhat では、cpio の出力ストリームのサイズ制限が 2 GB であることがわかりました。ただし、tar にはこの制限はありませんでした。

他のシステムでは制限が異なる場合があります。

答え3

コメントやその他の背景から、cpio今ではあまり普及しておらず、バージョン間で一貫性がないことがわかっています。しかし、cpio最近、破損した tar アーカイブを大量に処理するときに非常に役立つことがわかった利点が 1 つあります。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

cpioを使用する理由は、開かれたRPMファイルをリッピングする以外には見当たりません。配布またはrpm2cpioただし、場合によっては cpio が tar よりも適していることもあります。

歴史と人気

両方タールそしてcpio競合するアーカイブ形式であり、バージョン 7 Unix1979年に、そしてその後POSIX.1-1988、ただし次の標準であるPOSIX.1-2001ではtarのみが残った。1

Cpio のファイル形式は何度か変更されており、バージョン間で完全な互換性が維持されていません。たとえば、バイナリ ファイル情報データは ASCII エンコードで表現されるようになりました。

Tarはより広く知られており、長年にわたってより多用途になり、特定のシステムでサポートされる可能性が高くなります。Cpioは、次のようないくつかの分野でまだ使用されています。Red Hat パッケージフォーマット(RPM)ですが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、メモリ、アーカイブ サイズ (圧縮後) はかなり似ていると予想しています。

関連情報