zoukankan      html  css  js  c++  java
  • Linux软件安装管理之1——rpm命令管理

    Linux软件包管理

    1. rpm命令管理 https://blog.csdn.net/jiduochou963/article/details/86619233
    2. yum在线命令 https://blog.csdn.net/jiduochou963/article/details/86653645
    3. 源码包管理 https://blog.csdn.net/jiduochou963/article/details/86653703
    4. 脚本安装包 https://blog.csdn.net/jiduochou963/article/details/86655625

    软件包管理简介

    软件包分类

    源码包

    • 源码包优点
      • 开源,只要有能力,可以修改源代码
      • 可以自由选择所需的功能
      • 软件是编译安装,所以更加适合自己的系统,更加稳定效率也更高
      • 卸载方便
    • 源码包缺点
      • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
      • 编译过程时间较长,安装比二进制安装时间长
      • 因为是编译安装,安装过程中一旦报错新手很难解决
    • 脚本安装包——所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行脚本实现一键安装。但实际安装的还是源码包和二进制包(下面将会介绍)
      • 优点:安装简单、快捷;
      • 缺点:完全丧失了自定义性。

    二进制包(RPM包、系统默认包)

    • 二进制包的优点
      • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
      • 安装速度比源码安装快的多
    • 二进制包缺点
      • 经过编译,不再可以看到源代码
      • 功能选择不如源码包灵活
      • 依赖性(下面将会介绍)
    • RPM包安装命令分两种安装方法:rpm手工命令安装+yum在线安装

    报告环境
    [root@localhost /]# cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)
    

    一、 rpm命令管理

    RPM包命名规则

    RPM包的来源

    • RPM包在系统镜像文件ISO中————Linux系统光盘中包含了所有的RPM包
    • 使用
      • 虚拟机设置-> CD/DVD(IDE)->设备状态:已连接打钩。(相当于给光驱加电源)
      • 连接->使用ISO镜像文件(M)->浏览:选择系统镜像文件
      • 给光盘创建一个挂载点
        在这里插入图片描述
    [root@localhost cdrom]# mkdir /mnt/cdrom
    [root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
    mount: 在 /dev/sr0 上找不到媒体
    [root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
    mount: /dev/sr0 写保护,将以只读方式挂载
    [root@localhost cdrom]# ls -al /mnt/cdrom/
    总用量 1643
    drwxr-xr-x. 8 root root    2048 5月   4 2018 .
    drwxr-xr-x. 3 root root      19 1月  23 20:50 ..
    -rw-rw-r--. 1 root root      14 5月   2 2018 CentOS_BuildTag
    -rw-r--r--. 1 root root      29 5月   4 2018 .discinfo
    drwxr-xr-x. 3 root root    2048 5月   4 2018 EFI
    -rw-rw-r--. 1 root root     227 8月  30 2017 EULA
    -rw-rw-r--. 1 root root   18009 12月 10 2015 GPL
    drwxr-xr-x. 3 root root    2048 5月   4 2018 images
    drwxr-xr-x. 2 root root    2048 5月   4 2018 isolinux
    drwxr-xr-x. 2 root root    2048 5月   4 2018 LiveOS
    drwxrwxr-x. 2 root root 1640448 5月   3 2018 Packages
    drwxrwxr-x. 2 root root    4096 5月   7 2018 repodata
    -rw-rw-r--. 1 root root    1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
    -rw-rw-r--. 1 root root    1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
    -r--r--r--. 1 root root    2883 5月   7 2018 TRANS.TBL
    -rw-r--r--. 1 root root     354 5月   4 2018 .treeinfo
    [root@localhost cdrom]# cd /mnt/cdrom/Packages/
    [root@localhost Packages]# ls		# 这将会列出所有的PRM包,这里省略
    ...
    

    如果出现/dev/sr0 上找不到媒体,解决办法是在虚拟机底部的状态栏内,找到CD/DVD图标(一个光盘图标),此时一般显示为灰色,鼠标点一下,即可启动CD/DVD,此时CD/DVD即可加载到虚拟机系统内.
    在这里插入图片描述

    所以RPM包在哪呢? RPM包在/mnt/cdrom/Packages目录下:

    [root@localhost Packages]# pwd
    /mnt/cdrom/Packages
    [root@localhost Packages]# 
    [root@localhost Packages]# cd /
    [root@localhost /]# umount /mnt/cdrom/
    

    RPM包命名原则

    如:httpd-2.2.15-15.el6.centos.1.i686.rpm

    • httpd 软件包名
    • 2.2.15 软件版本
    • 15 软件发布的次数
    • el6.centos 适合的Linux平台(el6是Redhat的企业版)
    • i686 适合的硬件平台
    • rpm rpm包的扩展名
      包名称-版本-发布次数.适合的Linux平台.适合的硬件平台.包的扩展名

    RPM包依赖性:

    • 树形依赖:a->b->c 解决方法:从后往前安装
    • 环形依赖:a->b->c->a 解决方法:所有包放在一条命令中安装即可
    • 模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就是以.so.数字结尾,它依赖的其实是一个文件,而不是软件包。该文件藏身在某一个软件包当中,我们只要将该文件所在的软件包安装上,该文件也就安装了。
      • 如:
      [root@localhost Packages]# rpm -ivh mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
      警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
      错误:依赖检测失败:
              libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要
              libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要
      [root@localhost Packages]# 
      # 提示说要安装libodbc.so.2()(64bit),凡是以`.so.数字`结尾的依赖称库文件依赖(库也称模块,库就是linux中的函数,这里的函数就是一个文件,使用称库文件)。
      # 安装时找不到如libodbc.so.2()这种依赖,为啥呢?因为mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 依赖的是一个文件而不是Packages目录下的这些PRM软件包,
      # 即被依赖的库文件是藏身在众多PRM软件包中的一个文件,只要把这个文件所在PRM软件包装上,自然就有了被依赖的这个文件。
      
      那我怎么知道这个文件在哪个包里面呢?
      三个方法:
      1. 根据文件猜在哪个包中,额 可行性不大
      2. 查询http://www.rpmfind.net,输入库文件名称查询到对应的rpm包,然后安装即可。(详下)
      3. yum在线安装(下面将会介绍):Redhat或CentOS等Linux系统在远程搭建一个服务器放置所有用到的软件,只要Linux能正常访问这台远程服务器,那么执行一条yum命令,在服务器上会自动匹配依赖性(不管是树形依赖、环形依赖、库依赖etc),自动下载所有依赖的包,一条命令装好包括依赖包在内的需要安装的所有软件包。在不联网情况下,镜像光盘可以作为本地yum(下面将会介绍)。CentOS的yum是免费的。yum安装的包是二进制包。

    在这里插入图片描述
    在这里插入图片描述

    安装命令

    包全名与包名

    mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm就是包全名(完整的包名),而mysql-connector-odbc是包名。

    • 包全名:操作的包是还没有安装的软件包时,必须使用包全名,而且要注意路径。(主要是安装和升级的时候)
    • 包名:操作已经安装的软件包时,使用包名,原因是会搜索/var/lib/rpm/中的数据库。(主要是卸载和查询的时候)

    RPM安装

    • rpm -ivh 包全名
    • 选项
      • -i(install) 安装
      • -v(verbose) 显示详细信息
      • -h(hash) 显示进度
      • --nodeps 不检测依赖性(实际生产环境——服务器上是不允许使用,必须解决依赖性)
    实践——安装Apache

    先装主包,再安装附加包(附加包依赖主包)

    [root@localhost Packages]# rpm -ivh httpd-
    httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
    httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
    [root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            /etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 需要
            httpd-tools = 2.4.6-80.el7.centos 被 httpd-2.4.6-80.el7.centos.x86_64 需要
            libapr-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
            libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
    [root@localhost Packages]# rpm -ivh httpd-
    httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
    httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
    [root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 需要
            libaprutil-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 需要
    [root@localhost Packages]# rpm -ivh ^C
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm 
    警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:apr-1.4.8-3.el7_4.1              ################################# [100%]
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
    警告:apr-util-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:apr-util-1.5.2-6.el7             ################################# [100%]
    [root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
    警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-tools-2.4.6-80.el7.centos  ################################# [100%]
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm 
    警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 apr-1.4.8-3.el7_4.1.x86_64 已经安装
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm 
    警告:apr-util-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 apr-util-1.5.2-6.el7.x86_64 已经安装
    [root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            /etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 需要
    [root@localhost Packages]# rpm -ivh /etc/mime.types
    错误:打开 /etc/mime.types 失败: 没有那个文件或目录
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm 
    警告:mailcap-2.1.41-2.el7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:mailcap-2.1.41-2.el7             ################################# [100%]
    [root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-2.4.6-80.el7.centos        ################################# [100%]
    [root@localhost Packages]# 
    [root@localhost Packages]# 
    [root@localhost Packages]# rpm -ivh httpd-
    httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
    httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
    [root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
    警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-manual-2.4.6-80.el7.centos ################################# [100%]
    [root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            apr-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 需要
            apr-util-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 需要
    [root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
    错误:打开 apr-devel-1.4.8-3.el7_4.1. 失败: 没有那个文件或目录
    [root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
    apr-devel-1.4.8-3.el7_4.1.i686.rpm    apr-devel-1.4.8-3.el7_4.1.x86_64.rpm  
    [root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.x86_64.rpm 
    警告:apr-devel-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:apr-devel-1.4.8-3.el7_4.1        ################################# [100%]
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.
    apr-util-devel-1.5.2-6.el7.i686.rpm    apr-util-devel-1.5.2-6.el7.x86_64.rpm  
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm 
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            expat-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
            libdb-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
            openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh expat-devel-2.1.0-10.el7_3.x86_64.rpm 
    警告:expat-devel-2.1.0-10.el7_3.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:expat-devel-2.1.0-10.el7_3       ################################# [100%]
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh lib
    Display all 2016 possibilities? (y or n)
    [root@localhost Packages]# rpm -ivh libdb-devel-5.3.21-24.el7.x86_64.rpm 
    警告:libdb-devel-5.3.21-24.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:libdb-devel-5.3.21-24.el7        ################################# [100%]
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm 
    警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 需要
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-20.el7.x86_64.rpm
    错误:打开 openldap-devel-2.4.44-20.el7.x86_64.rpm 失败: 没有那个文件或目录
    [root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm 
    警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 需要
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -ivh cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm 
    警告:cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:cyrus-sasl-devel-2.1.26-23.el7   ################################# [100%]
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    错误:依赖检测失败:
            openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
    [root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm
    警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:openldap-devel-2.4.44-13.el7     ################################# [100%]
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:apr-util-devel-1.5.2-6.el7       ################################# [100%]
    [root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
    警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 apr-util-devel-1.5.2-6.el7.x86_64 已经安装
    [root@localhost Packages]# rpm -ivh httpd-
    httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
    httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
    [root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
    警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-manual-2.4.6-80.el7.centos.noarch 已经安装
    [root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-devel-2.4.6-80.el7.centos  ################################# [100%]
    [root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]#
    
    检查:
    [root@localhost Packages]# rmp -ivh httpd-
    httpd-2.4.6-80.el7.centos.x86_64.rpm         httpd-manual-2.4.6-80.el7.centos.noarch.rpm  
    httpd-devel-2.4.6-80.el7.centos.x86_64.rpm   httpd-tools-2.4.6-80.el7.centos.x86_64.rpm   
    [root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    bash: rmp: 未找到命令...
    相似命令是: 'rpm'
    [root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    bash: rmp: 未找到命令...
    相似命令是: 'rpm'
    [root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    bash: rmp: 未找到命令...
    相似命令是: 'rpm'
    [root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm 
    警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-manual-2.4.6-80.el7.centos.noarch 已经安装
    [root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-devel-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]# 
    

    累趴…

    升级与卸载

    RPM包升级

    -rpm -Uvh 包全名

    • 选项
      • -U(upgrade)升级
      • 若果没安装,则升级即安装
      [root@localhost ~]# cd /mnt/cdrom/Packages/
      [root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
      警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
      准备中...                          ################################# [100%]
            软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
      [root@localhost Packages]# 
      

    卸载

    • rpm -e 包名
    • 选项:
      • -e(erase) 卸载
      • --nodeps 不检查依赖性(同样,实际生产环境————服务器上是不允许使用,必须解决依赖性)
    • 因为会查找数据库(位置/var/lib/rpm/),使用不用使用包全名,而且在任何位置都可以执行卸载命令(不用注意路径, 而安装命令一定要进入/mnt/cdrom/Packages/)

    例子:

    Last login: Wed Jan 23 17:59:27 2019 from 192.168.249.1
    
    [root@localhost ~]# cd /mnt/cdrom/Packages/
    [root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
            软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
    [root@localhost Packages]# ls /var/lib/rpm/
    Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
    Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername
    [root@localhost Packages]# ^C
    [root@localhost Packages]# rpm -e httpd
    错误:依赖检测失败:
            httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-manual-2.4.6-80.el7.centos.noarch 需要
            httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-devel-2.4.6-80.el7.centos.x86_64 需要
    [root@localhost Packages]# 
    

    使用--nodeps————这里只是演示

    [root@localhost Packages]# rpm -e httpd --nodeps 
    [root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 
    警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:httpd-2.4.6-80.el7.centos        ################################# [100%]
    [root@localhost Packages]# 
    

    RPM包查询

    查询是否安装

    • rpm -q 包名 # 查询包是否安装
      • -q(query) 查询
    • rpm -qa # 查询所有已经安装的RPM包
      • -a(all) 所有
    [root@localhost Packages]# rpm -q httpd
    httpd-2.4.6-80.el7.centos.x86_64
    [root@localhost Packages]# rpm -q onefine
    未安装软件包 onefine 
    [root@localhost Packages]# rpm -qa  # 列出所有安装的包,省略
    ...
    

    利用管道符————一旦使用grep,后面的就是正则表达式————推荐使用

    [root@localhost Packages]# rpm -qa | grep httpd
    httpd-manual-2.4.6-80.el7.centos.noarch
    httpd-2.4.6-80.el7.centos.x86_64
    httpd-tools-2.4.6-80.el7.centos.x86_64
    httpd-devel-2.4.6-80.el7.centos.x86_64
    [root@localhost Packages]# 
    

    查询软件包详细信息

    • rpm -qi 包名
    • 选项:
      • -i(information) 查询软件信息
      • -p(package) 查询未安装包信息

    查询已安装包的信息:

    [root@localhost Packages]# rpm -qi httpd
    Name        : httpd
    Version     : 2.4.6
    Release     : 80.el7.centos
    Architecture: x86_64
    Install Date: 2019年01月24日 星期四 00时13分06秒
    Group       : System Environment/Daemons
    Size        : 9817285
    License     : ASL 2.0
    Signature   : RSA/SHA256, 2018年04月25日 星期三 19时04分41秒, Key ID 24c6a8a7f4a80eb5
    Source RPM  : httpd-2.4.6-80.el7.centos.src.rpm
    Build Date  : 2018年04月21日 星期六 02时12分22秒
    Build Host  : x86-01.bsys.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    URL         : http://httpd.apache.org/
    Summary     : Apache HTTP Server
    Description :
    The Apache HTTP Server is a powerful, efficient, and extensible
    web server.
    [root@localhost Packages]# 
    

    查询未安装包的信息(存在但没安装的包,此时跟包全名并且要注意位置————切换目录)

    [root@localhost Packages]# pwd
    /mnt/cdrom/Packages
    [root@localhost Packages]# rpm -qip mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
    警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    Name        : mysql-connector-odbc
    Version     : 5.2.5
    Release     : 7.el7
    Architecture: x86_64
    Install Date: (not installed)
    Group       : System Environment/Libraries
    Size        : 428611
    License     : GPLv2 with exceptions
    Signature   : RSA/SHA256, 2018年04月25日 星期三 19时28分41秒, Key ID 24c6a8a7f4a80eb5
    Source RPM  : mysql-connector-odbc-5.2.5-7.el7.src.rpm
    Build Date  : 2018年04月11日 星期三 09时41分42秒
    Build Host  : x86-01.bsys.centos.org
    Relocations : (not relocatable)
    Packager    : CentOS BuildSystem <http://bugs.centos.org>
    Vendor      : CentOS
    URL         : http://dev.mysql.com/downloads/connector/odbc/
    Summary     : ODBC driver for MySQL
    Description :
    An ODBC (rev 3) driver for MySQL, for use with unixODBC.
    [root@localhost Packages]# 
    

    查询包中文件的安装位置

    • rpm -ql 包名
    • 选项
      • -l(list) 列表
      • -p(package) 查询未安装包信息
    [root@localhost Packages]# rpm -ql httpd 
    /etc/httpd
    /etc/httpd/conf
    /etc/httpd/conf.d
    /etc/httpd/conf.d/README
    /etc/httpd/conf.d/autoindex.conf
    /etc/httpd/conf.d/userdir.conf
    /etc/httpd/conf.d/welcome.conf
    /etc/httpd/conf.modules.d
    ...省略好多
    

    RPM包默认安装位置

    RPM包默认(习惯、推荐、常规)安装路径
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所使用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置

    这是包安装的推荐位置,但是实际上不一定,这取决与写包的作者的安排。正是因为这样,所以才有RPM包的卸载命令。下面的实践就更好理解了。

    查询未安装包的默认安装(还没装,但安装之后会在的位置)位置(存在但没安装的包,此时跟包全名并且要注意位置————切换目录)

    [root@localhost Packages]# pwd
    /mnt/cdrom/Packages
    [root@localhost Packages]# rpm -qlp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
    警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    /usr/lib64/libmyodbc5.so
    /usr/lib64/libmyodbc5w.so
    /usr/share/doc/mysql-connector-odbc-5.2.5
    /usr/share/doc/mysql-connector-odbc-5.2.5/COPYING
    /usr/share/doc/mysql-connector-odbc-5.2.5/ChangeLog
    /usr/share/doc/mysql-connector-odbc-5.2.5/README
    /usr/share/doc/mysql-connector-odbc-5.2.5/README.debug
    [root@localhost Packages]# 
    

    查询系统文件属于哪个RPM包

    • rpm -qf 系统文件名
    • 选项:
      • -f(file) 查询系统文件属于哪个安装包
    [root@localhost Packages]# rpm -qf /etc/httpd/conf.d
    httpd-2.4.6-80.el7.centos.x86_64
    [root@localhost Packages]# 
    

    来捣乱:

    [root@localhost Packages]# rpm -qf onefine
    错误:文件 /mnt/cdrom/Packages/onefine:没有那个文件或目录
    [root@localhost Packages]# touch abc
    touch: 无法创建"abc": 只读文件系统
    [root@localhost Packages]# touch /home/onefine/hahaha
    [root@localhost Packages]# ls -al /home/onefine/
    总用量 12
    drwx------. 3 onefine onefine  92 1月  24 01:24 .
    drwxr-xr-x. 3 root    root     21 1月  23 17:45 ..
    -rw-r--r--. 1 onefine onefine  18 4月  11 2018 .bash_logout
    -rw-r--r--. 1 onefine onefine 193 4月  11 2018 .bash_profile
    -rw-r--r--. 1 onefine onefine 231 4月  11 2018 .bashrc
    -rw-r--r--. 1 root    root      0 1月  24 01:24 hahaha
    drwxr-xr-x. 4 onefine onefine  39 1月  23 17:33 .mozilla
    [root@localhost Packages]# rpm -qf /home/onefine/hahaha 
    文件 /home/onefine/hahaha 不属于任何软件包
    [root@localhost Packages]# rm /home/onefine/hahaha 
    rm:是否删除普通空文件 "/home/onefine/hahaha"?y
    [root@localhost Packages]# ls -al /home/onefine/
    总用量 12
    drwx------. 3 onefine onefine  78 1月  24 01:26 .
    drwxr-xr-x. 3 root    root     21 1月  23 17:45 ..
    -rw-r--r--. 1 onefine onefine  18 4月  11 2018 .bash_logout
    -rw-r--r--. 1 onefine onefine 193 4月  11 2018 .bash_profile
    -rw-r--r--. 1 onefine onefine 231 4月  11 2018 .bashrc
    drwxr-xr-x. 4 onefine onefine  39 1月  23 17:33 .mozilla
    [root@localhost Packages]# 
    

    所以,这个文件必须是由RPM包安装的,才能方向追踪所属的包————'系统文件名’的意思。

    再来:已知未安装包将来的位置。。查这个不存在的文件会怎么样?以上面的MySQL为例

    [root@localhost Packages]# rpm -qf /usr/lib64/libmyodbc5w.so
    错误:文件 /usr/lib64/libmyodbc5w.so:没有那个文件或目录
    [root@localhost Packages]# 
    [root@localhost Packages]# rpm -qf #/usr/lib64/libmyodbc5w.so
    错误:文件 /usr/lib64/libmyodbc5w.so:没有那个文件或目录
    [root@localhost Packages]# rpm -qfp /usr/lib64/libmyodbc5w.so  # 当然了,这是错误的
    rpm:每次仅能执行一种类型的查询/检验
    [root@localhost Packages]# 
    

    查询软件包的依赖性

    • rpm -qR 包名
    • 选项:
      • -R(requires) 查询软件包的依赖性
      • -p(package) 查询未安装包的信息
    [root@localhost Packages]# rpm -qR httpd
    /etc/mime.types
    system-logos >= 7.92.1-1
    httpd-tools = 2.4.6-80.el7.centos
    /usr/sbin/useradd
    /usr/sbin/groupadd
    systemd-units
    systemd-units
    systemd-units
    /bin/sh
    /bin/sh
    /bin/sh
    /bin/sh
    /bin/sh
    /bin/sh
    rpmlib(FileDigests) <= 4.6.0-1
    rpmlib(FileCaps) <= 4.6.1-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rpmlib(CompressedFileNames) <= 3.0.4-1
    /bin/sh
    libapr-1.so.0()(64bit)
    libaprutil-1.so.0()(64bit)
    libcrypt.so.1()(64bit)
    libc.so.6()(64bit)
    libc.so.6(GLIBC_2.14)(64bit)
    libc.so.6(GLIBC_2.2.5)(64bit)
    libc.so.6(GLIBC_2.3.4)(64bit)
    libc.so.6(GLIBC_2.3)(64bit)
    libc.so.6(GLIBC_2.4)(64bit)
    libdb-5.3.so()(64bit)
    libdl.so.2()(64bit)
    libexpat.so.1()(64bit)
    liblua-5.1.so()(64bit)
    libm.so.6()(64bit)
    libpcre.so.1()(64bit)
    libpthread.so.0()(64bit)
    libpthread.so.0(GLIBC_2.2.5)(64bit)
    libselinux.so.1()(64bit)
    libsystemd-daemon.so.0()(64bit)
    libsystemd-daemon.so.0(LIBSYSTEMD_DAEMON_31)(64bit)
    libz.so.1()(64bit)
    rtld(GNU_HASH)
    rpmlib(PayloadIsXz) <= 5.2-1
    [root@localhost Packages]# 
    

    列出所有所有所有……如果要查看包的依赖去安装包,这个意义不大,还不如直接安装,安装提示安装缺失的依赖。

    [root@localhost Packages]# pwd
    /mnt/cdrom/Packages
    [root@localhost Packages]# rpm -qR mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
    未安装软件包 mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 
    [root@localhost Packages]# rpm -qRp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
    警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
    /sbin/ldconfig
    /sbin/ldconfig
    libc.so.6()(64bit)
    libc.so.6(GLIBC_2.14)(64bit)
    libc.so.6(GLIBC_2.2.5)(64bit)
    libc.so.6(GLIBC_2.3)(64bit)
    libc.so.6(GLIBC_2.3.4)(64bit)
    libc.so.6(GLIBC_2.4)(64bit)
    libdl.so.2()(64bit)
    libdl.so.2(GLIBC_2.2.5)(64bit)
    libm.so.6()(64bit)
    libmysqlclient.so.18()(64bit)
    libmysqlclient.so.18(libmysqlclient_18)(64bit)
    libodbc.so.2()(64bit)
    libodbcinst.so.2()(64bit)
    libpthread.so.0()(64bit)
    libpthread.so.0(GLIBC_2.2.5)(64bit)
    rpmlib(CompressedFileNames) <= 3.0.4-1
    rpmlib(FileDigests) <= 4.6.0-1
    rpmlib(PayloadFilesHavePrefix) <= 4.0-1
    rtld(GNU_HASH)
    rpmlib(PayloadIsXz) <= 5.2-1
    [root@localhost Packages]# 
    

    RPM包校验

    RPM包校验

    • rpm -V 已安装的包名
    • 选项:
      • -V(verify) 校验指定RPM包中的文件
    [root@localhost ~]# rpm -V httpd
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# rpm -ql httpd | more
    /etc/httpd
    /etc/httpd/conf
    /etc/httpd/conf.d
    /etc/httpd/conf.d/README
    /etc/httpd/conf.d/autoindex.conf
    /etc/httpd/conf.d/userdir.conf
    /etc/httpd/conf.d/welcome.conf
    /etc/httpd/conf.modules.d
    /etc/httpd/conf.modules.d/00-base.conf
    /etc/httpd/conf.modules.d/00-dav.conf
    /etc/httpd/conf.modules.d/00-lua.conf
    /etc/httpd/conf.modules.d/00-mpm.conf
    /etc/httpd/conf.modules.d/00-proxy.conf
    /etc/httpd/conf.modules.d/00-systemd.conf
    /etc/httpd/conf.modules.d/01-cgi.conf
    /etc/httpd/conf/httpd.conf
    /etc/httpd/conf/magic
    /etc/httpd/logs
    /etc/httpd/modules
    /etc/httpd/run
    /etc/logrotate.d/httpd
    /etc/sysconfig/htcacheclean
    /etc/sysconfig/httpd
    /run/httpd
    /run/httpd/htcacheclean
    /usr/lib/systemd/system/htcacheclean.service
    /usr/lib/systemd/system/httpd.service
    /usr/lib/tmpfiles.d/httpd.conf
    /usr/lib64/httpd
    /usr/lib64/httpd/modules
    /usr/lib64/httpd/modules/mod_access_compat.so
    /usr/lib64/httpd/modules/mod_actions.so
    /usr/lib64/httpd/modules/mod_alias.so
    /usr/lib64/httpd/modules/mod_allowmethods.so
    /usr/lib64/httpd/modules/mod_asis.so
    /usr/lib64/httpd/modules/mod_auth_basic.so
    /usr/lib64/httpd/modules/mod_auth_digest.so
    /usr/lib64/httpd/modules/mod_authn_anon.so
    /usr/lib64/httpd/modules/mod_authn_core.so
    /usr/lib64/httpd/modules/mod_authn_dbd.so
    /usr/lib64/httpd/modules/mod_authn_dbm.so
    /usr/lib64/httpd/modules/mod_authn_file.so
    /usr/lib64/httpd/modules/mod_authn_socache.so
    /usr/lib64/httpd/modules/mod_authz_core.so
    /usr/lib64/httpd/modules/mod_authz_dbd.so
    /usr/lib64/httpd/modules/mod_authz_dbm.so
    /usr/lib64/httpd/modules/mod_authz_groupfile.so
    --More--  # 后面的省略
    ...
    # ...修改/etc/httpd/conf/httpd.conf文件
    [root@localhost ~]# vi /etc/httpd/conf/httpd.conf
    # ...添加下面一句话
    # 你被改了你知道不
    # ...省略其他
    # ...保存退出后
    [root@localhost ~]# rpm -V httpd
    S.5....T.  c /etc/httpd/conf/httpd.conf
    # ...修改回来
    [root@localhost ~]# vi /etc/httpd/conf/httpd.conf
    # ...修改回来之后
    [root@localhost ~]# rpm -V httpd
    .......T.  c /etc/httpd/conf/httpd.conf
    [root@localhost ~]#
    
    验证内容中的8个信息的具体内容(依次)如下:
    • S 文件大小是否改变
    • M 文件的类型或文件的权限(rwx)是否被改变
    • 5 文件的MD5校验和是否改变(可以看成文件内容是否改变)
    • D 设备的主从代码是否改变
    • L 文件的路径是否改变
    • U 文件的属主(所有者)是否改变
    • G 文件的属组是否改变
    • T 文件的修改时间是否改变
    文件类型
    • c(config file) 配置文件
    • d(documentation) 普通文件
    • g(ghost file) "鬼"文件,很少见,就是该文件不应该被这个RPM所包含
    • L(license file) 授权文件
    • r(read me) 描述文件

    RPM包中文件提取

    • rpm2cpio 包全名 | cpio -idv .文件绝对路径
      • rpm2cpio 将rpm包转换为cpio格式的命令
        • 2谐音to,就是将rpm格式的包转换成cpio格式的包
      • cpio 是一个标准工具,它用于创建软件归档文件和从档案文件中提取文件
        • cpio并不知道我们所要提取的文件的位置在哪,
      • cpio命令的完整格式:cpio 选项 <[文件|设备]
        • 选项:
          • -i copy-in模式,还原
          • -d 还原时自动新建目录
          • -v 显示还原过程
    [root@localhost ~]# whereis ls
    ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
    [root@localhost ~]# ls -al  /tmp/
    总用量 936
    drwxrwxrwt. 16 root root   4096 1月  24 10:32 .
    dr-xr-xr-x. 17 root root    224 1月  23 17:45 ..
    -rw-r--r--.  1 root root   1149 1月  23 17:49 anaconda.log
    drwx------.  2 root root     20 1月  23 17:55 .esd-0
    drwx------.  2 root root     25 1月  23 17:57 firefox_root
    drwxrwxrwt.  2 root root      6 1月  23 17:35 .font-unix
    drwxr-xr-x.  2 root root     18 1月  23 17:35 hsperfdata_root
    drwxrwxrwt.  2 root root     42 1月  23 17:55 .ICE-unix
    -rw-r--r--.  1 root root    415 1月  23 17:49 ifcfg.log
    -rwx------.  1 root root    836 1月  23 17:46 ks-script-L9LDqY
    -rw-r--r--.  1 root root      0 1月  23 17:49 packaging.log
    -rw-r--r--.  1 root root      0 1月  23 17:49 program.log
    -rw-r--r--.  1 root root      0 1月  23 17:49 sensitive-info.log
    drwx------.  2 root root     24 1月  23 17:55 ssh-2uFxXSQ6gkGr
    -rw-r--r--.  1 root root      0 1月  23 17:49 storage.log
    drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-colord.service-aG1lXN
    drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-cups.service-3UD9lx
    drwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-rtkit-daemon.service-nv9Cuu
    drwxrwxrwt.  2 root root      6 1月  23 17:35 .Test-unix
    drwx------.  2 root root      6 1月  23 17:55 tracker-extract-files.0
    drwx------.  2 root root      6 1月  23 17:49 vmware-root
    -r--r--r--.  1 root root     11 1月  23 17:54 .X0-lock
    drwxrwxrwt.  2 root root     16 1月  23 17:54 .X11-unix
    drwxrwxrwt.  2 root root      6 1月  23 17:35 .XIM-unix
    -rw-------.  1 root root      0 1月  23 17:32 yum.log
    -rw-------.  1 root root 466361 1月  23 17:57 yum_save_tx.2019-01-23.17-57.TSYLg6.yumtx
    -rw-------.  1 root root 469566 1月  24 09:45 yum_save_tx.2019-01-24.09-45.UL5IOq.yumtx
    [root@localhost ~]# mv /bin/ls /tmp/
    [root@localhost ~]# ls -al  /tmp/
    -bash: /usr/bin/ls: 没有那个文件或目录
    [root@localhost ~]# ls
    -bash: /usr/bin/ls: 没有那个文件或目录
    [root@localhost ~]# 
    

    这时,假如是误操作导致ls找不到,可以找到另一台Linux,把缺失的命令文件找出来复制,但要保证版本号和缺失的一致。额,要是mv也丢了呢?这时可以通过RPM包中提取文件的方法:
    我们知道所有的文件RPM包安装得到的,所有的系统文件,重要文件等都在RPM包当中。此时可以把丢失文件所在的RPM包打开,从里面提取出所需要的RPM命令,这就是所谓RPM包文件提取。当然了,从新安装缺失文件所在RPM包也可以解决问题。

    [root@localhost ~]# rpm -qf /bin/ls
    coreutils-8.22-21.el7.x86_64
    [root@localhost ~]# ls
    -bash: /usr/bin/ls: 没有那个文件或目录
    # 还原ls
    [root@localhost ~]# mv /tmp/ls /bin/
    [root@localhost ~]# ls -al /bin/ls 
    -rwxr-xr-x. 1 root root 117672 4月  11 2018 /bin/ls
    
    # 实验从这里开始
    # 查询ls命令属于哪个软件包
    [root@localhost ~]# rpm -qf /bin/ls
    coreutils-8.22-21.el7.x86_64
    # 移走ls,造成ls命令误删除假象
    [root@localhost ~]# mv /bin/ls /tmp/
    # 提取RPM包中ls命令到当前目录的/bin/ls下
    [root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./bin/ls
    28594 块
    [root@localhost ~]# pwd
    /root
    [root@localhost ~]# cp /root/bin/ls /bin/
    cp: 无法获取"/root/bin/ls" 的文件状态(stat): 没有那个文件或目录
    [root@localhost ~]# ls
    -bash: /usr/bin/ls: 没有那个文件或目录
    [root@localhost ~]# cp /root/
    anaconda-ks.cfg       .bashrc               .dbus/                .local/               模板/                 下载/                 
    .bash_history         .cache/               .esd_auth             .mozilla/             视频/                 音乐/                 
    .bash_logout          .config/              .ICEauthority         .tcshrc               图片/                 桌面/                 
    .bash_profile         .cshrc                initial-setup-ks.cfg  公共/                 文档/                 
    [root@localhost ~]# dir
    anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
    [root@localhost ~]# find / -name 'ls'
    /tmp/ls
    [root@localhost ~]#
    

    好郁闷呐,找了半天最终还是找出来了:

    # 提取RPM包中ls命令到当前目录的/usr/bin/ls下
    # rpm2cpio是说把RPM包/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm的数据转换为cpio格式的。
    # cpio -idv ./usr/bin/ls 是说cpio知道了要从/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm中提取数据——/usr/bin/ls,`.`表示从把/usr/bin/ls这个文件提取到当前所在目录下
    # 参数`-d`表示自动新建目录,所以提取的文件ls会保存在当前目录下的/usr/bin/目录下
    # 管道符的作用是将第一个命令的结果作为第二个命令的操作对象
    [root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
    ./usr/bin/ls
    28594 块
    [root@localhost ~]# dir
    anaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  视频  图片  文档  下载  音乐  桌面
    [root@localhost ~]# dir ./usr/bin/
    ls
    # 把ls命令复制回/bin/目录,修复文件丢失
    [root@localhost ~]# cp ./usr/bin/ls /bin/
    [root@localhost ~]# ls
    anaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  视频  图片  文档  下载  音乐  桌面
    [root@localhost ~]# rm -rf ./usr
    [root@localhost ~]# ls
    anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
    [root@localhost ~]#
    

    注:./usr是当前目录下的usr文件夹,是相对路径。/usr是根目录下的usr文件夹,是绝对路径。.千万不能省略,代表缺失文件要保存在命令执行时所在的当前目录的位置。

    但这是什么原因呢?查看一下ls命令所在RPM包的默认安装位置:

    [root@localhost /]# pwd
    /
    [root@localhost /]# rpm -ql coreutils 
    /etc/DIR_COLORS
    /etc/DIR_COLORS.256color
    /etc/DIR_COLORS.lightbgcolor
    /etc/profile.d/colorls.csh
    /etc/profile.d/colorls.sh
    /usr/bin/[
    ...
    /usr/bin/ls  # 前后被省略
    ...
    [root@localhost /]# 
    

    恍然大悟。。。


    1. yum在线命令 https://blog.csdn.net/jiduochou963/article/details/86653645
  • 相关阅读:
    由button标签在 IE 8.0 下的异常表现引发的一场血案
    【javascript】—— JS判断浏览器类型、操作系统
    【javascrpt】——图片预览和上传,兼容IE 9-
    YII安装smarty-view-renderer扩展
    Yii中用递归方法实现无限级分类
    Yii中Ajax的使用,如收藏功能
    Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)
    Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
    yii 中设置提示成功信息,错误提示信息,警告信息
    Yii Framework 开发教程Zii组件-Tabs示例
  • 原文地址:https://www.cnblogs.com/onefine/p/10499375.html
Copyright © 2011-2022 走看看