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 兩種。原始碼包 原始碼包的優點是 開源,如果有足夠的能力,可以修改源 可以自由選擇所需的功能 軟體是編譯安裝,所以更加適合自己的系統 更加穩定也效率更高 解...