RPM 軟件管理程序: rpm

RPM 的使用其實不難,只要使用 rpm 這個命令即可!我們最好還是得要知道一下,到底 RPM 類型的文件他們是將軟件的相關文件放置在哪裏?還有,我們說的那個 RPM 的數據庫又是放置在哪裏?


--------------------------------------------------------------------------------
1.1 RPM 默認安裝的路徑
一般來說,RPM 類型的文件在安裝的時候,會先去讀取文件內記載的配置參數內容,然後將該數據用來比對 Linux 系統的環境,以找出是否有屬性相依的軟件尚未安裝的問題。例如 Openssh 這個連線軟件需要透過 Openssl 這個加密軟件的幫忙,所以得先安裝 openssl 才能裝 openssh 。那你的環境如果沒有 openssl , 你就無法安裝 openssh 。


若環境檢查合格了,那麼 RPM 文件就開始被安裝到你的 Linux 系統上。安裝完畢後,該軟件相關的信息就會被寫入 /var/lib/rpm/ 目錄下的數據庫文件中了。 上面這個目錄內的數據很重要!因爲未來如果我們有任何軟件升級的需求,版本之間的比較就是來自這個數據庫, 而如果你想要查詢系統已經安裝的軟件,也是從這裏查詢!同時,目前的 RPM 也提供數碼簽章資訊, 這些數碼簽章也是在這個目錄內記錄!所以說,這個目錄得要注意不能被刪除!




那麼軟件內的文件到底是放置到哪裏呢?


/etc 一些配置檔放置的目錄,例如 /etc/crontab 
/usr/bin 一些可運行文件 
/usr/lib 一些程序使用的動態函式庫 
/usr/share/doc 一些基本的軟件使用手冊與說明檔 
/usr/share/man 一些 man page 文件 
--------------------------------------------------------------------------------
1.2 RPM 安裝 (install)
因爲安裝軟件是 root 的工作,因此你得要是 root 的身份才能夠操作 rpm 這命令的。


[root@instructor ~]#  rpm -i rp-pppoe-3.5-32.1.i386.rpm


不過,這樣的參數其實無法顯示安裝的進度,所以,通常我們會這樣下達安裝命令:


[root@instructor ~]#  rpm -ivh package_name
選項與參數:
-i :install 的意思
-v :察看更細部的安裝資訊畫面
-h :以安裝資訊列顯示安裝進度


範例一:安裝 rp-pppoe-3.5-32.1.i386.rpm
[root@instructor ~]#  rpm -ivh rp-pppoe-3.5-32.1.i386.rpm
Preparing...     ####################################### [100%]
   1:rp-pppoe    ####################################### [100%] 




範例二、一口氣安裝兩個以上的軟件時:
[root@instructor ~]#  rpm -ivh a.i386.rpm b.i386.rpm *.rpm
# 後面直接接上更多的軟件文件!




範例三、直接由網絡上面的某個文件安裝,以網址來安裝:
[root@instructor ~]#  rpm -ivh http://website.name/path/pkgname.rpm


另外,如果我們在安裝的過程當中發現問題,或者已經知道會發生的問題, 而還是『執意』要安裝這個軟件時,可以使用如下的參數『強制』安裝上去:


