1. 程式人生 > >軟件包管理 3-----基本知識 rpm yum

軟件包管理 3-----基本知識 rpm yum

第三部分

RPM包管理

每個RPM包都分為兩部分
1文件列表    file list 
2元數據meta  data:文件大小  屬性,描述信息,依賴性,等

查看包帶不帶腳本
rpm -qp --scripts 包名

如果包已經在系統中了
就會在 數據庫(公共):/var/lib/rpm 裏有這個包的信息
比如 程序包名稱及版本
依賴關系
功能說明
包安裝後生成的各文件路徑及效驗碼信息

例如,其中內容大部分是二進制的
技術分享圖片
技術分享圖片
DB 表示數據庫文件
centos7上 用的數據庫是mariadb
mariadb數據庫網站
mariadb.org
3.還有第三方 安裝包的來源
EPEL源
4.還有自己制作安裝包
用到 rpmbuild

Centos系統上使用rpm命令管理程序包:
安裝,卸載,升級,查詢,效驗,數據庫維護

安裝
rpm本身是個外部命令
技術分享圖片
選項很多
rpm{-i|--indtall} [install-options]PACKAGE_FILE
-i , --install 後面根和安裝相關的選項比如
-v:verbose 具體顯示過程
-vv:
-h:以#顯示程序包管理執行進度
交互式安裝 : rpm -ivh PACKAGE_FILE...
靜默安裝 ,如果在腳本中安裝就不用vh了
centos6技術分享圖片
centos7技術分享圖片
還可以跟很多選項
[install-options]
--test: 測試安裝,但不真正執行安裝,即dry run模式

--nodeps:忽略依賴關系
--replacepkgs | replacefiles
--nosignature: 不檢查來源合法性
--nodigest:不檢查包完整性
--noscripts:不執行程序包腳本
%pre: 安裝前腳本; --nopre
%post: 安裝後腳本; --nopost
%preun: 卸載前腳本; --nopreun
%postun: 卸載後腳本; --nopostun
卸載 rpm -e vsftpd -e後面直接跟包名、
技術分享圖片
測試安裝 就是假裝按一會
忽略依賴安裝
技術分享圖片
忽略依賴安裝還是不能用還是得把依賴解決
如果已經安裝的包,但是把文件破壞了一部分就需要強制安裝,因為普通安裝會提示已經安裝了 --replacepkgs
[root@liang Packages 11:01:54]# rpm -ql tree我們可以通過-ql查看tree文件由幾個程序組成tree文件 的文件列表
技術分享圖片
當安裝兩個版本的文件,但是兩個版本的文件的內容有相同的時候我們就要用到--replacefiles
安裝包時都要檢查包的合法性,這個文件在光盤裏
技術分享圖片
這個包叫公鑰,下圖是文件的內容
技術分享圖片
將公鑰文件導入,在安裝包的時候如果是合法的文件,就不會提示
技術分享圖片
rpm包升級
升級
rpm{-U|--upgrade}[install-options]PACKGE_FILE...
rpm{-F|--freshen}[install-options]PACKGE_FILE...
upgrade:安裝有舊的版本程序包。則“升級”
如果不存在舊的版本程序包。則“安裝”
freshen:安裝有舊的版本程序包,則“升級”
如果不存在舊的版本程序包,則“不執行升級操作”

rpm -Uvh PACKAGE_FILE...
rpm -Fvh PACKAGE_FIEL...
--oldpackage: 降級
--force :強制安裝

不建議升級內核,采用安裝的方式,系統默認可以有多個內核版本包,其他軟件包不行
rpm -ql 軟件包名 -ql可以查軟件包的列表
技術分享圖片
安裝新文件不會覆蓋老版本配置文件,但是能覆蓋二進制文件,升級時候,新版本提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)後綴保留
包的查詢
rpm {-q|--query}[select-options][query-options]
[select-options]
-a:所有包
-f:查看指定的文件由哪個程序包安裝生成
-p rpmfile:針對尚未安裝的程序包文件做查詢操作
--whatprovids CAPABILITY:查詢指定的CAPABILITY由哪個包所提供 --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴
rpm2cpio包文件|cpio -itv 預覽包內文件
rpm2cpio包文件|cpio -id “*conf” 釋放包內文件
-q選項後接包名,安裝好的包
無論安裝不安裝都可以用
[root@liang Packages 08:44:49]#rpm -q vsftpd &> /dev/null ||rpm -ivh /misc/cd/Packages/vsftpd-2.2.2-24.el6.x86_64.rpm &> /dev/null
只要把vsftpd換成別的包名就可以了
當我們忘記了以前安裝的包名或只記得大概我們可以用-a選項
rpm -qa 把所有安裝好的包列出來在用grep +關機字把想要的包找出來
rpm -qa |grep vsftp
用-f可以看包來自哪裏,也可以查詢在數據庫 /var/lib/rpm內的
用-p 跟文件名
一上這些都是跟著-q選項的

rpm2cpio 把rpm包轉化成cpio格式的 然後把cpio格式的 用tv選項展開相當於利用cpio格式吧rpm包解開,展現出來。
利用tv選項相當於預覽
技術分享圖片
如果這時我們把/usr/bin/tree刪除
技術分享圖片
也可以用dv把cpio格式解開。默認解壓到當前目錄下
技術分享圖片
然後我們再把解開的文件移動會原來的目錄
技術分享圖片
這樣就是變相的回復tree 這個程序
但是 ,但是,但是
這樣回復是錯誤的 有可能回復過去的屬性是錯誤的,權限啊,所屬組,所屬者是錯誤的
可能會帶來潛在的問題
包的查詢還有別的選項
--changelog:查詢rpm包的changelog 更改日誌
-c:查詢程序的文檔 只看配置文件 -qc
-i:information 信息 -qi
-l:查看指定的程序包安裝後生成的所有文件 -ql
--scripts:程序包自帶的腳本
--provides:列出指定程序包所提供的CAPABILITY capability 性能,能力
-R:查詢指定的程序包所依賴的包CAPABILITY
常見的組合
-qi PACKAGE ,-qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
-qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ....
包卸載
rpm {-e|--erase}[--allmatches][--nodeps][--noscript][--notriggers][--test]PACKAGE_NAME...
--allmatches 所有的匹配
--nodeps 忽略依賴性
--noscript 忽略腳本的運行
--notriggers 忽略觸發器
--test 測試 卸載的時候測試一下
PACKAGE_NAME 包名
每個文件安裝完都會跟新數據庫 /var/lib/rpm
-V:比較安裝後的文件和數據庫裏的有什麽不同從而查看文件是否被修改
rpm -V 文件名

技術分享圖片
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
U User ownership differs
G Group ownership differs
T mTime differs
P capabilities differ
也可以用-Va 查詢所有的安裝的包的元數據的變化

軟件包管理 3-----基本知識 rpm yum