cpio

创建或读取cpio档案文件


语法格式

cpio -o [-0aABcLvV] [-C bytes] [-H fmt] [--block-size=n] [-M msg]
        [-O [[user@]host:]archive] [-F [[user@]host:]archive]
        [--rsh-command=cmd] < name-list [> archive]
cpio -i [-BcdfmnrtuvV] [-C bytes] [-E file] [-H fmt] [--block-size=n]
        [-M msg] [-R [user][:.][group]] [-I [[user@]host:]archive]
        [-F [[user@]host:]archive] [--no-preserve-owner] [-quiet]
        [--absolute-filenames] [-only-verify-crc] [--rsh-command=command]
        [patterns] [< archive]
cpio -p [-0adlLmuvV] [-R [user][:.][group]] [--no-preserve-owner]
        dest-dir < name-list
cpio [--help] [--version]

命令简介

cpio是一种数据备份与恢复工具,用于创建cpio档案文件,从档案文件中抽取文件,或者把文件从一个目录复制到另外一个目录。生成的档案文件可以是一个磁盘文件,也可以写入磁带等数据流介质。cpio不仅能够处理二进制与ASCII头数据格式的cpio档案文件,也能够读写各种tar格式的档案文件。为了保持兼容,如果不特别指定,cpio通常仍然创建二进制头数据格式的档案文件。

从档案文件中抽取文件时,cpio命令能够自动识别读取的是哪一种档案文件,而且也能读取在不同的系统中创建的具有不同字节顺序的档案文件。

cpio命令分为3种工作模式:输出模式(“-o”选项)、输入模式(“-i”选项)与复制模式(“-p”选项)。在运行cpio命令时,必须选用三种工作模式之一。

在输出模式中,cpio把一系列文件组合在一起,形成一个大的档案文件。cpio从标准输入接收文件名列表(每行一个文件),最后把文件合并为一个档案文件,写到标准输出。生成文件名列表的典型做法是find命令的输出。其中,name-list是需要归档的文件列表,archive是创建的档案文件。

在输入模式中,cpio从档案文件抽取文件,或显示档案文件中的文件列表。除非重定向或另有指定,cpio从标准输入读取档案文件。命令行后面的patterns可以是一个或一组Shell文件名模式,如果指定了文件名模式,cpio仅仅从档案文件中抽取匹配指定文件名模式的文件。如果未指定任何文件名模式,抽取所有的文件。

在复制模式中,cpio命令把一个目录中的文件和子目录,按原来的层次结构原封不动地复制到指定的目的目录dest-dir。实际上,复制模式组合了输出模式与输入模式,但省略了中间的档案文件创建过程。cpio从标准输入接收文件名列表(每行一个文件),把文件写到指定的目的目录中。

功能选项

-i, --extract  指定输入模式,用于恢复档案文件。

-o, --create  指定输出模式,用于备份档案文件。

-p, --pass-through  指定复制模式,用于复制一个完整的目录或文件系统。

命令选项

-0, --null  读取以NULL字符(而非换行符)为终止符的文件名列表。GNU版的find命令能够生成以NULL字符为终止符的文件名列表。注意,这个选项只能用于输出模式与复制模式。

-a, --reset-access-time  在复制完成之后,复原输入文件的访问时间,使输入文件仍然保持原来的访问时间,就像cpio命令根本没有读过这些文件一样。

-A, --append  把新复制的文件附加到现有档案文件的后面。这个选项仅适用于输出模式。在与“-O”或“-F”选项一起使用时,指定的档案文件必须是一个磁盘文件。

-B  以5120字节的数据块为读写单位。默认的读写数据块为512字节。注意,输入与输出模式最好采用相同的数据块参数。

-c  使用新的SVR4格式创建档案文件,等同于“-H newc”选项。

-C  bytes, --io-size=bytes 以指定字节数量的数据块作为读写的单位。

-d, --make-directories  在复制过程中,根据需要创建必要的目录。注意,这个选项只能与“-i”或“-p”选项一起使用。

-E file, --pattern-file=file  从指定的文件中抽取指定的文件名模式,作为命令行文件名模式参数的补充。注意,这个选项只能用于输入模式。

-f, --nonmatching  仅复制与指定模式不匹配的文件。

-F archive, --file=archive  使用指定的文件作为档案文件,替代默认的标准输入或标准输出。若想令其他系统的磁带替代档案文件,可以在文件路径名的前面增加“hostname:”字符串前缀。如果当前用户具有足够的访问权限,还可以在主机名之前增加一个用户名与“@”字符,以便能够以指定用户的身份访问远程系统的磁带机。

