7.6 Linux提取RPM包

      網友投稿 860 2025-04-02

      在講解如何從 RPM 包中提取文件之前,先來系統學習一下 cpio 命令。

      cpio 命令用于從歸檔包中存入和讀取文件,換句話說,cpio 命令可以從歸檔包中提取文件(或目錄),也可以將文件(或目錄)復制到歸檔包中。

      歸檔包,也可稱為文件庫,其實就是 cpio 或 tar 格式的文件,該文件中包含其他文件以及一些相關信息(文件名、訪問權限等)。歸檔包既可以是磁盤中的文件,也可以是磁帶或管道。

      cpio 命令可以看做是備份或還原命令,因為它可以將數據(文件)備份到 cpio 歸檔庫,也可以利用 cpio 文檔庫對數據進行恢復。

      使用 cpio 命令備份或恢復數據,需注意以下幾點:

      使用 cpio 備份數據時如果使用的是絕對路徑,那么還原數據時會自動恢復到絕對路徑下;同理,如果備份數據使用的是相對路徑,那么數據會還原到相對路徑下。

      cpio 命令無法自行指定備份(或還原)的文件,需要目標文件(或目錄)的完整路徑才能成功讀取,因此此命令常與 find 命令配合使用。

      cpio 命令恢復數據時不會自動覆蓋同名文件,也不會創建目錄(直接解壓到當前文件夾)。

      cpio 命令主要有以下 3 種基本模式:

      “-o” 模式:指的是 copy-out 模式,就是把數據備份到文件庫中,命令格式如下:

      [root@localhost ~]# cpio -o[vcB] > [文件丨設備]

      各選項含義如下:

      -o:copy-out模式,備份;

      7.6 Linux提取RPM包

      -v:顯示備份過程;

      -c:使用較新的portable format存儲方式;

      -B:設定輸入/輸出塊為 5120Bytes,而不是模式的 512Bytes;

      比如,使用 cpio 備份數據的命令如下:

      [root@localhost ~]#find /etc -print | cpio -ocvB > /root/etc.cpio \#利用find命令指定要備份/etc/目錄,使用>導出到etc.cpio文件 [root@localhost ~]# II -h etc.cpio -rw--r--r--.1 root root 21M 6月5 12:29 etc.cpio \#etc.cpio文件生成

      “-i” 模式:指的是 copy-in 模式,就是把數據從文件庫中恢復,命令格式如下:

      [root@localhost ~]# cpio -i[vcdu] < [文件|設備]

      各選項的含義為:

      -i:copy-in 模式,還原;

      -v:顯示還原過程;

      -c:較新的 portable format 存儲方式;

      -d:還原時自動新建目錄;

      -u:自動使用較新的文件覆蓋較舊的文件;

      比如,使用 cpio 恢復之前備份的數據,命令如下:

      [root@localhost ~]# cpio -idvcu < /root/etc.cpio \#還原etc的備份 \#如果大家査看一下當前目錄/root/,就會發現沒有生成/etc/目錄。這是因為備份時/etc/目錄使用的是絕對路徑,所以數據直接恢復到/etc/系統目錄中,而沒有生成在/root/etc/目錄中

      “-p” 模式:指的是復制模式,使用 -p 模式可以從某個目錄讀取所有文件,但并不將其備份到 cpio 庫中,而是直接復制為其他文件。

      例如,使用 -p 將 /boot/ 復制到 /test/boot 目錄中可以執行如下命令:

      [root@localhost ~]# cd /tmp/ \#進入/tmp/目錄 [root@localhost tmp]#rm -rf* \#刪除/tmp/目錄中的所有數據 [root@localhost tmp]# mkdir test \#建立備份目錄 [root@localhost tmp]# find /boot/ -print | cpio -p /tmp/test \#備份/boot/目錄到/tmp/test/目錄中 [root@localhost tmp]# ls test/boot \#在/tmp/test/目錄中備份出了/boot/目錄

      使用 cpio 命令提取 RPM 包中指定文件

      在服務器使用過程,如果系統文件被誤修改或誤刪除,可以考慮使用 cpio 命令提取出原 RPM 包中所需的系統文件,從而修復被誤操作的源文件。

      RPM 包允許逐個提取包中文件,使用的命令格式如下:

      [root@localhost ~]# rpm2cpio 包全名|cpio -idv .文件絕對路徑

      該命令中,rpm2cpio 就是將 RPM 包轉換為 cpio 格式的命令,通過 cpio 命令即可從 cpio 文件庫中提取出指定文件。

      舉個例子,假設我們不小心把 /bin/ls 命令刪除了,通常有以下 2 種方式修復:

      將 coreutils-8.4-19.el6.i686 包(包含 ls 命令的 RPM 包)通過 -force 選項再安裝一遍;

      使用 cpio 命令從 coreutils-8.4-19.el6.i686 包中提取出 /bin/ls 文件,然后將其復制到相應位置;

      這里我們選擇第 2 種方式。有讀者可能會問,如何知道 ls 命令隸屬于那個 RPM 包呢?很簡單,使用 rpm -qf 命令即可,如下所示:

      [root@localhost ~]# rpm -qf /bin/ls coreutils-8.4-19.el6.i686 \#查看ls文件屬于哪個軟件包

      在此基礎上,我們只需從此 RPM 包使用 cpio 命令提取出 ls 命令文件,然后將其復制到對應位置即可,實現命令如下:

      [root@localhost ~]# mv /bin/ls /root/ \#把/bin/ls命令移動到/root/目錄下,造成誤刪除的假象 [root@localhost ~]# ls -bash: ls: command not found \#這時執行ls命令,系統會報"命令沒有找到"錯誤 [root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm |cpio -idv ./bin/ls \#提取ls命令文件到當前目錄下 [root@localhost ~]# cp /root/bin/ls /bin/ \#把提取出來的ls命令文件復制到/bin/目錄下 [root@localhost ~]#ls anaconda-ks.cfg bin inittab install.log install.log.syslog ls \#可以看到,ls命令又可以正常使用了

      linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:云服務器和域名購買—華為云
      下一篇:Junit5 架構、新特性及基本使用(常用注解與套件執行)
      相關文章
      亚洲AV色无码乱码在线观看 | 亚洲美国产亚洲AV| 久久精品国产亚洲77777| 亚洲精品无码成人片久久| 亚洲国产a级视频| 亚洲国产人成精品| 亚洲日韩在线观看免费视频| 亚洲国产精品激情在线观看| 亚洲精品视频在线看| 亚洲AV无码成人精品区大在线| 国产精品亚洲小说专区| 亚洲国产成人五月综合网| 高清在线亚洲精品国产二区| 亚洲AV之男人的天堂| 亚洲精品无码专区2| 2022中文字字幕久亚洲| 亚洲欧洲精品成人久久曰影片| 亚洲日韩人妻第一页| 国产精品亚洲美女久久久| 77777亚洲午夜久久多人| 亚洲男同帅GAY片在线观看| 亚洲国产精品VA在线看黑人| 亚洲av午夜福利精品一区人妖| 亚洲免费在线视频| 亚洲美女免费视频| 亚洲影视自拍揄拍愉拍| 亚洲色偷偷综合亚洲av78| 亚洲av成人一区二区三区观看在线| 香蕉视频亚洲一级| 国产精品亚洲w码日韩中文| 久久91亚洲人成电影网站| 久久亚洲国产精品| 亚洲电影免费观看| 亚洲男人的天堂久久精品| 亚洲国产成人久久一区二区三区| 亚洲不卡AV影片在线播放| 在线观看亚洲成人| 亚洲国产精品自在线一区二区| 亚洲熟妇av一区| 一本色道久久综合亚洲精品蜜桃冫| 亚洲国产美女精品久久久|