linux系統下rpm包的安裝、刪除、效驗、查詢

點評:安裝軟件包rpm -i 包全名 刪除 rpm -e name(不是包名)參數-ivh 獲得一個詳細的安裝進程 --nodeps 忽略依賴關係--force 強制安裝-U 包名:升級安裝-F 更新不管是什麼直接覆蓋--replacepkgs這樣 RPM 將忽略該錯誤信息 -vih --repla

安裝軟件包
rpm -i 包全名
刪除
rpm -e name(不是包名)
參數

-ivh 獲得一個詳細的安裝進程
--nodeps 忽略依賴關係
--force 強制安裝
-U 包名:升級安裝
-F 更新不管是什麼直接覆蓋
--replacepkgs這樣 RPM 將忽略該錯誤信息 -vih --replacepkgs
-q name :查詢
-qa查詢所有已安裝的RPM
-qi name 查詢這個軟件詳細信息
-ql 顯示列表
-qf path :查詢一個文件屬於哪個包
-qp 包名 :查文件是什麼
-qpl 包名 :針對一個沒裝過的包

rpm -qc 配置文件

效驗 rpm -Va
rpm -Vf /bin/ls
rpm -Vp 包名

5 -- MD5 校驗和

S -- 文件長度

L -- 符號鏈接

T -- 文件修改日期

D -- 設備

U -- 用戶

G -- 用戶組

M -- 模式 (包含許可和文件類型)

? -- 不可讀文件


詳細課程


使用 RPM
RPM 有五個基本的操作 模式(不包括包的編譯): 安裝,卸載,升級,查詢,校驗。本節將對它們一一介紹。要了解完整的細節和選項,可以使用 rpm --help, 或轉到 the section called 其它 RPM 資源 得到更多關於 RPM 的信息。

1 安裝
典型的 RPM 有着類似 foo-1.0-1.i386.rpm這樣的名稱, 其中指明瞭包名 (foo), 版本號 (1.0), 發行號 (1), 和硬件平臺 (i386)。安裝一個軟件包只需簡單的鍵入以下命令:

# rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
#

正如您所看到的, RPM 將會打印出軟件包的名字 ( 並不一定要與文件名相同, 可能是 1.rpm), 而後打印出一連串的 # 號以表示安裝進度。


請注意
儘管通常是使用 rpm -ivh foo-1.0-1.i386.rpm 來安裝包, 但也可以用 rpm -Uvh foo-1.0-1.i386.rpm 來替代。 -U 是包升級參數, 也可以用來安裝新包。參看 升級 有關RPM 中 -U 參數的詳細使用情況。

軟件包的安裝設計非常簡單, 但還是有可能發生以下錯誤:

軟件包已被安裝
如果軟件包已被安裝, 會出現以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

如果仍要安裝該包, 可以在命令行中使用 --replacepkgs 選項, 這樣 RPM 將忽略該錯誤信息:

# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
foo ####################################
#

文件衝突
如果要安裝的軟件包中有一個文件已在安裝其它包時被安裝,會顯示以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
#

要想讓RPM 忽略該錯誤信息, 請使用 --replacefiles 命令行選項:

# rpm -ivh --replacefiles foo-1.0-1.i386.rpm
foo ####################################
#

解決依賴關係
一個 RPM 包可能會 "依賴" 其它軟件包, 也就是說要求在安裝了特定的軟件包之後才能安裝該軟件包。 如果在安裝這個軟件包時未解決這種存在的依賴關係, 會看到:

# rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1
#

只有先安裝完所依賴的軟件包,才能解決這個問題。 如果想強制安裝 (這不是個好辦法,因爲安裝後的軟件包未必能正常運行), 可以使用 --nodeps 命令行選項。

3.2.2 卸載
卸載軟件包就象安裝軟件包時一樣簡單:

# rpm -e foo
#


請注意
注意這裏使用軟件包的 名字 "foo" , 而不是原始軟件包的 文件名 "foo-1.0-1.i386.rpm"。卸載軟件包時, 需要用原始包的實際文件名替換 foo 包名。

在卸載某個軟件包時,可能會發生依賴關係錯誤,這說明其它包與此包之間有安裝依賴關係。例如:

# rpm -e foo
removing these packages would break dependencies:
foo is needed by bar-1.0-1
#

要使 RPM 在卸載此包時忽略該錯誤 (這不是個好辦法,因爲卸載後,與它有依賴關係的軟件包未必能正常運行), 使用 --nodeps 命令行選項。

