對於Linux而言管理各類軟體,如安裝、卸載和升級等是常有的事情和必備的技能。以CentOS為例,常用的安裝包命令有 rpm 和 yum 。 RPM基礎 RPM(RedHat Package Manager)是一個系統軟體包,功能類似於Wind ...
對於Linux而言管理各類軟體,如安裝、卸載和升級等是常有的事情和必備的技能。以CentOS為例,常用的安裝包命令有rpm和yum。
RPM基礎
RPM(RedHat Package Manager)是一個系統軟體包,功能類似於Windows中的添加/刪除程式,但又比添加/刪除程式功能更強。在Linux界廣泛使用的依然為各類開源軟體,也就是代碼是開放的,這些代碼通常會被打包為.tar.gz形式在互聯網上進行傳播,而這些開源軟體被下載後仍然需要編譯成二進位後才可以使用。這種試雖然相容性好,但使用起來卻不方便,存在一定的依賴關係,而文件較大時,編譯出錯的概率也非常大,對於日常使用人員也很麻煩。
使用RPM可以很容易地對RPM形式的軟體進行安裝、升級、卸載、檢驗和查詢等操作。RPM可以讓用戶直接以binary方式安裝軟體包且可代替用戶查詢是否已經安裝了相關的庫文件。在用RPM刪除程式時,管理器會提示用戶是否要刪除相關程式。如果使用RPM進行升級,RPM會保留得得配置。另外RPM還保留了一個包含所有軟體包資料的資料庫,通過該資料庫可以查詢各個已經安裝的軟體包等等。
RPM使用
RPM安裝路徑
Linux的目錄是有統一規範的,這個規範的作用是保證任何一個軟體都能找到另一款軟體、文件。
- 可以運行的文件存放在/bin或/usr/bin目錄中
- 庫文件存放在/lib或/usr/lib目錄中
- 配置文件存放在/etc目錄
一般,RPM類型的文件在安裝的時候,會先去讀取文件內記載的設置參數內容,然後將該數據用於比較Linux環境,從而找出是否有屬性依賴的軟體還沒有安裝的問題。使用RPM方式安裝的軟體,在完成安裝後,會將該軟體的相關信息寫入到/var/lib/rpm目錄下的資料庫文件中。該資料庫非常重要,如果軟體升級必須依賴它,如版本比對就是從這個資料庫中讀取數據的。
RPM組成部分
RPM包含RPM資料庫、RPM軟體包文件、RPM命令三部分。
- RPM資料庫
Linux系統中保留了當前安裝軟體的資料庫,路徑位於/var/lib/rpm,可使用file命令查看目錄內容。
/var/lib/rpm目錄中的文件全部都是資料庫文件且為二進位。
- RPM軟體包文件
RPM軟體包與tar歸檔文件類似:tar文件含有要安裝到系統上的文件,軟體包除了tar中的信息還包含一個RPM包頭,該包頭提供了有關軟體包的信息,如名稱、安裝大小及其內容的簡短描述等。另軟體包還包含了屬性依賴信息,即為了使文件可被安裝和使用,必須安裝的其他軟體包、可執行文件和庫文件等。在Linux安裝光碟中,軟體包文件通常位於Packages目錄中。軟體包文件的名稱通常由下列幾條信息構成:
名稱-版本-發行號.體繫結構.rpm
以CentOS 7中MySQL為例
名稱:mysql-community-common
版本:5.7.20
發行號:1
體繫結構:el7.x86_64。el7代表CentOS 7.x系統,x86_64是指該軟體是針對哪種CPU架構開發的。
- RPM命令
RPM命令是用來管理資料庫的工具,如下所示:
命令選項 | 作用 |
---|---|
-i | 安裝軟體包 |
-U,-F | 軟體包升級 |
-e | 刪除軟體包 |
-q | 查詢安裝包 |
-a | 查詢的所有安裝包 |
-v | 顯示安裝的詳細過程 |
-h | 顯示安裝進度 |
--checksig | 校驗簽名以確保其完整性和源發性 |
更多RPM命令解釋可以使用man rpm進行查看
RPM安裝
RPM包安裝格式如下:
rpm -i rpm包的全路徑及文件名
rpm -ivh rpm包的全路徑及文件名
其中各參數解釋如下:
- -i:代表安裝
- -v:代表verbose,在安裝過程中顯示詳細的信息
- -h:代表hash,在安裝過程中將顯示#表示安裝進度
對於較大的RPM包,在安裝時需要使用-ivh,可以方便查看在安裝過程中的相應信息和進度。在安裝過程出現warning時並不影響軟體包的安裝,出現error則無法繼續安裝,需要排錯。
示例1:本地安裝VSFTPD
在上面我們使用的是本地安裝,如果RPM軟體包不在本地時,如何安裝?RPM其實也支持線上安裝。
示例2:線上安裝VSFTPD
可與rpm -i結合使用的參數如下所示:
命令選項 | 作用 |
---|---|
-h,--hash | 安裝輸出#代表安裝進度 |
-v,--verbose | 1個-v選項列印軟體包名稱,多個-v選項提供更多詳細信息的輸出 |
--nodeps | 即使不符合安裝前提條件,仍進行安裝 |
--replace-files | 安裝時已有的文件會被新文件覆蓋替換 |
--force | 即使已經安裝了軟體包,也要進行安裝 |
--test | 不執行任何操作,只列印輸出 |
--noscripts | 不執行與RPM安裝有關的任何腳本 |
--prefix | 指定安裝rpm包安裝路徑 |
RPM卸載
一旦安裝了軟體包,軟體包文件則無關緊要了,該軟體包現在就是本地電腦上面的一條資料庫記錄。因此,不再使用軟體包文件名稱,如vsftpd-3.0.2-22.el7.x86_64.rpm,而僅僅使用軟體包名稱,如vsftpd-3.0.2-22.el7.x86_64來指該軟體包,使用
rpm -e packagename
進行刪除軟體包,其中-e代表earse。
說明1:packagename:可以包含版本等信息,但不能包含尾碼名.rpm
說明2:rpm -e vsftpd-3.0.2-22.el7.x86_64(正確)
rpm -e vsftpd-3.0.2-22.el7.x86_64.rpm(錯誤)
RPM升級
使用RPM升級軟體包非常方便簡單,主要參數是-U,當然也可以直接寫-Uvh或-Fvh,兩者區別如下:
-Uvh:如果軟體包沒有安裝,則直接安裝,如果要安裝的軟體包是新的版本,則軟體會進行自動更新為新的版本。
-Fvh:如果軟體包沒有安裝,則不會安裝,也即只能對已經安裝的軟體包進行升級
RPM查詢
RPM軟體包查詢中與rpm -q package-name結合使用的一些選項和作用如下所示:
命令選項 | 作用 |
---|---|
-a | 查詢所有已安裝的軟體包 |
-f filename | 擁有文件filename的軟體包 |
-p packagefilename | 直接查詢軟體包文件packagefilename |
-i | 軟體包信息包頭 |
-l | 列出軟體包所擁有的文件 |
--requires | 安裝包的先決條件 |
--provides | 顯示安裝包提供的內容 |
--scripts | 顯示軟體包的安裝腳本 |
-last | 按時間排序顯示系統上安裝的RPM包 |
1、查看已經安裝的RPM包信息和安裝的文件
2、查看RPM安裝包的依賴項、提供的內容及最近安裝包
本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註: