Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

cpio(1)

名前

cpio - アーカイブからのファイルの抽出または復元

形式

cpio -i [-bBcdfkmPrsStuvV6@/
] [-C bufsize] [
-E file] 
     [-H header] [-I  [
-M message]] [-R 
id] [pattern]...
cpio -o [-aABcLPvV@/] [
-C bufsize] [-H 
header] 
     [-O file [-M 
message]]
cpio -p [-adlLmPuvV@/] [
-R id] directory

説明

cpio コマンドは、ファイルを cpio アーカイブへコピーしたり、cpio からコピーしたりします。cpio アーカイブは複数のボリュームにわたることができます。–i–o–p の各オプションは、実行するアクションを選択します。以下に、これらの各処理を説明します。これらの処理は相互に排他的です。

復元モード

cpio –i (copy in、復元) は、以前に cpio –o コマンドが生成した出力を標準入力としてファイルを抽出します。pattern の 1 つに一致する名前を持つファイルのみが選択されます。pattern についての詳細は、後述する「オペランド」の項および sh(1) の説明を参照してください。抽出されたファイルは条件に応じて作成され、以下に述べるオプションに基づいて現在のディレクトリにコピーされます。ファイルのアクセス権は前の cpio o コマンドと同じです。所有者とグループは、現在のユーザーが {PRIV_FILE_CHOWN_SELF} 特権を保持している場合を除き、現在のユーザーと同じです。chown(2) を参照してください。このような場合は、所有者およびグループは、前に実行した cpio -o コマンドの結果と同じになります。cpio –i が作成しようとするファイルがすでに存在していて、さらに既存のファイルが同じか新しいバージョンのときは、メッセージが出力されファイルは置換されないので注意してください。–u オプションは既存のファイルを無条件に置換するときに使用します。

保管モード

cpio –o (copy out、保管) は、ファイルのパス名のリストを標準入力から読み込んで、それらのファイルをパス名およびステータス情報と共に、cpio アーカイブ形式で標準出力へコピーします。出力は、デフォルトでは 8192 バイト境界でブロック化されますが、(–B または –C オプションを使用して) ユーザーが指定したブロックサイズまたは (CTC テープのように) デバイスに依存したブロックサイズでの出力も可能です。

パスモード

cpio –p (pass、パス) は、ファイルのパス名のリストを標準入力から読み込んで、条件に応じてファイルを作成し、以下のオプションに基づいてコピー先のディレクトリへコピーします。

ソースファイルの基盤となるファイルシステムが pathconf(2) で報告されるホールの検出をサポートしており、かつそのファイルが疎ファイルで、宛先ファイルがシーク可能である場合、その疎ファイル内のホールはパスモードに保持されます。それ以外の場合は、ホールが 0 で埋められます。

cpio は 4 バイトワードを前提としています。

文字デバイスへの出力 (–o) または文字デバイスからの入力 (–i) 時に、cpio が媒体の終わりに到達し、さらに –O オプションや –I オプションが使用されていないと、cpio は次のメッセージを表示します。

To continue, type device/file name when ready.

継続するには、媒体を交換して文字型特殊デバイス名を入力して RETURN キーを押してください。

オプション

サポートしているオプションは、次のとおりです。

–i

(copy in、復元) 標準入力からアーカイブを読み込んで、条件に応じて、アーカイブに含まれているファイルを抽出し、現在のディレクトリツリーに配置します。

–o

(copy out、保管) ファイルのパス名のリストを標準入力から読み込んで、そのファイルを cpio 形式で標準出力へコピーします。

–p

(pass、パス) ファイルのパス名のリストを標準入力から読み込んで、条件に応じて、読み込んだファイルを宛先のディレクトリツリーへコピーします。

前述の –i–o–p オプションのいずれかを指定したあとに、次のオプションを任意の順序で指定できます。

–0

名前に NEWLINES を含むファイルをアーカイブできるように、NEWLINE ではなく NULL 文字で終わるファイル名のリストを読み込みます。この種のファイル名リストを生成する方法としては、find とともに –print0 オプションを使用する方法があります。

このオプションは、保管モードとコピーパスモードで使用できます。

–a