3.2.3 升級
升級軟件包和安裝軟件包十分類似。

# rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
#

RPM 將自動卸載已安裝的老版本的 foo 軟件包,用戶無法看到有關信息。事實上用戶可能總是使用 -U 來安裝軟件包, 因爲即便以往未安裝過該軟件包,也能正常運行。

因爲 RPM 執行智能化的軟件包升級,自動處理配置文件,會顯示如下信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

這表示用戶對配置文件的修改,不一定能 "向上兼容" 該軟件包中的配置文件。 因此,RPM 會備份原始的文件,再安裝新文件。用戶應當儘快解決這兩個配置文件的不同之處,以便系統能持續正常運行。

因爲升級其實就是軟件包的卸載與安裝的綜合,也可能會遇見那些操作中所可能發生的錯誤。 再有就是: 在使用 舊 版本的 RPM 軟件包來升級新版本的軟件時,會產生以下信息:

# rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

要使用 RPM 強行 "升級" , 請使用 --oldpackage 命令行參數:

# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm
foo ####################################
#

3.2.4 更新
包的更新與包升級相似:

# rpm -Fvh foo-1.2-1.i386.rpm
foo ####################################
#

RPM 更新選項,是檢查命令行中指明的包版本與安裝系統中的包版本是否一致。 當 RPM 更新選項處理完已安裝包的新版本時,該包會升級到新版本。 但是,RPM 更新選項無法安裝系統目前沒有的軟件包。 這與 RPM 升級不同,升級選項 能夠 安裝軟件包,無論舊版本的包是否已安裝

RPM 更新選項可以很好的更新一個軟件包或一組軟件包。 如果用戶下載了大量的軟件包,但只想升級系統中已有的包時,RPM 更新選項會非常有用。 使用 RPM 更新選項意味着你無需從下載的包中挑挑揀揀,也不用事先刪除不要的包。

這種情況下, 只需簡單的鍵入:

# rpm -Fvh *.rpm

RPM 工具會自動升級那些已經安裝好的包。

3.2.5 查詢
使用命令 rpm -q來查詢已安裝軟件包的數據庫。簡單的使用命令 rpm -q foo 會打印出foo軟件包的包名、版本號和發行號:

# rpm -q foo
foo-2.0-1
#

除了指定包名以外,用戶還可以使用以下選項與 -q 連用,來指明要查詢哪些軟件包的信息。這些選項被稱之爲 軟件包指定選項 。


-a 查詢所有已安裝的軟件包。

-f <file> 將查詢包含有文件 <file>的軟件包。

-p <packagefile> 查詢軟件包文件名爲 <packagefile>的包。

有幾種方式來指定查詢軟件包時所顯示的信息。 以下選項可以出選擇感興趣的信息,加以顯示。這樣的選項被稱作 信息選擇選項 。


-i 顯示軟件包信息,如描述、發行號、大小、編譯日期、安裝日期、硬件平臺、以及其它一些各類信息。

-l 列出軟件包中包含的文件。

-s 顯示軟件包中所有文件的狀態。

-d 列出被標註爲文檔的文件 (如,man 手冊、 info 信息、README,等等) 。

-c 列出被標註爲配置文件的文件。這些文件是需要在安裝完畢後加以定製的,如 (sendmail.cf, passwd, inittab, 等) 。

如果要在執行上述選項的同時,顯示文件列表, 可以同時使用 -v 命令行選項,就能得出與 ls -l 格式類似的輸出。

3.2.6 校驗
包校驗是比較自軟件包中安裝的文件信息和軟件包中的原始文件的相同信息。 與其它校驗相同,包校驗將比較文件的長度、MD5校驗和、許可、類型、文件屬主和羣組。

使用 rpm -V 命令進行包校驗。用戶可以配合使用各個包選擇選項 ,來列出校驗包的查詢結果。 簡單地使用 rpm -V foo 可以校驗 foo 包中原始安裝時的所有文件。例如:


校驗包含特定文件的軟件包: rpm -Vf /bin/vi


校驗所有已安裝的軟件包: rpm -Va


用 RPM 包文件校驗已安裝的軟件包: rpm -Vp foo-1.0-1.i386.rpm


如果擔心RPM數據庫被破壞,就可以使用這種方式加以校驗。

