Linux使用過程中非常重要的命令——yum。
大學期間剛開始跟着慕課網上的視頻學習Linux的時候下載安裝軟件總是先下載到Windows上然後上傳到虛擬機上,解壓後安裝報什麼錯解決什麼錯,缺什麼依賴安裝什麼依賴。2015年實習開始,第一個任務就是搭建Redis,第一次接觸了yum命令,從此除了必要的測試、梳理離線安裝步驟以外,剩下的東西都通過yum來安裝,一條yum -y install命令解決一切問題。
前一段時間,應該說是過去一年都在跟Zookeeper打交道,接下來會系統梳理Zookeeper的部分知識,特別是在配置文件管理,微服務管理方面,在此之前系統的梳理一下yum到底是個什麼樣的命令,通過什麼原理下載安裝軟件。
YUM的介紹
YUM全稱爲 Yellow dog Updater Modified,它是一個在線的軟件安裝命令。YUM是C/S架構,是RPM1的前端工具,依賴於RPM存在的。能夠從指定的服務器自動下載RPM包並且安裝,可以自動處理依賴性關係,並且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
例如我們需要安裝一個軟件A,而軟件A依賴B,而B可能還繼續依賴其他軟件,通過yum我們只需要安裝A,其他依賴包會自動安裝。
那麼YUM是如何下載安裝RMP包的呢?
但是上述這種機制,也存在着一些問題,萬一服務器上的程序包或者依賴關係發生了變化,就會導致服務器和客戶端本地的元數據不一致。想解決這個問題,可以在每次使用YUM的時候,都向服務器請求元數據。但是這種方式浪費帶寬和時間,有的時候明明沒有變化,但還是需要下載。
如何解決這種問題呢?
YUM服務器上有一個特殊文件,文件中記錄了每一個元數據文件的校驗碼,實際上每次運行YUM的時候,都會向服務器請求這個文件(剛剛配置好YUM源的時候,本地沒有這個文件,這時候肯定是要下載元數據的),並和本地元數據中的校驗碼文件進行對比,如果一致則代表元數據沒有變化,本地元數據有效,否則就重新請求元數據。
YUM的安裝及配置
我們可以通過yum -y install安裝其他軟件,如果Linux服務器沒有yum,該如何安裝。
- 首先,通過網址http://yum.baseurl.org/download/3.4/yum-3.4.3.tar.gz下載yum-3.4.3。
- 解壓壓縮包
tar xvf yum-3.4.3.tar.gz
- 執行安裝命令,更新yum catch
#依次執行以下命令 cd yum-3.4.3 yummain.py install yum yum check-update yum update yum clean all
- 配置國內鏡像源
#安裝wget
yum -y install wget
#備份之前的倉庫文件
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.back
#下載阿里雲的倉庫文件
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清除緩存
yum clean all
yum makecache
- 主配置文件/etc/yum.conf
yum.conf是yum的主配置文件,手動安裝yum時,需要手動創建改文件。
[root@Centos7 ~]# cat /etc/yum.conf
##1表示使能,0表示不使能;
##等號左右不要有空格,否則可能出現語法錯誤;
[main] ##倉庫ID
cachedir=/var/cache/yum/$basearch/$releasever ##緩存文件存放目錄
keepcache=0 ##緩存文件是否保存下來
debuglevel=2 ##debug調試級別,默認爲2
logfile=/var/log/yum.log ##日誌文件路徑
exactarch=1 ##安裝程序包的時候,做精確地平臺匹配(例如:配置爲0則允許在i386上更新i686的RPM包)
obsoletes=1 ##僅在更新的時候生效,允許更新陳舊的RPM包
gpgcheck=1 ##安裝程序包的時候,檢查GPG(GNU Private Guard)
plugins=1 ##是否允許使用插件(我們一般會用yum-fastestmirror這個插件)
installonly_limit=5 ##同時安裝幾個程序包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
##追蹤BUG的URL
distroverpkg=centos-release ##指定基準包,yum會根據這個包判斷髮行版本
- 倉庫文件
yum倉庫文件指/etc/yum.repos.d/目錄下以,repo結尾的配置文件。
repo文件是Fedora、Redhat和Centos中yum源(軟件倉庫)的配置文件,通常一個repo文件定義了一個或者多個軟件倉庫的細節內容,例如我們將從哪裏下載需要安裝或者升級的軟件包,repo文件中的設置內容將被yum讀取和應用。 - 文件必須以.repo結尾,否則不會被YUM使用;
- 一個repo文件可以指向一個倉庫,爲倉庫的指向提供配置信息;
- 一個repo文件也可以指向多個倉庫,只不過爲了便於管理切割成了多個repo文件;
##1表示使能,0表示不使能;
##等號左右不要有空格,否則可能出現語法錯誤;
[repositoryID]:
##設定倉庫ID(main不能作爲ID,因爲它是公共的);
name=Some name for this repository
##設定YUM倉庫名;
baseurl=url://server1/path/to/repository/
##設定YUM倉庫訪問路徑(指向repodata這個目錄的上級目錄);
url://server2/path/to/repository/
##第二行及其之後的URL不能頂格寫
url://server3/path/to/repository/
mirrorlist=
##不能與baseurl同時使用,設定鏡像服務器地址URL(指向的是個文本文件,裏面存放多個指向倉庫的URL,YUM會將這個文件下載到本地然後連接倉庫);
enabled={1|0}
##設定是否啓用倉庫,默認啓用;
gpgcheck={1|0}
##設定是否在安裝此倉庫中的程序包時,進行GPG校驗,來RPM包的完整性和來源合法性;
repo_gpgcheck={1|0}
##設置是否檢查倉庫元數據簽名信息;
gpgkey=URL
##指向GPG密鑰文件的訪問路徑(可能是倉庫或權威機構提供);
enablegroups={1|0}
##設置是否在倉庫上使用組批量管理程序包;
failovermethod={roundrobin|priority}
##故障轉移方法(輪詢|優先級),默認爲roundrobin隨機挑選,priority是按順序選擇;
exclude=compiz* *compiz* fusion-icon*
##用來禁止這個軟件倉庫中的某些軟件包的安裝和更新,可以使用通配符,並以空格分隔,可以視情況需要自行添加;
keepalive={1|0}
##是否當遠程服務器是HTTP/1.1時,保持連接功能;
username
##有些服務器不支持匿名訪問,需要指明要訪問服務器的用戶名;
password
##有些服務器不支持匿名訪問,需要指明要訪問服務器的密碼;
cost=
##訪問倉庫的開銷(默認爲1000),用數字表示;
group_package_types=default, mandatory, optional
##安裝包組中指定類型的包;
YUM的使用
常用命令
##列出所有可更新的軟件清單命令
yum check-update
##更新所有軟件命令
yum update
##僅安裝指定的軟件命令
yum install <package_name>
##僅更新指定的軟件命令
yum update <package_name>
##列出所有可安裝的軟件清單命令
yum list
##刪除軟件包命令
yum remove <package_name>
##查找軟件包 命令
yum search <keyword>
##清除緩存命令:
yum clean packages ##清除緩存目錄下的軟件包
yum clean headers ##清除緩存目錄下的 headers
yum clean oldheaders ##清除緩存目錄下舊的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) ##清除緩存目錄下的軟件包及舊的headers
常用選項
-q, --quiet:靜默模式
-v, --verbose:詳細模式
-y, --assumeyes:自動回答爲yes;
--assumeno:自動回答爲no
-R [minutes], --randomwait=[minutes]:最多等待時間
-x [package], --exclude=[package]:通配要排除的包
--noplugins:禁用所有插件;
--color=COLOR:帶顏色
--downloadonly:僅下載包,不安裝或升級。默認下載在yum的緩存目錄中,默認爲/var/cache/yum/$basearch/$releasever
--downloaddir=DLDIR:指定下載目錄
yum的使用相信大家都不陌生,更詳細的命令、選項合集可以從網上獲取。