咱們在以前的章節中講到了Linux的程序包管理的基礎與實現,後面也講述了RPM包的管理命令實現了管理包的功能,主要用的是rpm命令,那麼rpm實現程序管理總結以下:前端
rpm命令實現程序管理: 安裝:-ivh, --nodeps, --replacepkgs 卸載:-e, --nodeps, --replacepkgs 升級:-Uvh, -Fvh, --nodeps, --oldpackage 查詢:-q, -qa, -qf, -qi, -qd, -qc, -q, --scripts, -q --chagelog, -q --pvevides, -q --requires 校驗:-V 導入GPG密鑰:--import, -K, --nodigest, --nosignature 數據庫重建:--initdb, --rebuiliddb
那麼在接下來的章節中,咱們繼續來將Linux程序包管理。node
在上一章中咱們講述過,使用rpm包管理程序會有一些問題,好比說安裝包之間存在這依賴關係,一旦安裝時,若是很複雜的話,安裝時須要很長時間才能完成,由於咱們必需要想辦法手動解決依賴關係,固然,咱們可使用--nodeps
來忽略安裝包之間的依賴關係,其致使的結果就是,安裝時沒有問題,但使用時會就有些問題,因此說爲了可以保證正常使用的前提下,就必需要解決依賴關係。而手動解決一般是一件很麻煩的事情,那麼咱們就要採用高於.deb
或高於.rpm
包的底層管理工具,它能實現前端自動解決依賴關係,完成正常的安裝,解決用戶的後顧之憂,在這種場景下完成對應的CentOS
系統當中有兩個前端安裝工具,一種爲yum
,另外一種是新版的dnf
。shell
因爲CentOS
尚未官方支持的dnf
工具,該工具在Fedora22+
當中纔剛開始引入,不過在CentOS 7
中使用dnf
也並不是不可能,yum是一款C/S架構的程序包管理工具,在本地客戶端可達的網絡服務器,首先該服務器是一個文件服務器,要提供文件存儲並提供文件服務等功能,提供了很大的存儲空間去放置咱們所能使用的各類rpm包,然後整個目錄經過文件共享的服務功能輸出到外部主機可以進行訪問,然後任何一個Linux主機,自己支持rpm包的基本功能,同時在這個基礎之上又能使用yum工具,而yum的工做原理是當用戶安裝某個程序包時,使用yum命令接收到由用戶所安裝到的包請求以後,該命令就會嘗試根據本地的配置文件提供的服務器路徑訪問地址URL
,那麼yum接收到所謂的安裝包程序以後,嘗試着經過本地的配置文件指令的URL去找遠程網絡服務器主機。數據庫
爲了不將網絡遠程服務器所提供的全部安裝包下載到本地,遠程服務器和yum它們彼此之間互相工做的模式爲:這個服務器要提供一個叫作程序包的倉庫(repository),對於這個倉庫要有元數據信息或者要有描述性的數據信息,這個信息文件存放這文件包的名字、版本以及包與包之間的依賴關係等,都存放在該文件中,因此當這個yum客戶端試圖經過遠程網絡服務器去獲取某個安裝包時,yum客戶端首先請求將元數據信息文件發送過來,下載至本地以後放置在本地的一個緩存區域中,yum客戶端就開始分析本地元數據當中有沒有用戶去請求的安裝包名,若是有,讀取這個包,嘗試着分析該包的依賴關係,而分析依賴關係也根據這個元數據文件,由於這個元數據文件定義在網絡上的服務倉庫全部的安裝包,以及程序包之間的依賴關係,因此yum客戶端在本地經過該文件分析完成以後,然後又查詢本地所被依賴的安裝包,分析完成以後剩餘未安裝的包列舉出來,最後扮演文件服務器去在該網絡主機中下載程序包,下載完成以後先緩存在本地,以後開始執行相似於rpm的安裝操做。而安裝時首先會安裝被依賴的安裝包,安裝完成以後則返回客戶端提示安裝成功,以後將緩存下來的安裝包刪除,以節約空間。但元數據文件不會刪除,等到下次安裝時,可直接讀取該元數據文件。vim
yum客戶端每一次都會去請求網絡主機上的元數據,以檢測數據包等信息是否發生改變,固然頻繁請求也會佔用帶寬,因此元數據可能不止一個,有的存放包名,有的存放版本等,除此以外,還有特殊文件,這個特殊文件記錄了每個元數據文件的校驗碼,因此在請求時,先請求的是校驗碼,緩存在本地進行對比,若是校驗碼同樣,本地緩存有效,不然請求元數據。緩存
對於應用場景來說,yum首先是客戶端,也是一個自我獨立的管理組件,這個組件須要請求遠程網絡服務主機上的倉庫,從倉庫中下載元數據文件,在本地可以完成yum的查詢等操做,當進行安裝時,yum須要請求網絡服務器去下載該程序包文件進行安裝,這並非傳統的C/S,而是訪問機制爲C/S架構。服務器
爲了可以進行快速訪問,全球有許多的鏡像站,咱們能夠找一個可以快速訪問而且受信任的鏡像站訪問就能夠了。該配置文件可以指向一大推鏡像服務器,咱們稱之爲鏡像列表,從鏡像列表當中挑選出符合一個,咱們就可以進行訪問。網絡
yum在設計上是有很大缺陷的,其缺點爲:好比雖然可以解決依賴關係,但在某個安裝過程當中若是半途停止時,下一次重啓安裝時將沒法解決,所以dnf主要就是應該解決這個問題的。但使用dnf時和yum是沒有什麼區別。架構
所以對於咱們來說,首先對於本地Linux上要有yum客戶端及工具還有yum命令,第二步yum自己須要經過配置文件去找到該網絡主機或者本地主機的遠程倉庫,因此這個配置文件做爲管理員須要指定,那麼第三步就是若是互聯網帶寬足夠大的話,可使用互聯網上某個機構提供的倉庫,尤爲是鏡像站點中的倉庫,畢竟有許多較爲新版的安裝包。或許能夠將遠程服務器的鏡像到本地。ide
但其實yum並非rpm命令的取代者,它只是rpm的前端管理工具,意味着yum須要依賴rpm的存在,若是僅有yum是不能夠的。
若是在本地建立yum倉庫的話,咱們甚至還得須要配置一臺服務器主機,通常來講yum支持的文件服務器共有兩種,一種是ftp,另外一種是http,不管是哪種,都得須要經過URL來進行輸出,把程序包複製在存儲空間以後,還得須要建立一個元數據文件,這個元數據咱們可使用命令來建立完成,對於元數據文件並非憑空而來,而是分析每個程序包自帶的rpm數據抽取出來給羅列堆積在文件中實現的。而建立元數據文件的命令爲:createrepo
。
不過該命令可能建立高級倉庫比較難,由於高級倉庫有可能要對程序包進行分組,在安裝時咱們能夠對這個一個組的程序包進行安裝,並且建立該組時使用.xml
格式的。意味着咱們必須精通xml的語法纔可能編寫,好在咱們必須選擇。
其實yum是由yellow dog
所研發的,那麼yum的全稱爲Yellow Update Modifiter
,yum要依賴於它的yum倉庫,全稱爲yum repository
,簡稱爲yum repo
,那麼咱們將yum的特性總結以下:
CentOS: yum, dnf URL: http://mirrors.aliyun.com YUM: Yellow Dog, Yellow Update Modifter yum repository: yum repo 存儲了衆多rpm包,以及包相關的元數據文件(放置於特定的目錄下:repodata);
須要注意一點的是:repodata所在的路徑,就是倉庫所指向的路徑。
一個倉庫在訪問時有多種路徑,通常都是由文件服務器來提供的,咱們在文件服務器上經過某種協議來對用戶進行訪問。
文件服務器: ftp:// http:// nfs:// file:///
yum自己就是一個獨立程序包來能夠進行安裝,也有本身的配置文件,共有兩段組成,其配置文件路徑在:
yum客戶端: 配置文件: /etc/yum.conf:爲全部倉庫提供公共配置; /etc/yum.repos.d/*.repo:爲倉庫的指向提供配置;
對於用戶來講,咱們在/etc/yum.repos.d/
目錄下去配置yum源倉庫配置文件,名稱必須得是.repo
,那麼咱們接下來看一下yum是如何使用倉庫的。
yum倉庫的配置格式爲,每個中括號都表明着倉庫的ID,且具備惟一性,以後咱們指明它的名字和URL等信息用來配置進行定義。須要注意的是,等號=
左右是不能有分隔符的,不然就會有語法錯誤。
倉庫指向的定義: [repositoryID] name=Some name for this repository baseurl=url://path/to/directory/ enabled={1|0} gpgcheck={1|0} gpgkey=URL enablegroups={1|0} failovermethod={roundrobin|priority} 默認爲:roundroin,意爲隨機挑選; cost= 默認爲1000;
具備了這些概念以後,咱們就能夠開始配置yum指向,然後開始使用倉庫,以及使用yum命令了。
yum有許多的子命令,其命令用法格式爲:
yum [options] [command] [package ...]
yum剛纔講到過有許許多多的子命令,每個子命令都用於實現不一樣的管理功能,在man手冊中記錄了許多的子功能,咱們總結出來並查看。
command is one of: * install package1 [package2] [...] * update [package1] [package2] [...] * update-to [package1] [package2] [...] * update-minimal [package1] [package2] [...] * check-update * upgrade [package1] [package2] [...] * upgrade [package1] [package2] [...] * upgrade-to [package1] [package2] [...] * distribution-synchronization [package1] [package2] [...] * remove | erase package1 [package2] [...] * autoremove [package1] [...] * list [...] * info [...] * provides | whatprovides feature1 [feature2] [...] * provides | whatprovides feature1 [feature2] [...] * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] * makecache [fast] * groups [...] * search string1 [string2] [...] * shell [filename] * resolvedep dep1 [dep2] [...] (maintained for legacy reasons only - use repoquery or yum provides) * localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use install) * localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reasons only - use update) * reinstall package1 [package2] [...] * downgrade package1 [package2] [...] * deplist package1 [package2] [...] * repolist [all|enabled|disabled] * repoinfo [all|enabled|disabled] * repository-packages <enabled-repoid> <install|remove|remove-or-reinstall|remove-or-distribution-synchronization> [package2] [...] * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ] * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats] * load-transaction [txfile] * updateinfo [summary | list | info | remove-pkgs-ts | exclude-updates | exclude-all | check-running-kernel] * fssnapshot [summary | list | have-space | create | delete] * fs [filters | refilter | refilter-cleanup | du] * check * help [command]
以上能夠看的出來子命令不少,咱們例舉一些經常使用的子命令來總結一下該命令的用法,其總結以下:
那麼第一個就是顯示如何顯示倉庫列表,該子命令爲repolist,能夠顯示全部、啓用和禁用的,默認顯示啓用的。
顯示倉庫列表: repolist [all|enabled|disabled]
第二個簡述的是如何顯示程序包咱們使用list子命令,不只能夠顯示全部,還可使用glob通配機制。
顯示程序包: list # yum list [all | glob_exp1] [glob_exp2] [...] # yum list {available|installed|updates} {glob_exp1} {...}
咱們學會如何列出並顯示程序包以後,能夠安裝程序包,當有多個版本時,能夠指明版本安裝,默認安裝最新版,該子命令爲install。
安裝程序包: install package1 [package2] [...] reinstall package1 [package2] [...]
接下來講的是升級某個程序包,該子命令爲update。
升級程序包: update [package1] [package2] [...] downgrade package1 [package2] [...] (降級)
那麼還有一個叫作ckeck-update,該子命令爲檢查有哪些升級包可用。
檢查可用升級: ckeck-update
若是在系統裏面卸載一個程序包時,須要注意的是,卸載時,若是依賴於該程序包的程序也會被卸載,那麼卸載使用remove子命令。
卸載程序包: remove | erase package1 [package2] [...]
咱們若是想查看某一個程序包的簡要信息,顯示類型和rpm -qi
命令基本相同,好比大小、日期、修改時間等,咱們能夠用info子命令。
查看程序包的information: info [...]
還有就是能夠查看某個特性或查看某個命令是由那個安裝包提供的,該子命令爲provides,至關於rpm -qf
。
查看指定的特性(能夠是某文件)是由那個程序包所提供: provides | whatprovides feature1 [feature2] [...]
clean子命令是清理緩存的子命令,若是不想刪除元數據文件就要使用該子命令,還能夠指定清理那種,或者清理全部。
clean [ packages | metdata | expire-cache | rpmdb | plugins | all ]
除了清理緩存,咱們還能夠構建緩存,該子命令爲makecache,此操做能夠不用作,由於在安裝時就會自動構建緩存。
構建緩存: makecache
根據關鍵字能夠搜索相關的信息,能夠用search子命令,後面跟上關鍵字便可。
搜索: search string1 string2 [...] 以指定的關鍵字搜索程序包及summary信息;
咱們還能夠查看指定所依賴的程序包提供的功能。
查看指定包所依賴的capabilites: deplist package1 [package2] [...]
若是想查看過去安裝或卸載過那種程序包,或者叫作在過去產生了某個事務,那麼事務指的就是改變或者操做了某個具體的程序,好比說,在某一時刻成功安裝或卸載了某個程序包。
查看yum事務歷史: history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
接下來講的是localinstall和localupdate這兩個子命令,若是在yum倉庫中沒有某個程序包時,咱們從互聯網上下載某個安裝包的話,使用rpm -ivh
來進行安裝,可是所帶來的問題是若是該程序包所依賴於其它的程序包時,或者說那些被依賴的安裝包在倉庫中,這時候localinstall子命令就表示使用yum localinstall
來安裝該rpm包時,將該程序包中的被依賴的程序包在倉庫中提取並安裝進行解決。到CentOS 6
和CentOS 7
,咱們能夠直接使用install子命令來進行安裝本地的rpm包,也建議這樣操做。
安裝及升級本地程序包: localinstall rpmfile1 [rpmfile2] [...] (maintained for legacy reason only - use install) localupdate rpmfile1 [rpmfile2] [...] (maintained for legacy reason only - use update)
包組管理的相關命令有以下:
包組管理的相關命令: groupinstall group1 [group2] [...] geoupupdate group1 [group2] [...] grouplist [hidden] [groupwildcard] [...] groupremove group1 [group2] [...] groupinfo group1 [...]
咱們若是想安裝某個包組的,可以使用子命令groupinstall
跟上某個包組就能夠,若是包組名有空格的話,咱們使用雙引號來引發該包組名稱。
每個光盤介質就是程序包的集合,不管是在CentOS 五、六、7中,都有相應的repodata文件,因此能夠直接將光盤看成本地yum源來使用,使用file加上路徑就能夠了,介質能夠不用複製到本地某個目錄當中,首先將光驅打開,將光盤放置在服務器中,而後進行掛載,掛載路徑在/media/cdrom
中,若是沒有該目錄則先建立。
# mkdir -r /media/cdrom # mount -r /dev/sr0 /media/cdrom
以後咱們進入/etc/yum.reops.d/目錄下,在該目錄下有個CentOS-Media.repo文件,咱們使用vim來進行編輯該文件,修改格式以下:
# cd /etc/yum.repos.d/ # vim CentOS-Media.repo [c7-media] name=CentOS-$releasever - Media baseurl=file:///media/cdrom/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
以上修改完成以後,保存並退出,以後咱們使用yum repolist
命令查看一下,顯示出軟件包的數量出來則即爲成功。
# yum repolist Loaded plugins: fastestmirror, langpacks c7-media | 3.6 kB 00:00:00 (1/2): c7-media/group_gz | 156 kB 00:00:00 (2/2): c7-media/primary_db | 5.7 MB 00:00:00 Loading mirror speeds from cached hostfile repo id repo name status c7-media CentOS-7 - Media 9,591 repolist: 9,591
最後咱們總結一下如何使用本地yum源。
如何使用光盤並掛載yum倉庫: (1) 掛載光盤至某目錄,例如:/media/cdrom # mount -r /dev/sr0 /media/cdrom (2) 建立配置文件 [CentOS 7] name= baseurl= gpgcheck= enabled=