コピー後に入力ファイルのアクセス時間をリセットして、cpio によるアクセスの痕跡を消去します。cpio –pla が指定されていると、リンクされたファイルのアクセス時間はリセットされません。

–A

ファイルをアーカイブへ追加します。–A オプションには –O が必要です。このオプションは、ファイル、またはハードディスクパーティションのアーカイブにのみ有効です。アーカイブ内に以前から存在する、リンクされたファイルへの影響は予測不能です。

–b

各ワード内のバイト順を逆にします。–i オプションとのみ使用してください。

–B

入出力を 5120 バイトでブロック化します。このオプションと –C オプションを使用していないときのデフォルトのバッファサイズは 8192 バイトです。–B–p (pass、パス) オプションには適用されません。

–c

可搬性のために、ASCII 文字形式でヘッダー情報を読み書きします。このヘッダー形式に関してユーザー ID またはグループ ID の制限はありません。SVR4 をベースとしたマシン間ではこのオプションを使用してください。また種類が不明なマシン間では –H odc オプションを使用してください。–c オプションは、SVR4 ベースのシステムでだけサポートされている拡張デバイス番号を使うことを意味しています。SunOS 4 または Interactive UNIX と、SunOS 5.12 との間でファイルを転送する場合は、–H odc を使用してください。

–C bufsize

入出力を bufsize 単位でブロック化します。bufsize は正の整数で置き換えられます。このオプションと –B オプションを使用していないときのデフォルトのバッファサイズは 8192 バイトです。–C–p (pass、パス) オプションには適用されません。

–d

必要に応じてディレクトリを作成します。

–E file

アーカイブから抽出するファイル名のリストを含む (1 行 1 ファイル名の) 入力ファイル (file) を指定します。

–f

pattern で指定されたものを除くすべてのファイルを抽出します。pattern については「オペランド」の項を参照してください。

–H header

header 形式でヘッダー情報を読み書きします。コピー先とコピー元のマシンが異なるタイプのときは常にこのオプション (または –c オプション) を使用してください。このオプションは、–c および –6 と同時には使用できません。

header として有効な値は以下のとおりです。

bar

bar ヘッダーと形式。–i オプション (読み取り専用) とのみ使用されます。

crc | CRC

拡張デバイス番号とファイル単位のチェックサムを持った ASCII ヘッダー。このヘッダー形式に関してユーザー ID またはグループ ID の制限はありません。

odc

スモールデバイス番号を持った ASCII ヘッダー。これは IEEE/P1003 データ交換標準による cpio のヘッダーと形式です。他のヘッダー形式と比べて、最も幅広い可搬性を提供します。POSIX に準拠したシステム間でファイル転送を行う場合の公式の形式です (standards(7) を参照)。SunOS 4 または Interactive UNIX と通信する場合には、この形式を使用してください。このヘッダー形式では、ヘッダーにユーザー ID とグループ ID を最大 262143 まで格納できます。

tar または TAR

tar ヘッダーと形式。これは 2097151 までのユーザー ID とグループ ID を格納できる、古い tar ヘッダー形式です。–i オプションと一緒に使用して、古い形式のアーカイブを読み込むためにのみ用意されています。

このアーカイブ形式を –o オプションと一緒に使用すると、"ustar" 形式を指定した場合と同じ効果が得られます。つまり、出力アーカイブは ustar 形式になり、アーカイブの読み込みには –H ustar を使用する必要があります。

ustar | USTAR

IEEE/P1003 データ交換標準の tar ヘッダーと形式。このヘッダー形式では、ヘッダーにユーザー ID とグループ ID を最大 2097151 まで格納できます。

前述の制限よりも大きいユーザー ID およびグループ ID を持つファイルは 60001 のユーザー ID およびグループ ID で格納されます。大規模ファイル (8G バイト — 1G バイト) を転送するには、ヘッダー形式は tar または TARustar または USTARodc のいずれかのみを使用できます。

–I file

入力アーカイブとして、標準入力の代わりに file の内容を読み込みます。file が文字型特殊デバイスで、現在の媒体をすべて読み終えた場合、処理を続けるために媒体を交換して RETURN キーを押してください。このオプションは –i オプションとのみ使用できます。

–k

