馬哥學習----李洋個人筆記-----rpm包管理器

包管理器
二進制應用程序的組成部分:
二進制文件、庫文件、配置文件、幫助文件

程序包管理器:不同廠商的程序,包管理器也不同。
debian

deb文件, dpkg包管理器

redhat: rpm文件, rpm包管理器

rpm: Redhat Package Manager

RPM Package Manager

rpm包命名方式:
name-VERSION-release.arch.rpm

例:bash-4.2.46-19.el7.x86_64.rpm
名字bash-主版本號4,小版本(補丁)號.2.46,廠商編號el7.x86_64

包命名和工具

包的分類和拆包
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包

包之間:可能存在依賴關係,甚至循環依賴 解決依賴包管理工具:
yum:rpm包管理器的前端工具
apt-get:deb包管理器前端工具
zypper: suse上的rpm前端管理工具
dnf: Fedora 18+ rpm包管理器前端管理工具

庫文件
查看二進制程序所依賴的庫文件: ldd +命令文件的絕對路徑。,也可以寫作 ldd ‘which 命令’的形式。

管理及查看本機裝載的庫文件:

ldconfig 加載庫文件
/sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑

映射關係位置
配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
緩存文件:/etc/ld.so.cache

包管理器

程序包管理器:
功能:將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現
程序包的安裝、卸載、查詢、升級和校驗等管理操作

包文件組成 (每個包獨有)
RPM包內的文件
RPM的元數據,如名稱,版本,依賴性,描述等
安裝或卸載時運行的腳本

數據庫(公共):/var/lib/rpm
程序包名稱及版本
依賴關係
功能說明
包安裝後生成的各文件路徑及校驗碼信息

rpm包的管理

CentOS系統上使用rpm命令管理程序包:有安裝、卸載、升級、查詢、校驗、數據庫維護這幾種
安裝格式:
rpm {-i|--install主選項} [install-options次選項] PACKAGE_FILE…

-v: 顯示詳細安裝信息

-vv:顯示更詳細的安裝信息

-h: 以#(符號的形式)來顯示程序包管理執行進度

rpm -ivh PACKAGE_FILE ... (最常用的安裝方式,可以當一個固定格式使用)

-e + 文件名 卸載指定的文件,如果該文件只有一個版本的話,無需指定版本號。

rpm的子選項
-i 安裝
--test 僅測試,不安裝 沒什麼意義

--nodeps 忽略依賴性   忽略依賴的庫或文件,強行安裝,能安裝上,但不一定能用。

--replacepkgs 重複安裝已安裝過的包,文件覆蓋,後來裝的覆蓋之前裝的

--replacefiles 將要安裝包的部分文件與其他已安裝的包,如果有衝突,忽略之,繼續安裝。

這樣的安裝可以實現同一軟件有多個版本共存。當中完全相同的文件會被覆蓋。
--noscripts:不執行程序包腳本,這樣做會導致一些軟件出問題,

diff命令 + 文件1 文件2 比較兩個文件的不同之處。

安裝包的升級:格式 rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
升級 -U 如果裝的有舊的,則升級,如果未裝舊的,則安裝新的。 不保留舊版本。
升級 -F 如果裝的有舊的,則升級,如果未裝舊的,不安裝新的。

降級: --oldpackage 已裝新的,再裝舊的,新的被覆蓋。

--force 除了依賴性的無法安裝外,其餘情況強制安裝。 等於--replacepkgs +--replacefiles +--oldpackage 

