6.3 用cpio归档

cpio是类似于tar的另一种归档格式。它用来将多个文件和文件夹存储为单个文件,同时还能保留所有的文件属性,如权限、文件所有权等。不过,cpio用得不如tar那么多。它多用于RPM软件包、Linux内核的initramfs文件等。本攻略将给出几个cpio的用例。

实战演练

cpio通过stdin获取输入文件名,并将归档文件写入stdout。我们必须将stdout重定向到一个文件,以接收cpio的输出。

创建测试文件:

  1. $ touch file1 file2 file3

将测试文件按照下面的方法进行归档:

  1. $ echo file1 file2 file3 | cpio -ov > archive.cpio

在上面的命令中:

  • -o指定了输出;

  • -v用来打印归档文件列表。

6.3 用cpio归档 - 图1 通过cpio,我们能够利用文件的绝对路径进行归档。/usr/somedir就是一个绝对路径,因为它是以根目录(/)作为路径的起始。相对路径不以 / 开头,而是以当前目录作为起始点。例如,test/file表示有一个目录test,而file位于test目录中。

当进行提取时,cpio会使用绝对路径提取内容。但是tar会移去绝对路径开头的 /,将之转换为相对路径。

要列出cpio归档文件中的内容,使用下列命令:

  1. $ cpio -it < archive.cpio

这个命令会列出给定cpio归档文件中的所有内容。它从stdin中读取文件。在该命令中:

  • -i用于指定输入;

  • -t表示列出归档文件中的内容。

要从cpio归档文件中提取文件,可以使用:

  1. $ cpio -id < archive.cpio

这里的 -d用来表示提取内容。

cpio在覆盖文件时不会发出提示。如果绝对路径上的文件已经存在,cpio会将其替换。它不会像tar那样将文件提取到当前目录中。