破壊されたファイルヘッダーや I/O エラーを読み飛ばします。破壊されたりシーケンスが乱れたりした媒体からファイルをコピーしたい場合は、このオプションによって正常なヘッダーを持つファイルだけを読むことができます。ほかの cpio アーカイブを含む cpio アーカイブの場合、エラーが発生すると cpio は途中で終了できます。cpio はより小さいアーカイブのヘッダーである可能性のある次の正常なヘッダーを検索し、より小さいアーカイブのトレーラが見つかった時点で終了します。–i オプションとのみ使用してください。

–l

パスモードでは、可能な場合は必ずリンク元とリンク先の間にハードリンクを作成します。–L オプションを同時に指定した場合は、シンボリックリンクによって参照されているファイルに対してハードリンクを作成します。そうでない場合は、シンボリックリンク自体に対してハードリンクを作成します。このオプションは、–p オプションとのみ使用してください。

–L

シンボリックリンクをたどります。シンボリックリンクの宛先がディレクトリであった場合は、参照されているディレクトリを、そのリンクの名前で保存します。そうでない場合は、参照されているファイルを、そのリンクの名前で保存します。

–m

以前のファイル更新時間を保持します。このオプションは、コピー中のディレクトリには無効です。

–M message

メディア交換時の message を定義します。オプション –O または –I を使用して、文字型特殊デバイスを指定しているときに、媒体の終わりに達したときに出力されるメッセージを定義します。次の媒体のシーケンス番号を表示するのに 1 つの %d を使用できます。

–O file

cpio の出力先を、標準出力から file に変更します。file が文字型特殊デバイスで現在の媒体が一杯のとき処理を継続するには、媒体を交換してキャリッジリターンを押してください。–o オプションとのみ使用できます。

–P

ACL を保持します。このオプションを出力用に使用した場合、既存の ACL は、拡張された属性を除くほかの属性とともに標準出力に書き込まれます。ACL は、特殊なファイルタイプを持つ特殊ファイルとして作成されます。このオプションを入力用に使用した場合、ACL は他の属性とともに標準入力から抽出されます。このオプションは特殊ファイルタイプを認識できます。ACL を持つ cpio アーカイブを旧バージョンの cpio によって抽出した場合、エラーが発生することに注意してください。ACL がすべてのシステムにサポートされているとはかぎらず、可搬性がないため、このオプションは –c オプションとともに使用しないでください。可搬性を保つために ASCII ヘッダーを使用してください。

–r

対話形式でファイル名を変更します。キャリッジリターンだけを押すと、そのファイルを飛ばします。"." と入力すると、元のパス名が使用されます。cpio –p とは使用できません。

–R id

各ファイルの所有者とグループ情報をユーザー ID に再割り当てします(ID は passwd データベース内の有効なログイン ID でなければなりません)。このオプションが有効なのは、ID が呼び出し元のユーザーまたはスーパーユーザーの場合だけです。「注意事項」 を参照してください。

–s

各ハーフワード毎にバイトを交換します。

–S

各ワード毎にハーフワードを交換します。

–t

入力の内容を表示します。入力したファイルに拡張属性が含まれている場合は、それらの属性も表示します。ファイルは生成されません。–t–V は同時には使用できません。

–u

無条件にコピーを実行します。通常、古いファイルは同一名の新しいファイルを置換しませんが、古いディレクトリは新しいディレクトリを更新します。

–v

冗長。ファイル名のリストと拡張属性の名前を出力します。–t オプションと一緒に使用すると、内容は ls –l コマンドの出力のようになります (ls(1) 参照)。

–V

詳細表示。入力または出力した各ファイルの内容を完全に表示します。すべてのファイル名を表示せずに cpio が動作していることをユーザーが確認するときに便利です。

–6

UNIX System Sixth Edition 形式のアーカイブ形式ファイルを処理します。–i オプションとのみ使用してください。このオプションは、–c および –H オプションと同時には使用できません。

–@

