Cpioには、コピーアウト、コピーイン、パススルーの3つのモードがあることを学びました。
Tarよりもコピーアウトモードとコピーインモードでのcpioの長所と短所は何でしょうか。いつcpioを使用し、いつtarを使用するのが良いですか?
パススルーモードとcpでのcpioに関する同様の質問。
ありがとう、よろしく!
これは非常に一般的な概要です。
CPIOは、バックアップを取ることを含め、ファイルシステムを複製するためのより良い仕事をします。ハードリンク、FIFO、およびその他の非標準ファイル機能などを保持します。 CPIOのほとんどの実装は、.tarファイルの読み取りと書き込みを含め、TARが行うすべてのことを実行します。 CPIOは通常、ファイルのリストを標準入力からアーカイブに取り込みます。これにより、他の何か(find
など)からリストをパイプするのが非常に簡単になります。
CPIOパススルーは、ディレクトリAからディレクトリBにコピーするファイルのリストが非常に長い場合に非常に役立ちます(たとえば、find
を使用して、過去2年間に変更されたすべてのファイルを見つけることができます。システム上)
TARは、すべての標準ファイルをテープ(またはアーカイブファイル)との間で単純にダンプするという優れた仕事をします。使用するのは少し簡単です(最も一般的なタスクの場合)。ほとんどの人の単純なバックアップ要求を簡単に満たします。そしてその人気のほとんどはこの事実からです。
そして今、細かい印刷のために。 CPIOとTARの両方には、いくつかの異なるバージョンと実装があります。それぞれに異なる機能があり、一部には異なるコマンドラインオプションがあります。お互いができないところに、それぞれができることがあります。 1つに制限されていることに気付いた場合は、もう1つを試してください。誰もがお気に入りを持っており、99%の確率でどちらかがタスクを実行します。
AE 3 redhatで、cpioの出力ストリームのサイズ制限が2Gバイトであることがわかりました。ただし、tarにはこの制限はありませんでした。
他のシステムには異なる制限がある場合があります。
私もCPIOが好きです。ただし、出所が不明なファイルセット(エンドユーザーが作成したファイルなど)でcpio
を使用する場合は、NUL
で終了するファイル名を使用することをお勧めします。use-print0
フラグを見つけて追加します0
フラグをcpio
に。このようにして、奇妙な名前のファイル(CRNL
文字を含むファイルなど)が正しく処理されます。
cd / && find . -xdev -print0 | cpio -pmdu0 /mnt/
disrpm または rpm2cpio を介して、開いているRPMファイルをリッピングする以外の理由でcpioを使用する理由はわかりませんが、 tarよりcpioの方が望ましいコーナーケース。
tar と cpio はどちらも、 バージョン7 Unix で導入された競合するアーカイブ形式です。 )1979年に、その後 [〜#〜] posix [〜#〜] 。1-1988に含まれましたが、次の標準であるPOSIX.1-2001にはtarのみが残っていました。1。
Cpioのファイル形式は数回変更されており、バージョン間の完全な互換性は維持されていません。たとえば、バイナリファイル情報データのASCIIエンコード表現があります。
Tarはより広く知られており、長年にわたってより用途が広くなり、特定のシステムでサポートされる可能性が高くなっています。 Cpioは、 Red Hatパッケージ 形式(RPM)など、いくつかの領域でまだ使用されていますが、 RPM v5 (確かにあいまいです)cpioの代わりに xar を使用します。
Tarの方が一般的ですが、どちらもほとんどのUnixライクなシステムに存在します。これが 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)
Copy-out:これはアーカイブ作成用で、tar -pc
に似ています
コピーイン:これはアーカイブ抽出用で、tar -px
に似ています
パススルー:これは基本的に上記の両方であり、tar -pc … |tar -px
に似ていますが、1つのコマンドで実行されます(したがって、微視的に高速です)。これはcp -pdr
に似ていますが、cpioと(特に)tarの両方がよりカスタマイズ可能です。また、rsync -a
も検討してください。これは、ネットワーク接続全体でより一般的に使用されるため、人々が忘れがちです。
それらのパフォーマンスを比較していませんが、CPU、メモリ、およびアーカイブサイズ(圧縮後)は非常に似ていると思います。