我們知道,程序就是指令加上數據的集合或者稱為算法加上數據結構的集合。應用程序以源代碼和二進制的形式存在:源代碼是包含了整個應用程序的編程語言的所有代碼的文本文件;二進制則是將源代碼經過一系列的轉換操作之后得到的可以直接執行的文件。
使用源代碼安裝應用程序的步驟為:預處理(預處理器) --> 編譯(編譯器) --> 字節碼 --> 匯編(匯編器) --> 鏈接(鏈接器) --> 可以直接執行的二進制程序文件。當我們使用源代碼安裝應用程序時,不同操作系統的相同操作安裝出來的相同應用程序如果直接拿出來放在另一個操作系統上使用可能會不能使用,但如果兩臺主機的不同操作系統有POSIX的接口標準,便可以直接使用。
程序包管理器在制定系統中進行程序的安裝、卸載、升級、查詢及校驗等工作。不同的linux發行版本,有著不同的程序包管理器:Debian : dpt (Debian Package Toolkits) ,dpkg工具,.deb后綴名的包文件;RdeHat : rpm (Redhat Package Manager),rpm工具,.rpm后綴名的包文件;S.u.s.e: rpm等。rpm成為linux的程序包管理器的行業標準;rpm是perl編寫的,后來用C重寫了rpm。
在制作rpm程序包的時候,通常其制作者會采用分包技術來構建rpm程序包,或者說是根據程序的不同功能,構建多個程序包。被分包的程序包分為主程序包和附屬功能包。主程序包和附屬功能包具有相同的版本號,發行版本號,操作系統以及兼容平臺的標識,僅僅是多了個附屬的功能而已。所以,主程序包往往被所有的附屬功能包所依賴,不安裝主程序包就不能安裝附屬功能包。
對于rpm程序包的命名,源碼包和二進制包的命名方式是不同的:源碼包:software_name-VERSION.src.rpm;二進制包:software_name-VERSION-[release].[os].arch.rpm。
rpm程序包中文件的組成清單:
1.程序的文件
2.文件清單
3.軟件安裝或卸載時所運行的腳本文件:共分為四類
1)preinstall:在正式的安裝操作開始之前所運行的腳本,%pre
2)postinstall:在安裝完成之后所執行的腳本,%post
3)preuninstall:在正式卸載操作開始之前所運行的腳本,%preun
4)postuninstall:在卸載完成之后所執行的腳本,%postun
在計算機中安裝rpm程序包一般使用rpm或者yum工具。rpm命令行工具可以進行安裝、卸載、升級(降級)、查詢、文件校驗、驗證、數據庫維護的操作。rpm中的通用選項為-v:顯示安裝歷程的信息,僅僅顯示安裝軟件名;-vv顯示非常詳細的操作信息。
rpm中的安裝操作:rpm {-i|--install} [install-options] PACK-AGE_FILE ...
install-options:
-h,--hash:用50個#來表示安裝進度
--test:并不是真正的安裝軟件包,僅僅是測試是否在安裝時能夠正常完成,dry run模式
--nodeps:忽略因為依賴關系導致的安裝錯誤,不建議使用;
--replacefiles:替換文件:在安裝軟件包時,軟件包中的文件會直接將原來安裝的文件替換;
--replacepkgs:替換程序包:無需卸載軟件包而重新安裝
--noscripts:不運行任何腳本
--nosignature:不考慮軟件包的來源是否合法
--nodigest:不考慮軟件包是否完整
rpm中的升級操作:rpm -U [install-options] <package_file>+
如果選擇被安裝的程序包事先并未安裝,則全新安裝,如果已經安裝了舊版本,則可以升級安裝;
rpm [-F|--freshen] [install-options] <pack゛ge_file>+
僅僅只能對已經安裝的低版本的程序包進行升級安裝;
常用選項:與安裝相同
--oldpackage:用老版本的程序包替換新版本的程序包
--force強制升級
注意:不要對內核進行升級操作,linux可以支持多內核,可以直接安裝新版本的內核,在啟動界面可以手動更換;升級安裝可能會帶來文件的變化,因此系統默認不會直接更改之前安裝過的程序的配置文件,新程序包中的配置文件會被重命名,通常會是:FINENAME.rpmnew
rpm中的卸載操作:rpm {-e|--erase} [--allmatches] [--nodeps]
--allmatchs:將卸載所有匹配制定名稱的程序包的各個版本;
--nodeps:卸載時忽略依賴關系,不建議使用
--test:僅僅測試卸載,dry run模式
rpm中的查詢操作:rpm {-q|--query} [select-options] [query-options]
直接給出程序包名
-a,--all查詢所有已安裝的程序包名
-f,--file FILE 查找指定的文件是由哪個程序包提供的;
-p,--package PACKAGE_FILE 對還沒有安裝的程序包文件中執行查詢操作
[--whatprovides CAPABILITY] 查詢指定的CAPBILITY是由哪個程序包所提供的
[--whatrequires CAPABILITY]查詢指定的CAPBILITY被哪個程序包所依賴
query-options
[--changelog]查詢rpm程序包的changelog
-c,--configfiles查詢指定程序包中有哪些是配置文件
-d,--docfiles 查詢指定程序包中有哪些文檔文件
-i,--info查詢程序包相關的信息,包括版本號,發行號,大小等;
-l,--list列表顯示程序包安裝會生成哪些文件
--provides列出制定程序包提供的所有的CAPABILITY
-R,--requires:查詢指定程序包的依賴關系
--scripts:查看程序包所攜帶的腳本的內容
rpm的校驗操作:rpm -V 文件名;用來確認文件是否被修改或覆蓋,如被改變則在標準輸出有一系列輸出,否則無輸出。
rpm的數據庫管理操作:數據庫的初始化和重建,數據庫位于/var/lib/rpm。--dbpath指定數據庫位置,--rebuilddb重建數據庫,--initdb初始化數據庫。
在使用rpm程序包管理工具時,總是會遇到依賴問題,導致安裝一個所需的軟件包會很麻煩,所以對于這種弊端開發出了yum這種程序包管理工具,
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。