第九天 1-8 实战 : 从光盘中提取二进制包并恢复丢失的文件

简介:使用cpio和rpm2cpio命令,提取rpm安装包中,丢失的文件。前提是我们必须明确的知道丢失的文件及其安装路径

背景:当在linux中,修复系统时明确知道是丢了哪个文件,但是在此时强制安装丢失文件相应的rpm包时又会出现很多依赖关系提示。
我们只需要这个丢掉的文件而已,可以找到丢失文件的相关rpm包,然后用cpio及rpm2cpio组合,把文件提取出来,然后再复制到丢失文件的相应位置

功能介绍:cpio命令
In  copy-out  mode, 
cpio  copies files into an archive.  It reads a list of filenames, one per line, on the standard input,
and  writes the archive onto the standard output.  
A typical way to generate the list of filenames is with the find command; 
you should give find the -depth  option  to minimize problems with permissions on directories that are unreadable.
我们将要使用的命令为:cpio -idv [filepath]
-i  #指运行在copy-in mode
-d #指在当需要的时候,创建目录
-v #指列出进度

rpm2cpio命令  格式:rpm2cpio [filename]
rpm2cpio converts the .rpm file specified as a single argument to  a cpio  archive  on  standard  out. 
If a '-' argument is given, an rpm  stream is read from standard in.
例如:
rpm2cpio rpm-1.1-1.i386.rpm
rpm2cpio - < glint-1.0-1.i386.rpm
rpm2cpio glint-1.0-1.i386.rpm | cpio -dium

实验:

[root@xiaogan ~]# which httpd
/usr/sbin/httpd
[root@xiaogan ~]# rpm -qf `which httpd`
httpd-2.4.6-40.el7.x86_64
[root@xiaogan ~]# rm /etc/httpd/conf/httpd.conf -rf
[root@xiaogan ~]# ls /etc/httpd/conf/*
/etc/httpd/conf/magic
[root@xiaogan ~]# ls -a /etc/httpd/conf/*
/etc/httpd/conf/magic
[root@xiaogan ~]# ls -l /etc/httpd/conf/*
-rw-r--r-- 1 root root 13077 9月  17 2015 /etc/httpd/conf/magic
[root@xiaogan ~]# rm -rf etc
[root@xiaogan ~]# ls
a                Documents                  httpd.conf            nginx-1.11.2.tar.gz  run        usr
anaconda-ks.cfg  Downloads                  initial-setup-ks.cfg  Pictures            Templates  var
Desktop          extundelete-0.2.4.tar.bz2  Music                Public              test      Videos
[root@xiaogan ~]# rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm | cpio -idv ./etc/httpd/conf/httpd.conf
./etc/httpd/conf/httpd.conf
7701 blocks
[root@xiaogan ~]# ls etc/httpd/conf/httpd.conf
etc/httpd/conf/httpd.conf
[root@xiaogan ~]# cp etc/httpd/conf/httpd.conf /etc/httpd/conf/.
[root@xiaogan ~]# rpm -e httpd

这是试验中碰到的问题,在缺少文件的情况下,还是卸载成功了,但会提示警告信息
[root@xiaogan ~]# which httpd
/usr/sbin/httpd
[root@xiaogan ~]# rpm -qf `which httpd`
httpd-2.4.6-40.el7.centos.4.x86_64
[root@xiaogan ~]# ls /etc/httpd/conf/httpd.conf
/etc/httpd/conf/httpd.conf
[root@xiaogan ~]# ls
a                Downloads                  nginx-1.11.2.tar.gz  test
anaconda-ks.cfg  extundelete-0.2.4.tar.bz2  Pictures            Videos
Desktop          initial-setup-ks.cfg      Public
Documents        Music                      Templates
[root@xiaogan ~]# cp /etc/httpd/conf/httpd.conf .
[root@xiaogan ~]# rm /etc/httpd/conf/httpd.conf -rf
[root@xiaogan ~]# ls /etc/httpd/conf/httpd.conf
ls: cannot access /etc/httpd/conf/httpd.conf: No such file or directory
[root@xiaogan ~]# rpm -e httpd
warning: file /etc/httpd/conf/httpd.conf: remove failed: No such file or directory
[root@xiaogan ~]# which httpd
/usr/bin/which: no httpd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@xiaogan ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm 

warning: /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
        httpd-tools = 2.4.6-40.el7 is needed by httpd-2.4.6-40.el7.x86_64