拡張属性をアーカイブに含めます。デフォルトでは、cpio は拡張属性をアーカイブに含めません。このフラグを指定すると cpio は、アーカイブ内のファイルに拡張属性が存在するかどうかを検査し、存在する場合は、その拡張属性を通常のファイルと同様にアーカイブに含めます。拡張属性ファイルは、特殊なファイルタイプを持つ特殊ファイルとしてアーカイブに収められます。–@ フラグをオプション –i または –p と一緒に使用すると、cpio は、拡張属性のデータを通常のファイルデータと一緒に復元します。拡張属性ファイルは、通常のファイルのデータの一部としてのみ抽出できます。拡張属性ファイルだけを明示的に抽出しようとすると無視されます。

–/

拡張システム属性をアーカイブに含めます。デフォルトでは、cpio は拡張システム属性をアーカイブに含めません。このフラグを指定すると cpio は、アーカイブ内のファイルに拡張システム属性が存在するかどうかを検査し、存在する場合は、そのシステム属性を通常のファイルと同様にアーカイブに含めます。拡張属性ファイルは、特殊なファイルタイプを持つ特殊ファイルとしてアーカイブに収められます。–/ フラグをオプション –i または –p と一緒に使用すると、cpio は、拡張システム属性のデータを通常のファイルデータと一緒に復元します。拡張システム属性ファイルは、通常のファイルのデータの一部としてのみ抽出できます。拡張属性ファイルだけを明示的に抽出しようとすると無視されます。

オペランド

次のオペランドがサポートされています。

directory

cpio –p の対象となる既存ディレクトリのパス名。

pattern

パターンマッチング用の表現方法を利用した式。これはシェルがファイル名のパターンマッチングに利用する式 (sh(1) を参照) や正規表現に似たものです。以下に示すメタキャラクタが定義されています。

*

空の文字列を含み、あらゆる文字列と一致します。

?

任意の単一文字と一致します。

[...]

