上一篇文章《Linux軟件安裝管理之——源碼安裝詳解》詳細介紹了Linux平臺下的源碼包安裝原理,雖然使用源代碼進行軟件編譯能夠具備定製化的設置,但對於Linux distribution的發行商來講,則有軟件管理不晚的問題,畢竟不是每一個人都會進行源代碼編譯的。這個問題將會嚴重的影響linux平臺上軟件的發行與推廣。linux
爲了解決上述的問題,廠商先在他們的系統上面編譯好了咱們用戶所須要的軟件,而後將這個編譯好並可執行的軟件直接發佈給用戶安裝。不一樣的 Linux 發行版使用不一樣的打包系統,通常而言,大多數發行版分別屬於兩大包管理技術陣營: Debian 的」.deb」,和 Red Hat的」.rpm」。也有一些重要的例外,比方說 Gentoo, Slackware,和 Foresight,但大多數會使用這兩個基本系統中的一個。數據庫
這裏將要介紹的是Red Hat系列發行版的RPM與YUM的詳細使用方法,如須要了解Debian系列發行版的包管理系統可查看個人另外一篇文章:《Linux軟件安裝管理之——dpkg與apt-*詳解》。segmentfault
RPM命名「RedHat Package Manager」,簡稱則爲RPM。這個機制最先由Red Hat這家公司開發出來的,後來實在很好用,所以不少distributons就使用這個機制來做爲軟件安裝的管理方式,包括Fedora,CentOS,SuSE等知名的開發商都是用它。centos
RPM最大的特色就是須要安裝的軟件已經編譯過,並已經打包成RPM機制的安裝包,經過裏頭默認的數據庫記錄這個軟件安裝時須要的依賴軟件。當安裝在你的Linux主機時,RPM會先依照軟件裏頭的數據查詢Linux主機的依賴屬性軟件是否知足,若知足則予以安裝,若不知足則不予安裝。服務器
優勢:架構
1)軟件已經編譯打包,因此傳輸和安裝方便,讓用戶免除編譯編輯器
2)在安裝以前,會先檢查系統的磁盤、操做系統版本等,避免錯誤安裝ide
3)軟件的信息都已經記錄在linux主機的數據庫上,方便查詢、升級和卸載工具
缺點:學習
1)軟件包安裝的環境必須與打包時的環境一致或至關
2)必須安裝了軟件的依賴軟件
3)卸載時,最底層的軟件不能先移除,不然可能形成整個系統不能用
爲了解決RPM屬性依賴的問題,下面也將會爲你詳細介紹YUM的使用方法。
RPM包的命名格式:
軟件名稱-版本號-發佈次數.適合linux系統.硬件平臺.rpm
例如:ftp-0.17-74.fc27.i686.rpm
注意:
包全名:rpm操做沒有安裝的軟件包,軟件包使用的是包全名
包 名:rpm操做的已經安裝的軟件,軟件包使用的是包名
例如上面的例子,包全名爲ftp-0.17-74.fc27.i686.rpm,包名爲ftp。
/etc 配置文件放置目錄
/usr/bin 一些可執行文件
/usr/lib 一些程序使用的動態連接庫
/usr/share/doc 一些基本的軟件使用手冊與說明文件
/usr/share/man 一些man page檔案
如你須要安裝一個emac編輯器,首先要到網上下載一個emac的rpm包,如emacs-25.3-1.fc28.aarch64.rpm。最簡單的安裝命令以下:
rpm -i emacs-25.3-1.fc28.aarch64.rpm
不過,這樣的參數其實沒法顯示安裝的進度,因此一般咱們執行的命令是這樣:
rpm -ivh package-name
參數說明(後面括號內爲英文說明):
-i:install的意思,安裝
-v:查看更詳細的安裝信息畫面(provide more detailed output)
-h:以安裝信息欄顯示安裝進度
rpm -ivh emacs-25.3-1.fc28.aarch64.rpm
若是想安裝多個用空格間隔而後接上要安裝的rpm包便可,同時也支持經過網址的資源來安裝。
參數說明(後面括號內爲英文說明):
-U:upgrade的意思,更新軟件,若系統中沒有該軟件則進行安裝(upgrade package(s))
-F:freshen的意思,更新系統已安裝的某個軟件(upgrade package(s) if already instaalled)
rpm –Uvh foo-2.0-1.i386.rpm
RPM在查詢的時候,其實查詢的地方是/var/lib/rpm/這個目錄下的數據庫文件。另外,RPM也能夠查詢未安裝的RPM文件內的信息。
RPM的查詢語法爲:
rpm {-q|--query} [select-options] [query-options] 經常使用參數說明(後面括號內爲英文說明):
-a:all,列出已經安裝在本機的全部軟件(Query all instaled packages.)
-p:package,查詢一個RPM文件的信息(Query an (uninstalled) package. )
-f:file,由後面接的文件名稱找出該文件屬於哪狐假虎威已安裝的軟件(Query package owning file.)
-i:information,列出該軟件的詳細信息,包含開發商、版本與說明等(Display package information, including name, version, and description.)
-l:list,列出該軟件全部的文件與目錄所在完整文件名(List file in package)
-c:configuration,列出該軟件的全部設置文件(找出在/etc/下面的文件名而已)(List only configuration files)
-d:documentation,列出該軟件全部的幫助文檔(List only documentation files)
-R:required,列出與該軟件有關的依賴軟件所含的文件(List capabilities on which this depends.)
注意:在查詢的部分,全部的參數以前都要加上-q纔是所謂的查詢。
使用案例:
1)查詢你的Linux是否有安裝某個軟件
rpm -q yum
2)查詢屬於該軟件所提供的全部目錄與文件
rpm -ql yum rpm -qc yum #僅列出該軟件的全部設置文件 rpm -qd yum #僅列出該軟件的全部幫助文檔
3)列出gcc這個軟件的相關數聽說明
rpm -qi gcc
4)找出/bin/sh是由哪一個軟件提供的
rpm -qf /bin/sh
5)假設我有下載一個RPM文件,包名爲wget-1.19.1-3.fc27.aarc64.rpm,想要知道該文件的需求文件,該如何辦?
rpm -qpR wget-1.19.1-3.fc27.aarc64.rpm
使用rpm的卸載過程必定要由最上層往下卸載,以rp-pppoe爲例,這個軟件主要是依據ppp這個軟件來安裝的,因此當你要卸載ppp的時候,就必須先卸載rp-pppoe才行!
刪除的命令很是簡單,經過-e參數就能夠完成。不過,很常發生軟件屬性依賴致使沒法山窪某些軟件的問題。
例子:
rpm -e gcc
欲瞭解rpm的更多使用方法,能夠自行去查閱rpm的man手冊,這裏只是列出了一些經常使用的操做。
YUM能夠看做是CS架構的軟件,YUM的存在很好的解決了RPM的屬性依賴問題。
YUM經過依賴rpm軟件包管理器, 實現了rpm軟件包管理器在功能上的擴展, 所以YUM是不能脫離rpm而獨立運行的。
1)能夠同時配置多個資源庫(Repository)
2)簡潔的配置文件(/etc/yum.conf)
3)自動解決增長或刪除rpm包時遇到的依賴性問題
4)使用方便
5)保持與RPM數據庫的一致性
Server端先對程序包進行分類後存儲到不一樣repository容器中; 再經過收集到大量的rpm的數據庫文件中程序包之間的依賴關係數據, 生成對應的依賴關係和所需文件在本地的存放位置的說明文件(.xml格式), 存放在本地的repodata目錄下供Client端取用
Cilent端經過yum命令安裝軟件時發現缺乏某些依賴性程序包, Client會根據本地的配置文件(/etc/yum.repos.d/*.repo)找到指定的Server端, 從Server端repo目錄下獲取說明文件xxx.xml後存儲在本地/var/cache/yum中方便之後讀取, 經過xxx.xml文件查找到須要安裝的依賴性程序包在Server端的存放位置, 再進入Server端yum庫中的指定repository容器中獲取所需程序包, 下載完成後在本地實現安裝。
注意:YUM是一個在線軟件管理工具,因此使用YUM進行的操做大都是須要在聯網的條件下才能正常使用。
雖然yum是你在聯網後就能直接使用,不過,因爲你係統的站點鏡像沒選擇好,會致使鏈接速度很是慢!因此,這時候就須要咱們去手動修改yum的設置文檔了。
如你鏈接到CentOS的鏡像站點(http://ftp.twaren.net/Linux/C...)後,就會發現裏面有一堆連接,那些連接就是這個yum服務器所提供的容器了,包括centosplus、extras、fasttrack、os、updates等容器,最好認的就是os(系統默認的軟件)與updates(軟件升級版本)。
在yum服務器的容器裏面,最重要的一個目錄就是那個「repodata」,該目錄是分析RPM軟件後所產生的軟件依賴數據放置處。所以,當你找到容器所在網址時,最重要的就是該網址下面必定要有一個名爲「repodata」的目錄存在,那就是容器的網址了。
下面都是以個人主機爲例:CentOS 7.4.1708
首先,能夠先查詢一下目錄yum server所使用的容器有哪些。
使用命令:yum repolist all,查詢結果以下:
如上圖,只有當最右邊的status爲enabled該容器纔算激活,
/etc/yum.repos.d/裏面會有多個配置文件(文件名以.repo結尾),yum會從裏面逐個查找,因此裏面的容器名稱不能有重複。
打開配置文件:vi /etc/yum.repos.d/CenOS-Base.repo,內容以下
如上只是部分容器的截圖,該配置文件的說明以下:
[base]:表明容器的名字。中括號必定要存在,裏面的名稱能夠隨意起,但不能有兩個相同的容器名稱,不然yum會不知道去哪裏找容器相關軟件列表文件。
name:只是說明一下這個容器的意義而已,重要性不高。
mirrorlist:列出這個容器可使用的鏡像站點,若是不想使用能夠批註掉這一行。
baseurl:這個最重要,由於後面接的就是容器的實際網址。mirrorlist是由yum程序自行去找鏡像站點,
baseurl則是指定固定的一個容器網址。enable=1:啓動這個容器,默認值也爲1。關閉這個容器能夠設置enable=0。
gpgcheck=1:指定是否須要查閱RPM文件內的數字證書。
gpgkey:數字證書的公鑰文件所在位置,使用默認值便可。
注意:
1)yum會自動識別/etc/yum.repos.d/目錄以.repo結尾的文件。
2)當咱們修改了配置文件的網址卻沒有修改容器名稱,能夠會形成本機的列表與yum服務器的列表不一樣步,這時就須要手動來清除容器的數據了:
語法:yum clean [packages|headers|all]
參數:
packages:將已下載的軟件文件刪除
headers:將下載的軟件文件頭刪除
all:將全部容器數據都刪除
例:刪除已下載過的全部容器相關數據(含軟件自己與列表)
yum clean all
查詢相關的命令:
search:搜索某個軟件名稱或者是描述的重要關鍵字;
list:列出目前yum所管理的全部的軟件名稱與版本,有點相似於rpm -qa
info:同上,不過有點相似於rpm -qai
provides:從文件去搜索軟件!相似於rpm -qf
1)查詢與ftp相關的軟件有哪些 yum search ftp 2)查詢gcc這個軟件的功能 yum info gcc 能夠查詢到該軟件的版本號、描述信息、是否已安裝等信息。 3)列出yum服務器上所提供的全部軟件名稱 yum list 4)列出目前服務器上可供本機進行升級的軟件有哪些 yum list updates 5)列出提供passwd這個文件的軟件有哪些 yum provides passwd 6)查找以pam開頭的軟件名稱有哪些 yum list pam*
相關的命令:
install:後面接要安裝的軟件。
update:後面接要升級的軟件。若要整個系統都升級,就直接update便可。
例:安裝一個emacs編輯器軟件 yum install emacs
小技巧:
使用參數-y,當遇到須要等待用戶輸入時,這個選項會提供yes的響應,如上面的例子能夠寫成:yum -y install emacs
相關命令:
remove
例:卸載上面例子安裝的emacs yum remove emacs
還記得全新安裝CentOS時,不是能夠選擇所需的軟件麼?而那些軟件不是利用GNOME/KDE/X Window之類的名稱存在嗎?其實這就是軟件組。軟件級的存在,對於大量的一系列軟件安裝是很是有用的一個功能。
相關命令說明:
grouplist:列出全部可用的組列表
groupinfo:後面接group name,則能夠了解該組內含的全部組名稱
groupstall:安裝一整級的軟件
groupremove:刪除某個組
1)查詢目前容器與本機上面的可用與安裝過的軟件組有哪些 yum grouplist 2)查看一個軟件組的信息 yum groupinfo GNOME 3)安裝桌面環境GNOME yum groupstall GNOME
欲瞭解yum的更多使用方法,也能夠自行去查閱yum的man手冊。
學完了yum的操做,是否是忽然以爲Linux上的軟件管理變得簡單多了,彷佛前面學的rpm也能夠不須要了!雖然是如此,可是yum畢竟是架構在rpm上面的,因此關於rpm的相關知識也仍是要掌握的。
《鳥哥的Linux私房菜——基礎學習篇》鳥哥
《The Linux Command Line》William E. Shotts, Jr.