[root@xiaogan ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-40.el7.x86_64.rpm warning: /mnt/Packages/httpd-tools-2.4.6-40.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
        package httpd-tools-2.4.6-40.el7.centos.4.x86_64 (which is newer than httpd-tools-2.4.6-40.el7.x86_64) is already installed
        file /usr/bin/ab from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
        file /usr/bin/htdbm from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
        file /usr/bin/htdigest from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
        file /usr/bin/htpasswd from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
        file /usr/bin/httxt2dbm from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
        file /usr/bin/logresolve from install of httpd-tools-2.4.6-40.el7.x86_64 conflicts with file from package httpd-tools-2.4.6-40.el7.centos.4.x86_64
[root@xiaogan ~]# rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm |cpio -idv ./etc/httpd/conf/httpd.conf
./etc/httpd/conf/httpd.conf
7701 blocks
[root@xiaogan ~]# ls 
a                Documents  extundelete-0.2.4.tar.bz2  Music                Public     Videos
anaconda-ks.cfg  Downloads  httpd.conf                 nginx-1.11.2.tar.gz  Templates
Desktop          etc        initial-setup-ks.cfg       Pictures             test
[root@xiaogan ~]# cp etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf 
cp: cannot create regular file ‘/etc/httpd/conf/httpd.conf’: No such file or directory
[root@xiaogan ~]# ld /etc/httpd
ld: cannot find /etc/httpd: No such file or directory
[root@xiaogan ~]# rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm | cpio -duim
7701 blocks
[root@xiaogan ~]# ls /etc/httpd
ls: cannot access /etc/httpd: No such file or directory
[root@xiaogan ~]# ll
total 1032
-rw-r--r--  1 root root      0 8月   7 10:10 a
-rw-------. 1 root root   1798 7月  27 21:54 anaconda-ks.cfg
drwxr-xr-x. 2 root root      6 7月  27 22:11 Desktop
drwxr-xr-x. 2 root root      6 7月  27 22:11 Documents
drwxr-xr-x. 2 root root      6 7月  27 22:11 Downloads
drwxr-xr-x  5 root root     52 8月   7 14:58 etc
-rw-r--r--  1 root root 108472 8月   3 23:01 extundelete-0.2.4.tar.bz2
-rw-r--r--  1 root root  11753 8月   7 14:50 httpd.conf
-rw-------. 1 root root   1891 7月  27 22:04 initial-setup-ks.cfg
drwxr-xr-x. 2 root root      6 7月  27 22:11 Music
-rw-r--r--  1 root root 924979 8月   6 23:09 nginx-1.11.2.tar.gz
drwxr-xr-x. 2 root root      6 7月  27 22:11 Pictures
drwxr-xr-x. 2 root root      6 7月  27 22:11 Public
drwxr-xr-x  3 root root     18 8月   7 14:58 run
drwxr-xr-x. 2 root root      6 7月  27 22:11 Templates
drwxr-xr-x  3 root root     26 8月   7 10:10 test
drwxr-xr-x  7 root root     65 8月   7 14:58 usr
drwxr-xr-x  6 root root     48 8月   7 14:58 var
drwxr-xr-x. 2 root root      6 7月  27 22:11 Videos
[root@xiaogan ~]# cd etc/
[root@xiaogan etc]# ls
httpd  logrotate.d  sysconfig
[root@xiaogan etc]# which tree
/usr/bin/tree
[root@xiaogan etc]# cd ..
[root@xiaogan ~]# tree etc
etc
|-- httpd
|   |-- conf
|   |   |-- httpd.conf
|   |   `-- magic
|   |-- conf.d
|   |   |-- autoindex.conf
|   |   |-- README
|   |   |-- userdir.conf
|   |   `-- welcome.conf
|   |-- conf.modules.d
|   |   |-- 00-base.conf
|   |   |-- 00-dav.conf
|   |   |-- 00-lua.conf
|   |   |-- 00-mpm.conf
|   |   |-- 00-proxy.conf
|   |   |-- 00-systemd.conf
|   |   `-- 01-cgi.conf
|   |-- logs -> ../../var/log/httpd
|   |-- modules -> ../../usr/lib64/httpd/modules
|   `-- run -> /run/httpd
|-- logrotate.d
|   `-- httpd
`-- sysconfig
    |-- htcacheclean
    `-- httpd

8 directories, 17 files
[root@xiaogan ~]# mv etc/* /etc
mv: overwrite ‘/etc/logrotate.d’? y^Hn^C
[root@xiaogan ~]# clear
[root@xiaogan ~]# ls etc
logrotate.d  sysconfig
[root@xiaogan ~]# which httpd
/usr/bin/which: no httpd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@xiaogan ~]# rpm -e httpd
error: package httpd is not installed
[root@xiaogan ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm 
warning: /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
        httpd-tools = 2.4.6-40.el7 is needed by httpd-2.4.6-40.el7.x86_64
[root@xiaogan ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm --nodeps
warning: /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:httpd-2.4.6-40.el7               ################################# [100%]
[root@xiaogan ~]# which httpd
/usr/sbin/httpd
[root@xiaogan ~]# ls /etc/httpd/conf/httpd.conf 
/etc/httpd/conf/httpd.conf
[root@xiaogan ~]# rpm -e httpd
[root@xiaogan ~]# 

 

posted @ 2016-08-07 16:13  小甘丶  阅读(451)  评论(0编辑  收藏  举报