括弧内のいずれか 1 文字を表します。2 つの文字を - で区切って指定すると、システムのデフォルトの照合シーケンスに従ってその 2 文字の間のすべての文字 (2 文字自身も含む) と一致します。先頭の [ の次の文字が ! である場合、結果は不確定です。

!

!(感嘆符) は否定を表します。たとえば !abc* と指定すると、文字列 abc で始まるファイル名とは一致しません。

pattern 指定において、メタキャラクタ ?*[ . . .] はスラッシュ (/) と一致し、バックスラッシュ (\) はエスケープと一致します。複数 pattern も指定可能で、pattern が何も指定されなければデフォルト値として * (すなわち、すべてのファイルを選択する) が採用されます。

各パターンは二重引用符で囲む必要があります。そうしないと、現在のディレクトリ内のファイルが使用されることがあります。

以下に cpio の使用例を示します。

使用例 1 標準入力を使用する
example% ls | cpio -oc > ../newfile

前述の例のように標準入力をパイプ経由で cpio –o に渡すと、ファイルがグループ化されて 1 つのアーカイブファイル (../newfile) にまとめられます。–c オプションは (–H オプションと同様に)、アーカイブファイルのほかのマシンとの互換性を保証します。名前のリストをパイプ経由で cpio に渡すには、ls(1) の代わりに find(1)echo(1)cat(1) などを使用できます。ファイルではなくデバイスへ出力先を変更することもできます。

使用例 2 ディレクトリにファイルを抽出する
example% cat newfile | cpio -icd "memo/a1" "memo/b*"

この例では、cpio –icpio –o の出力を使用して (cat を使用してパイプに渡している)、パターン (memo/a1memo/b*) に一致するファイルを抽出します。さらに必要に応じて現在のディレクトリ下にディレクトリを作成し (–d オプション)、適切なディレクトリにファイルを格納します。–c オプションは互換性のあるヘッダーで入力ファイルが作成されているときに使用します。何もパターンを指定しないと、newfile 内のすべてのファイルをディレクトリに格納します。

使用例 3 別のディレクトリにファイルをコピーまたはリンクする
example% find . -depth -print | cpio -pdlmv newdir

この例では、cpio –p はパイプ経由でファイル名を読み込んで、それらのファイルを別のディレクトリ (newdir) へコピーまたはリンク (–l オプション) します。–d オプションは必要に応じてディレクトリを作成します。–m オプションは変更時間を保持します。(cpio に渡すパス名を作成するには find(1)–depth オプションを使用してください。これによって読み取りのみが許可されたディレクトリ下にファイルを作成しようとするときに発生する問題を排除できます。)コピー先のディレクトリ newdir が存在している必要があります。

find と一緒に cpio を使用する場合、cpio のオプションに –L を使用しているときは find のオプションに –follow を (逆の場合も同様) 使用してください。それ以外の場合、予期しない結果になります。

マルチリールアーカイブに対しては、古いボリュームのマウントを解除し、新しいボリュームをマウントし、さらに次の装置名を入力して (通常、最初のリールと同じ) 次のテープに引き継いでください。停止するには、RETURN キーを押すと cpio が終了します。

環境変数

cpio の実行に影響を与える次の環境変数の詳細については、environ(7) を参照してください。LC_COLLATE、LC_CTYPE、LC_MESSAGES、LC_TIME、TZ、および NLSPATH。

TMPDIR

cpio の一時ファイルは、デフォルトでは /var/tmp に作成されます。それ以外の場合は、TMPDIR で指定したディレクトリに作成されます。

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

>0

エラーが発生しました。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
CSI
有効
インタフェースの安定性
確実

関連項目

sh(1), ar(1), cat(1), echo(1), find(1), ls(1), pax(1), tar(1), chown(2), archives.h(3HEAD), attributes(7), environ(7), fsattr(7), standards(7)

cpio アーカイブで使用できるパス名の最大長は、そのアーカイブに含まれているヘッダータイプによって決まります。以下の表に、サポートされているヘッダータイプと、そのヘッダータイプで許可されている最大パス長を示します。

ヘッダータイプ
コマンド行オプション
最大パス長
BINARY
–o
256
POSIX
–oH odc”
256
ASCII
–oc
1023
CRC
–oH crc”
1023
USTAR
–oH ustar”
255

コマンド行オプション “–o –H tar” を指定した場合は、作成されるアーカイブのタイプは USTAR になります。つまり、このアーカイブをコマンド行オプション “–i – H tar” を使用して読み込むとエラーが発生します。このアーカイブの読み込みには、コマンド行オプション “–i –H ustar” を使用してください。"–i –H tar" オプションは、古い tar アーカイブ形式を読み込むためのものです。

選択されたヘッダー形式に対してユーザー ID またはグループ ID が大きすぎるファイルについてはエラーメッセージが出力されます。ユーザー ID またはグループ ID のすべての値をサポートできるアーカイブを作成するには、–H crc あるいは –c を使用してください。

スーパーユーザーだけが特殊ファイルをコピーできます。

512 バイトを 1 ブロックとみなします。

ファイルのアクセス権が 000 で、なんらかの文字データを持ち、さらにユーザーが root でない場合、そのファイルは保管または復元されません。

{PRIV_FILE_CHOWN_SELF} 特権を持つユーザーにより、そして特に {_POSIX_CHOWN_RESTRICTED} が有効でない (上書きされる場合を除き、この特権を事実上すべてのユーザーに許可する) システムに対して、cpio が復元またはパスモードで呼び出されると、抽出またはコピーされたファイルの所有者およびグループが、呼び出し元のユーザーとは異なる、元のアーカイブ済みファイルの所有者およびグループによって決定される可能性があります。これはユーザーが意図したことではない場合があります。ユーザーの ID を指定した場合には、必要に応じ、–R オプションを指定することでファイルの所有権を保持できます。

ヘッダーに書かれている i ノード番号 (/usr/include/archives.h) は unsigned short (2 バイト) です。このため、この i ノード番号は 0 から 65535 までの値となります。ハードリンクされたファイルはこの i ノード番号の範囲に入る必要があります。これはベンダーが異なるマシン間で cpio アーカイブを移動する場合に問題となることがあります。

テープからハードディスクへファイルを 取り出したりコピーしたりする場合は、ハードディスクからテープへコピーした時と同じブロック化因数を使用してください。したがって、–B オプションまたは –C オプションを指定してください。

–p および –o の処理中は、標準入力上のファイルリストは、cpio によって一時ファイルに保存されます。

大規模ファイルに対しては、新しい pax(1) 形式とそれをサポートするコマンド (tar など) を使用する必要があります。現在、cpio コマンドは最新の POSIX 標準の一部でありませんので、pax の方が推奨されます。