轉載: http://www.math.ecnu.edu.cn/~jypan/linux/command/rpm.htm
RPM 命令
一、RPM介紹
1.什么是rpm ?
rpm 即RedHat Package Management,是RedHat的發明之一
2.為什么需要rpm ?
在一個操作系統下,需要安裝實現各種功能的軟件包。這些軟件包一般都有各自的程序,
但是同時也有錯綜復雜的依賴關系。同時還需要 解決軟件包的版本,以及安裝,配置,
卸載的自動化問題。為了解決 這些問題,RedHat針對自己的系統提出了一個較好的辦法
來管理成千 上百的軟件。這就是RPM管理系統。在系統中安裝了rpm管理系統以后,
只要是符合rpm文件標準的打包程序都可以方便地安裝、升級、卸載。
3.是不是所有的linux都使用rpm ?
任何系統都需要包管理系統,因此很多linux都使用rpm系統。 rpm系統是Redhat Linux和
Fedora Core的軟件包管理器,但是Mandriva、SuSE等Linux發行版也都使用rpm。由于rpm
的源程序可以在別的系統上進行編譯,所以有可能在別的系統上也使用rpm。除了rpm,
其他一些系統也有自己的軟件包管理程序, 例如 debian的deb包。
4.rpm包的文件名為什么那么長 ?
rpm包的文件名中包含了這個軟件包的版本信息,操作系統信息,硬件要求等等。
比如mypackage-1.1-2RH.i386.rpm,其中mypackage是在系統中登記的軟件包的名字1.1
是軟件的版本號,2是發行號,RH表示用于RH操作系統。i386表示用于intel x86平臺。
5.軟件包文件名中的i386,i686是什么意思
rpm軟件包的文件名中,不僅包含了軟件名稱,版本信息,還包括了適用的硬件架構的信息。
i386指這個軟件包適用于intel 80386以上的x86架構的計算機(AI32)
i686指這個軟件包適用于intel 80686以上(奔騰pro以上)的x86架構的計算機(IA32)
noarch指這個軟件包與硬件架構無關,可以通用。
i686軟件包通常針對CPU進行了優化,現在通常配置的機器都可以使用i686軟件包。
6.不同操作系統發行的rpm包可否混用?
對于已經編譯成二進制的rpm包,由于操作系統環境不同,一般不能混用。
對于以src.rpm發行的軟件包,由于需要安裝時進行本地編譯,所以通常可以在不同系統下安裝。
二、RPM包管理的用途
1、可以安裝、刪除、升級和管理以rpm包形式發布的軟件;
2、可以查詢某個rpm包中包含哪些文件,以及某個指定文件屬于哪個rpm包;
3、可以在查詢系統中的某個rpm包是否已安裝以及其版本;
4、作為開發者可以把自己開發的軟件打成rpm包發布;
5、依賴性的檢查,查詢安裝某個rpm包時,需要哪些其它的rpm包。
注:RPM軟件的安裝、刪除、更新只有root權限才能使用;
對于查詢功能任何用戶都可以操作。
三、rpm 的一點簡單用法
rpm的一般格式:
rpm [選項] [rpm軟件包]
1、初始化rpm 數據庫(可以省略)
rpm --initdb
rpm --rebuilddb % 注:這個要花好長時間
%注:有時rpm 系統出了問題,不能安裝和查詢,大多是這里出了問題。
2、RPM軟件包管理的查詢功能:
rpm -q [select-options] [query-options]
RPM的查詢功能是極為強大,是極為重要的功能之一;這里舉幾個常用的例子,更為詳細的具體的,請參考 man rpm
對系統中已安裝軟件的查詢
1)查詢系統已安裝的軟件
語法:rpm -q 軟件名
例:rpm -q mplayer
% -q就是 --query,此選項表示詢問系統是不是安裝了gaim軟件包;
% 如果已安裝會有信息輸出;如果沒有安裝,會輸出gaim 沒有安裝的信息;
%查看系統中所有已經安裝的包,要加 -a 參數
rpm -qa
% 如果分頁查看,再加一個管道 |和more命令
rpm -qa |more
% 如果要查找某個軟件包,可以用 grep 抽取出來
rpm -qa |grep mplayer
2)查詢一個已經安裝的文件屬于哪個軟件包;
語法: rpm -qf 文件名
注:文件名所在的絕對路徑要指出
例:rpm -qf /usr/lib/libacl.la
3)查詢已安裝軟件包都安裝到何處;
語法:rpm -ql 軟件包名
例:rpm -ql mplayer
4)查詢一個已安裝軟件包的信息
語法: rpm -qi 軟件包名
例:rpm -qi mplayer
5)查看一下已安裝軟件的配置文件;
語法格式:rpm -qc 軟件名
例:rpm -qc mplayer
6)查看一個已經安裝軟件的文檔安裝位置:
語法格式: rpm -qd 軟件名
例:rpm -qd mplayer
7)查看一下已安裝軟件所依賴的軟件包及文件;
語法格式: rpm -qR 軟件名
例:rpm -qR mplayer
注:可以把幾個參數組合起來用,如 rpm -qil mplayer
對于未安裝的軟件包的查看 :查看的前提是當前目錄下已存在一個.rpm文件。
1)查看一個軟件包的用途、版本等信息;
語法: rpm -qpi file.rpm
例:rpm -qpi mplayer-1.0pre7try2-2.i386.rpm
2)查看一件軟件包所包含的文件;
語法: rpm -qpl file.rpm
例:rpm -qpl mplayer-1.0pre7try2-2.i386.rpm
3)查看軟件包的文檔所在的位置;
語法: rpm -qpd file.rpm
例:rpm -qpd mplayer-1.0pre7try2-2.i386.rpm
4)查看一個軟件包的配置文件;
語法: rpm -qpc file.rpm
例:rpm -qpc mplayer-1.0pre7try2-2.i386.rpm
5)查看一個軟件包的依賴關系
語法: rpm -qpR file.rpm
例:rpm -qpR mplayer-1.0pre7try2-2.i386.rpm
3、軟件包的安裝、升級、刪除等; 安裝和升級一個rpm 包
語法:
rpm -ivh file.rpm % 這個是用來安裝一個新的rpm 包
rpm -Uvh file.rpm % 這是用來升級一個rpm 包
% 如果有依賴關系的,需解決依賴關系。
% 如果找不到依賴關系的包,可以用下面的命令強制安裝:
rpm -ivh --nodeps --force file.rpm
rpm -Uvh --nodeps --force file.rpm
例:
rpm -ivh --test mplayer-1.0pre7try2-2.i386.rpm
% --test表示測試,并不真正安裝。
rpm -ivh --relocate /=/usr/local/mplayer mplayer-1.0pre7try2-2.i386.rpm
% 為軟件包指定安裝目錄:要加 --relocate 參數
% 安裝在指定目錄中的程序如何調用呢?
% 通常可執行程序都放在安裝目錄下的bin或者sbin目錄中。
刪除一個rpm 包
首先查出需要刪除的rpm包,然后用下面的命令來卸載:
rpm -e 軟件包名
例:rpm -e mplayer % 卸載mplayer
% 如果有其它的rpm依賴于該rpm包,系統會出現警告。
% 如果一定要卸載,可以用選項 --nodeps 忽略依賴關系。但最好不要這么做。
四、RPM管理包管理器支持網絡安裝和查詢
rpm [選項] rpm包的http或者ftp的地址
比如我們想通過 Fedora Core 4.0 的一個鏡像查詢、安裝軟件包。
rpm -qpi http://mirrors.kernel.org/.../RPMS/rsh-0.17-29.rpm
% 查詢
rpm -ivh http://mirrors.kernel.org/.../RPMS/rsh-0.17-29.rpm
% 安裝
五、對已安裝rpm包查詢的一點補充
可以用 locate來查詢一些軟件的安裝位置,可能需要先運行updatedb來更新已安裝軟件庫
六、從rpm軟件包抽取文件
rpm2cpio xxx.rpm | cpio -idmv
% i 表示提取文件,v 表示指示執行進程
% d 表示根據包中文件原來的路徑建立目錄
% m 表示保持文件的更新時間