liunx軟件安裝—軟件包管理—rpm命令管理—校驗和文件提取

一、校驗和文件提取

1.RPM包校驗

首先要明確什麼是校驗?它有什麼用?
RPM包校驗就把RPM包裝完之後,先把它的特徵記錄下來,然後放我需要的時候把現在的這個文件和原先的文件進行比較,看這兩個文件有什麼變化,從而判斷現在的文件是否做了修改,如果修改時本人做的,這個就沒有問題,那個修改不是本人做的,莫名其妙發生了修改,說明最起碼這個文件在我不知道的情況下有人對他做了修改,我們主要用檢驗的方式來判斷我們的系統文件是否被人進行了更改。
命令:rpm -V 已安裝的包名
選項:-V 校驗指定RPM包種的文件(verify)
開始進行實驗:以apache安裝包爲例
(1)看一下有包文件有沒有被人修改過
在這裏插入圖片描述
(2)查詢一下apache包中文件的安裝位置,然後進行配置文件的修改,來感受一下校驗的功能。
在這裏插入圖片描述
(3)進入配置文件,在402行添加index.php,把他變成默認文件名。保存退出。
在這裏插入圖片描述
(4)這次我們再一次校驗apache包,看一下有什麼變化。
在這裏插入圖片描述
這個S.5…T. 證明我的apache包做了哪些修改
這個c 標稱這個文件的類型
這個 /etc/httpd/conf/httpd.conf 內容代表這個httpd包中此文件做了修改
乾貨來了:
先來看一下修改標誌所代表的含義:默認8個字符,如果有字母代表相應的命令下做了修改,如果沒有字母,代表這些項是沒有修改的。

內容 含義
S 文件大小是否改變
M 文件的類型或文件的權限(rwx)是否被改變
5 文件MD5校驗和是否改變(可以看成文件內容是否改變)
D 設備的主從代碼是否改變
L 文件路徑是否改變
U 文件的屬主(所有者是否改變)
G 文件的屬組是否改變
T 文件的修改時間是否改變

備註: MD5是一種加密方式在互聯網中經常用MD5進行文件的完整性驗證。舉個栗子: 下載一個遊戲,訪問了遊戲的官網,在官網上就會有遊戲的客戶端MD5校驗值。把遊戲下載過來,把下載的文件在進行一遍MD5校驗,這種校驗工具非常多,最常見的有winMD5這個工具,校驗之後也會產生一個校驗值,這個校驗值和網上的比較,如果兩個值一致,那麼說明我下載的內容和網上提供 的一樣,如果值不一樣,證明最起碼我下的數據不完整,有可能丟包,也有可能被別人篡改。這個MD5最基本的用法是文件的完整性。RPM包的MD5作用主要是文件內容是否變化。
文件類型:

內容 含義
c 配置文件(config file)
d 普通文件(documentation)
g “鬼文件”(ghost file),很少見,就是該文件不應該被這個RPM包包含
l 授權文件(license file)
r 描述文件(read me)

備註: 剛做實驗的那個c代表這個文件httpd.conf是配置文件。如果出現了鬼文件,說明這個文件有問題需要認真對待。

2.RPM包中文件提取

從RPM包當中,不把整個RPM包當中的所有文件都提取出來,只提取RPM包文件某一個指定文件。爲什麼要這樣做那?也就是在什麼情況下這樣做。比如做了誤操作,把系統的重要文件給誤刪了,有可能是命令,有可能是重要的配置文件。這個時候,我們不需要把這個Linux重裝一遍,只要知道這個文件屬於哪個軟件包,在指定的RPM當中,取出這個指定文件,覆蓋就可以修復這樣的錯誤。作用:提取文件的功能主要用來進行這樣的修復,最常見的就是誤操作刪除了某一個命令。
命令: rpm2cpio 包全名 | \ cpio -idv .文件絕對路徑         “ \“是換行符,以爲命令太長了,需要換行輸入,沒有其他意義。
功能: 先將rpm格式轉化爲cpio格式,然後再用cpio命令在rpm包中提取指定文件(根據文件的絕對路徑進行查找),然後再將文件放在當前當前目錄下。
含義:
1.2的意思是to 因爲two跟to的發音一樣所以用2代替,從什麼格式轉化爲什麼格式,只有把rpm格式轉換成cpio格式才能用cpio命令把包中的指定文件提取出來。 2.rpm2cpio //將rpm包轉換爲cpio格式的命令
3.cpio //是一個標準工具,它用於創建軟件檔案文件和從檔案文件中提取文件
4.cpio命令的標準格式是這樣的:命令:cpio 選項<[文件|設備]
選項:-i:copy-in模式,還原(從文件中提取數據)
          -d:還原時自動新建目錄
          -v:顯示還原過程
          “<” 輸入重定向,從指定的文件和設備中提取數據,但在 rpm2cpio 包全名 | cpio -idv .文件絕對路徑 這條命令中不需要手工指定重定向,因爲cpio所提取的對象是rpm2cpio 包全名所輸出的內容。
5. . 代表將指定文件提取到當前目錄下
舉個栗子:

rpm -qf /bin/ls         //查詢ls屬於哪個安裝包
mv /bin/ls /tmp          //造成命令誤刪除假象
rpm2cpio /mnt/cdrom/Packages/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls   //提取RPM包中ls命令到當前目錄的/bin/lscp /root/bin/ls /bin/    //ls命令複製到/bin/目錄下,修復文件丟失

小提示: 如果你把ls命令刪除了,這個命令/rpm -qf /bin/ls 就不能用了,那如何知道這個命令在哪個包中那。可以百度,rpm的find網站,在其他相同版本的Linux來查等等。注意 ls所在的絕對路徑也要查一下,以防出錯。可以用whereis ls命令來查詢。
實驗開始:以防萬一,先來個快照。
(1)使ls命令誤刪除,導致ls不能使用
在這裏插入圖片描述
(2)提取RPM包中ls命令到當前目錄的/bin/ls下
在這裏插入圖片描述
(3)將ls放到真正根下/bin/ls當中
在這裏插入圖片描述
在這裏插入圖片描述
小提示: 1. 就是爲什麼在/root下生成/bin/ls?就是我們在用rpm2cpio 包全名 | \ cpio -idv .文件絕對路徑 命令時提取出ls命令文件後,cpio -d 其中的-d:還原時自動新建目錄。所以會在/root下產生/bin目錄,然後ls會自動放在/bin目錄中,然後/bin/ls在保存在當前目錄下(/root)。
2. 其實我們只要把這個ls所在包重新安裝覆蓋一遍也能能解決這個問題,但是我們不需要這樣,更不用重裝系統,只需要用cpio提取指定的文件,然後手工複製到/bin目錄下行了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章