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命令
做備份和還原),瞭解一下即可,具體例子也不用說了。
如果需s要用rpm包中提取文件,只能使用cpio命令
,因爲rpm是二進制包,需要用到特殊的格式來處理二進制包,而cpio命令
就符合。
換句話總結就是:不推薦用cpio命令
做備份和還原,還有其他更好的方式。但是可以用來做在rpm包中提取文件的事情。
注:cpio命令
做備份和還原例子就不總結了,需要的自己擴展,本文直接介紹運用cpio命令
在rpm包中提取文件的使用。
(2)提取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
注意一下幾點:
-
/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文件。
只是知道有這個功能即可,需不需要用看你自己的實際情況。