你会时常发现从一个包文件中释放出一个或更多的文件很有必要,实现它你一般可以如下去做:
1 、安装包
2 、复制你需要的文件
3 、将包删除
但是更简单的办法是使用rpm2cpio
rpm2cpio 可以做什么?
顾名思义,rpm2cpio 是将rpm 包文件转换成cpio 归档文件,因为其主要的目的就是过滤,其他的也就不需要特别指定了,rpm2cpio 只有一个属性,别无其他。
指定的属性是将包文件转换,如果在命令行中没有指定文件名,rpm2cpio 将从标准的输入读取并将之转换成cpio 归档文件,让我们看一个例子:
# rpm2cpio logrotate-1.0-1.i386.rpm 0707020001a86a000081a4000000000000000000000001313118bb000002c200000008000 000030000000000000000000000190000e73eusr/man/man8/logrotate.8." logrotate - log fi le rotator .TH rpm 8 "28 November 1995" "Red Hat Software" "Red Hat Linux" .SH NAME (注:这里仅贴出开始的几行) 上面究竟发生了什么?记住:rpm2cpio出生就是过滤只用,它的标准输出是将包中的文件过滤为cpio归档, 如果你没有在你的屏幕上没有作重定向的话。这里有一个讲明其原因的例子: # rpm2cpio logrotate-1.0-1.i386.rpm > blah.cpio # file blah.cpio blah.cpio: ASCII cpio archive (SVR4 with CRC) # 这样我们将一个logrotate包含的所有文件都用rpm2cpio直接转换,然后将其重定向到blah.cpio文件,接下来我们用file程序来检验,它确实是个真正的cpio归档文件,下面的命令和上述同样的说明rpm2cpio从标准输入来读取包文件: # cat logrotate-1.0-1.i386.rpm | rpm2cpio > blah.cpio 一个更真实的例子--列出rpm包所包含的文件 毫无疑问,rpm2cpio可以从rpm包转换成cpio归档,While there's nothing wrong with using rpm2cpio to actually create a cpio archive file, it's takes a few more steps and uses a bit more disk space than is strictly necessary. A somewhat cleaner approach would be to pipe rpm2cpio 's output directly into cpio : # rpm2cpio logrotate-1.0-1.i386.rpm | cpio -t usr/man/man8/logrotate.8 usr/sbin/logrotate 14 blocks 在这里例子中,当rpm2cpio建立一个cpio归档后,我们用到cpio的-t这个参数,-t的意思是“内容列表“,这会为你提取某个文件而得到正确的文件和路径提供了更好的捷径。 从rpm包中提取文件 紧接着上面的例子,我们从logrotate包文件中提取man页,在内容列表中,我们可以看到man page的全路径/usr/man/man8/logrotate8,我们需要的就是将文件名和路径如下指示: # rpm2cpio logrotate-1.0-1.i386.rpm |cpio -ivd usr/man/man8/logrotate.8 usr/man/man8/logrotate.8 14 blocks 在这个例子中,用到了cpio的-i ,-v和-d参数,对这个cpio文件作了如下的操作: 1、从归档中提取一个或多个文件 2、显示任何文件的处理, 3、建立指定文件的全部路径目录。 那么最后文件到底放到那里了呢?cpio的最后一个参数-d有明确的暗示,先让我们来看下: # ls -al total 5 -rw-rw-r-- 1 root root 3918 May 30 11:02 logrotate-1.0-1.i386.rpm drwx------ 3 root root 1024 Jul 14 12:42 usr # cd usr # ls -al total 1 drwx------ 3 root root 1024 Jul 14 12:42 man # cd man # ls -al total 1 drwx------ 2 root root 1024 Jul 14 12:42 man8 # cd man8 # ls -al total 1 -rw-r--r-- 1 root root 706 Jul 14 12:42 logrotate.8 # cat logrotate.8 .\" logrotate - log file rotator .TH rpm 8 "28 November 1995" "Red Hat Software" "Red Hat Linux" .SH NAME logrotate \- log file rotator .SH SYNOPSIS \fBlogrotate\fP [configfiles] .SH DESCRIPTION \fBlogrotate\fP is a tool to prevent log files from growing without … 在这之前,当前目录是没有/usr/man/man8的目录的,很明显cpio -d在logrotate.8文件之前建立了全部,据此,使cpio安全的在通常的系统目录使用成为可能,而且你知道自己在做什么! http://blog.chinaunix.net/u/6303/showart_357246.html