Linux软件安装管理之1——rpm命令管理
发布日期:2021-07-01 05:19:37 浏览次数:2 分类:技术文章

本文共 33040 字,大约阅读时间需要 110 分钟。

Linux软件包管理

  1. rpm命令管理
  2. yum在线命令
  3. 源码包管理
  4. 脚本安装包

软件包管理简介

软件包分类

源码包

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

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

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

报告环境
[root@localhost /]# cat /etc/redhat-releaseCentOS 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/总用量 1643drwxr-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 .discinfodrwxr-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 GPLdrwxr-xr-x. 3 root root    2048 5月   4 2018 imagesdrwxr-xr-x. 2 root root    2048 5月   4 2018 isolinuxdrwxr-xr-x. 2 root root    2048 5月   4 2018 LiveOSdrwxrwxr-x. 2 root root 1640448 5月   3 2018 Packagesdrwxrwxr-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 libDisplay 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  Sigmd5Conflictname  __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 httpdhttpd-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 httpdhttpd-manual-2.4.6-80.el7.centos.noarchhttpd-2.4.6-80.el7.centos.x86_64httpd-tools-2.4.6-80.el7.centos.x86_64httpd-devel-2.4.6-80.el7.centos.x86_64[root@localhost Packages]#

查询软件包详细信息

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

查询已安装包的信息:

[root@localhost Packages]# rpm -qi httpdName        : httpdVersion     : 2.4.6Release     : 80.el7.centosArchitecture: x86_64Install Date: 2019年01月24日 星期四 00时13分06秒Group       : System Environment/DaemonsSize        : 9817285License     : ASL 2.0Signature   : RSA/SHA256, 2018年04月25日 星期三 19时04分41秒, Key ID 24c6a8a7f4a80eb5Source RPM  : httpd-2.4.6-80.el7.centos.src.rpmBuild Date  : 2018年04月21日 星期六 02时12分22秒Build Host  : x86-01.bsys.centos.orgRelocations : (not relocatable)Packager    : CentOS BuildSystem 
Vendor : CentOSURL : http://httpd.apache.org/Summary : Apache HTTP ServerDescription :The Apache HTTP Server is a powerful, efficient, and extensibleweb 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: NOKEYName        : mysql-connector-odbcVersion     : 5.2.5Release     : 7.el7Architecture: x86_64Install Date: (not installed)Group       : System Environment/LibrariesSize        : 428611License     : GPLv2 with exceptionsSignature   : RSA/SHA256, 2018年04月25日 星期三 19时28分41秒, Key ID 24c6a8a7f4a80eb5Source RPM  : mysql-connector-odbc-5.2.5-7.el7.src.rpmBuild Date  : 2018年04月11日 星期三 09时41分42秒Build Host  : x86-01.bsys.centos.orgRelocations : (not relocatable)Packager    : CentOS BuildSystem 
Vendor : CentOSURL : http://dev.mysql.com/downloads/connector/odbc/Summary : ODBC driver for MySQLDescription :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.dhttpd-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 abctouch: 无法创建"abc": 只读文件系统[root@localhost Packages]# touch /home/onefine/hahaha[root@localhost Packages]# ls -al /home/onefine/总用量 12drwx------. 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 hahahadrwxr-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/总用量 12drwx------. 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 .bashrcdrwxr-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.typessystem-logos >= 7.92.1-1httpd-tools = 2.4.6-80.el7.centos/usr/sbin/useradd/usr/sbin/groupaddsystemd-unitssystemd-unitssystemd-units/bin/sh/bin/sh/bin/sh/bin/sh/bin/sh/bin/shrpmlib(FileDigests) <= 4.6.0-1rpmlib(FileCaps) <= 4.6.1-1rpmlib(PayloadFilesHavePrefix) <= 4.0-1rpmlib(CompressedFileNames) <= 3.0.4-1/bin/shlibapr-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/ldconfiglibc.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-1rpmlib(FileDigests) <= 4.6.0-1rpmlib(PayloadFilesHavePrefix) <= 4.0-1rtld(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 httpdS.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 lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz[root@localhost ~]# ls -al  /tmp/总用量 936drwxrwxrwt. 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.logdrwx------.  2 root root     20 1月  23 17:55 .esd-0drwx------.  2 root root     25 1月  23 17:57 firefox_rootdrwxrwxrwt.  2 root root      6 1月  23 17:35 .font-unixdrwxr-xr-x.  2 root root     18 1月  23 17:35 hsperfdata_rootdrwxrwxrwt.  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.logdrwx------.  2 root root     24 1月  23 17:55 ssh-2uFxXSQ6gkGr-rw-r--r--.  1 root root      0 1月  23 17:49 storage.logdrwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-colord.service-aG1lXNdrwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-cups.service-3UD9lxdrwx------.  3 root root     17 1月  23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-rtkit-daemon.service-nv9Cuudrwxrwxrwt.  2 root root      6 1月  23 17:35 .Test-unixdrwx------.  2 root root      6 1月  23 17:55 tracker-extract-files.0drwx------.  2 root root      6 1月  23 17:49 vmware-root-r--r--r--.  1 root root     11 1月  23 17:54 .X0-lockdrwxrwxrwt.  2 root root     16 1月  23 17:54 .X11-unixdrwxrwxrwt.  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/lscoreutils-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/lscoreutils-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/ls28594 块[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 ~]# diranaconda-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/ls28594 块[root@localhost ~]# diranaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  视频  图片  文档  下载  音乐  桌面[root@localhost ~]# dir ./usr/bin/ls# 把ls命令复制回/bin/目录,修复文件丢失[root@localhost ~]# cp ./usr/bin/ls /bin/[root@localhost ~]# lsanaconda-ks.cfg  initial-setup-ks.cfg  usr  公共  模板  视频  图片  文档  下载  音乐  桌面[root@localhost ~]# rm -rf ./usr[root@localhost ~]# lsanaconda-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://onefine.blog.csdn.net/article/details/86619233 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SecureCRT远程连接Ubuntu
下一篇:Django入门

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月26日 09时46分52秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章