作为centos上的基础软件管理工具,rpm的作用可谓是非常重要,就连备受欢迎的yum工具,底层也是基于rpm来实现的。

       

        也就是说一旦rpm工具顺坏或者被误删除,用yum也无法重新安装rpm。

 

        那么一旦出现此种情况,该如何解决,我们来做个测试。

 

        测试环境: 安装在VMware上的 CentOS Linux release 7.4.1708 (Core)

 

        首先,需要卸载系统上已安装的rpm,如我们所见,想要卸载,仅凭 rpm -e rpm是无法完成卸载的

 

        

搞崩系统系列之救援模式下安装系统软件_ios

 

        所以此处需要忽略依赖,强制卸载,我们需要加上--nodeps

        rpm -e rpm --nodeps

 

        

搞崩系统系列之救援模式下安装系统软件_bash_02

        

        如图,在此执行rpm,提示no such file or directory

        既然rpm已不可用,我们当然不可能用rpm在次安装rpm,当然,基于rpm的来实现的yum也无法完成这个工作

        

        当然,既然是测试实验,当然是早有准备,虚拟机上已经挂好了centos官方安装光盘。

        此时我们执行reboot命令,重启,由于接下来需要进入救援模式,所以无法使用ssh远程连接,于是我们直接在VMware虚拟机上操作

       

        

搞崩系统系列之救援模式下安装系统软件_bash_03

 

        这个页面很熟悉,Centos7开机页面,通常这里我们都是直接回车,或者不去理会让系统自己执行开机操作。

            

        不过现在,我们不按回车,而是如图所示,按 “ c“

 

        

搞崩系统系列之救援模式下安装系统软件_重启_04

 

        看到这个界面不要懵逼,我们冷静的输入exit,然后回车

 

        

搞崩系统系列之救援模式下安装系统软件_ios_05

 

        好了,终于又看到光盘引导页面。

 

        其实开机按下 ESC 键,进入bios页面修改默认引到方式,重启,也可以达到这个效果

           

        不过用我们的这种方法,不需要进入bios就能达到这个目的,何乐而不为呢

 

        在此,我们选择第三项,Troubleshooting

 

        

搞崩系统系列之救援模式下安装系统软件_bash_06

 

        接下来选择第二项,Rescue a Centos system,救援模式,接下来一路回车,到如下页面:

 

        

搞崩系统系列之救援模式下安装系统软件_重启_07

 

        键盘输入1之后回车

 

       

搞崩系统系列之救援模式下安装系统软件_重启_08

        此处需注意提示信息,

                chroot /mnt/sysimage

        表示我们原来的根 /,在此处为/mnt/sysimage/    记清楚之后,按下回车

 

        

搞崩系统系列之救援模式下安装系统软件_重启_09

 

        接下来我们得到了一个bash进程,敲下df 查看以下。

 

        光盘没有自动挂载,所以我们手动挂载一下光盘,先新建临时目录:

                mkdir   /mnt/cdrom,    接着:

                mount  /dev/sr0 /mnt/cdrom

 

        

搞崩系统系列之救援模式下安装系统软件_重启_10

        

        挂载成功,我们得到了一个只读的光盘设备,用于恢复数据的数据就在光盘里。

    

        接下来我们直接输入:rpm -ivh /mnt/cdrom/Package/rpm-4,然后Tab键,bash会补全路径

        

        敲下回车

 

        

搞崩系统系列之救援模式下安装系统软件_bash_11

 

        可以看到,安装成功。

 

        为什么这里我们可以使用rpm命令呢?就像我们df看到的一样,我们的root 也就是根,变成了/mnt/sysimage/

 

        换言之,这里的bash并不是我们原来的bash,这里的rpm 也不是被我们强制卸载的那个。而是通过救援模式,调用光盘里的rpm。

    

        一个巧妙的设计,我们重新安装回了rpm。

 

        任务完成,reboot,开机

 

        

搞崩系统系列之救援模式下安装系统软件_ios_12

 

            回到我们熟悉的界面,敲入rpm,看看是不是已经回来了。

 

          好了,rpm,重新归来。