Linux提取RPM包文件(cpio令)详解
cpio 令用于从归档包中存入和读取文件,换句话说,cpio 令可以从归档包中提取文件(或目录),也可以将文件(或目录)到归档包中。
归档包,也可称为文件库,其实就是 cpio 或 tar 格式的文件,该文件中包含其他文件以及一些相关信息(文件名、访问权限等)。归档包既可以是磁盘中的文件,也可以是磁带或管道。
cpio 令可以看做是备份或还原令,因为它可以将数据(文件)备份到 cpio 归档库,也可以利用 cpio 文档库对数据进行恢复。使用 cpio 令备份或恢复数据,需注意以下几点:
使用 cpio 备份数据时如果使用的是路径,那么还原数据时会自动恢复到路径下;同理,如果备份数据使用的是相对路径,那么数据会还原到相对路径下。
cpio 令无法自行指定备份(或还原)的文件,需要目标文件(或目录)的完整路径才能成功读取,因此此令常与 find 令配使用。
cpio 令恢复数据时不会自动覆盖同名文件,也不会创建目录(直接解压到当前文件夹)。
cpio 令主要有以下 3 种基本模式:
"-o" 模式:指的是 copy-out 模式,就是把数据备份到文件库中,令格式如下:
[root@localhost ~]# cpio -o[vcB] > [文件丨设备]
各选项含义如下:
-o:copy-out模式,备份;
-v:显示备份过程;
-c:使用较新的portable format存储方式;
-B:设定输入/输出块为 5120Bytes,而不是模式的 512Bytes;
比如,使用 cpio 备份数据的令如下:[root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio
#利用find令指定要备份/etc/目录,使用>导出到etc.cpio文件
[root@localhost ~]# II -h etc.cpio
-rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio#etc.cpio文件生成
"-i" 模式:指的是 copy-in 模式,就是把数据从文件库中恢复,令格式如下:
[root@localhost ~]# cpio -i[vcdu] < [文件|设备]
各选项的含义为:
-i:copy-in 模式,还原;
-v:显示还原过程;
-c:较新的 portable format 存储方式;
-d:还原时自动新建目录;
-u:自动使用较新的文件覆盖较旧的文件;
比如,使用 cpio 恢复之前备份的数据,令如下:
[root@localhost ~]# cpio -idvcu < /root/etc.cpio
#还原etc的备份#如果大家査看一下当前目录/root/,就会发现没有生成/etc/目录。这是因为备份时/etc/目录使用的是路径,所以数据直接恢复到/etc/系统目录中,而没有生成在/root/etc/目录中
- "-p" 模式:指的是模式,使用 -p 模式可以从某个目录读取所有文件,但并不将其备份到 cpio 库中,而是直接为其他文件。
例如,使用 -p 将 /boot/ 到 /test/boot 目录中可以执行如下令:
[root@localhost ~]# cd /tmp/
#进入/tmp/目录
[root@localhost tmp]#rm -rf*
#删除/tmp/目录中的所有数据
[root@localhost tmp]# mkdir test
#建立备份目录
[root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test
#备份/boot/目录到/tmp/test/目录中
[root@localhost tmp]# ls test/boot#在/tmp/test/目录中备份出了/boot/目录
使用 cpio 令提取 RPM 包中指定文件
在服务器使用过程,如果系统文件被误修改或误删除,可以考虑使用 cpio 令提取出原 RPM 包中所需的系统文件,从而修复被误操作的源文件。RPM 包允许逐个提取包中文件,使用的令格式如下:
[root@localhost ~]# rpm2cpio 包全名|cpio -idv .文件路径
该令中,rpm2cpio 就是将 RPM 包转换为 cpio 格式的令,通过 cpio 令即可从 cpio 文件库中提取出指定文件。举个例子,假设我们不小心把 /bin/ls 令删除了,通常有以下 2 种方式修复:
将 coreutils-8.4-19.el6.i686 包(包含 ls 令的 RPM 包)通过 -force 选项再安装一遍;
使用 cpio 令从 coreutils-8.4-19.el6.i686 包中提取出 /bin/ls 文件,然后将其到相应位置;
这里我们选择第 2 种方式。有读者可能会问,如何知道 ls 令隶属于那个 RPM 包呢?很简单,使用
rpm -qf 令即可,如下所示:[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.4-19.el6.i686
#查看ls文件属于哪个软件包
在此基础上,我们只需从此 RPM 包使用 cpio 令提取出 ls 令文件,然后将其到对应位置即可,实现令如下:[root@localhost ~]# mv /bin/ls /root/
#把/bin/ls令移动到/root/目录下,造成误删除的假象
[root@localhost ~]# ls
-bash: ls: command not found
#这时执行ls令,系统会报"令没有找到"错误
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm
|cpio -idv ./bin/ls
#提取ls令文件到当前目录下
[root@localhost ~]# cp /root/bin/ls /bin/
#把提取出来的ls令文件到/bin/目录下
[root@localhost ~]#ls
anaconda-ks.cfg bin inittab install.log install.log.syslog ls
#可以看到,ls令又可以正常使用了
- 随机文章
- 马尔代夫鱼塘钓鱼(马尔代夫的钓鱼乐趣:在鱼塘中垂钓)
- 中国马尔代夫北海(中国马尔代夫北海:珊瑚岛,绝美天堂)
- 中国往返马尔代夫(中资航空开通中国与马尔代夫直航航线)
- 嘉祥嘉祥马尔代夫(嘉祥开设全新的度假村,位于马尔代夫)
- 大连马尔代夫足球(大连足球队赴马尔代夫集训备战新赛季)
- 在马尔代夫吃泡面(在马尔代夫享用泡面,你准备好了吗?)
- 吉林马尔代夫海滩(吉林“马尔代夫”:绝美海滩摄影胜地)
- 赤道 马尔代夫(赤道下最美天堂——马尔代夫)
- 洛阳 马尔代夫(洛阳开启马尔代夫之旅)
- 中国 马尔代夫 建设住房(中建企业在马尔代夫投资建设住房)
- 孤独星球马尔代夫(探索马尔代夫:天堂之岛的美丽与奇妙)
- 描写马尔代夫日出(瑰丽马尔代夫:日出余辉引领无限遐思)
- 三沙 马尔代夫(马尔代夫与中国三沙共享大海资源)
- 昆明马尔代夫转机(昆明转机前往马尔代夫,开启梦幻旅程)
- 心里 马尔代夫(美妙马尔代夫:世界最美海岛!)
- 李玟马尔代夫照片(李玟在马尔代夫晒出美照,仙气十足!)
- 衢州马尔代夫夜景(衢州打造马尔代夫夜景走红,游客涌入)
- 茂名人的马尔代夫(从茂名到马尔代夫:一个人的独特旅程)
- 越南马尔代夫大桥(越南海岛著名景点迎来马尔代夫大桥。)
- 安徽 马尔代夫(安徽旅行社推马尔代夫五晚六日自由行!)
- 鄂州马尔代夫五一(五一旅游热,鄂州马代度假胜地受欢迎)
- 沙滩 马尔代夫(马尔代夫沙滩:无尽的海滩与绝美海景)
- 青蛙垫马尔代夫蓝(青蛙踏上马尔代夫之旅,欣赏碧海蓝天)
- 风平浪静马尔代夫(马尔代夫平静无风,沉浸在美丽海洋中)
- 郴州的小马尔代夫(小马尔代夫竟然藏在湖南省郴州市?!)
- 荥阳马尔代夫路线(荥阳出发,畅游马尔代夫,一路惊艳!)
- 马尔代夫中国战舰(马尔代夫海域巡航的中国战舰受到欢迎)
- 马尔代夫亲子攻略(马尔代夫亲子游:全家共度海岛狂欢!)
- 洪州 马尔代夫(江西洪州旅游局与马尔代夫展开旅游交流合作)
- 马尔代夫乡村图片(美不胜收!马尔代夫乡村风光令人陶醉)
