1、RPM包中檔案的提取
為什麼要做這個事呢?
在操作Linux系統的時候誤刪除一個檔案,可以通過強制覆蓋的方法可以把刪除的檔案還原。如果不是誤刪除,我只是修改了檔案中的內容,但是我忘記原始檔內容是什麼,我修改不回來了。這個時候強制安裝覆蓋(--force
選項)就解決不了問題了。因為強制安裝覆蓋,並不會對現已存在的檔案做修改。Linux系統怕軟體的強制安裝覆蓋把你現有的配置清空了。
像上面的情況,我想得到檔案原來的狀態,靠強制安裝覆蓋是行不通的。但你可以把檔案刪除了,在進行強制安裝覆蓋不就還原了,這樣是可以的,但是我們還可以用一種方式來恢復,就是下面講的RPM包中檔案的提取。
提示:
其實在修改重要系統檔案之前,應該先把檔案做一下備份處理。
[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
然而你忘記了備份,然後檔案你修改錯誤了,無法還原了,而且這個檔案還不能刪除。這種情況下,就需要使用RPM包的檔案提取了。
RPM包中檔案的提取,其實就是直接從RPM包中提取一個或者幾個我需要的檔案。
2、在RPM包中提取檔案的操作
(1)cpio命令介紹
cpio
命令主要有三種基本模式:
-o
模式:指的是copy-out
模式,就是把資料備份到檔案庫中;-i
模式:指的是copy-in
模式,就是把資料從檔案庫中恢復;-p
模式:指的是複製模式,就是不把資料備份到cpio
庫中,而是直接複製為其他檔案。
說明:
cpio
命令本來是做備份和還原的,但是這個命令的備份和還原極其不方便。(不推薦用cpio
命令做備份和還原),瞭解一下即可,具體例子也不用說了。- 如果需要從RPM包中提取檔案,只能使用
cpio
命令,因為RPM是二進位制包,需要用到特殊的格式來處理二進位制包,而cpio
命令就符合。 - 換句話總結就是:不推薦用
cpio
命令做備份和還原,還有其他更好的方式。但是可以用來做在RPM包中提取檔案的事情。
注:
cpio
命令做備份和還原例子就不總結了,需要的自己擴充套件,本文直接介紹運用cpio
命令在RPM包中提取檔案的使用。
(2)提取RPM包中檔案
提示:上邊介紹了
cpio
命令,現在就用cpio
命令來提取RPM包中需要的檔案。
[root@localhost ~]# rpm2cpio 包全名|cpio-idv .檔案絕對路徑
rpm2cpio <— 將rpm包轉換為cpio格式的命令
cpio <— 是一個標準工具,它用於建立軟體檔案檔案和從檔案檔案中提取檔案
注意:
上邊命令中的.
,是表示當前目錄,把提取出來的檔案放入當前目錄。如果不寫.
,提取出來的檔案,會直接提取到檔案的安裝目錄中,覆蓋掉原有的配置檔案。這不符合我們的操作習慣,我們的習慣是,把現有的檔案和提取出來的檔案進行比對,看看有什麼不同,然後在確定是否替換,或者修改現有檔案。
1)首先要確定檔案屬於哪個軟體包
還記得-qf
選項嘛,我們就需要這兩個選項,命令如下:
[root@localhost ~]# rpm -qf /etc/httpd/conf/httpd.conf
httpd-2.2.15-53.e16.centosx86-_64.rpm
2)從RPM中提取檔案
[root@localhost ~]# rpm2cpio /mnt/cdrom/packages/httpd-2.2.15-53.e16.centosx86-_64.rpm | cpio -idv ./etc/httpd/conf/httpd.conf
3)注意一下幾點:
/mnt/cdrom/packages/httpd-2.2.15-53.e16.centosx86-_64.rpm
表示RPM包路徑。- RPM包中檔案的路徑和檔案絕對路徑(系統中的檔案路徑)是相等的,一樣的。
./etc/httpd/conf/httpd.conf
表示,當前目錄下有一個/etc/httpd/conf/httpd.conf
檔案。到時候比對httpd.conf
檔案和現有檔案,在決定下一步的操作。
如下圖所示:
可以看到只從RPM包中提取了一個httpd.conf
檔案。
提示:只是知道有這個功能即可,需不需要用看你自己的實際情況。