简介:使用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
实验:
[[email protected] ~]# which httpd /usr/sbin/httpd [[email protected] ~]# rpm -qf `which httpd` httpd-2.4.6-40.el7.x86_64 [[email protected] ~]# rm /etc/httpd/conf/httpd.conf -rf [[email protected] ~]# ls /etc/httpd/conf/* /etc/httpd/conf/magic [[email protected] ~]# ls -a /etc/httpd/conf/* /etc/httpd/conf/magic [[email protected] ~]# ls -l /etc/httpd/conf/* -rw-r--r-- 1 root root 13077 9月 17 2015 /etc/httpd/conf/magic [[email protected] ~]# rm -rf etc [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# ls etc/httpd/conf/httpd.conf etc/httpd/conf/httpd.conf [[email protected] ~]# cp etc/httpd/conf/httpd.conf /etc/httpd/conf/. [[email protected] ~]# rpm -e httpd
这是试验中碰到的问题,在缺少文件的情况下,还是卸载成功了,但会提示警告信息 [[email protected] ~]# which httpd /usr/sbin/httpd [[email protected] ~]# rpm -qf `which httpd` httpd-2.4.6-40.el7.centos.4.x86_64 [[email protected] ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf [[email protected] ~]# 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 [[email protected] ~]# cp /etc/httpd/conf/httpd.conf . [[email protected] ~]# rm /etc/httpd/conf/httpd.conf -rf [[email protected] ~]# ls /etc/httpd/conf/httpd.conf ls: cannot access /etc/httpd/conf/httpd.conf: No such file or directory [[email protected] ~]# rpm -e httpd warning: file /etc/httpd/conf/httpd.conf: remove failed: No such file or directory [[email protected] ~]# which httpd /usr/bin/which: no httpd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# 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 [[email protected] ~]# ld /etc/httpd ld: cannot find /etc/httpd: No such file or directory [[email protected] ~]# rpm2cpio /mnt/Packages/httpd-2.4.6-40.el7.x86_64.rpm | cpio -duim 7701 blocks [[email protected] ~]# ls /etc/httpd ls: cannot access /etc/httpd: No such file or directory [[email protected] ~]# 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 [[email protected] ~]# cd etc/ [[email protected] etc]# ls httpd logrotate.d sysconfig [[email protected] etc]# which tree /usr/bin/tree [[email protected] etc]# cd .. [[email protected] ~]# 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 [[email protected] ~]# mv etc/* /etc mv: overwrite ‘/etc/logrotate.d’? y^Hn^C [[email protected] ~]# clear [[email protected] ~]# ls etc logrotate.d sysconfig [[email protected] ~]# which httpd /usr/bin/which: no httpd in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin) [[email protected] ~]# rpm -e httpd error: package httpd is not installed [[email protected] ~]# 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 [[email protected] ~]# 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%] [[email protected] ~]# which httpd /usr/sbin/httpd [[email protected] ~]# ls /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf [[email protected] ~]# rpm -e httpd [[email protected] ~]#