rpm 安裝時常用的選項與參數說明 可下達的選項與代表意義 
--nodeps 使用時機:當發生軟件屬性相依問題而無法安裝。
危險性: 軟件會有相依性的原因是因爲彼此會使用到對方的機制或功能,如果強制安裝而不考慮軟件的屬性相依, 則可能會造成該軟件的無法正常使用! 
--replacefiles 使用時機: 如果在安裝的過程當中出現了『某個文件已經被安裝在你的系統上面』的信息,又或許出現版本不合的信息 (confilcting files) 時,可以使用這個參數來直接覆蓋文件。
危險性: 覆蓋的動作是無法復原的!所以,你必須要很清楚的知道被覆蓋的文件是真的可以被覆蓋! 
--replacepkgs 使用時機: 重新安裝某個已經安裝過的軟件!如果你要安裝一堆 RPM 軟件文件時,可以使用 rpm -ivh *.rpm ,但若某些軟件已經安裝過了, 此時系統會出現『某軟件已安裝』的資訊,導致無法繼續安裝。此時可使用這個選項來重複安裝! 
--force 使用時機:這個參數其實就是 --replacefiles 與 --replacepkgs 的綜合體! 
--test 使用時機: 想要測試一下該軟件是否可以被安裝到使用者的 Linux 環境當中,可找出是否有屬性相依的問題。範例爲:
rpm -ivh pkgname.i386.rpm --test 
--justdb 使用時機: 由於RPM 數據庫破損或者是某些緣故產生錯誤時,可使用這個選項來升級軟件在數據庫內的相關資訊。 
--nosignature 使用時機: 想要略過數碼簽章的檢查時,可以使用這個選項。 
--prefix 新路徑 使用時機: 要將軟件安裝到其他非正規目錄時。舉例來說,你想要將某軟件安裝到 /usr/local 而非正規的 /bin, /etc 等目錄, 就可以使用『 --prefix /usr/local 』來處理了。 
--noscripts 使用時機:不想讓該軟件在安裝過程中自行運行某些系統命令。
說明: RPM 的優點除了可以將文件放置到定位之外,還可以自動運行一些前置作業的命令,例如數據庫的初始化。 如果你不想要讓 RPM 幫你自動運行這一類型的命令,就加上這些選項! 
一般來說,rpm 的安裝選項與參數大約就是這些。建議直接使用 -ivh, 如果安裝的過程中發現問題,一個一個去將問題找出來,儘量不要使用『 暴力安裝法 』,就是透過 --force 去強制安裝! 


在沒有網絡的前提下,你想要安裝一個名爲 pam-devel 的軟件,你手邊只有原版光盤,你可以透過掛載原版光盤來進行數據的查詢與安裝。請將原版光盤放入光驅,底下我們嘗試將光盤掛載到 /media 當中,並據以處理軟件的下載: 
掛載光盤,使用: mount /dev/cdrom /media 
找出文件的實際路徑:find /media -name 'pam-devel*' 
測試此軟件是否具有相依性: rpm -ivh pam-devel... --test 
直接安裝: rpm -ivh pam-devel... 
卸載光盤: umount /dev/cdrom 


--------------------------------------------------------------------------------
  1.3 RPM 升級與升級 (upgrade/freshen)
使用 RPM 來升級真是太簡單了!就用 -Uvh 或 -Fvh 來升級即可,而 -Uvh 與 -Fvh 可以用的選項與參數,跟 install 是一樣的。不過, -U 與 -F 的意義還是不太一樣的,基本的差別是這樣的:
-Uvh 後面接的軟件即使沒有安裝過,則系統將予以直接安裝; 若後面接的軟件有安裝過舊版,則系統自動升級至新版; 
-Fvh 如果後面接的軟件並未安裝到你的 Linux 系統上,則該軟件不會被安裝;亦即只有已安裝至你 Linux 系統內的軟件會被『升級』! 


由上面的說明來看,如果你想要大量的升級系統舊版本的軟件時,使用 -Fvh 則是比較好的作法,因爲沒有安裝的軟件纔不會被不小心安裝進系統中。但是需要注意的是,如果你使用的是 -Fvh ,偏偏你的機器上尚無這一個軟件,那麼很抱歉,該軟件並不會被安裝在你的 Linux 主機上面,所以請重新以 ivh 來安裝吧!


通常有的朋友在進行整個操作系統的舊版軟件修補時,喜歡這麼進行:


先到各發展商的 errata 網站或者是國內的 FTP 映像站捉下來最新的 RPM 文件; 
使用 -Fvh 來將你的系統內曾安裝過的軟件進行修補與升級!(真是方便呀!) 
所以,在不曉得 yum 功能的情況下,你依舊可以到 CentOS 的映設站臺下載 updates 數據,然後利用上述的方法來一口氣升級!和安裝一樣,升級也是可以利用 --nodeps/--force 等等的參數!


--------------------------------------------------------------------------------
  1.4 RPM 查詢 (query)
