我刚刚了解到cpio有三种模式:复制,复制和传递。
我想知道在拷贝和copy-in模式下cpio比tar有什么优点和缺点。 何时使用cpio以及何时使用tar?
传递模式下的cpio与cp类似的问题
感谢致敬!
这是一个非常通用的概述:
CPIO更好地复制文件系统,包括备份。 它保留了像硬链接,fifo和其他非标准文件function的东西。 CPIO的大部分实现都是TAR所做的,包括读写.tar文件。 CPIO通常会将标准input文件列表存档; 这使得从别的东西pipe道列表(如find )非常容易。
如果您想要从目录A复制到目录B的文件列表很长,则CPIO透传非常有用(例如,您可以使用find查找系统上最近2年内发生更改的所有文件)
TAR将所有标准文件从磁带(或存档文件)中简单地转储出去做得更好。 使用(对于大多数常见任务)更简单一些。 它轻松满足大多数人简单的备份需求; 而且大部分的受欢迎程度都来自于这个事实。
而现在的细则。 CPIO和TAR有几个不同的版本和实现。 每个人都有不同的function,有些人有不同的命令行选项。 有些事情可以在其他事情做不到的地方做; 如果你发现自己受限于一个,请尝试另一个。 每个人都有一个最喜欢的,99%的时间要么完成任务。
在AE 3 redhat上,我发现cpio在输出stream上有2 GB的大小限制。 但是,焦油没有这个限制。
其他系统可能有不同的限制。
我也比较喜欢CPIO。 但是,对未知来源的文件集(如最终用户创build的文件)使用cpio ,最好使用NUL终止的文件名:使用-print0标志向cpio查找并添加0标志。 这种方式文件奇怪的名称(如包括CRNL字符)将被正确处理。
cd / && find . -xdev -print0 | cpio -pmdu0 /mnt/
除了通过disrpm或rpm2cpio翻录打开的RPM文件之外,我没有理由使用cpio,但是可能会出现cpio比tar更好的情况。
tar和cpio都是1979年版本的Unix中引入的竞争存档格式,然后包含在POSIX.1-1988中,尽pipe只有tar保留在下一个标准POSIX.1-2001中。
Cpio的文件格式已经多次改变,并且在版本之间没有保持完全兼容。 例如,现在有一个二进制文件信息数据的ASCII编码表示。
焦油更为普遍的知名度,多年来已经变得更加多才多艺,并且更有可能得到特定系统的支持。 Cpio仍然在less数领域使用,例如红帽软件包格式(RPM),尽pipeRPM v5 (这是公认的模糊)使用xar而不是cpio。
两者都适用于大多数类Unix系统,尽pipetar更常见。 这里是Debian的安装统计信息 :
#rank name inst vote old recent no-files (maintainer) 13 tar 189206 172133 3707 13298 68 (Bdale Garbee) 61 cpio 189028 71664 96346 20920 98 (Anibal Monsalve Salazar)
复制 :这是为了创build档案,类似于tar -pc
复制 :这是为了存档提取,类似于tar -px
传递 :这基本上都是上面的,类似于tar -pc … |tar -px但在一个命令中(因此显微镜更快)。 它类似于cp -pdr ,尽pipecpio和(尤其是)tar都具有更多的可定制性。 另外考虑一下rsync -a ,人们通常会忘记它,因为它更常用于networking连接。
我没有比较它们的性能,但我预计它们在CPU,内存和归档大小(压缩后)上会非常相似。