创建或读取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