rpm命令
rpm命令:
rpm [OPTIONS] [PACKAGE_FILE]
安裝:-i,--install
升級:-U,--update,-F,--freshen
卸載:-e,--erase
查詢:-q,--query
校驗:-V,--verify
導入密鑰:--import /PATH/TO/RPM-GPG-KEY
手動
數據庫維護:--buiddb,--initdb
每種功能還有很多復雜子選項;
rpm包安裝:
rpm {-i|--install} [install-options] PACKAGE_FILE ...
常用格式:要有文件路徑;
rpm -ivh PACKAGE_FILE ...
[install-options]安裝選項:
-h, --hash:hash marks輸出進度條,一共50個#,每個#進度表示2%;
--test:測試安裝,檢查并報告依賴關系及沖突消息等,dry run模式;
--nodeps:忽略依賴關系(安裝后使用可能有問題),不建議;
--replacepkgs:重新安裝;
--noscripts:不執行rpm包自帶的四類腳本;
--nopre:不執行rpm包自帶的preinstall腳本;
--nopost:不執行rpm包自帶的postinstall腳本;
--nopreun:不執行rpm包自帶的preuninstall腳本;
--nopostun:不執行rpm包自帶的postuninstall腳本;
例如:
]# mount -r /dev/cdrom /media:虛擬機上的光盤連接后即可掛載;
]# rpm -ivh --test /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:測試安裝;
]# rpm -ivh --replacepkgs /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm
]# rpm -ivh /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm
注意:rpm包可以自帶腳本;
四類:--noscripts
preinstall:安裝過程開始之前運行的腳本,標記為%pre;--nopre
postinstall:安裝過程完成之后運行的腳本,標記為%post;--nopost
preuninstall:卸載過程真正開始執行之前運行的腳本,標記為%preun;--nopreun
postuninstall:卸載過程完成之后運行的腳本,標記為%postun;--nopostun
--nosignature:不檢查包簽名信息,不檢查來源合法性(有時,警告no key,但光盤上有key,可以手動導入);
--nodigest:不檢查包完整性信息,(不檢查校驗md5信息);
rpm包升級:
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-U:表示升級或安裝(發現舊版本則升級,沒發現則直接安裝);
-F:升級(只完成升級舊版本);
--nodeps:
--test:
--noscripts
常用格式:
rpm -Uvh PACKAGE_FILE ...
rpm -Fvh PACKAGE_FILE ...
--oldpackage:降級安裝(新版程序包不兼容時,要回滾);
--force:強制升級;
例如:
]# rpm -Uvh /media/Packages/zsh-5.0.2-7.el7_1.2.x86_64.rpm:升級rpm包;
注意:
(1)不要對內核做升級操作;Linux支持多內核版本并存,因此,要直接安裝新版本內核;
(2)如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名(FILENAME.rpmnew)后生成提供;
rpm包卸載:
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
--allmatches:卸載所有匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關系;
--test:測試卸載,dry run模式;
注意:卸載和查詢時都無需程序文件路徑,只需給出rpm程序包名即可;
安裝和升級rpm程序包名需要rpm程序包文件完整路徑;
rpm包查詢:
rpm {-q|--query} [select-options] [query-options]
-q
[select-options]:挑選查詢哪些包;
PACKAGE_NAME:查詢指定程序包是否安裝及會顯示詳細版本信息;
-a,--all:查詢所有安裝過的包;
-f FILE:查詢指定文件(要寫絕對路徑)由哪個程序包安裝生成的;
-g,--group GROUP:查詢指定包組中包含的程序包;
-p,--package package_file:對未安裝的程序包查詢(結合query-options選項),但要有rpm安裝文件,否則無法查詢;
--whatprovides CAPABILITY:查詢指定的capability由哪個程序包提供(結合query-options選項);
--whatrequires CAPABILITY:程序指定的capability被哪個程序包依賴(結合query-options選項);
例如:
]# rpm -q zsh:查詢指定rpm程序包;
]# rpm -qa:查詢所有已安裝的rpm程序包,可同grep搭配使用;
[query-options]:查詢包的信息;
--changelog:查詢指定rpm包的修改日志changelog;
-i:查詢指定rpm包相關的詳細信息(版本、作者、功能描述、大小、所屬包組...);
-l:查詢指定rpm包安裝后生成的所有文件列表;(二進制程序、配置文件、庫文件、幫助文檔)
-c:查看指定rpm程序的配置文件;
-d,--docfiles:查看指定rpm程序包提供的文檔;
--provides:查看指定rpm程序包提供所有的capability功能;
-R,--requires:查詢指定rpm包的依賴關系;
--scripts:查看rpm程序包自帶的四類腳本程序片段(preinstall、postinstall、preuninstall、postuninstall);
例如:
]# rpm -q --changelog zsh:查詢指定rpm包修改日志;
]# rpm -qi zsh:查詢指定rpm包相關詳細信息;
]# rpm -ql zsh:查詢指定rpm包生成的所有文件列表;
]# rpm -qc zsh:查詢指定rpm包所包含的配置文件;
]# rpm -qd zsh:查詢指定rpm包提供的文檔;
]# rpm -q --provides bash:查詢指定rpm包提供的所有能力;
]# rpm -q --whatprovides bash:查詢指定rpm包由哪個程序包提供;
]# rpm -q --whatprovides 'config(bash)'
]# rpm -q --whatrequires bash:查詢指定rpm包被哪個程序包所依賴;
]# rpm -q -R zsh:查詢指定rpm包的依賴關系;
]# rpm -q --scripts zsh:查詢指定rpm包自帶的四類腳本程序代碼;
查詢未安裝的rpm包的相關信息,但必須有rpmb的安裝文件才能查詢;
]# rpm -qpl /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查詢未安裝的rpm包安裝后生成的所有文件列表;
]# rpm -qpi /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查詢未安裝的rpm包相關詳細信息;
]# rpm -qpc /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查詢未安裝的rpm包配置文件;
]# rpm -qpd /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查詢未安裝的rpm包提供的文檔;
]# rpm -qp --scripts /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm:查詢未安裝的rpm包自帶的四類腳本程序片段;
rpm包校驗:
rpm {-V|--verify} [select-options] [verify-options]
--nodeps:不校驗依賴關系;
--nodigest:不檢查包完整性;
--nofiles:不校驗文件屬性是否發生改變;
--nosignature:不檢查包或頭部簽名;
例如:
]# rpm -V --nofiles zsh
校驗結果各位置的代表意思(9位):
例如:S.5....T.
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:能力發生改變;
包來源合法性驗證和完整性驗證:
來源合法性驗證:
完整性驗證:
rpm包來源合法性驗證和完整性驗證,導入密鑰:
以ISO鏡像光盤為例,將鏡像文件導入虛擬機光驅,并開啟連接;
掛載后,查看文件:密鑰文件
RPM-GPG-KEY-CentOS-7
對于CentOS發行版來說:
獲取并導入信任的包制作者的密鑰(公鑰):
導入密鑰文件:
例如:
]# rpm --import /media/RPM-GPG-KEY-CentOS-7
對于光盤會自帶密鑰,再安裝rpm包程序時,不會顯示no key了。
驗證:
(1)安裝此組織的簽名的程序時,會自動執行驗證(導入密鑰文件后,再安裝rpm包時會自動驗證);
(2)手動驗證:rpm -K PACKAGE_FILE
例如:
]# rpm -K /media/Packages/zsh-5.0.2-7.el7.x86_64.rpm
數字簽名(單向加密):采用非對稱加密,一對秘鑰(公鑰,私鑰),用私鑰加密對應數據的特征碼(加密程序包的校驗碼),用公鑰解密;從而實現來源合法性驗證和完整性驗證的目的;
加密:
第一步:程序包制作者首先用單向加密,計算出程序包的特征碼(校驗碼)出來,是定長輸出,
第二步:然后再用自己的私鑰來加密這個特征碼,這叫數字簽名,并且把加密后的特征碼附加在程序包后面;
解密:
第一步:首先用程序包制作者的公鑰解密特征碼后,如果能解密則認為完成來源合法性驗證;
第二步:然后,用同樣的單向加密算法對程序包進行單向加密計算出一個特征碼,用計算得出的特征碼與解密的特征碼比較,相同則完整性校驗成功,不同則完整性校驗失敗;
注意:要確保獲得安全的公鑰!
rpm包數據庫維護:
rpm包數據庫位置:/var/lib/rpm
查詢操作(包括安裝、升級、卸載、查詢):都是通過此處的數據庫進行的;
獲取重建幫助:
CentOS6:man rpm
CentOS7:man rpmdb
重建:
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可實現初始化創建一個新的,當前有時不執行任何操作;如果事先不存在數據庫,則新建,否則,不執行任何操作;
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;無論當前是否存在,直接重新創建數據庫;
總結
- 上一篇: 深度学习(32)随机梯度下降十: 手写数
- 下一篇: 深度学习(33)随机梯度下降十一: Te