RPM 在查詢的時候,其實查詢的地方是在 /var/lib/rpm/ 這個目錄下的數據庫文件!另外, RPM 也可以查詢未安裝的 RPM 文件內的資訊!那如何去查詢呢? 
我們先來談談可用的選項有哪些?
[root@instructor ~]#  rpm -qa                              <==已安裝軟件
[root@instructor ~]#  rpm -q[licdR] 已安裝的軟件名稱       <==已安裝軟件
[root@instructor ~]#  rpm -qf 存在於系統上面的某個檔名     <==已安裝軟件
[root@instructor ~]#  rpm -qp[licdR] 未安裝的某個文件名稱  <==查閱RPM文件
選項與參數:
查詢已安裝軟件的資訊:
-q  :僅查詢,後面接的軟件名稱是否有安裝;
-qa :列出所有的,已經安裝在本機 Linux 系統上面的所有軟件名稱;
-qi :列出該軟件的詳細資訊 (information),包含開發商、版本與說明等;
-ql :列出該軟件所有的文件與目錄所在完整檔名 (list);
-qc :列出該軟件的所有配置檔 (找出在 /etc/ 底下的檔名而已)
-qd :列出該軟件的所有說明檔 (找出與 man 有關的文件而已)
-qR :列出與該軟件有關的相依軟件所含的文件 (Required 的意思)
-qf :由後面接的文件名稱,找出該文件屬於哪一個已安裝的軟件;
查詢某個 RPM 文件內含有的資訊:
-qp[icdlR]:注意 -qp 後面接的所有參數以上面的說明一致。但用途僅在於找出某個 RPM 文件內的資訊,而非已安裝的軟件資訊!


在查詢的部分,所有的參數之前都需要加上 -q 纔是所謂的查詢!查詢主要分爲兩部分, 一個是查已安裝到系統上面的的軟件資訊,這部份的資訊都是由 /var/lib/rpm/ 所提供。另一個則是查某個 rpm 文件內容, 等於是由 RPM 文件內找出一些要寫入數據庫內的資訊就是了,這部份就得要使用 -qp (p 是 package 的意思)。 那就來看看幾個簡單的範例吧!


範例一:找出你的 Linux 是否有安裝 logrotate 這個軟件?
[root@instructor ~]#  rpm -q logrotate
logrotate-3.7.4-8
[root@instructor ~]#  rpm -q logrotating
package logrotating is not installed
# 注意到,系統會去找是否有安裝後面接的軟件名稱。注意:不必要加上版本!


範例二:列出上題當中,屬於該軟件所提供的所有目錄與文件:
[root@instructor ~]#  rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
....(以下省略)....
# 可以看出該軟件到底提供了多少的文件與目錄,也可以追蹤軟件的數據。




範例三:列出 logrotate 這個軟件的相關說明數據:
[root@instructor ~]#  rpm -qi logrotate
Name        : logrotate             Relocations: (not relocatable)
Version     : 3.7.4                      Vendor: CentOS
Release     : 8                      Build Date: Sun 02 Dec 2007 08:38:06 AM CST
Install Date: Sat 09 May 2009 11:59:05 PM CST    Build Host: builder6
Group       : System Environment/Base  Source RPM: logrotate-3.7.4-8.src.rpm
Size        : 53618                     License: GPL
Signature   : DSA/SHA1, Sun 02 Dec 2007 09:10:01 AM CST, Key ID a8a447dce8562897
Summary     : Rotates, compresses, removes and mails system log files.
Description :
The logrotate utility is designed to simplify the administration of
log files on a system which generates a lot of log files.  Logrotate
allows for the automatic rotation compression, removal and mailing of
log files.  Logrotate can be set to handle a log file daily, weekly,
monthly or when the log file gets to a certain size.  Normally,
logrotate runs as a daily cron job.




Install the logrotate package if you need a utility to deal with the
log files on your system.
# 列出該軟件的 information (資訊),裏面的資訊可多著呢,包括了軟件名稱、版本、開發商、SRPM文件名稱、打包次數、簡單說明資訊、軟件打包者、安裝日期等等!如果想要詳細的知道該軟件的數據,用這個參數來了解一下。


範例四:分別僅找出 logrotate 的配置檔與說明檔
[root@instructor ~]#  rpm -qc logrotate
[root@instructor ~]#  rpm -qd logrotate


範例五:若要成功安裝 logrotate ,他還需要什麼文件的幫忙?
[root@instructor ~]#  rpm -qR logrotate
/bin/sh
config(logrotate) = 3.7.4-8
libc.so.6
....(以下省略)....
# 由這裏看起來,還需要很多文件的支持才行!