如果校驗結果一切正常,將不會產生任何輸出。如果有不一致的地方,會顯示出來。 輸出格式是8位長字符串, "c" 用以指配置文件, 接着是文件名。8位長字符,每個代表一個文件屬性與RPM數據庫中記錄的屬性相比較的結果。"." (點) 表示測試通過。 下面的字符代表某測試的失敗:


5 -- MD5 校驗和

S -- 文件長度

L -- 符號鏈接

T -- 文件修改日期

D -- 設備

U -- 用戶

G -- 用戶組

M -- 模式 (包含許可和文件類型)

? -- 不可讀文件

如果有信息輸出, 用戶應當認真加以考慮,是該刪除、重新安裝、還是修正出現的問題。
3.2 使用 RPM
RPM 有五個基本的操作 模式(不包括包的編譯): 安裝,卸載,升級,查詢,校驗。本節將對它們一一介紹。要了解完整的細節和選項,可以使用 rpm --help, 或轉到 the section called 其它 RPM 資源 得到更多關於 RPM 的信息。

3.2.1 安裝
典型的 RPM 有着類似 foo-1.0-1.i386.rpm這樣的名稱, 其中指明瞭包名 (foo), 版本號 (1.0), 發行號 (1), 和硬件平臺 (i386)。安裝一個軟件包只需簡單的鍵入以下命令:

# rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
#

正如您所看到的, RPM 將會打印出軟件包的名字 ( 並不一定要與文件名相同, 可能是 1.rpm), 而後打印出一連串的 # 號以表示安裝進度。


請注意
儘管通常是使用 rpm -ivh foo-1.0-1.i386.rpm 來安裝包, 但也可以用 rpm -Uvh foo-1.0-1.i386.rpm 來替代。 -U 是包升級參數, 也可以用來安裝新包。參看 升級一節 有關RPM 中 -U 參數的詳細使用情況。

軟件包的安裝設計非常簡單, 但還是有可能發生以下錯誤:

軟件包已被安裝
如果軟件包已被安裝, 會出現以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

如果仍要安裝該包, 可以在命令行中使用 --replacepkgs 選項, 這樣 RPM 將忽略該錯誤信息:

# rpm -ivh --replacepkgs foo-1.0-1.i386.rpm
foo ####################################
#

文件衝突
如果要安裝的軟件包中有一個文件已在安裝其它包時被安裝,會顯示以下信息:

# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
#

要想讓RPM 忽略該錯誤信息, 請使用 --replacefiles 命令行選項:

# rpm -ivh --replacefiles foo-1.0-1.i386.rpm
foo ####################################
#

解決依賴關係
一個 RPM 包可能會 "依賴" 其它軟件包, 也就是說要求在安裝了特定的軟件包之後才能安裝該軟件包。 如果在安裝這個軟件包時未解決這種存在的依賴關係, 會看到:

# rpm -ivh bar-1.0-1.i386.rpm
failed dependencies:
foo is needed by bar-1.0-1
#

只有先安裝完所依賴的軟件包,才能解決這個問題。 如果想強制安裝 (這不是個好辦法,因爲安裝後的軟件包未必能正常運行), 可以使用 --nodeps 命令行選項。

3.2.2 卸載
卸載軟件包就象安裝軟件包時一樣簡單:

# rpm -e foo
#


請注意
注意這裏使用軟件包的 名字 "foo" , 而不是原始軟件包的 文件名 "foo-1.0-1.i386.rpm"。卸載軟件包時, 需要用原始包的實際文件名替換 foo 包名。

在卸載某個軟件包時,可能會發生依賴關係錯誤,這說明其它包與此包之間有安裝依賴關係。例如:

# rpm -e foo
removing these packages would break dependencies:
foo is needed by bar-1.0-1
#

要使 RPM 在卸載此包時忽略該錯誤 (這不是個好辦法,因爲卸載後,與它有依賴關係的軟件包未必能正常運行), 使用 --nodeps 命令行選項。

3.2.3 升級
升級軟件包和安裝軟件包十分類似。

# rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
#

RPM 將自動卸載已安裝的老版本的 foo 軟件包,用戶無法看到有關信息。事實上用戶可能總是使用 -U 來安裝軟件包, 因爲即便以往未安裝過該軟件包,也能正常運行。

因爲 RPM 執行智能化的軟件包升級,自動處理配置文件,會顯示如下信息:

saving /etc/foo.conf as /etc/foo.conf.rpmsave

這表示用戶對配置文件的修改,不一定能 "向上兼容" 該軟件包中的配置文件。 因此,RPM 會備份原始的文件,再安裝新文件。用戶應當儘快解決這兩個配置文件的不同之處,以便系統能持續正常運行。

