描述:
RPM是RedHatPackageManager的縮寫,是由RedHat公司開發的軟件包安裝和管理程序,同Windows平臺上的Uninstaller比較類似。使用RPM,用戶可以自行安裝和管理Linux上的應用程序和系統工具。RPM可以讓用戶直接以binary方式安裝軟件包,并且可替用戶查詢是否已經安裝了有關的庫文件;在用RPM刪除程序時,它又會聰明地詢問用戶是否要刪除有關的程序。如果使用RPM來升級軟件,RPM會保留原先的配置文件,這樣用戶就不用重新配置新的軟件了。RPM保留一個數據庫,這個數據庫中包含了所有的軟件包的資料,通過這個數據庫,用戶可以進行軟件包的查詢.
功能:
1、可以安裝、刪除、升級和管理軟件;當然也支持在線安裝和升級軟件;
2、通過RPM包管理能知道軟件包包含哪些文件,也能知道系統中的某個文件屬于哪個軟件包;
3、可以在查詢系統中的軟件包是否安裝以及其版本;
4、作為開發者可以把自己的程序打包為RPM 包發布;
5、軟件包簽名GPG和MD5的導入、驗證和簽名發布
6、依賴性的檢查,查看是否有軟件包由于不兼容而擾亂了系統;
使用權限:
RPM軟件的安裝、刪除、更新只有root權限才能使用;對于查詢功能任何用戶都可以操作;如果普通用戶擁有安裝目錄的權限,也可以進行安裝
包命名格式:
源碼包: name-VERSION.tar.gz|bz2|xz
VERSION: major.minor.release
rpm包:name-version-arch.rpm | name-version-arch.src.rpm
特殊標記:
1、fcXX,elXX:表示這個軟件包的發行商版本,bash-4.2.46-19.e17.x86_64.rpm表示這個軟件包是在RHEL 7.x(Red Hat Enterprise Linux)/CentOS 7.x下使用。
2、devel:表示這個RPM包是軟件的開發包,例如mysql-devel-5.1.52-1.el6_0.1.i686.rpm。
3、noarch:說明這樣的軟件包可以在任何平臺上安裝,不需要特定的硬件平臺。在任何硬件平臺上都可以運行。
庫文件:
查看二進制程序所依賴的庫文件:
ldd /PATH/TO/BINARY_FILE
管理及查看本機裝載的庫文件:
ldconfig
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件
名及文件路徑映射關系
配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件: /etc/ld.so.cache
程序包的來源
管理程序包的方式:
使用包管理器: rpm
使用前端工具: yum, dnf
獲取程序包的途徑:
(1) 系統發版的光盤或官方的服務器;
CentOS鏡像:
https://www.centos.org/download/
http://mirrors.aliyun.com
http://mirrors.sohu.com
http://mirrors.163.com
(2) 項目官方站點
(3) 第三方組織:
Fedora-EPEL:
Extra Packages for Enterprise Linux
Rpmforge:RHEL推薦,包很全
搜索引擎:
http://pkgs.org
http://rpmfind.net
http://rpm.pbone.net
https://sourceforge.net/
(4) 自己制作
注意:檢查其合法性: 來源合法性,程序包的完整性
常用命令組合:
-ivh:安裝顯示安裝進度–install–verbose–hash
-Uvh:升級軟件包–Update;
-qpl:列出RPM軟件包內的文件信息[Query Package list];
-qpi:列出RPM軟件包的描述信息[Query Package install package(s)];
-qf:查找指定文件屬于哪個RPM軟件包[Query File];
-Va:校驗所有的RPM軟件包,查找丟失的文件[View Lost];
-e:刪除包
安裝:
rpm {-i|–install} [install-options] PACKAGE_FILE…
-v: verbose 詳細安裝過程
-h: 以#顯示程序包管理執行進度
rpm -ivh PACKAGE_FILE …
示例:
安裝html軟件包
rpm包安裝
[install-options]
–test: 測試安裝,但不真正執行安裝; dry run模式
–replacepkgs | replacefiles
–nosignature: 不檢查來源合法性,不建議使用該選項
–nodigest:不檢查包完整性,不建議使用該選項
–noscipts:不執行程序包腳本片斷
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
升級:
rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則“安裝”
freshen:安裝有舊版程序包,則“升級”
如果不存在舊版程序包,則不執行升級操作
rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
–oldpackage:降級
–force: 強行升級
升級注意項
(1) 不要對內核做升級操作; Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
包查詢
rpm {-q|–query} [select-options] [query-options] [select-options]
[root@localhost Packages]# rpm -q tree 查詢tree包是否已安裝 tree-1.6.0-10.el7.x86_64
-a: 所有包
-f: 查看指定的文件由哪個程序包安裝生成
[root@localhost Packages]# rpm -qf /usr/share/doc/tree-1.6.0 tree-1.6.0-10.el7.x86_64
-p rpmfile:針對尚未安裝的程序包文件做查詢操作;
–whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
–whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件
包查詢
[query-options]
–changelog:查詢rpm包的changelog
-c: 查詢程序的配置文件
-d: 查詢程序的文檔
-i: information
-l: 查看指定的程序包安裝后生成的所有文件;
–scripts:程序包自帶的腳本片斷
-R: 查詢指定的程序包所依賴的CAPABILITY;
–provides: 列出指定程序包所提供的CAPABILITY;
包查詢
查詢用法:
-qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE,-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, …-qa
卸載:
rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [-test]PACKAGE_NAME
包校驗
rpm {-V|–verify} [select-options] [verify-options]
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 Link路徑改變
U User ownership differs 文件的所有者是否改變
G Group ownership differs 文件的所屬組是否改變
T mTime differs 文件的創建時間是否改變
P capabilities differ
包校驗
包來源合法性驗正及完整性驗正:
完整性驗正: SHA256
來源合法性驗正: RSA
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
導入所需要公鑰:
rpm -K|checksig rpmfile 檢查包的完整性和簽名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供: RPM-GPG-KEY-CentOS-7
rpm -qa gpg-pubkey*
rpm數據庫
數據庫重建:
/var/lib/rpm
rpm {–initdb|–rebuilddb}
initdb: 初始化 如果事先不存在數據庫,則新建之否則,不執行任何操作
rebuilddb:重建 無論當前存在與否,直接重新創建數據庫
總結:
一、刪除rpm包后利用本地光盤恢復rpm包的實驗的步驟:(以CentOS 7為例,CentOS 6的方法類似)
1,rpm -e rpm –nodeps (在執行此操作前先做快照);reboot
2,光盤啟動,進入救援模式
Centos 6
df
mkdir /mnt/cdrom
mount /dev/sr0 /mnt/cdrom (執行此操作前確保光盤處于正在使用狀態)
Cenots 7
3, df (查看光盤是否掛載)
4,rpm -ivh /run/../Package/rpm-4…*.rpm –root=/mnt/sysimage
5,reboot
1,rpm解決不了軟件包之間的依賴性
2,常用組合選項:
-ivh:安裝顯示安裝進度–install–verbose–hash
-Uvh:升級軟件包–Update;
-qpl:列出RPM軟件包內的文件信息[Query Package list];
-qpi:列出RPM軟件包的描述信息[Query Package install package(s)];
-qf:查找指定文件屬于哪個RPM軟件包[Query File];
-Va:校驗所有的RPM軟件包,查找丟失的文件[View Lost];
-e:刪除包
3,常用參數:
Install/Upgrade/Erase options:
-i, –install install package(s)
-v, –verbose provide more detailed output
-h, –hash print hash marks as package installs (good with -v)
-e, –erase erase (uninstall) package
-U, –upgrade=+ upgrade package(s)
--replacepkge 無論軟件包是否已被安裝,都強行安裝軟件包
–test 安裝測試,并不實際安裝
–nodeps 忽略軟件包的依賴關系強行安裝
–force 忽略軟件包及文件的沖突
Query options (with -q or –query):
-a, –all query/verify all packages
-p, –package query/verify a package file
-l, –list list files in package
-d, –docfiles list all documentation files
-f, –file query/verify package(s) owning file
作業:
1,刪除kernel包后,無法啟動,并恢復之 (CentOS 7為例)
原創文章,作者:pingsky,如若轉載,請注明出處:http://www.www58058.com/41229