rpm包管理
由于 RPM 是透過預先編譯打包成為 RPM 文件格式后,再加以安裝的一種方式,還能夠進行數據庫的記載。 所以 RPM 有以下的優點:
RPM 內含已經編譯過的程序與配置文件等數據,可以讓用戶免除重新編譯的困擾;
RPM 在被安裝前,會先檢查系統的硬盤容量、操作系統版本等,可避免檔案被錯誤安裝;
RPM 檔案本身提供軟件版本信息、相依屬性軟件名稱、軟件用途說明、軟件所含檔案等信息,便于了解軟件;
RPM 管理的方式使用數據庫記錄 RPM 檔案的相關參數,便于升級、移除、查詢和驗證。
在CentOS系統上使用rpm命令管理程序包無外乎:安裝、升級、卸載、查詢、校驗、數據庫維護。
安裝
語法:rpm {-i|–install} [install-options] PACKAGE_FILE…
一般選項:
-
-i :install的意思
-
-v : verbose
-
-vv : 查看更完整的安裝信息畫面
-
-h : 以安裝信息欄顯示安裝進度,以#顯示程序包管理執行進度
常用:rpm -ivh 包文件名(可以多個用空格分開,也可以直接從網絡上安裝)
普通用法 [root@localhost Packages]# rpm -ivh tree-1.6.0-10.el7.x86_64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:tree-1.6.0-10.el7 ################################# [100%] 從網上直接安裝 [root@www ~]# rpm -ivh http://website.name/path/pkgname.rpm
其它選項:
–test: 測試安裝,但不真正執行安裝;dry run模式
–nodeps:忽略依賴關系
–replacepkgs | replacefiles
–nosignature: 不檢查來源合法性
–nodigest:不檢查包完整性
–noscripts:不執行程序包腳本
%pre: 安裝前腳本; –nopre
%post: 安裝后腳本; –nopost
%preun: 卸載前腳本; –nopreun
%postun: 卸載后腳本; –nopostun
升級
語法1:rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
語法2:{-F|–freshen} [install-options] PACKAGE_FILE…
**rpm -Uvh PACKAGE_FILE …
rpm -Fvh PACKAGE_FILE …
而外的選項:
–oldpackage:降級
–force: 強行升級
注意:
(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核
(2) 如果原程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
查詢
語法:rpm {-q|–query} [select-options] [query-options]
如果軟件包未安裝要查詢的話用 -qp選項
查詢已安裝軟件的信息參數:
-
-q :僅查詢,后面接的軟件名稱是否有安裝;
-
-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟件名稱;
-
-qi :列出該軟件的詳細信息 (information),包開發商、版本說明等;
-
-ql :列出該軟件所有的安裝后生成的文件所在完整文件名 (list);
-
-qc :列出該軟件的所有配置文件 (找出在 /etc/ 底下對應的文件名而已)
-
-qd :列出該軟件的所有說明文件文檔 (找出與 man 有關的檔案而已)
-
-qR :列出不該軟件有關的相依軟件所屬的檔案 (Required 的意思)
-
-qf :由后面接的文件名,查看指定的文件由哪個程序包安裝生成;
-
-q –whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供
-
-q –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
-
-q –changelog:查詢rpm包的changelog(更新日志)
-
–provides: 列出指定程序包所提供的CAPABILITY(功能);
查詢某個 RPM 檔案內含有的信息:
-
-qp [ icdlR ]:注意 -qp 后面接的所有參數以上面的說明一致。但用途僅在于找出某個 RPM 檔案內的信息,而非已安裝的軟件信息!注意!
rpm -qa |grep "" 用法
一般常用用法:
查看以tr開頭的已安裝文件 [root@localhost Packages]# rpm -qa |grep "^tr" trousers-0.3.13-1.el7.x86_64 tree-1.6.0-10.el7.x86_64 tracker-1.2.6-3.el7.x86_64 traceroute-2.0.19-5.el7.x86_64 查看是否安裝某個文件包 [root@localhost Packages]# rpm -q gcc gcc-4.8.5-4.el7.x86_64 查看程序的配置文件 [root@localhost Packages]# rpm -qc bash /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc 若要成功安裝某程序包需要的文件 [root@localhost Packages]# rpm -qR tree libc.so.6()(64bit) libc.so.6(GLIBC_2.14)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) 查看某文件屬于哪個軟件 [root@localhost Packages]# rpm -qf /etc/passwd setup-2.8.71-6.el7.noarch 方法適用于誤刪了某個文件恢復時用到
卸載:
語法:rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME ..
一般: 我們直接 rpm -e 包名 就可以卸載了
普通校驗
含義
作用的方式是『使用 /var/lib/rpm 底下的數據庫內容來比對目前Linux 系統的環境下的所有軟件檔案 』用這個簡單的方法來驗證一下原本的文件系統吧!好讓你了解這一陣子到底是修改到哪些檔案數據了!
選項:
-
-V :后面加的是軟件名稱,若該軟件所噸的檔案被更改過,才會列出來;
-
-Va :列出目前系統上面所有可能被更改過的檔案;
-
-Vp :后面加的是文件名,列出該軟件內可能被更改過的檔案;
-
-Vf :列出某個檔案是否被更改過~
結果說明:
S :(file Size differs) 檔案的容量大小是否被改變
M :(Mode differs) 檔案的類型戒檔案的屬性 (rwx) 是否被改變?如是否可執行等參數已被改變
5 :(MD5 sum differs) MD5 這一種挃紋碼的內容已經丌同
D :(Device major/minor number mis-match) 裝置的主/次代碼已經改變
L :(readLink(2) path mis-match) Link 路徑已被改變
U :(User ownership differs) 檔案的所屬人已被改變
G :(Group ownership differs) 檔案的所屬群組已被改變
T :(mTime differs) 檔案的建立時間已被改變
數字簽名校驗
WHY:*rpm -V 驗證只能驗證軟件內的信息不 /var/lib/rpm/ 里面的數據庫信息而已,如果該軟件檔案所提供的數據本身就有問題,我們可以透過數字簽名來檢驗軟件的來源的!
包來源合法性驗正及完整性驗正:
完整性驗正:SHA256
來源合法性驗正:RSA
公鑰加密:
對稱加密:加密、解密使用同一密鑰;
非對稱加密:密鑰是成對兒的
public key: 公鑰,公開所有人
secret key: 私鑰, 不能公開
安裝一個 RPM 檔案時*:
-
首先你必須要先安裝原廠釋出的公鑰檔案;
-
實際安裝原廠的 RPM 軟件時, rpm 指令會去讀取 RPM 檔案的簽章信息,與本機系統內的簽章信息比對,
-
若簽章相同則予以安裝,若找不到相關的簽章信息時,則給予警告并停止安裝喔。
CentOS 7 的數字簽名位于 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
(其他centos版本把最后數字改一下就是了)
由于不同版本 GPG 密鑰檔案放置的位置可能不同,不過檔名大多是以 GPG-KEY 來說明的, 因此你可以簡單的使用 locate 或 find、
來找尋,如以下的方式來搜尋即可:
[root@www ~]# locate GPG-KEY
[root@www ~]# find /etc -name 'GPG-KEY'
導入所需要公鑰:
rpm -K |checksig rpmfile 檢查包的完整性和簽名
rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7
密鑰的內容基本上都是使用 pubkey 作為軟件的名稱的,查看方法
[root@www ~]# rpm -qa | grep pubkey —–先列出密鑰軟件名稱
gpg-pubkey-e8562897-459f07a4
[root@www ~]# rpm -qi gpg-pubkey-e8562897-459f07a4 ————-再以 -qi 的方式來查詢看看該軟件的信息
rpm數據庫 : /var/lib/rpm
數據庫重建:
語法: rpm {–initdb|–rebuilddb}
-
–initdb: 初始化
如果事先不存在數據庫,則新建之,否則,不執行任何操作 -
–rebuilddb:重建已安裝的包頭的數據庫索引目錄(更少)
注意:破壞庫是不能恢復的雖然有命令可以重建但里面的數據就沒了!?。〔荒苓@么做?。。?/h3>

雖然用 –initdb 能恢復目錄 但也丟失了數據,用 –rebuilddb 過恢復的更少! 所以不能刪庫??!
其他
rpm2cpio 包文件|cpio –itv 預覽包內文件
rpm2cpio 包文件|cpio –id “ *.conf ” 釋放包內文件
如果rpm軟件被誤刪除,也可以這么安裝
雖然用 –initdb 能恢復目錄 但也丟失了數據,用 –rebuilddb 過恢復的更少! 所以不能刪庫??!
原創文章,作者:qzx,如若轉載,請注明出處:http://www.www58058.com/37780
文章總結的很全面,rpm管理工具中的查詢語句是常用的操作需要重復練習,熟練掌握。