使用rpm2cpio

你会时常发现从一个包文件中释放出一个或更多的文件很有必要,实现它你一般可以如下去做:

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值