cpio には 3 つの動作モードがあります: 1. コピーアウト モード (バックアップ ファイルをパッケージ化し、そのファイルをアーカイブ パッケージにコピーするために使用します); 2. コピーイン モード (アーカイブ パッケージ ファイルからファイルを復元するために使用します)。標準入力からアーカイブ パッケージを読み取る、アーカイブ パッケージ内のファイルを読み取る、またはアーカイブ パッケージの内容を一覧表示することができます; 3. コピーパス モードは、あるディレクトリ ツリーから別のディレクトリ ツリーにファイルをコピーするために使用されます。
#このチュートリアルの動作環境: linux7.3 システム、Dell G3 コンピューター。
Linux では、cpio は、cpio アーカイブ ファイルの作成、アーカイブ ファイルからのファイルの抽出、またはあるディレクトリから別のディレクトリへのファイルのコピーに使用されるデータのバックアップおよび回復ツールです。生成されたアーカイブ ファイルは、ディスク ファイルにすることも、テープなどのデータ ストリーミング メディアに書き込むこともできます。 cpio は、バイナリおよび ASCII ヘッダー データ形式の cpio アーカイブ ファイルを処理できるだけでなく、さまざまな tar 形式のアーカイブ ファイルを読み書きすることもできます。互換性を維持するために、特に指定がない限り、cpio は通常、バイナリ ヘッダー データ形式でアーカイブ ファイルを作成します。
cpio は tar コマンドに似ており、ファイルを cpio または tar 形式でアーカイブ パッケージ ファイルにコピーしてパッケージ化したり、アーカイブ パッケージ ファイルからファイルをコピーしたりできます。アーカイブ パッケージ ファイルは、ディスク上のファイルまたはテープなどのデバイス ファイルです。
cpio コマンドは、アーカイブ ファイルからファイルを抽出するときに、どのアーカイブ ファイルが読み取られているかを自動的に識別し、異なるシステムで作成された異なるバイト オーダーを持つアーカイブ ファイルを読み取ることもできます。
cpio には、次の表に示すように 3 つの動作モードがあります。
cpio 3 つの動作モード | |
---|---|
動作モード | モードの説明 |
コピーアウト モード | このモードバックアップ ファイルをパッケージ化するために使用されます。 cpio はファイルをアーカイブ パッケージにコピーします。 cpio によってパックされるファイル名は標準入力から取得され、標準入力からファイル名のリストが 1 行に 1 つずつ取得されます。 一般に、標準入力から他のコマンドへの標準入力の出力はパイプラインを介して行われるのが一般的です。最も一般的な方法は、find コマンドを使用してファイル名のリストを生成し、それを cpio にパイプすることです。 このようにして、cpio はバックアップされるデータがどこから来たのかを知ることができます。アクセス権限のないディレクトリへの入力によるトラブルを軽減するには、find の後に - Depth オプションを追加する必要があります。 デフォルトでは、cpio はアーカイブ パッケージ ファイルを標準出力に書き込むため、リダイレクト記号 > または >> を使用してアーカイブ パッケージ データ出力をファイルにリダイレクトする必要があります。 |
コピーイン モード | このモードは、アーカイブされたパッケージ ファイルからファイルを復元するために使用されます。 cpio は、標準入力からアーカイブ パッケージを読み取り、アーカイブ パッケージ内のファイルを読み取るか、アーカイブ パッケージの内容を一覧表示します。 cpio は、アーカイブ パッケージから読み取ったデータを標準出力に書き込みます。 |
コピーパス モード | cpio は、あるディレクトリ ツリーから別のディレクトリ ツリーにファイルをコピーします。コピーイン操作とコピーアウト操作を組み合わせますが、アーカイブ パッケージは使用されません。 。 CPIO には、標準入力から読み取るファイルのリストが与えられ、ターゲット ディレクトリは、非オプションのコマンド ライン パラメータとして与えられます。 |
cpio は、バイナリ、古い ASCII、新しい ASCII、crc、HPUX バイナリ、HPUX 古い ASCII、古い tar、および POSIX.1 tar のアーカイブ形式をサポートします。
cpio の一部のオプションは、対応する動作モードでのみ使用できます。一般的に使用されるコマンド オプションの形式は次のとおりです:
[root@initroot ~]# cpio -ovcB > [file|device] #备份 [root@initroot ~]# cpio -ivcdu < [file|device] #还原 [root@initroot ~]# cpio -ivct < [file|device] #察看
コピーアウト モード (バックアップ)使用するオプションとパラメータ:
#-o: データをファイルまたはデバイスにコピーします。
#-B: デフォルトのままにします。ブロックは 5120 バイトまで増やすことができ、デフォルトは 512 バイトです! これの利点は、大きなファイルのストレージを高速化できることです (i ノードの概念を参照してください)
# コピーイン モード (復元) で使用されるオプションとパラメーター:
#共通のオプションとパラメータ:
- #-i: ファイルまたはデバイスからシステムの外にデータをコピーします
- -d: ディレクトリを自動的に作成します! cpio を使用してバックアップされたデータは同じディレクトリにない可能性があるため、復元中に cpio が新しいディレクトリを作成できるようにする必要があります。この場合、- d オプションが必要です。 Help!
- -u: 古いファイルを新しいファイルで自動的に上書きします!
- #-t: -i オプションが必要です。 cpio で作成されたファイルまたはデバイスの内容を「表示」するために使用できます
-v: 保存プロセス中にファイル名を画面に表示できるようにします
/boot ディレクトリ内のすべてのファイルを検索し、/tmp/boot.cpio アーカイブ ファイルにバックアップします。- #-c: 新しいポータブル形式の保存方法
##cpio は標準入力からデータを読み取り、処理されたデータを標準出力に出力するため、cpio はパイプおよびリダイレクト シンボルとともに使用する必要があります。
[root@initroot ~]# cd / [root@initroot /]# find boot -print boot boot/grub boot/grub/gfxblacklist.txt boot/grub/unicode.pf2 boot/grub/locale ...省略...
find コマンドは、ブート ディレクトリ内のすべてのファイルを検索できます。ファイルを含む ディレクトリと一緒に! ここでのブートは絶対パスではなく相対パスであることに注意してください!
[root@initroot /]# find boot | cpio -ocvB > /tmp/boot.cpio [root@initroot /]# ls -lh /tmp/boot.cpio -rw-r--r-- 1 peter peter 193M Feb 10 15:59 /tmp/boot.cpio [root@initroot ~]# file /tmp/boot.cpio /tmp/boot.cpio: ASCII cpio archive (pre-SVR4 or odc)
find boot を使用してファイル名を見つけ、出力をパイプライン経由で cpio に渡します | そして、リダイレクト シンボルを介したデータ > /tmp/boot.cpio ファイルに出力! 上記のパラメータ boot は絶対パスではなく相対パスです。cpio はパスに対して特別な処理を行いません。指定されたデータはすべて受信します。 。ここで絶対パスが使用されている場合、find コマンドの出力も絶対パスになり、cpio が受け取るものも絶対パスになります。次に、ファイルがアーカイブ ファイルからコピーされるとき、それは絶対パスであるため、コピーされたファイルは確実に上書きされます。元の /boot ディレクトリ内のファイルを削除してください。これは非常に危険です。そのため、cpio を指定して find コマンドを使用してファイルをパッケージ化する場合は、必ず相対パスを使用してください。 tar コマンドの -P オプションを参照してください。!!
次に、アーカイブ パッケージ ファイル /tmp/boot.cpio を /root/ ディレクトリに解凍します。
[root@initroot ~]# cd ~ [root@initroot ~]# cpio -idvc < /tmp/boot.cpio [root@initroot ~]# ls -al /root/boot
/root であることがわかります。 /boot と /boot の内容はまったく同じです!
cpio はシステム データをテープ ドライブに完全にバックアップできます:
[root@initroot ~]# find / | cpio -ocvB > /dev/st0
テープ ドライブからデータを復元します:
[root@initroot ~]# cpio -idvc < /dev/st0
cpio は、/dev にあるデバイス ファイルを含むあらゆるファイルをバックアップできます! これは非常に重要なコマンドです!
cpio は、ファイル名を作成する find などの他のプログラムと連携する必要があるため、cpio は非常に重要なコマンドを実行します。パイプライン コマンドおよびデータ フロー リダイレクトとの違いは密接な関係があります!
実際、/boot ディレクトリ内の /boot/initramfs-xxx または /boot/initrd.img-xxx-generic ファイルも cpio アーカイブです。ファイル。
ファイルを /tmp/initramfs ディレクトリに解凍して、このアーカイブ パッケージに含まれるファイルを確認できます:
[root@initroot ~]# file initrd.img-4.15.0-65-generic initrd.img-4.15.0-65-generic: ASCII cpio archive (SVR4 with no CRC) [root@initroot ~]# mkdir /tmp/initramfs [root@initroot ~]# cd /tmp/initramfs [root@initroot initramfs]# cpio -idv < /boot/initrd.img-4.15.0-65-generic . kernel kernel/x86 kernel/x86/microcode kernel/x86/microcode/AuthenticAMD.bin 56 blocks
ここでは -c オプションが削除されていることに注意してください。 c オプションを使用すると、cpio は次のプロンプトを表示します:
cpio: premature end of file
-c オプションを削除して、アーカイブ パッケージ ファイルを正常に解凍してください。
関連する推奨事項: 「
Linux ビデオ チュートリアル」
以上がLinux cpio の 3 つの動作モードとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。