centos軟體包管理之rpm的使用

2021-09-02 21:17:05 字數 4024 閱讀 9160

centos使用的二進位制軟體包擴充套件名為 .rpm , 同時rpm也是乙個命令,專門用來安裝,公升級,查詢和解除安裝這些二進位制軟體包.

一,rpm包的命名規則

比如包全名 httpd-2.2.15-15.el6.centos.l.i686.rpm, 分解如下:

httpd------軟體包名

2.2.15-----軟體版本

15---------當前版本的發布次數

el6.centos-適合的linux平台

i686-------適合的硬體平台

其中特別說明一下:

包全名是httpd-2.2.15-15.el6.centos.l.i686.rpm, 但是包名是httpd,記得這個概念,下面會提到.

el6-----el 即 enterprise linux,就是企業級 linux,,由於redhat 的el 已經成了行業標準了,所以一般 el 表示都是 redhat的el, 6 就是指所有的 rhel 6.x 系列版本.

有的包寫的是el6.noarch ,表示適用任何平台,有的沒有寫適合的linux平台,也表示適用任何平台

i686----i386,i486,i686....只要不是x64就是32位的系統用的.

一,rpm包的依賴性

樹形依賴: a依賴於b, b依賴於c,這種情況就要反過來裝,先裝c,再裝b,再裝a

環形依賴: a->b->c->a ,環形依賴時把依賴的包全部準備好,用rpm -ivh a b c 一次性安裝

不好解決的是庫依賴,即報錯 ***x.so is needed by 或者 ***x.so.2 is needed by , 他們並不是乙個rpm包, 而是某個rpm包裡面的乙個函式庫,要想得到這個庫,就得安裝對應的rpm包, 可是我們根本不知道這個庫屬於哪個rpm包, 怎麼解決?

1, 官方給出了乙個可以查詢的**: www.rpmfind.net ,專門根據庫名稱查詢rpm包名稱.

二,rpm包的安裝:

rpm -ivh 包全名

比如 rpm -ivh httpd-2.2.15-15.el6.centos.l.i686.rpm

i 即install ,安裝

v 即verbos, 輸出安裝的詳細資訊,log等

h 即hash,顯示安裝進度

三,rpm包的公升級

rpm -uvh 包全名

-u 即upgrade ,大寫的u, 公升級

四,rpm的解除安裝

rpm -e 包名

注意,解除安裝使用的是包名,不是全名,比如 rpm -e httpd

-e 即 erase

rpm的解除安裝同樣有依賴性, a依賴於b, b依賴於c, 要解除安裝c的話要先解除安裝a和b

五,rpm包的查詢(查詢某軟體是否安裝等)

不論是通過rpm還是yum安裝的, 都可以用rpm命令來查詢已安裝的軟體包.

1,查是否安裝(已知包名)

rpm -q 包名

q 即query ,查詢

如 rpm -q httpd

2,如果不知道包名呢?

rpm -qa | grep 關鍵字

a 即 all ,表示查詢所有已安裝的軟體包名,然後用管道過濾下

3,查詢已安裝包的版本,發行日期,安裝日期等詳細資訊?

rpm -qi 包名

i 即infomation

比如 rpm -qi httpd

4,查詢未安裝包的詳細資訊呢?

rpm -qip 包全名

p 即 package

由於還未安裝,所以加上-p引數後要用包全名進行查詢

5,查詢已安裝包中各個檔案被安裝到了哪個目錄

rpm -ql 包名

如 rpm -ql httpd

l 即 list

會列出包中每乙個檔案安裝後的絕對路徑.

6,查未安裝軟體包將要被安裝到哪個目錄.

每個rpm包的安裝位置其實是在別人打包時就指定好了的,所以安裝前和安裝後都能查詢.

rpm -qlp 包全名

如 rp -qlp httpd-2.2.15-15.el6.centos.l.i686.rpm

p 即 package

7,反查某個檔案屬於哪個包

注意這個檔案必須是包安裝時產生的,而不是這個包執行時產生的日誌檔案等,比如想知道httpd這個命令屬於哪個包,或者/var/www/incons/tar.png 這個屬於哪個包(httpd-2.2.15-15.el6.centos.l.i686.rpm安裝後會有這個檔案)都是可以查的,但是httpd在執行時產生的日誌檔案,我們不能根據它產生的日誌檔案反查包,因為這個日誌檔案不屬於這個包.