範例六:由上面的範例五,找出 /bin/sh 是哪個軟件提供的?
[root@instructor ~]#  rpm -qf /bin/sh
bash-3.2-21.el5
# 這個功能在查詢系統的某個文件屬於哪一個軟件所有的。


範例七:假設我有下載一個 RPM 文件,想要知道該文件的需求文件,該如何?
[root@instructor ~]#  rpm -qpR filename.i386.rpm
# 加上 -qpR ,找出該文件需求的數據!


常見的查詢就是這些了!要特別說明的是,在查詢本機上面的 RPM 軟件相關資訊時, 不需要加上版本的名稱,只要加上軟件名稱即可!因爲他會由 /var/lib/rpm 這個數據庫裏面去查詢, 所以我們可以不需要加上版本名稱。但是查詢某個 RPM 文件就不同了,我們必須要列出整個文件的完整檔名才行。底下我們就來做幾個簡單的練習吧!


例題:
我想要知道我的系統當中,以 c 開頭的軟件有幾個,如何實做? 
我的 WWW 服務器爲 Apache ,我知道他使用的 RPM 軟件檔名爲 httpd 。現在,我想要知道這個軟件的所有配置檔放置在何處,可以怎麼作? 
承上題,如果查出來的配置文件已經被我改過,但是我忘記了曾經修改過哪些地方,所以想要直接重新安裝一次該軟件,該如何作? 
如果我誤砍了某個重要文件,例如 /etc/crontab,偏偏不曉得他屬於哪一個軟件,該怎麼辦? 
答:
rpm -qa | grep ^c | wc -l 
rpm -qc httpd 
假設該軟件在網絡上的網址爲:
http://web.site.name/path/httpd-x.x.xx.i386.rpm
則我可以這樣做:
rpm -ivh http://web.site.name/path/httpd-x.x.xx.i386.rpm --replacepkgs 
雖然已經沒有這個文件了,不過沒有關係,因爲 RPM 有記錄在 /var/lib/rpm 當中的數據庫!所以直接下達:
rpm -qf /etc/crontab
就可以知道是那個軟件!重新安裝一次該軟件即可! 
 
--------------------------------------------------------------------------------
1.5 RPM 驗證與數碼簽章 (Verify/signature)


1.5.1驗證 (Verify) 的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用 /var/lib/rpm 底下的數據庫內容來比對目前 Linux 系統的環境下的所有軟件文件 』也就是說,當你有數據不小心遺失, 或者是因爲你誤殺了某個軟件的文件,或者是不小心不知道修改到某一個軟件的文件內容, 就用這個簡單的方法來驗證一下原本的文件系統!好讓你瞭解這一陣子到底是修改到哪些文件數據了!驗證的方式很簡單:


[root@instructor ~]#  rpm -Va
[root@instructor ~]#  rpm -V  已安裝的軟件名稱
[root@instructor ~]#  rpm -Vp 某個 RPM 文件的檔名
[root@instructor ~]#  rpm -Vf 在系統上面的某個文件
選項與參數:
-V  :後面加的是軟件名稱,若該軟件所含的文件被更動過,纔會列出來;
-Va :列出目前系統上面所有可能被更動過的文件;
-Vp :後面加的是文件名稱,列出該軟件內可能被更動過的文件;
-Vf :列出某個文件是否被更動過


範例一:列出你的 Linux 內的 logrotate 這個軟件是否被更動過?
[root@instructor ~]#  rpm -V logrotate
# 如果沒有出現任何信息,該軟件所提供的文件沒有被更動過。


範例二:查詢一下,你的 /etc/crontab 是否有被更動過?
[root@instructor ~]#  rpm -Vf /etc/crontab
S.5....T  c /etc/crontab
# 因爲有被更動過,所以會列出被更動過的資訊類型!


那麼我怎麼知道到底我的文件被更動過的內容是什麼?例如上面的範例二。簡單的說明一下吧! 例如,我們檢查一下 logrotate 這個軟件:




[root@instructor ~]#  rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf
/etc/logrotate.d
/usr/sbin/logrotate
/usr/share/doc/logrotate-3.7.4
/usr/share/doc/logrotate-3.7.4/CHANGES
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate.status
# 共有八個文件啊!請修改 /etc/logrotate.conf 內的 rotate 變成 5




