linux程序包管理器:
協作用戶管理應用程序:安裝、升級、查詢、校驗、卸載等
軟件程序包生成過程:
源代碼——》目標二進制格式–》組織成為一個或有限幾個包文件
源代碼:程序員寫好的純文本文檔格式的代碼
目標二進制:通過編譯器編輯成為的二進制代碼
程序包管理器:(每一個發行版管理器各有不同)
debian:程序包以“.deb”為后綴
dpt/dpkg:管理工具
redhat:程序包以“ .rpm”為后綴
rpm:管理工具
S.u.SE:程序包以“.rpm”為后綴
rpm:管理工具
源代碼命令格式:
name-VERSION-.tar.gz
VERSION:major(主)、minor(次)、release(發行號)
major:重大版本發生改變才會更改此版本號
minor:某一功能增加或減少會更改
release:修復bug等一些小的操作
rpm包命令格式:
name-Version-release.arch.rpm
VERSION:major(主)、minor(次)、release(發行號)
major:重大版本發生改變才會更改此版本號
minor:某一功能增加或減少會更改
release:修復bug等一些小的操作
release.arch:rpm包的發行號(包括release.arch)
arch:表示程序包適合應用在什么平臺架構上
#redis-3.0.2-2.el7.i386.rpm
redis:名字
3.0.2:版本號分別一一對應
2:第二次制作
el7:rhel7
i386:適用在架構兼容i386的cpu上
包的依賴關系
在linux系統中,所有應用程序功能都非常單一,簡單(linux哲學思想之一,組合小程序完成復雜任務,除hadoop程序外)所以,一個程序包的運行可能會依賴于氣筒程序包功能的存在性,所以,程序包和程序包之間存在依賴關系。
比如安裝A程序包,而A程序包依賴于B程序包的功能,而B程序包又依賴于D程序包,這就叫做依賴關系
自動解決包依賴關系的前端工具
yum:rpm包管理的前端工具(rhel系列的都用此為前端工具)
apt-get:deb包管理的前端工具(debain,Ubuntu系列)
zyyper:suse的rpm包管理前端工具
dnf:fedora 22以上的系統上的rpm管理前端工具
rpm包程序管理器:
功能:將編譯好的應用程序的個組成文件打包成為一個或幾個程序包文件,從而更方便的實現程序包的安裝,升級,卸載,查詢等管理操作
1.程序包的組成清單(每個包都是獨立的各自存在的清單)
有安裝所需的文件清單、安裝及卸載時的腳本等。
2.數據庫(公共的存放系統上所有程序包的信息數據庫)
用于存儲程序包的名稱和版本、依賴關系、功能說明、安裝生成的個文件的文件路徑及校驗碼信息
Centos系統上rpm命令管理程序包
功能:安裝、升級、查詢、校驗、數據庫維護等
rpm命令:
rpm [options][Package_file]
安裝:-i –install
升級:-U –update, -F –freshen
卸載:-e –erase
查詢:-q –query
校驗:-V –verify
數據庫維護:–rebulidb、–initdb
通用選項,用于所有功能:
-v:verbose 詳細信息
-vv:更詳細的信息
1.安裝:
rpm {-i|–install} [install-options] Package_file…
在安裝時必須使用的選項(i和–install)其中一個,在結合其他安裝選項及包文件地址進行安裝
[install – options]安裝選線:
-h:進度條 --test:測試安裝,用于檢查安裝時所有的依賴關系及錯誤報告等信息 --nodeps:忽略依賴關系進行安裝,(雖能安裝成功,但不一定能運行成功) --replacepkgs:覆蓋安裝,重新安裝并覆蓋原有文件 --force:強制安裝
注:在安裝程序包時常用的組合選項:
#rpm -ivh PACKage_file
2.升級(會替換原有的程序包)
rpm {-U|–install} [install-options] Package_file…
rpm {-F|–install} [install-options] Package_file…
-U:表示安裝和升級,當時用此升級程序時,如果原本程序不存在,則會安裝程序包
-F:表示只升級程序包,如果原程序不存在,則不會進行升級或安裝操作)
常用組合選項:
rpm -Uvh Packages_file (會替換原有的文件包)
rpm -Fvh Packages_file
可用于安裝選項(如:–test、nodeps、noplacepkgs、–force等)
–oldpackage:降級安裝
–force:忽略高版本強行降級到舊版本
注意:
(1)不要對內核做升級操作;linux支持多內核版本并存,因此,直接安裝新版本內核
(2)如果某源程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.remnew)
3.卸載:
注意:卸載時、查詢時都是package name,安裝和升級都是package file
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …
–allmatches :卸載所有匹配指定名稱的程序包的各版本
–nodeps :忽略依賴關系
–test:測試卸載(會顯示依賴關系等信息,但不真正卸載)
4.查詢:(有兩類選項)***非常重要***
rpm {-q|–query} [select-options] [query-options]
第一類:select-options:選擇選項
查詢時直接給定包名
#rpm -q package_name //查詢指定的程序包是否安裝及其版本
-a:查詢所有已安裝上的所有包
#rpm -qa pachage_name //可使用正則表達式進行匹配
-f:查詢某文件是由哪個程序包安裝生成:
#rpm -qf /path/to/somefile
-p:查詢的未安裝的程序包執行查詢操作,(配合選項進行查看):
# rpm -qpi package_file //查詢指定的程序包的詳細信息
–whatprovides CAPABILITY(能力):查詢指定的能力由哪個程序包提供:
#rpm -q whatprovides bash //查詢bash能力是由誰(那個程序包)提供的
#rpm -q –whatprovides “config(bash)”//查詢bash
–whatrequires CAPAbILITY (能力):查詢指定的能力被哪個包所依賴
#rpm -q –whatrequires bash //查詢指定的bash能力被那些個包所依賴
第二類:query-options:
–changelog :查詢rpm包的changelog(包改變日志);(rpm包的,而非源碼包的)
#rpm -q –changelog PACKAGE name
-l :查詢某包安裝生成的文件列表
#rpm -ql P—name
-i : 查詢程序包的相關信息(如:版本號,大小、所屬的包組等)
#rpm -qi P-name
-c (configfles):查詢指定的程序包提供的配置文件;
#rpm -qc bash(P-name)
-d(docfiles):查詢指定的程序包提供的文檔
#rpm -qd bash (P-name)
–provides :列出指定的程序包提供的所有能力(CAPBILITY)
#rpm -q –provides bash(P-name)//查看bash提供能力
#rpm -q –whatprovides bash
-R:查詢指定程序包所依賴的各種資源
#rpm -q -R bash
–scripts:查看程序包自帶的腳本片段
#rpm -q –scripts bash
用法:
– qi PACkAGE,-qf FILE,-qc PACkAGE ,-ql PAckage,-qd PACKAGE
-qpi PACKAGE_file, -qpl PACKAGE_file ,-qpc PACHAGE_file
5.校驗:“V”
查看程序包安裝之后有沒有被更改過
可指定只檢查指定
# rpm -V zsh
#rpm -V –nofiles bash
用rpm -V P-name 查看出來的結果顯示
[root@CentOs6 mnt]# rpm -V tree [root@CentOs6 mnt]# rpm -Va S.5....T. c /etc/bashrc S.5....T. c /etc/profile //如果對應的有顯示下面的選項,則改包發生了對應的改變,根據數據來進行查找(數據庫地址/var/lib/rpm)
S:文件大小發生改變 (file Size differs)
M:文件權限和類型發生改變(Mode differs (includes permissions and file type)
5:文件內容發生改變MD5這一種指紋的內容已經不同(digest (formerly MD5 sum) differs)
D:設備的主次號發生改變( Device major/minor number mismatch)
L:link路徑已經被改變(readLink(2) path mismatch)
U:文件的屬主已被改變(User ownership differs)
G:文件的屬組已被改變 (Group ownership differs)
T:文件的時間戳(創建時間)發生改變 (mTime differs)
P:文件所提供的能力發生改變 ( caPabilities differ)
包合法性驗證和完整性驗證:
在軟件安裝之前我們最好是要對即將安裝的軟件進行合法驗證,這樣可以檢查出軟件是否來源合法,內容合法等,在一定程度上避免不必要的安全因素導致的不安全事件
來源和法性:
由我們信任的制作者提供的依賴于制作者的數字簽名,簽名是作者使用自己的私鑰加密程序包的特性碼進行的。
內容合法性:
包未被二次修改;完整性校驗成功,依賴于制作者提供的程序特征碼
驗證方式:
安裝者用同樣的特征碼提取算法提取程序包的特征碼,并與原作者提供的特征碼相比較
驗證其光盤中程序包的來源及完整性:
先導入合法的KEY文件:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)
列如:#rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-6 //獲取程序包的秘鑰
驗證:rpm -K Package_file 用光盤中的key與程序包奧的秘鑰相對比
–nosignature:不檢查來源合法性
–nodigest:不檢查完整性
獲取并導入信任的包制作者的秘鑰:
對于Centos發行版來說:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-(6/7)
驗證:
(1)安裝此組織簽名的程序時,會自動執行驗證
(2)手動驗證:rpm -K Package-FILE
來源合法性驗證:
數字簽名:用自己的私鑰去加密對應數據的特征碼,這樣來源合法性和數據完整性得到驗證
制作者:
1.使用單向加密法提取包的特征碼
2.用自己的私鑰去加密特征碼,然后附加在文件后面
使用者:
拿到包之后,要檢驗包的來源合法性,拿到制作者的公鑰。然后解密特征碼,如果能解密則通過。這樣包的來源合法性和數據完整性得到驗證
6.數據庫重建
rpm管理器數據路徑:/var/lib/rpm
查詢操作:通過此處的數據庫進行,
數據庫操作查詢:
Centos6:man rpm
Centos7:man rpmdb
rpm {–initdb} –rebuliddb
–initdb:初始化數據庫,當前完全沒有數據庫存在時,可自動創建一個新的,如果有則不創建。
–rebuliddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新構建,(無論當前數據庫存在與否,都會直接重建此庫;構建的數據庫存放在/var/lib/rpm中)
原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/37553