Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器
在Linux中如何安裝、升級、卸載軟件,是我們日常運維中重要的組成部分。接下來一CentOS6系統為例,講解如何使用 RPM 包管理器,yum包管理器以及源碼的方式來管理我們的軟件包。
一、相關的背景知識
許多程序的源程序,例如使用C語言編寫的源代碼,要經過預處理,編譯,匯編,鏈接才能生成真正的可執行程序(二進制),才可以使用。為了簡化這樣的過程,就出現了所謂的包管理器。它出現的目的是:將編譯好的程序打包成一個文件或有限的幾個文件,可用于實現安裝、卸載、升級、查詢等功能。
一個包管理器應該具有如下組成部分:
1、數據庫:這里面包括了 軟件名、版本、依賴關系、功能描述、安裝生成的各文件的路徑、和校驗軟件來源和數據完整性的校驗碼。
2、程序的組成清單:這里最主要的是軟件在安裝、卸載前后所運行的腳本。
安裝程序的時候為什么會出現依賴性?
由于Linux的程序或者說是工具都是由其他小程序或小工具組成,這是Linux的特性之一。正是由于這個特性決定了我們在安裝一個軟件包的時候,可能會依賴其他程序的庫文件和頭文件。#?在Linux中使用?ldd?命令來查看一個二進制程序(可執行文件)遵循EIF格式
[root@server?~]#?ldd?`which?pwd`
linux-vdso.so.1?=>??(0x00007fff62df0000)???#?指程序的起始入口
libc.so.6?=>?/lib64/libc.so.6?(0x0000003508400000)
/lib64/ld-linux-x86-64.so.2?(0x0000003507c00000)
程序包一般都包括:二進制程序,庫文件,配置文件,幫助文件這些信息。
二、RPM包管理器
在CentOS中的包管理器是RPM(RPM is Package Manager),具有上面包管理的組成和功能。
1、RPM包命名格式
所有的RPM包文件都是以.rpm結尾的。具體的命名格式:
name-version-relase.arch.rpm字段含義
name程序名
version程序源碼編號。分別代表主版本號,副版本號,發行號
releaserpm自身的發行號,與程序源碼的發行號無關,僅用于標識對 rpm包不同制作的修訂;同時,release還包含此包適用的OS
arch適用于的硬件平臺,主要有:i386, i486, i586, i686,x86_64,powerpc,noarch(依賴于虛擬機)
例如:bash-4.2.3-3.centos6.x86_64.rpm
2、rpm包的合法性驗正
包制作者制作完成之后會附加數字簽名于包上;驗證主要包括?來源合法性、包的完整性。
具體原理:
包的制作者使用單向加密提取原始數據的特征碼,而后使用自己的私鑰加密這段特性碼,附加原始數據后面。通過數字證書的方式驗證來源合法性,通過提取驗證碼是否正確來判斷完整性問題。
驗正過程:
前提:必須有可靠機制獲取到包制作者的公鑰;
1、使用制作者的公鑰解密加密的特征碼,能解密則意味著來源合法;
2、使用與制作者同樣的意向加密算法提取原始數據的特征碼,并與解密出來的特征作比對,相同,則意味著完整性沒問題;
3、RPM分包管理
試想一下,例如:一個程序總共有50個小功能,難道在打包的時候都打包到一個文件中去嗎? 如果是這樣,我們僅用到其中的5,6個功能,卻安裝了50個包,造成了空間浪費。所以,RPM包提供了分包的功能,從一定程度上解決了這個問題。
一般是有一個主包,提供基本功能;其他功能分別打包成不同的包文件來使用。
三、RPM包管理器的使用
RPM包管理器都是使用rpm命令(前端工具)來實現的,下面從不同角度介紹此命令的常用選項。
1、安裝程序包
以安裝 lftp 來示例。
當然在安裝過程中沒有出現依賴關系,如果出現依賴關系,則需要安裝依賴軟件包。
--test:此時軟件是否可以安裝
重新安裝:--replacepkgs?如果原有配置文件作了修改,很有可能不執行替換,而是將應該安裝生成的配置文件重命名為 .rpmnew
如果依賴于其它包:1、解決依賴關系;2、忽略依賴關系能安裝上,但有可能無法運行;使用--nodeps 參數。rpm -ivh --nodeps 軟件包文件名
2、卸載程序包
常用用法:rpm -e package_name
如果被其它包所依賴:1、將依賴于此包的所有包一并卸載;2、忽略依賴關系能卸載,但依賴于此包程序包可能會運行不正常,使用?--nodeps 參數。
如果包的配置文件安裝后曾被改動過,卸載時,此文件將不會卸載,而是被重命名并保留
3、升級軟件包
用法:rpm -Uvh | -Fvh /path/to/package_file
1、升級或安裝
-Uvh:如果軟件包不存在則安裝,如果存在則升級。
2、純升級
-Fvh:如果軟件包不存在則什么都不干,如果存在則升級。
如果有時候升級有問題,則可以使用?--force: 強制升級。
注意:不應該對內核執行升級操作,而是安裝。因為系統允許多內核并存,所以萬一升級失敗,還可保證系統不出現問題。
4、查詢功能
rpm的查詢功能可能是我們在軟件包管理方面使用最多的。
1)對已安裝的軟件
-q:查詢軟件包是否安裝
-qa:查詢系統已安裝的包
-qi:查詢包的描述信息
-ql:列出軟件包所安裝的所有文件
-qc:列出軟件包所安裝的配置文件
-qd:列出軟件包所安裝的幫助文檔
-q --scripts:查詢軟件安裝時所執行的腳本
-qf:查詢某文件是由哪個包安裝生成的
2)對未安裝的軟件
查詢功能和已安裝的一樣,只是加入-p選項。
-pq -pqi -pql -pqd -pqc 等參數,同上述功能。
5、校驗
用于檢查包安裝生成的文件屬性是否發生變化
rpm -V package_name[root@server?Packages]#?rpm?-V?lftp
S.5....T.??c?/etc/lftp.conf
#?常見屬性如下:如果某屬性無變化,則顯示為.
#?S?file?Size?differs
#?M?Mode?differs?(includes?permissions?and?file?type)
#?5?digest?(formerly?MD5?sum)?differs
#?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
6、rpm包來源合法性及完整性檢驗:
前提:在當前系統上導入包的制作者的公鑰
導入:rpm --import /path/to/key_file
# rpm -qa gpg-pubkey*
顯示所有已經導入的gpg格式的公鑰
# rpm -qi gpg-pubkey-NAME
顯示公鑰的詳細信息
檢查包:安裝過程中會自動執行
手動檢查:#?完整性和合法性檢查
[root@server?Packages]#?rpm?-K?lftp-4.0.9-1.el6.x86_64.rpm
lftp-4.0.9-1.el6.x86_64.rpm:?rsa?sha1?(md5)?pgp?md5?OK
#?不檢查來源合法性:
[root@server?Packages]#?rpm?-K?--nosignature?lftp-4.0.9-1.el6.x86_64.rpm
lftp-4.0.9-1.el6.x86_64.rpm:?sha1?md5?OK
#?不檢查包完整性
[root@server?Packages]#?rpm?-K?--nodigest?lftp-4.0.9-1.el6.x86_64.rpm
lftp-4.0.9-1.el6.x86_64.rpm:?rsa?(md5)?pgp?OK
7、數據庫重建
數據庫目錄:/var/lib/rpm
rpm --initdb:初始化,如果事先沒有庫,會新建一個;如果有,則不新建;
rpm --rebuilddb: 直接重建,覆蓋原有的數據庫
總結:個人感覺RPM在安裝軟件包是使用不多,一般使用查詢功能居多。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 白金信用卡权益 这些你都可以享受到
- 下一篇: linux的命令窗口,(翻译)Linux