日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

13. 软件包详解,rpm包的查找,安装,升级,卸载,验证等所有操作

發(fā)布時(shí)間:2023/12/14 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 13. 软件包详解,rpm包的查找,安装,升级,卸载,验证等所有操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本小節(jié)會(huì)詳細(xì)介紹linux中的軟件包管理,涉及軟件包的定義/安裝/卸載/依賴等操作。以及會(huì)詳細(xì)演示rpm這個(gè)非常重要命令的使用。

文章目錄

  • 前言
  • 軟件包
    • 源碼包
    • 二進(jìn)制包
    • 源碼包 VS二進(jìn)制包
    • 依賴性
  • RPM包管理系統(tǒng)
    • RPM包命名規(guī)則
      • 包名和包全名
    • 硬件平臺(tái)
    • RPM常見選項(xiàng)
    • 軟件包查找
      • rpm -q 查詢軟件包是否安裝
      • rpm -qa:查詢所有安裝的包
      • rpm -qi:查詢包的詳細(xì)信息
      • rpm -qip 查看未安裝包的詳細(xì)信息
      • rpm -ql:查詢已安裝包 產(chǎn)生的文件列表
      • rpm -qlp:查詢未安裝包 安裝后產(chǎn)生的文件列表
      • rpm -qf 查詢文件系統(tǒng)(命令)屬于哪個(gè)包
      • rpm -qR:查詢軟件包的依賴關(guān)系
      • rpm -qRp:查詢未安裝包的依賴關(guān)系
    • RPM安裝
      • 包的安裝
      • 其他參數(shù)選項(xiàng)
      • RPM包安裝路徑
    • RPM包的升級(jí)
    • RPM包的卸載
      • rpm -e 卸載包
      • 依賴性
      • 卸載命令
    • RPM包驗(yàn)證和數(shù)字證書
      • Linux RPM 包校驗(yàn)
      • Linux RPM數(shù)字證書驗(yàn)證
    • RPM包的數(shù)據(jù)庫
      • 重建RPM包的數(shù)據(jù)庫
      • 人為修改數(shù)據(jù)庫
  • 總結(jié)


前言

本小節(jié)會(huì)詳細(xì)介紹linux中的軟件包管理,涉及軟件包的定義/安裝/卸載/依賴等操作。以及會(huì)詳細(xì)演示rpm這個(gè)非常重要命令的使用。


軟件包

源碼包

源碼包是一大堆源代碼程序,是由程序員按照特定的格式和語法編寫出來的。計(jì)算機(jī)只能識(shí)別機(jī)器語言,也就是二進(jìn)制語言,所以源碼包的安裝需要通過編譯器將程序代碼翻譯成二進(jìn)制語言,這個(gè)過程叫做編譯。

源碼包的安裝需要把源代碼編譯為二進(jìn)制代碼,安裝時(shí)間通常都很長(zhǎng)。安裝25M左右的源碼包,可能需要半小時(shí)間到一時(shí)間。但常見的二進(jìn)制包安裝,例如微信,幾百M(fèi)的文件,也只需要幾分鐘。

另外源碼包的安裝需要人為編譯,這個(gè)過程很容易報(bào)錯(cuò),可能還需要熟悉程序語言進(jìn)行排錯(cuò)。

為了解決源碼安裝的這些問題,在linux中更常見的還是使用二進(jìn)制包進(jìn)行安裝。

二進(jìn)制包

源碼包成功之后產(chǎn)生的包就是二進(jìn)制包。二進(jìn)制包在發(fā)布之前就已經(jīng)完成編譯工作,因此用戶安裝的速度會(huì)快很多,且安裝報(bào)錯(cuò)的幾率減小。

目前主流的二進(jìn)制包管理系統(tǒng)有兩大類:
RPM 包管理系統(tǒng):功能強(qiáng)大,安裝、升級(jí)、査詢和卸載簡(jiǎn)單方便,很多 Linux 發(fā)行版使用的軟件安裝管理方式,例如 紅帽、CentOS、SuSE 等。
DPKG 包管理系統(tǒng):由 Debian Linux 開發(fā)的包管理機(jī)制,主要應(yīng)用在 Debian 和 Ubuntu 系統(tǒng)。
RPM 包管理系統(tǒng)和 DPKG 包管理系統(tǒng)原理大同小異,這一系列課程是在Centos7中做實(shí)驗(yàn),所以以RPM包管理系統(tǒng)為主。

源碼包 VS二進(jìn)制包

源碼包一般包含多個(gè)文件,為了方便發(fā)布,通常會(huì)將源碼包做打包壓縮處理,Linux 中最常用的打包壓縮格式為“tar.gz”,因此源碼包又被稱為 Tarball。
源碼包通常包含以下內(nèi)容:
源代碼文件。
配置和檢測(cè)程序(如 configure 或 config 等)。
軟件安裝說明和軟件說明(如 INSTALL 或 README)。

