1、軟件管理器簡介
隨著Linux的不斷發展及越來越多的人投入到Linux大家庭中,軟件管理器的作用對于還無法熟練掌握源碼編譯安裝的人們還是顯得尤為重要,同時,由Linux開發商在為其編譯完成的軟件包在某種程度上要比在網絡上流傳的軟件包要安全的多;所以,掌握Linux常用的軟件管理器還是非常重要的;
目前常見的軟件包管理器包括:RPM和DPKG,簡單介紹如下(見鳥哥):
代表廠商 |
軟件管理機制 |
管理命令 |
在線升級 |
Red Hat/Suse |
RPM |
rpm |
YUM(yum) |
Debian/Ubuntu |
DPKG |
dpkg |
APT(apt-get) |
2、RPM簡介
RPM(Redhat Package Manager)是由Red Hat公司所發展出來一種軟件包管理機制,在之前,由于軟件安裝需要依賴其他屬性的緣故,安裝的過程將會非常復雜而RPM則會大大簡化這一過程;
RPM會將軟件提前編譯并打包成RPM包的格式,同時通過打包好的軟件里的默認數據庫記錄下此軟件在安裝過程中所要求的依賴關系,在執行軟件安裝時,會先依照軟所記錄的數據查詢當前系統的環境是否滿足,如滿足,則執行安裝;如不滿足則不予以安裝;
但是,RPM包的缺點也是很多的:
1、軟件包的安裝環境已經在制作時提前決定好了,所以不同的廠商發布的RPM文件通常不會通用;
2、廠商提供的RPM包安裝時方便,安全性高,但通常版本較低,如果要體驗新特性,新版本,一般這種RPM包是不會滿足我們的需求的;
3、由于依賴關系的存在,RPM包的卸載升級也需要格外謹慎;最好是只卸載升級與其他軟件依賴關系不大的軟件包;
3、從程序組成說起
軟件在編譯前,是一段源代碼,而在編譯后,會分割成一段段我們能夠更好理解的文件,基本如下:
二進制程序:/bin, /sbin, /usr/bin, /usr/sbin, /usr/local/sbin, /usr/local/sbin,
庫文件:/lib, /lib64, /usr/lib, /usr/lib64, /usr/local/lib, /usr/local/lib64
配置文件:/etc, /etc/DIR, /usr/local/{etc,conf}
幫助文件:/usr/share/man, /usr/share/doc, /usr/local/share/man, /usr/local/share/doc
更簡單的說,我覺得rpm就是將這些文件按照自己需要打包在一起成為一個軟件包,而由于主觀需要或其他元素,內容并不會往往是我們所需求的;
4、看看格式
以centos 6.6的自帶的mysql為例:
要補充的是,Linux當中,很多源碼包會因為功能被拆分為如下的多個包,仍然以httpd為例:
5、看看rpm包來源
a.系統的發行光盤鏡像或官方站點(或站點鏡像服務器);
掛載光盤:mount -r /dev/cdrom /media/cdrom
官方站點,鏡像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com
b.程序包的官方站點
c.第三方組織:epel
d.搜索引擎
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
建議:安裝之前要驗證其的來源合法性和包的完整性;
6、RPM管理命令
歸根結底,在我們正確獲得所要的RPM包后,RPM包的管理使用就成為重中之重了,而RPM包管理通過rpm這個命令來完成,總結下常用選項如下:
a. 安裝篇:
rpm |
Usage:rpm {-i|–install} [install-options] Package_file… |
|
安裝: 常用組合: -ivh |
-i, –install |
安裝 |
-h |
hash,以#來表示安裝進度,一個#相當于2% |
|
-v, -vv, -vvv |
顯示安裝過程中的詳細信息;-vv,-vvv顯示更多信息; |
|
–test |
測試安裝,而僅報告依賴關系及沖突信息等; |
|
–nodeps |
忽略依賴關系 |
|
–replacepkgs |
覆蓋安裝:重新安裝并覆蓋原有的文件, |
|
–force |
強制安裝 |
|
注意事項 |
程序包之間存在依賴關系,選用-nodeps時,安裝可能會成功,但未必能夠成功執行;選用-replacepkgs時,要注意配置文件; |
b、升級篇
rpm |
rpm {-U|–upgrade} [install-options] PACKAGE_FILE… 升級或安裝 rpm {-F|–freshen} [install-options] PACKAGE_FILE… 僅升級 |
|
升級選項: 常用組合: -Uvh -Fvh |
-U |
升級或安裝 |
-F |
升級 |
|
–oldpackage |
降級到舊版本 |
|
同樣支持-h, -v ,-vv,-vvv,-force選項 |
||
注意事項 |
1. 一定不要對內核執行升級;Linux允許多內核共存,所以,可以直接安裝多個不同版本的內核 2.如果程序包的配置文件安裝后曾經被修改,升級時,新版本的配置文件不會覆蓋老版本的配置文件,而是把新版本的配置文件重命名(加后綴.rpmnew)后保存; |
c、卸載篇
rpm |
rpm {-e|–erase} [–allmatches] [–nodeps] [–test] PACKAGE_NAME … |
|
卸載選項: |
-e |
卸載 |
–allmatches |
如果一個程序包同時安裝多個版本,則卸載所有 |
|
–test |
測試寫在:dry-run模式 |
|
同樣支持-h, -v ,-vv,-vvv,-force,-nodeps選項 |
||
注意事項 |
如果程序包的配置文件安裝后曾被修改,卸載時,此文件通常不會被刪除,而是被重命令(加后綴.rpmsave)后留存; |
d、查詢篇
rpm |
rpm {-q|–query} [select-options] [query-options] |
|
常用選項: yeah,所有的一切都以加上q為前提; |
-q |
查詢某包或某些包是否安裝 |
-qa |
查詢已安裝的所有包 |
|
-qf |
查詢某文件是有哪個安裝包安裝生成 |
|
-qi |
查詢某包的簡要說明信息 |
|
-qip |
查詢某未安裝的包文件的相關信息 |
|
-ql |
查詢某包安裝生成的文件列表 |
|
-qc |
查詢某包安裝完成后生成的所有配置文件 |
|
-qd |
查詢某包安裝完成后的所有幫助文件 |
|
-q –changelog |
查詢某包制作時隨版本變化的changelog信息 |
|
-q –provides |
查詢某包提供的capabilities |
|
-q –requires |
查詢某包依賴的capabilities |
|
-q –scripts |
查詢某包安裝或卸載時的執行腳本 |
|
注意事項 |
腳本有四類: preinstall:安裝過程開始前執行的腳本;postinstall:安裝過程完成后執行的腳本;preuninstall:卸載開始前執行的腳本;postuninstall:卸載過程完成后執行的腳本 |
e、校驗篇—查詢包安裝之后生成的文件是否發生了改變
查詢方式:
rpm {-V|–verify} [select-options] [verify-options]
常見用法:
rpm -V PACKAGE_NAMES
S file Size differs 文件大小
M Mode differs (includes permissions and file type) 權限
5 digest (formerly MD5 sum) differs md5校驗和
D Device major/minor number mismatch 主從設備號
L readLink(2) path mismatch 符號鏈接
U User ownership differs 屬主
G Group ownership differs 屬組
T mTime differs 最后修改時間
P caPabilities differ
注:
1、文件屬性正常,則會顯示點’.’,否則會顯示其代表字符,如:
修改了httpd配置文件后:
[root@AZtest ~]# rpm -V httpd
S.5….T. c /etc/httpd/conf/httpd.conf
2、RPM校驗也會用到-a(所有已安裝包),-f(指定文件),-p(指定RPM包),–noscripts,–nodeps等選項;
f、程序包的合法性驗證:
來源合法:由信任的制作者提供
依賴于:制作者的數字簽名,簽名是作者使用自己的私鑰加密程序包特征碼進行的;
內容合法:包未被2次修改,完整性校驗成功;
依賴于:制作者提供的程序包特征碼:
驗證方式:安裝者用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的相比較;
驗證其光盤中程序包的來源及完整性:
rpm –import /path/to/RPM-GPG-KEY-FILE
驗正:rpm {-K|–checksig} PACKAGE_FILE
–nosignature:不檢查來源合法性
–nodigest:不檢查完整性
f、重建數據庫篇
rpm管理器數據庫:/var/lib/rpm,如果某些操作導致RPM數據庫/var/lib/rpm內的文件損壞,可使用如下命令
rpm |
rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY] |
|
重建數據庫: |
–initab |
初始化數據庫,即數據庫完全不存時,可新建之 |
–rebuilddb |
無論當前數據存在與否,都會直接重建此庫 |
|
注意事項 |
最后說一句,為了強迫自己記憶和手敲,不記錄例子了。。。
原創文章,作者:AZ,如若轉載,請注明出處:http://www.www58058.com/9664
總結的很不錯,獻有人總結的如此詳細,已置頂