因爲升級其實就是軟件包的卸載與安裝的綜合,也可能會遇見那些操作中所可能發生的錯誤。 再有就是: 在使用 舊 版本的 RPM 軟件包來升級新版本的軟件時,會產生以下信息:

# rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
#

要使用 RPM 強行 "升級" , 請使用 --oldpackage 命令行參數:

# rpm -Uvh --oldpackage foo-1.0-1.i386.rpm
foo ####################################
#

3.2.4 更新
包的更新與包升級相似:

# rpm -Fvh foo-1.2-1.i386.rpm
foo ####################################
#

RPM 更新選項,是檢查命令行中指明的包版本與安裝系統中的包版本是否一致。 當 RPM 更新選項處理完已安裝包的新版本時,該包會升級到新版本。 但是,RPM 更新選項無法安裝系統目前沒有的軟件包。 這與 RPM 升級不同,升級選項 能夠 安裝軟件包,無論舊版本的包是否已安裝

RPM 更新選項可以很好的更新一個軟件包或一組軟件包。 如果用戶下載了大量的軟件包,但只想升級系統中已有的包時,RPM 更新選項會非常有用。 使用 RPM 更新選項意味着你無需從下載的包中挑挑揀揀,也不用事先刪除不要的包。

這種情況下, 只需簡單的鍵入:

# rpm -Fvh *.rpm

RPM 工具會自動升級那些已經安裝好的包。

3.2.5 查詢
使用命令 rpm -q來查詢已安裝軟件包的數據庫。簡單的使用命令 rpm -q foo 會打印出foo軟件包的包名、版本號和發行號:

# rpm -q foo
foo-2.0-1
#

除了指定包名以外,用戶還可以使用以下選項與 -q 連用,來指明要查詢哪些軟件包的信息。這些選項被稱之爲 軟件包指定選項 。


-a 查詢所有已安裝的軟件包。

-f <file> 將查詢包含有文件 <file>的軟件包。

-p <packagefile> 查詢軟件包文件名爲 <packagefile>的包。

有幾種方式來指定查詢軟件包時所顯示的信息。 以下選項可以出選擇感興趣的信息,加以顯示。這樣的選項被稱作 信息選擇選項 。


-i 顯示軟件包信息,如描述、發行號、大小、編譯日期、安裝日期、硬件平臺、以及其它一些各類信息。

-l 列出軟件包中包含的文件。

-s 顯示軟件包中所有文件的狀態。

-d 列出被標註爲文檔的文件 (如,man 手冊、 info 信息、README,等等) 。

-c 列出被標註爲配置文件的文件。這些文件是需要在安裝完畢後加以定製的,如 (sendmail.cf, passwd, inittab, 等) 。

如果要在執行上述選項的同時,顯示文件列表, 可以同時使用 -v 命令行選項,就能得出與 ls -l 格式類似的輸出。

3.2.6 校驗
包校驗是比較自軟件包中安裝的文件信息和軟件包中的原始文件的相同信息。 與其它校驗相同,包校驗將比較文件的長度、MD5校驗和、許可、類型、文件屬主和羣組。

使用 rpm -V 命令進行包校驗。用戶可以配合使用各個包選擇選項 ,來列出校驗包的查詢結果。 簡單地使用 rpm -V foo 可以校驗 foo 包中原始安裝時的所有文件。例如:


校驗包含特定文件的軟件包: rpm -Vf /bin/vi


校驗所有已安裝的軟件包: rpm -Va


用 RPM 包文件校驗已安裝的軟件包: rpm -Vp foo-1.0-1.i386.rpm


如果擔心RPM數據庫被破壞,就可以使用這種方式加以校驗。

如果校驗結果一切正常,將不會產生任何輸出。如果有不一致的地方,會顯示出來。 輸出格式是8位長字符串, "c" 用以指配置文件, 接着是文件名。8位長字符,每個代表一個文件屬性與RPM數據庫中記錄的屬性相比較的結果。"." (點) 表示測試通過。 下面的字符代表某測試的失敗:


5 -- MD5 校驗和

S -- 文件長度

L -- 符號鏈接

T -- 文件修改日期

D -- 設備

U -- 用戶

G -- 用戶組

M -- 模式 (包含許可和文件類型)

? -- 不可讀文件

如果有信息輸出, 用戶應當認真加以考慮,是該刪除、重新安裝、還是修正出現的問題。


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