RPM包中文件提取
1)cpio命令
cpio命令主要有三种基本模式:“-o”模式指的是copy-out模式,就是把数据备份到文件库中;"-i"模式指的是copy-in模式,就是把数据从文件库中恢复;“-p”模式指的是复制模式,就是不把数据备份到cpio库中,而是直接复制为其他文件。命令如下:
[root@localhost ~]# cpio -o[vcB] > [文件|设备] #备份 选项: -o: copy-out模式,备份 -v: 显示备份过程 -c: 使用较新的portableformat存储方式 -B: 设定输入输出块为5120bytes,而不是模式的512butes [root@localhost ~]# cpio -i[vcdu] < [文件|设备] #还原 选项: -i: copy-in模式,还原 -v: 显示还原过程 -c: 使用较新的portable format 存储方式 -d: 还原时自动新建目录 -u: 自带使用较新的文件覆盖较旧的文件 [root@localhost ~]# cpio -p 目标目录
一下举例说明:
利用find命令找到文件,备份
[root@localhost sdc1]# find /etc/ -print |cpio -ocvB > /root/etc.cpio #利用find指定要备份/etc/目录,使用>导出到etc.cpio文件 [root@localhost ~]# ll -h etc.cpio -rw-r--r--. 1 root root 24M 4月 2215:27 etc.cpio #etc.cpio文件生成
再来看看如何恢复cpio的备份,命令如下:
[root@localhost ~]# cpio -idvcu </root/etc.cpio #还原etc的备份 #但是如果打架查看下当前目录/root,会发现没有生存etc目录。这是因为备份是/etc目录使用的绝对路 径,所以恢复的数据直接恢复到了/etc系统目录中,而没有生成在/root/etc中。
在CentOS5.x的版本中,是可以利用上面的命令备份与恢复指定的文件。但是到CentOS6.x当中,需要更加严禁。如果备份时使用绝对路径,则恢复的数据会直接到绝对路径指定的路径中,如果需要把数据恢复到当前目录中,则需要使用相对路径,例如:
[root@localhost ~]# cd /etc/ #进入/etc目录 [root@localhost etc]# find . -print | cpio-ocvB > /root/etc.cpio #利用find指定要备份/etc/目录,使用>导出到etc.cpio文件
恢复:
[root@localhost etc]# cd /root/ #回到/root目录中 [root@localhost ~]# mkdir etc_test #建立恢复测试目录 [root@localhost ~]# cdetc_test/ #进入测试目录,数据恢复到此 [root@localhost etc_test]# cpio -idvcu </root/etc.cpio #还原/etc目录的数据,因为备份时使用的是相对路径,则会还原到/root/etc_test/目录下 最后在来掩饰一下cpio命令的“-p”复制模式,命令如下: [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/目录中 [root@localhost tmp]# ls test/ #在/tmp/test/目录中备份出了boot目录 boot
2)提取RPM包中文件
#rpm2cpio 包全名 | cpio-idv .文件绝对路径 rpm2cpio #将rpm包转化为cpio格式的命令 cpio #是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
举个例子,现在我假设把系统中的/bin/ls命令不小心误删除了,那么可以修复过来吗?这时有两种方法修复,要不就是使用--force选项覆盖安装一遍coreutils-8.4-31.el6.x86_64包,要不就可以使用cpio命令提取出/bin/ls命令文件,再把它拷贝到对应位置就可以了。不过我是怎么知道/bin/ls命令是属于coreutils-8.4-31.el6.x86_64这个软件包的呢?命令如下:
[root@localhost ~]# rpm -qf /bin/ls #查看ls文件属于哪个软件包 coreutils-8.4-31.el6.x86_64
那么我们在讲RPM包中文件提取,所以我们使用第二章方法,cpio命令提取出ls命令文件,然后拷贝到对应位置,命令如下:
[root@localhost ~]# mv /bin/ls/root/ #把/bin/ls命令移动到/root目录下,造成误删除的假象 [root@localhost ~]#ls -bash:ls: command notfound #这时执行ls命令,系统会报错“命令没有找到” [root@localhost ~]# rpm2cpio/mnt/cdrom/Packages/coreutils-8.4-31.el6.x86_64.rpm | cpio -idv /root/bin/ls 25227 块 #提取ls命令到/root/目录下 [root@localhost ~]#ls #ls命令可以正常使用 anaconda-ks.cfg bin comp install.log install.log.syslog tmp
cpio的标准格式
#cpio 选项<[文件|设备]> 选项: -i:copy-in #模式,还原 -d: #还原时自动新建目录 -v: #显示还原过程
例:
#rpm-qf /bin/ls #查询ls命令属于哪个软件包 #mv/bin/ls /tmp/ #造成ls命令误删除假象 #rpm2cpio /mnt/cdrom/Pachages/coreutils-8.4-19.e16.i686.rpm | cpio-dv./bin/ls #提取RPM包中ls命令到当前目录的/bin/ls下 #cp/root/bin/ls /bin/ #把ls命令复制会/bin目录,修改文件丢失 网络yum源 #vi/etc/yum.repos.d/CentOS-Base.repo [base] 容器名称,一定要放在[]中 name 容器说明,可以自己随便写 mirrorlist 镜像站点, 这个可以注释掉
baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉的慢可以改成你喜欢的yum源地址
enabled 此容器是否生效,如果不写或者写成enable=1都是生效,写成enable=0就是不生效
gpgchech 如果是1是指RPM的数字证书生效,如果是0则不生效
gpgkey 数字证书的公钥文件保存位置。不用修改
yum命令
查询
#yumlist #查询所有可用软件包列表 #yumsearch 关键字 #搜索服务器上所有和关键字相关的包
安装
#yum-y install 包名 选项: install 安装 -y 自动回答yes
升级
#yum -yupdate 包名 选项: update 升级 -y 自动回答yes
卸载
#yum -y remove 包名 选项: remove 卸载 -y 自动回答yes
更新软件
#yum -y update 包名 #yum list #查询所有可以安装的包 YUM软件组管理命令 #yum grouplist #列出所有可用的软件组列表 #yum groupinstall 软件组名 #安装指定软件组,组名可以由grouplist查询出来 #yum groupremove 软件组名 #卸载指定软件组 pkill-9 yum-updatesd 如果yum报错正在升级,执行此命令,强制杀死升级进程 #yum -y install gcc (gcc是c语言编译器,不装gcc,源码包不能安装)
本文出自 “吴老二” 博客,谢绝转载!