[root@instructor ~]#  rpm -V logrotate
..5....T  c /etc/logrotate.conf


你會發現在檔名之前有個 c , c 代表的是 configuration , 就是配置檔的意思。至於最前面的八個資訊是:




S :(file Size differs) 文件的容量大小是否被改變 
M :(Mode differs) 文件的類型或文件的屬性 (rwx) 是否被改變?如是否可運行等參數已被改變 
5 :(MD5 sum differs) MD5 這一種指紋碼的內容已經不同 
D :(Device major/minor number mis-match) 裝置的主/次代碼已經改變 
L :(readLink(2) path mis-match) Link 路徑已被改變 
U :(User ownership differs) 文件的所屬人已被改變 
G :(Group ownership differs) 文件的所屬羣組已被改變 
T :(mTime differs) 文件的創建時間已被改變 
所以,如果當一個配置檔所有的資訊都被更動過,那麼他的顯示就會是:SM5DLUGT c filename


由於那個 c 代表的是『 Config file 』的意思,也就是文件的類型,文件類型有底下這幾類:
c :配置檔 (config file) 
d :文件數據檔 (documentation) 
g :鬼文件~通常是該文件不被某個軟件所包含,較少發生!(ghost file) 
l :授權文件 (license file) 
r :讀我文件 (read me) 
經過驗證的功能,你就可以知道那個文件被更動過。那麼如果該文件的變更是『預期中的』, 那麼就沒有什麼大問題,但是如果該文件是『非預期的』,應該考慮是否被入侵了? 一般來說,配置檔 (configure) 被更動過是很正常的,萬一你的 binary program 被更動過, 那就得要特別特別小心!


--------------------------------------------------------------------------------




1.5.2數碼簽章 (digital signature)  
談完了軟件的驗證後,不知道你有沒有發現一個問題,那就是,驗證只能驗證軟件內的資訊與 /var/lib/rpm/ 裏面的數據庫資訊而已,如果該軟件文件所提供的數據本身就有問題,那你使用驗證的手段也無法確定該軟件的正確性啊! 那如何解決呢?在 Tarball 與文件的驗證方面,我們可以使用 md5 指紋碼來檢查, 不過,連指紋碼也可能會被竄改的嘛!那怎辦?沒關係,我們可以透過數碼簽章來檢驗軟件的來源!


就像你自己的簽名一樣,我們的軟件開發商原廠所推出的軟件也會有一個廠商自己的簽章系統! 只是這個簽章被數碼化了而已。廠商可以數碼簽章系統產生一個專屬於該軟件的簽章,並將該簽章的公鑰 (public key) 釋出。 當你要安裝一個 RPM 文件時:


首先你必須要先安裝原廠釋出的公鑰文件; 
實際安裝原廠的 RPM 軟件時, rpm 命令會去讀取 RPM 文件的簽章資訊,與本機系統內的簽章資訊比對, 若簽章相同則予以安裝,若找不到相關的簽章資訊時,則給予警告並且停止安裝。 我們 CentOS 使用的數碼簽章系統爲 GNU 計畫的 GnuPG (GNU Privacy Guard, GPG)。 GPG 可以透過雜湊運算,算出獨一無二的專屬金鑰系統或者是數碼簽章系統,有興趣的朋友可以參考文末的延伸閱讀, 去了解一下 GPG 加密的機制喔!這裏我們僅簡單的說明數碼簽章在 RPM 文件上的應用而已。 而根據上面的說明,我們也會知道首先必須要安裝原廠釋出的 GPG 數碼簽章的公鑰文件啊!CentOS 的數碼簽章位於:


[root@instructor ~]#  ll /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
-rw-r--r-- 1 root root 1504  6月 19  2008 /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[root@instructor ~]#  cat /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.2.6 (GNU/Linux)


mQGiBEWfB6MRBACrnYW6yKMT+MwJlCIhoyTxGf3mAxmnAiDEy6HcYN8rivssVTJk
....(中間省略)....
-----END PGP PUBLIC KEY BLOCK-----


從上面的輸出,你會知道該數碼簽章碼其實僅是一個亂數而已,這個亂數對於數碼簽章有意義而已, 我們看不懂啦!那麼這個文件如何安裝呢?透過底下的方式來安裝即可喔!