rpm -qf 檔案絕對路徑及名稱

如 rpm -qf /var/www/incons/tar.png

執行後會顯示包全名httpd-2.2.15-15.el6.centos.l.i686.rpm

如 rpm -qf /etc/yum.conf

執行後會顯示包全名yum3.2.29-30.el6.centos.noarch

8,查依賴性

在安裝之前或安裝後我們都可以查這個包的依賴性

如果安裝之前查詢依賴:

rpm -qrp 包全名

如 rpm -qrp httpd-2.2.15-15.el6.centos.l.i686.rpm

r 即requires ,大寫的

p 即package

如果安裝後查詢依賴

rpm -qr 包名

如 rpm -qr httpd

六, rpm包檔案校驗

比如httpd安裝好了後,某個檔案被其他人修改或者刪除了,我想知道是哪個檔案被改或刪了.

rpm -v 已安裝的包名

-v 即verify

比如rpm -v httpd

如果執行後沒有任何輸出,說明該包安裝後,任何檔案都沒有變化

如果輸出有內容,說明有檔案被修改或刪除等, 具體的是修改還是刪除呢?

可以了解下輸出的第一列有8個項,代表8種含義,有值的表示此項有變化,如果是點表示此項未變化,此8項資訊一次是:

s 檔案大小是否變化

m 檔案型別或許可權變化

5 md5校驗變化,證明檔案內容被修改

d 從**是否改變

l 檔案的路徑變化

u 檔案所有者變化

g 檔案的所屬組變化

t 修改時間變化

七, 從rpm包中提取檔案

假設某個檔案被改的面目全非想還原,某個檔案誤刪想恢復,都可以從rpm包直接提取出這個檔案

rpm2cpio 包全名 | cpio -idv .要提取的檔案路徑和名稱

rpm2cpio-----是乙個包格式轉換命令,將rpm格式的包轉換成cpio格式

轉換成cpio格式之後傳送給管道,再用cpio命令處理,cpio的引數 -idv 解釋如下:

-i cppy-in 模式,還原

-d 還原時自動新建目錄

-v 顯示還原過程

cpio-------是乙個標準工具,用於建立軟體檔案檔案和從檔案檔案中提取檔案

注意: 提取的檔案路徑前面有個點,表示提取到當前目錄, 假設你在 /home目錄下執行從mmm.rpm包中提取/usr/local/xx.conf 的檔案,命令如下:

rpm2cpio mmm.rpm | cpio -idv ./usr/local/xx.png

執行後,會產生乙個/home/usr/local/xx.png的檔案, 即在當前目錄(/home)下自動建立新的目錄/usr/local 並且還原xx.png這個檔案

假設我們把ls這個命令誤刪除了,想要恢復這個命令,過程如下:

1,你首先得知道ls這個命令屬於哪個包,所以在別的機器上反查一下包全名

rpm -qf /bin/ls

查出包全名為coreutils-8.4-19.el6.i686.rpm

3,還原,執行命令如下,假設是在/opt目錄下執行的:

rpm2cpio coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls

那麼會產生乙個 /opt/bin/ls 的檔案

4,將提取的檔案移動到真正的目錄中

mv /opt/bin/ls /bin/ls

RPM軟體包管理

大多數開源軟體都是以源 形式發布的,源 形式程式安裝流程一般如下 configure 檢查編譯環境 相關庫檔案以及配置引數並生成makefile make 將源 編譯為可執行檔案 make install 安裝編譯好的可執行檔案 rpm redhat package manager 是為了方便軟體管...

RPM軟體包管理

源 形式的缺點 操作複雜 編譯時間較長 極容易出現錯誤 源 形式的優點 適用所有系統 可定製 為了方便適用,erik troan和marc ewing開發了rpm redhat package manager rpm通過將源 基於特定平台系統編譯為可執行檔案,並儲存依賴關係,來簡化開源軟體的安裝管理...

RPM軟體包管理

rpm包 red hat package manager 本意是red hat 軟體包管理,二進位製包 binary 以及源 包 source 兩種。原始碼包 原始碼包的優點是 開源,如果有足夠的能力,可以修改源 可以自由選擇所需的功能 軟體是編譯安裝,所以更加適合自己的系統 更加穩定也效率更高 解...