源碼包安裝軟件的好處:
開源,可以修改源代碼。
可自由選擇所需的功能。
軟件是編譯安裝,安裝完成后更加匹配操作系統(tǒng)。
卸載方便。

源碼包安裝軟件的缺點(diǎn):
安裝時(shí)候,參數(shù)配置和步驟較多,語法容易寫錯(cuò)
編譯安裝時(shí)間比二進(jìn)制安裝要長(zhǎng)很多。
編譯安裝過程容易出錯(cuò),并且一旦出錯(cuò),很難解決

二進(jìn)制(rpm)包安裝的優(yōu)點(diǎn)
rpm管理系統(tǒng)簡(jiǎn)單,通過常見的命令可實(shí)現(xiàn)包的安裝、升級(jí)、査詢和卸載。
安裝速度比源碼包安裝快得多。相比源碼包,二進(jìn)制包是在軟件發(fā)布時(shí)已經(jīng)進(jìn)行過編譯的軟件包,所以安裝速度比源碼包快得多。

二進(jìn)制(rpm)包安裝的缺點(diǎn)
不能看到源代碼。
功能選擇不靈活。

依賴性

依賴性。有時(shí)在安裝軟件包 x 時(shí)需要先安裝 y 和 z,而在安裝 z 時(shí)需要先安裝 a 和 b。這就需要先安裝 a 和 b,再安裝 y 和 z,最后才能安裝 x。安裝軟件包需要有一定的順序,但是有時(shí)依賴性會(huì)非常復(fù)雜。

軟件包的依賴性 在包的安裝和卸載過程中需要重點(diǎn)關(guān)注,包之間的依賴關(guān)系大致可分為以下 2 種:
樹形依賴(A-B-C-D):要想安裝軟件 A,必須先安裝 B,而安裝 B 需要先安裝 C;解決此類型依賴的方法是從后往前安裝,即先安裝 D,再安裝 C,然后安裝 B,最后安裝軟件 A。
環(huán)形依賴(A-B-C-D-A):各個(gè)軟件安裝的依賴關(guān)系構(gòu)成環(huán)狀。解決此類型依賴的方法是用一條命令同時(shí)安裝所有軟件包,即使用 rpm -ivh A B C D

已上兩種依賴關(guān)系,都是通過手動(dòng)安裝方式解決,非常繁瑣,如果依賴的包特別多,明顯不適用。在下一講中,將學(xué)習(xí)使用 yum 命令查詢、安裝、升級(jí)和卸載軟件包的方法。它可以自動(dòng)處理軟件包之間的依賴性關(guān)系,一次性安裝所有依賴的軟件包,無需一個(gè)個(gè)安裝。

版本要求
例如裝gcc 這個(gè)軟件包的時(shí)候,會(huì)有如下輸出:
[root@prometheus Packages]# rpm -ivh gcc-4.8.5-44.el7.x86_64.rpm
error: Failed dependencies: <— 提示依賴性錯(cuò)誤
cpp = 4.8.5-44.el7 is needed by gcc-4.8.5-44.el7.x86_64
glibc-devel >= 2.2.90-12 is needed by gcc-4.8.5-44.el7.x86_64
libmpc.so.3()(64bit) is needed by gcc-4.8.5-44.el7.x86_64
libmpfr.so.4()(64bit) is needed by gcc-4.8.5-44.el7.x86_64
提示要安裝 gcc,需要先安裝其他包,這就是RPM 包的依賴性。
另外信息中還會(huì)明確給出各個(gè)依賴軟件的版本要求:
">=":表示版本要大于或等于顯示版本;
“<=”:表示版本要小于或等于顯示版本;
“=”:表示版本要等于顯示版本;

下面我們會(huì)詳細(xì)講解 RPM包的使用,請(qǐng)熟練掌握

RPM包管理系統(tǒng)

RPM包命名規(guī)則

RPM 包的命名具有規(guī)則,用戶通過名稱可獲取包的版本、適用平臺(tái)等信息。
RPM包命名格式如下:
包名-版本號(hào)-發(fā)布次數(shù)-發(fā)行商-Linux平臺(tái)-適合的硬件平臺(tái)-包擴(kuò)展名
例如:libreport-web-2.1.11-53.el7.centos.x86_64.rpm

選項(xiàng)含義
libreport-web軟件包名。
2.1.11包的版本號(hào),版本號(hào)的格式通常為主版本號(hào).次版本號(hào).修正號(hào)。
53包發(fā)布的次數(shù),表示此 包是第幾次編程生成的。
el*:軟件發(fā)行商,el7 表示是由 Red Hat 公司發(fā)布,在 RHEL 7.x 和 CentOS 7.x 上使用。
Centos這個(gè)軟件包適用的平臺(tái),其它軟件包可能不包含這個(gè)選項(xiàng)
x86_64包能夠使用的硬件平臺(tái),參照下面列表。x86_64代表在64位的操作系統(tǒng)上安裝運(yùn)行

包名和包全名

