13. 软件包详解,rpm包的查找,安装,升级,卸载,验证等所有操作
本小節(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
| 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
硬件平臺(tái)
注意:32位的包可以安裝在x86_64中,但64位的包是不能夠安裝在32位的操作系統(tǒng)中。
| i386 | 386 以上計(jì)算機(jī)都可以安裝 |
| i586 | 686 以上計(jì)算機(jī)都可以安裝 |
| i686 | 奔騰 II 以上的計(jì)算機(jī)都可以安裝,對(duì)于32位的操作系統(tǒng)目前基本都是這個(gè)居多 |
| x86_64 | 64 位 CPU 可以安裝 |
| noarch | 沒有硬件限制 |
RPM常見選項(xiàng)
語法可以通過man rpm具體查看,這節(jié)只列出常用的一些選項(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:
這里使用的是包名,而不是包全名。
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_64rpm -qi:查詢包的詳細(xì)信息
查詢軟件包的詳細(xì)信息,-i 選項(xiàng)表示查詢軟件信息:
[root@localhost ~]# rpm -qi 包名
rpm -qip 查看未安裝包的詳細(xì)信息
查詢未安裝軟件包的詳細(xì)信息,命令格式為:
[root@localhost ~]# rpm -qip 包全名 //-p 表示未安裝的軟件包。
rpm -qip zziplib-utils-0.13.62-9.el7.x86_64.rpm
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í)行如下命令:
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í)行以下命令:
rpm -qRp:查詢未安裝包的依賴關(guān)系
同樣,在此命令的基礎(chǔ)上增加 -p 選項(xiàng),即可實(shí)現(xiàn)查找未安裝軟件包的依賴性。
例如,bind 軟件包尚未安裝查看此軟件包的依賴性可執(zhí)行如下命令:
RPM安裝
包的安裝
rpm -ivh 包全名 ;
注意: 這兒一定要使用包全名,不是包名。
例:安裝 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)整:
| -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í)別使用。
注意: 后面在講解源碼包編譯安裝方式的時(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ò)誤,例如:
卸載命令
當(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-clientRPM包驗(yàn)證和數(shù)字證書
系統(tǒng)中有非常多的RPM 包,每個(gè)包安裝后又有大量的文件。因此這些包或者文件都有可能被修改或刪除。為了能及時(shí)發(fā)現(xiàn)文件做了變更或者被人惡意篡改文件等問題,系統(tǒng)提供了兩種檢測(cè)方式:
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í)行如下命令:
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 | 文件大小是否改變。 出現(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):
#系統(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ì)信息:
卸載數(shù)字證書
使用 -e 選項(xià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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 章泽天又晒27岁生日照:刚刚又重返18岁
- 下一篇: 11.集合之List