升級注意項:
(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,對直接安裝新版本內核,儘量不要直接用U,
因爲U在升級過程中,會刪除舊版本,如果升級出錯,會丟失丟版本。儘量用ivh升級內核。
(2) 如果原程序包的配置文件安裝後曾被修改,升級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的
配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留。即:如果新老版本有重複的,則會把新版本的重複
文件重命名爲*.rpmnew,舊版本的保留。新老版本兩種配置文件都會保留

軟件包查詢:
-q 查詢,直接-q+文件名,可顯示指定文件的信息,(安裝與否,版本號等等,如有有個版本則全部顯示)
-qa 查詢安裝的所有包,可以通過通配符或命令查找來選擇性查看
rpm -qa scr*
rpm -qa |grep ^scr

-qf 查詢指定的文件由哪一個rpm包提供(文件用路徑表示)

-qp 指定未安裝的rpm包 格式爲 rpm -q --provides -p +文件的絕對路徑。

-q --provides 軟件包名   查看指定的軟件包提供了哪些能力(包括提供庫,執行程序等等),一般的都是

把版本號之類的報出來。可以使用-a 顯示當前系統中由已安裝過的包提供的所有能力

-q --whatprovides webserver 查看指定的能力由哪一個軟件包提供,也可以查詢文件來自哪個包,格式:

rpm -q ----whatprovides 文件路徑。查看指定文件來自哪個包。

如果丟失了某一文件,知道這個文件路徑後。使用rpm -qf +丟失文件的路徑來查找出,這個文件由哪個包提供,但是不要直接安裝整個包,這將會導致其他的問題出現。將這個包複製一份到其他目錄。再使用 rpm2cpio將查找到的包轉換爲歸檔模式。格式:

rpm2cpio 包文件|cpio –itv 預覽包內文件

rpm2cpio 包文件|cpio –id “*.conf” 釋放包內文件

從釋放的包文件當中,將丟失的文件複製到原來的目錄下,完成修復。

    -q --whatrequires CAPABILITY 查詢指定的CAPABILITY被哪個包所依賴

-qR 軟件包名 查看指定的軟件包依賴哪些能力

-qc 軟件包名 查看指定的軟件包的配置文件   (工作中使用很多的)

-qd 軟件包名 查看指定的軟件包的幫助文檔   (工作中使用很多的)

-ql 軟件包名 查看該軟件包所提供的所有文件 (工作中使用很多的) qpl

-qi 軟件包名 查看指定軟件包的信息         (工作中使用很多的) qpi

-q --scripts 軟件包名 查看指定軟件包的安裝腳本

RPM包的校驗:

-V 查看指定包所提供的文件是否發生過改變,每個包都有自己的初始值,使用-V可以檢查包的值是否發生了變化,只
能查看已安裝的程序包的值,並將發生變動的用下列符號表示:

S file Size differs 文件大小不同

M Mode differs (includes permissions and file type) 模式不同(包括權限和文件類型)。

5 digest (formerly MD5 sum) differs 文件(以前的MD5總和)不同,
每一個文件都有一個自己的MD5值(加密後的值),如果文件被改過,則MD5也會發生變化。

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 包的能力不同。

合法性檢查:文件有兩把鑰匙,公鑰和私鑰。公鑰加密的數據,公鑰沒法解開,只有私鑰纔可以解開。同理,私鑰加
密的數據,私鑰沒法解開,只有公鑰可以。公鑰是每個人都能擁有的。私鑰只有服務端有。舉例a(服務端),b,c三
個人。a需要b發過來的加密數據,先把公鑰給b,b將文件用公鑰加密之後發給a。這時候c把數據截下來了,但是公鑰是
沒法解開公鑰的加密文件的,所以截下來沒什麼用。而a收到這份由公鑰加密的數據後,用私鑰就可以輕鬆解密。

而使用私鑰加密的文件,作用只有一個,檢查這個文件,是否是真正的,由服務端發送過來的,因爲只有服務端纔有
私鑰,而公鑰是每個人都有的。 私鑰加密的文件,只有公鑰纔可以解。

導入所需公鑰:-K 子選項 --nosignature: 不檢查來源合法性 子選項 --nodigest:不檢查包完整性
-K + 完整的rpm文件名 檢查包的完整性和簽名,檢查之前,先檢查機器上是否擁有對應的公鑰。比如centos7的公鑰
是RPM-GPG-KEY-CentOS-7,查找命令 :rpm-qa“gpg-pubkey”可以查看電腦上公鑰是否擁有。如果沒有,則去光盤目
錄下找到 RPM-GPG-KEY-CentOS-7文件並導入。
導入命令:rpm -- import /光盤的絕對路徑/RPM-GPG-KEY-CentOS-7 ,這樣就能用rpm-qa“gpg-pubkey
”查找到了.

如果沒有變動,則所有的項目上都會提示OK字樣。變動就提示 NOT OK.
rpm能檢查出來是否合法,但是-ivh依然會安裝,yum和dnf則會拒絕安裝不合法的軟件.

RPM數據庫:所有安裝的rpm的數據,安裝包的路徑,依賴與那些程序或服務等等都在這裏,如果丟失,則會導致一些命令無
法使用.數據庫丟失之後,使用rpm查詢之類的命令時候,系統將自動重建,但是隻保留重建之後的數據了.

rpmdb 命令用於初始化和重建rpm數據庫。默認數據庫位置:/var/lib/rpm/
--initdb:初始化RPM數據庫;
--rebuilddb:從已安裝的包頭文件,反向重建RPM數據庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章