包名是指版本號(hào)之前的字符串。包全名是指帶rpm完整字符串的名稱。

  • 例 libreport-web-2.1.11-53.el7.centos.x86_64.rpm
    這個(gè)文件它的包名是 libreport-web
    它的包全名是 libreport-web-2.1.11-53.el7.centos.x86_64.rpm。
    注意:包名和包全名,兩者是不同的。軟件包的安裝和升級(jí)是需要指定包全名。而軟件查詢卸載是使用包名。一定要區(qū)分開!

  • 例Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm
    這個(gè)文件的包名是Percona-Server-server-56 注意不是Percona-Server-server
    它的包全名是 Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm

  • [root@zaishu ~]# rpm -qa Percona-Server-server //沒有輸出 [root@zaishu ~]# rpm -qa Percona-Server-server-56 Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64 [root@zaishu ~]# rpm -qi Percona-Server-server-56 Name : Percona-Server-server-56 //包名 Version : 5.6.38 Release : rel83.0.el7 Architecture: x86_64 Install Date: Mon 15 Nov 2021 12:02:23 PM CST Group : Applications/Databases Size : 92247229 License : Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Under the GNU General Public License (http://www.gnu.org/licenses/). Signature : DSA/SHA1, Fri 08 Dec 2017 05:28:46 PM CST, Key ID 1c4cbdcdcd2efd2a Source RPM : Percona-Server-56-5.6.38-rel83.0.el7.src.rpm Build Date : Fri 08 Dec 2017 05:27:16 PM CST Build Host : os-centos-7-x64-4119.ci.percona.com Relocations : (not relocatable) Packager : Percona MySQL Development Team <mysqldev@percona.com> Vendor : Percona, Inc URL : http://www.percona.com/ Summary : Percona Server: a very fast and reliable SQL database server

    硬件平臺(tái)

    注意:32位的包可以安裝在x86_64中,但64位的包是不能夠安裝在32位的操作系統(tǒng)中。

    平臺(tái)適用平臺(tái)信息
    i386386 以上計(jì)算機(jī)都可以安裝
    i586686 以上計(jì)算機(jī)都可以安裝
    i686奔騰 II 以上的計(jì)算機(jī)都可以安裝,對(duì)于32位的操作系統(tǒng)目前基本都是這個(gè)居多
    x86_6464 位 CPU 可以安裝
    noarch沒有硬件限制
    例如當(dāng)前安裝的是64位centos,所以安裝盤中主要都是x86_64的包 [root@prometheus Packages]# ls *x86_64* | wc -l 2665 還有一些包就是noarch,表示對(duì)硬件沒有限制 [root@prometheus Packages]# ls *noarch* | wc -l 1405

    RPM常見選項(xiàng)

    語法可以通過man rpm具體查看,這節(jié)只列出常用的一些選項(xiàng)

    選項(xiàng)用途
    -a查詢所有包。
    -c只列出包的配置文件,本參數(shù)需配合"-l"參數(shù)使用。
    -d只列出文本文件,本參數(shù)需配合"-l"參數(shù)使用。
    -e<包檔>或–erase<包檔>刪除指定的包。
    -f<文件>+查詢擁有指定文件的包。
    -h或–hash包安裝時(shí)列出標(biāo)記。
    -i顯示包的相關(guān)信息。
    -i<包檔>或–install<包檔>安裝包。
    -l顯示包的文件列表。
    -p<包檔>+指定未安裝的包。
    -q查詢包。
    -R顯示包的關(guān)聯(lián)性信息。
    -s顯示文件狀態(tài),本參數(shù)需配合"-l"參數(shù)使用。
    -U<包檔>或–upgrade<包檔>升級(jí)指定的包。
    -v顯示指令執(zhí)行過程。
    -vv詳細(xì)顯示指令執(zhí)行過程,便于排錯(cuò)。

    軟件包查找

    rpm 命令可用來對(duì) RPM 軟件包做查詢操作,具體包括:

    查詢包是否已安裝; 查詢所有已安裝的包; 查看包的詳細(xì)信息; 查詢包的文件列表; 查詢文件具體屬于哪個(gè)包。

    rpm -q 查詢軟件包是否安裝

    查詢包是否安裝:
    [root@localhost ~]# rpm -q 包名
    -q 表示查詢,是 query 的首字母。
    例如,查看 Linux 系統(tǒng)中是否安裝 apache:

    [root@prometheus Packages]# rpm -q httpd httpd-2.4.6-97.el7.centos.2.x86_64

    這里使用的是包名,而不是包全名。

    rpm -qa:查詢所有安裝的包

    查詢 Linux 系統(tǒng)中所有已安裝軟件包:

    [root@zaishu ~]# rpm -qa glibc-devel-2.17-324.el7_9.x86_64 perl-Filter-1.49-3.el7.x86_64 libcurl-7.29.0-59.el7_9.1.x86_64 readline-devel-6.2-11.el7.x86_64 python-libs-2.7.5-90.el7.x86_64 …省略…

    也可以使用管道符查找:

    [root@prometheus Packages]# rpm -qa|grep httpd httpd-2.4.6-97.el7.centos.2.x86_64 httpd-tools-2.4.6-97.el7.centos.2.x86_64

    rpm -qi:查詢包的詳細(xì)信息

    查詢軟件包的詳細(xì)信息,-i 選項(xiàng)表示查詢軟件信息:
    [root@localhost ~]# rpm -qi 包名

    [root@zaishu ~]# rpm rpm -qi Percona-Server-client-56 Name : rpm Version : 4.11.3 Release : 45.el7 Architecture: x86_64 Install Date: Thu 08 Oct 2020 07:57:46 PM CST Group : System Environment/Base Size : 2622621 License : GPLv2+ Signature : RSA/SHA256, Thu 15 Oct 2020 03:00:03 AM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : rpm-4.11.3-45.el7.src.rpm Build Date : Thu 01 Oct 2020 01:30:03 AM CST Build Host : x86-02.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://www.rpm.org/ Summary : The RPM package management system .......... For a description of Percona Server see http://www.percona.com/software/percona-server/

    rpm -qip 查看未安裝包的詳細(xì)信息

    查詢未安裝軟件包的詳細(xì)信息,命令格式為:
    [root@localhost ~]# rpm -qip 包全名 //-p 表示未安裝的軟件包。
    rpm -qip zziplib-utils-0.13.62-9.el7.x86_64.rpm

    [root@prometheus Packages]# rpm -qip zziplib-0.13.62-12.el7.x86_64.rpm Name : zziplib Version : 0.13.62 Release : 12.el7 Architecture: x86_64 Install Date: (not installed) Group : Applications/Archiving Size : 216046 License : LGPLv2+ or MPLv1.1 Signature : RSA/SHA256, Sat 04 Apr 2020 05:10:34 AM CST, Key ID 24c6a8a7f4a80eb5 Source RPM : zziplib-0.13.62-12.el7.src.rpm Build Date : Wed 01 Apr 2020 01:04:24 PM CST Build Host : x86-01.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://zziplib.sourceforge.net/ Summary : Lightweight library to easily extract data from zip files Description : The zziplib library is intentionally lightweight, it offers the ability to easily extract data from files archived in a single zip file. Applications can bundle files into a single zip archive and access them. The implementation is based only on the (free) subset of compression with the zlib algorithm which is actually used by the zip/unzip tools.

    rpm -ql:查詢已安裝包 產(chǎn)生的文件列表

    rpm包安裝后采用默認(rèn)的路徑,安裝后的文件會(huì)分類安放在不同目錄下。使用 rpm 命令可以查詢到包安裝后產(chǎn)生的所有文件和路徑:
    [root@localhost ~]# rpm -ql 包名
    -l :列出軟件包所有文件的安裝目錄。

    例如安裝apache后,查詢這個(gè)包中所有文件和位置:

    [root@zaishu~]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/welcome.conf /etc/httpd/conf/httpd.conf /etc/httpd/conf/magic …省略部分輸出…

    rpm -qlp:查詢未安裝包 安裝后產(chǎn)生的文件列表

    rpm 命令還可以查詢 未安裝的包 所含有的文件以及安裝后的路徑:
    -p :未安裝的軟件包。
    例如查看尚未安裝的bind包中的所有文件及安裝后的位置,可以執(zhí)行如下命令:

    [root@prometheus Packages]# rpm -qlp bind-9.11.4-26.P2.el7.x86_64.rpm /etc/NetworkManager/dispatcher.d/13-named /etc/logrotate.d/named /etc/named /etc/named.conf /etc/named.iscdlv.key /etc/named.rfc1912.zones …省略部分輸出…

    rpm -qf 查詢文件系統(tǒng)(命令)屬于哪個(gè)包

    支持反向查詢,用于查詢文件屬于哪個(gè)包,特別是在查詢命令或者卸載命令的時(shí)候,這個(gè)參數(shù)用的比較頻繁:
    [root@zaishu~]# rpm -qf 系統(tǒng)文件名
    -f 選項(xiàng)的含義是查詢系統(tǒng)文件所屬哪個(gè)軟件包,是 file 的首字母。

    例 ls 命令所屬的包:

    [root@zaishu ~]# which ls alias ls='ls --color=auto'/usr/bin/ls [root@zaishu ~]# rpm -qf /usr/bin/ls coreutils-8.22-24.el7.x86_64 以后想刪掉ls這條命令的時(shí)候,就可以通過卸載coreutils-8.22-24.el7.x86_64來實(shí)現(xiàn)

    rpm -qR:查詢軟件包的依賴關(guān)系

    安裝包的時(shí)候需考慮與其他包的依賴關(guān)系。rpm -qR 用來查詢已安裝包的依賴關(guān)系,該命令的格式為:
    [root@localhost ~]# rpm -qR 包名
    -R(大寫)選項(xiàng)的含義是查詢軟件包的依賴性,是 requires 的首字母。
    例如,查詢 apache 軟件包的依賴性,可執(zhí)行以下命令:

    [root@zaishu ~]# rpm -qR httpd /bin/bash /bin/sh /etc/mime.types /usr/sbin/useradd apr-util-ldap chkconfig config(httpd) = 2.4.6-97.el7.centos.2 httpd-tods = 2.4.6-97.el7.centos.2 …省略部分輸出…

    rpm -qRp:查詢未安裝包的依賴關(guān)系

    同樣,在此命令的基礎(chǔ)上增加 -p 選項(xiàng),即可實(shí)現(xiàn)查找未安裝軟件包的依賴性。
    例如,bind 軟件包尚未安裝查看此軟件包的依賴性可執(zhí)行如下命令:

    [root@zaishu Packages]# rpm -qRp bind-9.9.4-72.el7.x86_64.rpm /bin/bash /bin/sh bind-libs = 32:9.8.2-0.10.rc1.el6 chkconfig chkconfig config(bind) = 32:9.8.2-0.10.rc1.el6 grep libbind9.so.80 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1)

    RPM安裝

    包的安裝

    rpm -ivh 包全名 ;
    注意: 這兒一定要使用包全名,不是包名。

    rpm -ivh 包全名 -i:安裝(install); -v:顯示更詳細(xì)的信息(verbose); -h:打印 #,顯示安裝進(jìn)度(hash);

    例:安裝 Percona-Server-shared軟件包

    [root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...1:Percona-Server-shared-56-5.6.38-r################################# [100%]

    第一個(gè) 100% 表示完成了準(zhǔn)備工作;第二個(gè)100%表示安裝完成。對(duì)于已經(jīng)安裝的包,只會(huì)有準(zhǔn)備的那個(gè)100%

    [root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%]package Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64 is already installed

    例: 安裝多個(gè)軟件包

    [root@zaishu ~]# rpm -ivh Percona-Server-client-56-5.6.38-rel83.0.el7.x86_64.rpm Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-client-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...1:Percona-Server-client-56-5.6.38-r################################# [ 50%]2:Percona-Server-server-56-5.6.38-r################################# [100%]

    其他參數(shù)選項(xiàng)

    如果還有其他安裝要求(比如強(qiáng)制安裝某軟件而不管它是否有依賴性),可以通過以下選項(xiàng)進(jìn)行調(diào)整:

    選項(xiàng)含義
    -nodeps不檢測(cè)依賴性安裝。軟件安裝時(shí)會(huì)檢測(cè)依賴性,確定所需的底層軟件是否安裝,如果沒有安裝則會(huì)報(bào)錯(cuò)。如果不管依賴性,想強(qiáng)制安裝,則可以使用這個(gè)選項(xiàng)。注意,這樣不檢測(cè)依賴性安裝的軟件基本上是不能使用的,所以不建議這樣做。
    -replacefiles替換文件安裝。如果要安裝軟件包,但是包中的部分文件已經(jīng)存在,那么在正常安裝時(shí)會(huì)報(bào)"某個(gè)文件已經(jīng)存在"的錯(cuò)誤,從而導(dǎo)致軟件無法安裝。使用這個(gè)選項(xiàng)可以忽略這個(gè)報(bào)錯(cuò)而覆蓋安裝。
    -replacepkgs替換軟件包安裝。如果軟件包已經(jīng)安裝,那么此選項(xiàng)可以把軟件包重復(fù)安裝一遍。
    -force:強(qiáng)制安裝。不管是否已經(jīng)安裝,都重新安裝。也就是 -replacefiles 和 -replacepkgs 的綜合。
    -test測(cè)試安裝。不會(huì)實(shí)際安裝,只是檢測(cè)一下依賴性。
    -prefix指定安裝路徑。為安裝軟件指定安裝路徑,而不使用默認(rèn)安裝路徑。

    例 -nodeps: 不檢測(cè)依賴

    可以看到當(dāng)正常安裝Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm的時(shí)候,提示需要其他兩個(gè)包,這就是依賴性,需要先安裝Percona-Server-client-56和Percona-Server-shared-56才能安裝Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm。 [root@zaishu ~]# rpm -ivh Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY error: Failed dependencies:Percona-Server-client-56 is needed by Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64Percona-Server-shared-56 is needed by Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64 如果加上 -nodeps ,表示不檢查依賴性,直接安裝。實(shí)際工作當(dāng)中,是不建議這樣安裝,因?yàn)榧词拱惭b成功,也不代表這個(gè)包能夠正常使用。 [root@zaishu ~]# rpm -ivh Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm --nodeps warning: Percona-Server-server-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...1:Percona-Server-server-56-5.6.38-r################################# [100%]

    例 --force:強(qiáng)制安裝

    [root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...1:Percona-Server-shared-56-5.6.38-r################################# [100%]

    這個(gè)時(shí)候再安裝,會(huì)提示已經(jīng)安裝

    [root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%]package Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64 is already installed

    加上–force 表示會(huì)強(qiáng)制安裝,替換軟件包和文件

    [root@zaishu ~]# rpm -ivh Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm --force warning: Percona-Server-shared-56-5.6.38-rel83.0.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY Preparing... ################################# [100%] Updating / installing...1:Percona-Server-shared-56-5.6.38-r################################# [100%]

    RPM包安裝路徑

    RPM 包安裝后的默認(rèn)路徑列表。所有安裝文件會(huì)按照下面分類放置在不同的目錄之中。

    安裝路徑含 義
    /etc/配置文件安裝目錄
    /usr/bin/可執(zhí)行的命令安裝目錄
    /usr/lib/程序所使用的函數(shù)庫保存位置
    /usr/share/doc/基本的軟件使用手冊(cè)保存位置
    /usr/share/man/幫助文件保存位置

    RPM 包的默認(rèn)安裝路徑通過命令查詢的。
    RPM 包可以人為指定安裝路徑,但不推薦。因?yàn)槭止ぶ付ǖ穆窂?#xff0c;系統(tǒng)中用來查詢安裝路徑的命令無法自動(dòng)識(shí)別使用。

    [root@zaishu ~]# rpm -ql Percona-Server-server-56 /etc/logrotate.d/mysql /usr/bin/innochecksum .... /usr/bin/resolveip /usr/lib/systemd/system/mysqld.service .. /usr/lib64/mysql/plugin/adt_null.so ... /usr/lib64/mysql/plugin/validate_password.so /usr/sbin/mysqld ... /usr/sbin/rcmysql /usr/share/doc/Percona-Server-server-56-5.6.38 ... /usr/share/percona-server/ukrainian/errmsg.sys ....

    注意: 后面在講解源碼包編譯安裝方式的時(shí)候,會(huì)手工指定安裝路徑。但二進(jìn)制包不要畫蛇添足時(shí)指定安裝路徑。

    RPM包的升級(jí)

    語法: [root@localhost ~]# rpm -Uvh 包全名 -U(:如果該軟件沒安裝過則直接安裝;若已有安裝則升級(jí)至最新版本。 [root@localhost ~]# rpm -Fvh 包全名 -F:如果該軟件沒有安裝,不會(huì)安裝,必須有較低版本才能升級(jí)。

    RPM包的卸載

    語法:
    [root@localhost ~]# rpm -e 包名 [-nocteps]
    -e : erase 首字母,表示卸載。
    -nocteps : 不檢查依賴直接卸載。不建議使用~

    rpm -e 卸載包

    [root@zaishu ~]# rpm -e Percona-Server-server-56

    依賴性

    RPM 軟件包的卸載要考慮包之間的依賴性。例如,我們先安裝的 httpd 軟件包,后安裝 httpd 的功能模塊 mod_ssl 包,那么在卸載時(shí),就必須先卸載 mod_ssl,然后卸載 httpd,否則會(huì)報(bào)錯(cuò)。
    軟件包卸載和拆除大樓是一樣的,本來先蓋的 2 樓,后蓋的 3 樓,那么拆樓時(shí)一定要先拆除 3 樓。
    如果卸載 RPM 軟件不考慮依賴性,執(zhí)行卸載命令會(huì)包依賴性錯(cuò)誤,例如:

    [root@node1 Packages]# rpm -e httpd error: Failed dependencies:httpd = 2.4.6-88.el7.centos is needed by (installed) httpd-devel-2.4.6-88.el7.centos.x86_64httpd = 2.4.6-88.el7.centos is needed by (installed) httpd-manual-2.4.6-88.el7.centos.noarch[root@node1 Packages]# rpm -e httpd-devel [root@node1 Packages]# rpm -e httpd-manual [root@node1 Packages]# rpm -e httpd [root@node1 Packages]# rpm -qa|grep httpd httpd-tools-2.4.6-88.el7.centos.x86_64 [root@node1 Packages]# rpm -e httpd-tools

    卸載命令

    當(dāng)想刪除一條命令的時(shí)候,可能更多是想將這個(gè)命令對(duì)應(yīng)的軟件進(jìn)行卸載,徹底刪除這條命令。

    查找命令的絕對(duì)路徑 [root@node1 ~]# which samba-regedit /usr/bin/samba-regedit 查找這條命令對(duì)應(yīng)的包,需要提供絕對(duì)路徑 [root@node1 ~]# rpm -qf /usr/bin/samba-regedit samba-client-4.8.3-4.el7.x86_64 卸載包 [root@node1 ~]# rpm -e samba-client

    RPM包驗(yàn)證和數(shù)字證書

    系統(tǒng)中有非常多的RPM 包,每個(gè)包安裝后又有大量的文件。因此這些包或者文件都有可能被修改或刪除。為了能及時(shí)發(fā)現(xiàn)文件做了變更或者被人惡意篡改文件等問題,系統(tǒng)提供了兩種檢測(cè)方式:

  • 包校驗(yàn):將已安裝文件和 /var/lib/rpm/ 下的的數(shù)據(jù)庫進(jìn)行比較,來確定文件是否被修改。
  • 包數(shù)字證書校驗(yàn):用來校驗(yàn) 包本身是否被修改。
  • Linux RPM 包校驗(yàn)

    包校驗(yàn)用來判斷已安裝的軟件包(或文件)是否被修改,此方式可使用的命令格式分為以下 3 種。

    [root@zaishu~]# rpm -Va -Va 選項(xiàng)表示校驗(yàn)系統(tǒng)中已安裝的所有軟件包。 [root@zaishu~]# rpm -V 已安裝的包名 -V 選項(xiàng)表示校驗(yàn)指定 RPM 包中的文件,是 verity 的首字母。 [root@zaishu~]# rpm -Vf 系統(tǒng)文件名 -Vf 選項(xiàng)表示校驗(yàn)?zāi)硞€(gè)系統(tǒng)文件是否被修改。

    例1. 對(duì)安裝后的文件做修改
    apache 軟件包中所有的安裝文件是否被修改,可執(zhí)行如下命令:

    當(dāng)不做任何變更的時(shí)候,如果沒有輸出表示沒有做修改 [root@localhost -]# rpm -V httpd

    apache 的配置文件 /etc/httpd/conf/httpd.conf 進(jìn)修改后;再驗(yàn)證這個(gè)包

    [root@node1 conf]# rpm -V httpd S.5....T. c /etc/httpd/conf/httpd.conf

    可以看到,結(jié)果顯示httpd.conf這個(gè)文件修改過。輸出的信息可分為以下 3 部分:分別是驗(yàn)證信息,文件類型,文件名稱。

    第一列是驗(yàn)證信息
    最前面的 8 個(gè)字符(S.5…T)都屬于驗(yàn)證信息,每列含義如下:

    第一列:S.5…T.
    S文件大小是否改變。 出現(xiàn)S表示文件大小改變了
    M文件的類型或文件的權(quán)限(rwx)是否改變。
    5文件MD5校驗(yàn)和是否改變(可以看成文件內(nèi)容是否改變)。
    D設(shè)備的主從代碼是否改變。
    L文件路徑是否改變。
    U文件的屬主(所有者)是否改變。
    G文件的屬組是否改變。
    T文件的修改時(shí)間是否改變。
    .若相關(guān)項(xiàng)沒發(fā)生改變,用 . 表示。

    通過驗(yàn)證信息可以知道這個(gè)文件的大小和md5碼,mtime都變更過。

    第二列是文件類型
    分為以下幾類:

    字符含義
    c配置文件(configuration file)。
    d普通文檔(documentation)。
    g"鬼"文件(ghost file),很少見,就是該文件不應(yīng)該被這個(gè) RPM 包包含。
    l授權(quán)文件(license file)。
    r描述文件(read me)。

    第三列是文件名稱
    被修改文件所在絕對(duì)路徑和文件名。

    因此S.5…T. c /etc/httpd/conf/httpd.conf 表達(dá)的完整含義是:配置文件 httpd.conf 的大小、內(nèi)容、修改時(shí)間被人為修改過。
    注意:通常修改配置文件是正常的情況,需要留意是那些被惡意修改過文件。

    Linux RPM數(shù)字證書驗(yàn)證

    之前方法是驗(yàn)證已經(jīng)安裝包后相關(guān)文件信息。如果在安裝前,rpm包已經(jīng)被修改,不是廠家提供的包,這個(gè)時(shí)候需要使用 RPM 數(shù)字證書來驗(yàn)證。
    數(shù)字證書,又稱數(shù)字簽名,由軟件開發(fā)商直接發(fā)布。Linux 系統(tǒng)安裝數(shù)字證書后,若 RPM 包做了修改,此包攜帶的數(shù)字證書也會(huì)改變,將無法與系統(tǒng)匹配,軟件無法安裝。
    可以將數(shù)字證書想象成自己的簽名,是不能被模仿的(廠商的數(shù)字證書是唯一的)
    使用數(shù)字證書驗(yàn)證 RPM 包的方法具有如下 2 個(gè)特點(diǎn):

  • 需要找到原廠的公鑰文件,才能進(jìn)行安裝。
  • 安裝 RPM 包會(huì)提取包中證書信息,然后安裝的原廠證書進(jìn)行驗(yàn)證。驗(yàn)證通過,允許安裝;驗(yàn)證失敗,不允許安裝并發(fā)出警告。
  • #系統(tǒng)中的數(shù)字證書位置

    [root@node1 conf]# ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 -rw-r--r--. 1 root root 1690 Nov 23 2018 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

    安裝數(shù)字證書

    [root@node1 conf]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 --import表示導(dǎo)入數(shù)字證書 數(shù)字證書安裝完成后,可使用如下命令進(jìn)行驗(yàn)證:[root@node1 conf]# rpm -qa|grep gpg-pubkey** gpg-pubkey-f4a80eb5-53a7ff4b

    查詢數(shù)字證書
    數(shù)字證書也是一個(gè)包,可以用 rpm 命令查詢數(shù)字證書的詳細(xì)信息:

    [root@node1 conf]# rpm -qi gpg-pubkey-f4a80eb5-53a7ff4b #查詢數(shù)字證書包的詳細(xì)信息 ... -----END PGP PUBLIC KEY BLOCK----

    卸載數(shù)字證書
    使用 -e 選項(xiàng):

    [root@node1 conf]# rpm -e gpg-pubkey-f4a80eb5-53a7ff4b 雖然數(shù)字證書可以手動(dòng)卸載,但不推薦大家將其卸載。

    安裝數(shù)字證書后。在系統(tǒng)上安裝 RPM 包時(shí),系統(tǒng)會(huì)自動(dòng)驗(yàn)證包的數(shù)字證書,驗(yàn)證通過則可以安裝,
    反之將無法安裝(系統(tǒng)會(huì)報(bào)錯(cuò))。

    RPM包的數(shù)據(jù)庫

    系統(tǒng)中安裝的所有RPM包,信息會(huì)保存到 RPM 數(shù)據(jù)庫中,用戶在使用 rpm 命令對(duì)執(zhí)行查詢、安裝和卸載等操作的時(shí)候,會(huì)通過這個(gè)數(shù)據(jù)庫中得到相關(guān)信息。

    重建RPM包的數(shù)據(jù)庫

    在實(shí)際操作過程中有可能有一些操作導(dǎo)致數(shù)據(jù)庫損壞,例如升級(jí)過程強(qiáng)行退出、安裝時(shí)候意外中斷,甚至誤刪除數(shù)據(jù)庫等操作,都可能導(dǎo)致數(shù)據(jù)庫出現(xiàn)故障。 后續(xù)再使用rpm命令的時(shí)候,由于數(shù)據(jù)庫出現(xiàn)故障,請(qǐng)求無法執(zhí)行。這時(shí)需要重建數(shù)據(jù)庫,操作步驟如下:

    刪除已損壞的數(shù)據(jù)庫,執(zhí)行如下命令:

    [root@zaishu ~]# ls /var/lib/rpm/ Basenames __db.001 __db.003 Dirnames Installtid Obsoletename Providename .rpm.lock Sigmd5 Conflictname __db.002 .dbenv.lock Group Name Packages Requirename Sha1header Triggername [root@zaishu ~]# rm -rf /var/lib/rpm/__db* //刪除已損壞的數(shù)據(jù)庫 [root@zaishu ~]# ls -l /var/lib/rpm/__db* ls: cannot access /var/lib/rpm/__db*: No such file or directory

    重建 RPM 數(shù)據(jù)庫,執(zhí)行如下命令:

    [root@zaishu ~]# rpm -rebuilddb //這一步花費(fèi)一定時(shí)間。 [root@zaishu ~]# ls -l /var/lib/rpm/__db* -rw-r--r-- 1 root root 270336 Nov 15 15:44 /var/lib/rpm/__db.001 -rw-r--r-- 1 root root 81920 Nov 15 15:44 /var/lib/rpm/__db.002 -rw-r--r-- 1 root root 1318912 Nov 15 15:44 /var/lib/rpm/__db.003

    人為修改數(shù)據(jù)庫

    為了不想讓管理員 通過包校驗(yàn)檢查出軟件異常,進(jìn)而手工修改數(shù)據(jù)庫。對(duì)于這種情況,可以按照以下步驟對(duì)文件進(jìn)行檢測(cè):

    對(duì)于要校驗(yàn)的文件或命令,找到它屬于哪個(gè)軟件包,如下命令所示:

    [root@node1 ~]# rpm -qf /etc/pam.d/samba samba-4.8.3-4.el7.x86_64

    使用 -dump 選項(xiàng)查看每個(gè)文件的信息,使用 grep 命令提取對(duì)應(yīng)文件信息:

    rpm -ql --dump samba|grep /etc/pam.d/samba,輸出結(jié)果中 177表示 smb 文件最初的字符數(shù)。 adf2c510d4218ac0b3f72898cfe4097c0d1c9836da2b0237929af6bf4619ea84表示 文件的 MD5 校驗(yàn)值。 0644 root root表示文件權(quán)限及所有者、所屬組。

    查看文件,通過對(duì)比文件大小,所有人、所屬組、權(quán)限、MD5 校驗(yàn)值等數(shù)據(jù),判斷文件是否改動(dòng)過:

    [root@node1 ~]# md5sum /etc/pam.d/samba c8d4d43f8a3f06190fcf32ff7e8b87b5 /etc/pam.d/samba

    以上校驗(yàn)結(jié)果顯示,系統(tǒng)的 /etc/rc.d/init.d/smb 文件的信息和通過 rpm-ql-dump Samba 命令獲取的信息不一致,因此可以斷定此文件沒有被更改過。


    總結(jié)

    本小節(jié)會(huì)詳細(xì)介紹linux中的軟件包管理,涉及軟件包的定義/安裝/卸載/依賴等操作。以及會(huì)詳細(xì)演示rpm這個(gè)非常重要命令的使用。

    總結(jié)

    以上是生活随笔為你收集整理的13. 软件包详解,rpm包的查找,安装,升级,卸载,验证等所有操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。