-H fmt, --format=fmt  使用指定的格式创建档案文件。在输入模式下,cpio会自动检测档案文件的格式,并进行相应的处理。在输出模式下,默认的档案文件格式是bin。cpio支持的有效档案文件格式如下:
bin  已废弃的二进制头数据格式。
odc  老的ASCII头数据格式。
newc 新的SVR4 ASCII头数据格式。
crc  新的SVR4 ASCII头数据格式,增加了校验和功能。
tar  老的tar格式。
ustar  POSIX.1 tar格式(类似但不等同于GNU tar格式)。
hpbin 过时的HP-UX二进制头数据格式。
hpodc HP-UX ASCII头数据格式。

-I archive  使用指定的档案文件作为输入数据源,而不是读取标准输入。如果指定的文件是一个字符设备文件,且当前介质已完全读入,可根据提示更换新介质,然后按下Enter键,以便继续读取下一个介质中的数据。注意,这个选项只能与“-i”选项一起使用,以指定的档案文件替代标准输入。若想令其他系统的磁带替代档案文件,可以在文件路径名前面增加“hostname:”字符串前缀。如果当前用户具有足够的访问权限,还可以在主机名之前增加一个用户名与“@”字符,以便能够以指定用户的身份访问远程系统的磁带机。

-l, --link  可能时应尽量创建链接文件,而不是复制文件。

-L, --dereference  复制符号链接文件引用的文件而非符号链接文件本身。

-m, --preserve-modification-time  创建文件时,保持先前的文件修改时间。

-M msg, --message=msg  定义一个提示信息。当读写达到存储介质(如磁带)结尾处需要更换新的介质时,提示用户更换下一个介质。如果提示信息中包含字符串“%d”,cpio将会代之以当前的介质序号(介质从1开始编号)。

-n, --numeric-uid-gid  与“-v”选项一起使用时,仅显示数字形式的用户ID和用户组ID,以取代相应的名字。

-O archive  使用指定的档案文件作为输出文件,而非写到标准输出。如果指定的文件是一个字符设备文件,且当前的介质已经完全写满,可以根据系统提示更换新的介质,然后按下Enter键,以便继续写入下一个介质。注意,这个选项只能与“-o”选项一起使用。若想令其他系统的磁带替代档案文件,可以在文件路径名的前面增加“hostname:”起始字符串。如果当前用户具有足够的访问权限,还可以在主机名之前增加一个用户名与“@”字符,以便能够以指定用户的身份访问远程系统的磁带机。

-r, --rename  交互地重新命名文件。

-R [user][:.][group], --owner [user][:.][group]  在输出模式或复制模式下,使用指定的用户和用户组设置所有新建文件的属主属性。注意,只有超级用户才能修改文件的属主属性,此外,指定的用户或用户组必须已经存在。如果忽略了用户组,但给出了冒号“:”或句点“.”分隔符,则使用指定用户所属的用户组。

-t, --list  读取并显示档案文件中的文件列表。

-u, --unconditional  无条件地强行复制。当出现同名文件时,直接替换原有的所有文件,而不提示用户是否同意以老文件替换新文件。如果不加此选项,cpio命令的常规处理惯例是禁止同名的老文件替换或覆盖新文件。

-v, --verbose  显示方式。输出读写的每一个文件名。当与“-t”选项一起使用时,其效果等同于“ls -l”命令输出的文件名列表。

-V, --dot  特殊显示方式。对于读写的每一个文件,仅仅输出一个句点“.”标记。

--absolute-filenames  在输入模式中,禁止删除文件路径名中文件名前面包含“..”和斜线字符“/”的目录部分。

--block-size=n  把作为读写单位的数据块设置为“n * 512”个字节。

--force-local  与“-F”、“-I”或“-O”选项一起使用时,把提供的档案文件名作为本地文件处理,即使其中含有表示远程主机名与文件名分隔符的冒号“:”。

--no-preserve-owner  对于普通用户而言,抽取的文件归属于运行cpio命令的用户。对于超级用户而言,抽取的文件保持原有的属主属性不变,如果选用了此选项,可以解除此限制,像普通用户一样,抽取的文件归属于超级用户。这个选项仅适用于输入模式与复制模式。

--only-verify-crc  在读取CRC格式的档案文件时,仅验证档案文件中每个文件的循环冗余校验和,实际上并不抽取任何文件。

--quiet  禁止显示复制的数据块数量。

--rsh-command=cmd  通知cpio使用指定的命令与远程设备进行通信。

应用实例

1. 利用find命令,把一个目录或文件系统中的所有文件创建成一个档案文件。

$ cd /data
$ find . -print -depth | cpio -ocv > /backup/data.cpio

2. 恢复先前备份的档案文件,覆盖现有的文件,创建必要的目录,保持文件的访问时间。

$ cd /data
$ cpio -icdmuv < /backup/data.cpio

3. 查询先前备份在磁带上的档案文件,但不抽取任何文件。

# cpio -icvt < /dev/st0

4. 从档案文件中抽取文件名后缀为“0831”的文件。

# cd /data
# cpio -icdmuv "*0831" < /dev/st0
data.0831
1024050 blocks
#

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z