軟件包管理器RPMnode
目前linux界管理軟件有2種方式,一是使用dpt來管理,二是使用RPM來管理linux
dpt使用Debian linxu社區開發的,目前使用dpt來管理的發行商包括:B2D,Ubuntu等。算法
而RPM是有Red Hat公司開發出來的,目前使用RPM來管理軟件的發行商包括:Fedora、CentOS、SuSE等。數據庫
因爲當前最主流的軟件包管理大多使用RPM來管理的,所以在這裏咱們只介紹如何使用RPM來管理軟件包centos
什麼是RPM呢?ide
RPM:全名是RedHat Package Manager,簡稱RPM,他是以一種數據庫記錄的方式將你所須要的軟件安裝到你的linux系統上的一套管理機制。也就是安裝某個軟件時,該軟件的信息所有寫入到了RPM數據庫中,之後關於該軟件包的升級、卸載、以及校驗等操做都是根據RPM數據庫中的數據來進行的。優化
RPM軟件包的命名規則:ui
name-version-release.arch.rpmspa
軟件名稱-版本號-發行次數.操做平臺.rpm操作系統
其中版本號分爲主版本號和次版本號
主版本號:當軟件包的重大功能發生改進時,才用於修正主版本號
次版本號:某個子功能發生改變時,纔會改變,才用於修正次版本號
發行次數就是編譯的次數
操做平臺主要由如下幾種:
i386:適用於全部的x86平臺
i586:針對586等級的計算機進行優化編譯的
x86_64:針對64位的CPU進行優化編譯的
noarch:表示沒有任何硬件等級上的限制
軟件包管理器的核心功能是:
一、製做軟件包。
咱們知道RPM包是通過原始碼編譯而來的,因此RPM包是能夠直接用來安裝的,可是不一樣的發行商的RPM包是不用相互通用的,有的連相同發行商不一樣版本的RPM包也不可使用。緣由是編譯這些RPM包的編譯環境不同所致使的。這些編譯環境包括硬件平臺、庫文件等等。
換句話說,只有編譯環境和安裝RPM的環境一致時,該軟件包纔可使用。而軟件包管理器就能夠用來編譯原始碼,使其在特定的平臺上使用。
二、軟件包管理器能夠來安裝、查詢、升級、卸載、校驗軟件包中文件的正確性、重建數據庫等操做。
在這裏咱們先介紹如何使用RPM來安裝軟件的。
在linux系統中,許多軟件在安裝過程當中,存在依賴關係,這裏所謂的依賴關係就是說在安裝A軟件時,必須先安裝B軟件,才能在安裝A軟件。這就是軟件的相依屬性。
RPM 的優勢
因爲RPM 是透過預先編譯並打包成爲 RPM 文件格式後,再加以安裝的一種方式,而且還可以進行數據庫的記載。 因此 RPM 有如下的優勢:
RPM 內部已經編譯過的程序和配置文件等數據,可讓用戶克除從新編譯的困擾;
RPM 包在被安裝以前,會先檢查系統的硬盤容量、操做系統版本等,可避免文件被錯誤安裝;
RPM 包自己提供軟件版本信息、相依屬性軟件名稱、軟件用途說明、軟件所含文件等信息,便於瞭解軟件;
RPM 管理的方式使用數據庫記錄 RPM 包的相關參數,便於升級、移除、查詢和驗證。
1、RPM包安裝
語法格式:rpm [option] package_file(這個是軟件的文件名,全稱)
-i:install的意思
-v:顯示安裝過程當中的詳細信息
-vv:顯示更加詳細的信息
-h:以#號來顯示安裝進度,其中每一個#表示2%的進度
其中ivh一般一塊兒使用
--nodeps:在安裝過程當中,忽略依賴關係,這可能會致使安裝的軟件沒法使用
--replacepkgs:從新安裝,替換原有的安裝
--replacefiles:在安裝過程當中,若是某個安裝文件已經存在,可使用此選項覆蓋。
--force:強行安裝,能夠實現從新安裝或者降級安裝.
--prefix 安裝路徑:自定義安裝路徑。
2、RPM包查詢
以前說過RPM包在安裝的時候會生成一個數據庫文件,這個文件是/var/lib/rpm/目錄,RPM查詢就是在這個目錄下查找數據庫文件的。
語法格式:rpm [option] [package_name]
-q:查詢指定的包是否已經安裝
-qa:查詢已經安裝的全部包,後面不接包名
-qi:查詢指定包的說明信息
-qc:查詢指定包的全部配置文件
-qd:查詢指定包的幫助文件(與man相關)
-ql:查詢指定包安裝後生成的文件列表
-qR:列出與該軟件有關的相依軟件所含的文件
-q --scripts:查詢指定包中所包含的腳本
-qf /path/to/somefile:查詢指定的文件是由那個rpm包安裝生成的。
若是某個軟件包未安裝,想要查詢其相關信息,可使用-qp來查詢
語法格式:rpm -qp[ilcdR] package_name(未安裝的軟件包名,且安裝包必須在本地已存在的)
其中-icldR意思和上面同樣
3、RPM包升級
rpm -Uvh package_file :若是該軟件包已安裝,則升級;沒有安裝,則進行安裝
rpm -Fvh package_file:若是該軟件以安裝,則升級;沒有安裝,則退出
其中選項--oldpackage用於降級安裝
4、RPM包卸載
rpm -e package_name:卸載某個軟件包
--nodeps:在卸載過程當中忽略依賴關係。
在卸載過程當中,最好從上層一次往下卸載,避免系統混亂。
5、驗證RPM的完整性
RPM完整性驗證能夠用來檢測某個文件是否被修改過,以及該文件是否被誤刪了等信息。它是經過對比/var/lib/rpm/下的數據庫內容和當前系統上面的全部軟件包的文件等機制來進行檢測的。
語法格式:
rpm [option] [package_name]
-V :檢測指定的軟件包中的文件是否被修改過,只有被更動過的文件纔會顯示出來。
-Va:列出系統上全部被更動的文件。
-Vf:檢測某個文件是否被更動過。
其中這上面的每個點表明的是SM5DLUGT,只有改變的纔會顯示出來
S:文件的大小發生改變
M:文件的類型或者權限發生改變
5:MD5隨機碼不一樣
D:裝置的主/次代號發生改變
L:Link路徑發生改變
U:文件的屬主發生改變
G:文件的屬組發生改變
T:文件的修改時間發生改變
其中後面的字符表示文件類型
c:表示配置文件
d:數據文件
g:該文件不被某個軟件所包含
l:許可證文件(license file)
r:自述文件(read me)
6、建立數據庫
若是某個用戶別不當心損毀了/var/lib/rpm/目錄下的文件,那麼可使用rpm來重建數據庫
語法格式:
rpm --rebuilddb:無論RPM數據庫是否存在,使用該選項必定會從新建立數據庫
rpm --initdb:初始化數據庫,也就是說若是數據庫不存在則建立數據庫;存在則不用建立。
7、數字簽名
數字簽名用來驗證rpm包的來源合法性。剛剛談到的rpm驗證功能,他只能驗證軟件包裏的文件與/var/lib/rpm/目錄下的數據庫文件而已,若是軟件自己就有問題,那麼使用剛剛的那種驗證方式是不行的。所以,爲了驗證rpm包的來源合法性,咱們的軟件開發商都推出了本身的一個數字簽名系統,軟件開發商利用數字簽名系統生產一個專屬的簽章,並將這個簽章中的公鑰釋放出來。所以,在安裝一個軟件包時:
一、首先須要安裝軟件開發商提供的公鑰文件
二、實際安裝原廠軟件包時,rpm指令會讀取其rpm軟件包中的簽章信息,並與本機內的簽章信息進行對比。
三、若簽章相同則予以安裝;不相同,則給出警告並中止安裝。
在咱們的redhat和centos系統上,有一個專門的數字簽名系統GPG,他能夠利用哈希算法生產獨一無二的專屬祕鑰系統或數字簽名系統。
rpm包的來源合法性驗證過程以下:
一、將GPG公鑰文件導入到系統中。
GPG公鑰文件默認位於/etc/pki/rpm-gpg/目錄下。
使用rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
二、查看密鑰是否已安裝
生成的密鑰一般以pubkey做爲軟件包的名稱,所以,可使用以下命令來查看:
# rpm -qa | grep pubkey
三、查看密鑰軟件的相關信息
使用rpm -qi 軟件包名
四、驗證軟件包的來源合法性和完整性的命令
rpm [-K|--checksig] [--nosignature] [--nodigest] Package
dsa,gpg:使用哪一種算法來驗證來源合法性,選項--nosignature:不驗證rpm包來源合法性。
sha1,md5:使用哪一種算法來驗證rpm包的完整性,選項--nodigest:不驗證rpm包的完整性。