现在的位置: 首页 > 综合 > 正文

linux中cpio及rpm2cpio应用

2017年12月22日 ⁄ 综合 ⁄ 共 1797字 ⁄ 字号 评论关闭

rpm2cpio


例:
rpm2cpio util-linux-2.13-0.45.el5.i386.rpm > util.cpio


备注:
当在linux rescue模式中,修复系统时明确知道是丢了哪个文件,但是在此时强制安装丢失文件相应的rpm包时又会出现很多依赖关系提示。(烦!)
或者可换种思路,我们只需要这个丢掉的文件而已,可以找到丢失文件的相关rpm包,然后用cpio及rpm2cpio组合,把文件提取出来,然后再复制到丢失文件的相应位置,此问题亦可解决。

比如:


[root@brinkman tmp]# rpm2cpio util-linux-2.13-0.45.el5.i386.rpm > util.cpio


[root@brinkman tmp]# mkdir util
[root@brinkman tmp]

# cd util
[root@brinkman util]# cpio -icduv < ../util.cpio

[root@brinkman util]# ll
total 32
drwx------ 2 root root 4096 Oct 8 17:16 bin
drwx------ 4 root root 4096 Oct 8 17:16 etc
drwx------ 2 root root 4096 Oct 8 17:16 sbin
drwx------ 5 root root 4096 Oct 8 17:16


usr
进入相关目录找到丢失的文件即可。


功能说明:cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,

它可以解压以“.cpio”或者“.tar”结尾的文件。

使用格式:cpio [选项] > 文件名或者设备名
cpio [选项] < 文件名或者设备名
选项说明:详细选项说明参看下表
选项 含义
-o 将文件拷贝打包成文件或者将文件输出到设备上。
-i 将打包文件解压或者将设备上的备份还原到系统。
-t 查看cpio打包的文件内容或者输出到设备上的文件内容。
-v 显示打包过程中的文件名称。
-d 在cpio还原文件的过程中,自动的建立相应的目录。
-c 一种较新的存储方式。
-B 让默认的Blocks可以增大到5120 bytes,默认Blocks为512 bytes,这样做的好处是可以加快存取速度。


举例:
1. 将/etc下的所有普通文件都备份到/opt/etc.cpio,使用以下命令:
[root@mylinux ~]# find /etc –type f | cpio –ocvB >/opt/etc.cpio


2. 将系统上所有资料备份到磁带机内,使用以下命令:
[root@mylinux ~]# find / -print | cpio -covB > /dev/st0
#这里的“/dev/st0”是磁带的设备名,代表SCSI磁带机。

3. 查看上例磁带机上备份的文件,使用以下命令:
#有时可能因为备份的文件过多,一个屏幕无法显示完毕,此时我们利用下面命令,让磁带机的文件信息输出到文件。
[root@mylinux ~]# cpio -icdvt < /dev/st0 > /tmp/st_content


4. 将示例1中的备份包还原到相应的位置,如果有相同文件进行覆盖,使用以下命令:
[root@mylinux ~]#cpio –icduv < /opt/etc.cpio
#注意,cpio恢复的路径,

如果cpio在打包备份的时候用的是绝对路径,那么在恢复的时候会自动恢复到这些绝对路径下,本例就会将备份文件全部还原到/etc路径下对应的目录中。同理,如果在打包备份用的是相对路径,还原时也将恢复到相对路径下。
通过上面的示例,可以看出,cpio无法直接读取文件,

它需要每个文件或者目录的完整路径名才能识别读取,而find命令的输出刚好做到了这点,因此,cpio命令一般和find命令配合使用。其实,上面的示例我们已经看到了它们的组合用法。

***************************************************************************************

假如你要备份/etc/这个目录到/root上


[root@mylinux ~]# find /etc -type f|cpio -ovBc >/root/etc.cpio

要恢复文件的时候
[root@mylinux ~]# cd /
[root@ /]# cpio -idv /root/etc.cpio

只是查看etc.cpio文件,

可以使用
[root@mylinux ~]# cpio -tv

抱歉!评论已关闭.