[root@instructor ~]#  rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5


由於不同版本 GPG 金鑰文件放置的位置可能不同,不過檔名大多是以 GPG-KEY 來說明的, 因此你可以簡單的使用 locate 或 find 來找尋,如以下的方式來搜尋即可:


[root@instructor ~]#  locate GPG-KEY
[root@instructor ~]#  find /etc -name '*GPG-KEY*'


那安裝完成之後,這個金鑰的內容會以什麼方式呈現呢?基本上都是使用 pubkey 作爲軟件的名稱的! 那我們先列出金鑰軟件名稱後,再以 -qi 的方式來查詢看看該軟件的資訊爲何:


[root@instructor ~]#  rpm -qa | grep pubkey
gpg-pubkey-e8562897-459f07a4
[root@instructor ~]#  rpm -qi gpg-pubkey-e8562897-459f07a4
Name        : gpg-pubkey        Relocations: (not relocatable)
Version     : e8562897               Vendor: (none)
Release     : 459f07a4           Build Date: Wed 27 May 2009 10:07:26 PM CST
Install Date: Wed 27 May 2009 10:07:26 PM CST   Build Host: localhost
Group       : Public Keys        Source RPM: (none)
Size        : 0                     License: pubkey
Signature   : (none)
Summary     : gpg(CentOS-5 Key <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.4.2 (beecrypt-4.1.2)
....(底下省略)....


重點就是最後面出現的那一串亂碼!那可是作爲數碼簽章非常重要的一環! 如果你忘記加上數碼簽章,很可能很多原版軟件就不能讓你安裝,除非你利用 rpm 時選擇略過數碼簽章的選項。


--------------------------------------------------------------------------------
1.6 RPM 反安裝與重建數據庫 (erase/rebuilddb)

反安裝就是將軟件卸載!要注意的是,反安裝的過程一定要由最上一級往下解除,以 rp-pppoe 爲例,這一個軟件主要是依據 ppp 這個軟件來安裝的,所以當你要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題!這個可以由建築物來說明, 如果你要拆除五、六樓,那麼當然要由六樓拆起,否則先拆的是第五樓時,那麼上面的樓層難道會懸空?


移除的選項很簡單,就透過 -e 即可移除。不過,很常發生軟件屬性相依導致無法移除某些軟件的問題! 我們以底下的例子來說明:


# 1. 找出與 pam 有關的軟件名稱,並嘗試移除 pam 這個軟件:
[root@instructor ~]#  rpm -qa | grep pam
pam-devel-0.99.6.2-3.27.el5
pam_passwdqc-1.0.2-1.2.2
pam_pkcs11-0.5.3-23
pam_smb-1.1.7-7.2.1
pam-0.99.6.2-3.27.el5
pam_ccreds-3-5
pam_krb5-2.2.14-1
[root@instructor ~]#  rpm -e pam
error: Failed dependencies:  <==這裏提到的是相依性的問題
        libpam.so.0 is needed by (installed) coreutils-5.97-14.el5.i386
        libpam.so.0 is needed by (installed) libuser-0.54.7-2.el5.5.i386
....(以下省略)....




# 2. 若僅移除 pam-devel 這個之前範例安裝上的軟件呢?
[root@instructor ~]#  rpm -e pam-devel  <==不會出現任何信息!
[root@instructor ~]#  rpm -q pam-devel
package pam-devel is not installed


從範例一我們知道 pam 所提供的函式庫是讓非常多其他軟件使用的,因此你不能移除 pam ,除非將其他相依軟件一口氣也全部移除!你當然也能加 --nodeps 來強制移除, 不過,如此一來所有會用到 pam 函式庫的軟件,都將成爲無法運行的程序,我想,你的主機也只好準備停機休假了吧! 至於範例二中,由於 pam-devel 是依附於 pam 的開發工具,你可以單獨安裝與單獨移除!


由於 RPM 文件常常會安裝/移除/升級等,某些動作或許可能會導致 RPM 數據庫 /var/lib/rpm/ 內的文件破損。果真如此的話,那你該如何是好?別擔心,我們可以使用 --rebuilddb 這個選項來重建一下數據庫喔! 作法如下:




[root@instructor ~]#  rpm --rebuilddb   <==重建數據庫
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章