Linux下程序包管理工具RPM
實驗環境:
CentOS release 6.6 (Final) ?一臺
IP地址:172.16.249.230
?
RPM?是 Red Hat Package Manager 的縮寫,本意是Red Hat 軟件包管理,顧名思義是Red Hat 貢獻出來的軟件包管理;在CentOS 、Redhat、Fedora 、SuSE、YellowDog等主流發行版本,以及在這些版本基礎上二次開發出來的發行版采用;
?
?
一、RPM程序包管理的用途;
?
1、可以安裝、刪除、升級和管理軟件;當然也支持在線安裝和升級軟件;
2、通過RPM包管理能知道軟件包包含哪些文件,也能知道系統中的某個文件屬于哪個軟件包;
3、可以在查詢系統中的軟件包是否安裝以及其版本;
4、作為開發者可以把自己的程序打包為RPM 包發布;
5、軟件包簽名GPG和MD5的導入、驗證和簽名發布
6、依賴性的檢查,查看是否有軟件包由于不兼容而擾亂了系統;
?
?
二、RPM 的使用權限;
?
RPM軟件的安裝、刪除、更新只有root權限才能使用;對于查詢功能任何用戶都可以操作;如果普通用戶擁有安裝目錄的權限,也可以進行安裝;
?
?
三、rpm 的一點簡單用法;
?
我們除了軟件包管理器以外,還能通過rpm 命令來安裝;是不是所有的軟件包都能通過rpm 命令來安裝呢?不是的,文件以.rpm 后綴結尾的才行;有時我們在一些網站上找到file.rpm ,都要用 rpm 來安裝;
?
一)初始化rpm 數據庫;
?
通過rpm 命令查詢一個rpm 包是否安裝了,也是要通過rpm 數據庫來完成的;所以我們要經常用下面的兩個命令來初始化rpm 數據庫;
?
# rpm –initdb ? ? ?初始化數據庫
無論當前是否已經存在數據庫,都會直接重新建立和覆蓋現有數據庫
?
# rpm --rebuilddb ? 重新構建 ? ?注:這個要花好長時間;
如果事先不存在數據,則會新建,否則不會重建
注:這兩個參數是極為有用,有時rpm 系統出了問題,不能安裝和查詢,大多是這里出了問題;
?
二)RPM軟件包管理的查詢功能:
?
命令格式
| 1 | rpm?{-q|--query}?[select-options]?[query-options] |
?
RPM的查詢功能是極為強大,是極為重要的功能之一;舉幾個常用的例子,更為詳細的具體的,請參考#man rpm
?
1、對系統中已安裝軟件的查詢;
?
1)查詢系統已安裝的軟件;
語法:rpm -q 軟件名
舉例:
| 1 2 | [root@LinuxHost?html]#?rpm?-q?zsh zsh-4.3.10-7.el6.x86_64 |
-q就是 --query ,中文意思是“問”,此命令表示的是,是不是系統安裝了zsh ;如果已安裝會有信息輸出;如果沒有安裝,會輸出zsh沒有安裝的信息;
?
查看系統中所有已經安裝的包,要加 -a 參數 ;
| 1 | [root@LinuxHost?html]#?rpm?–qa |
?
如果分頁查看,再加一個管道 |和more命令;
| 1 | [root@LinuxHost?html]#?rpm?-qa?|more |
在所有已經安裝的軟件包中查找某個軟件,比如說 zsh ;可以用 grep 抽取出來;
| 1 2 | [root@LinuxHost?html]#?rpm?-qa?|grep?zsh zsh-4.3.10-7.el6.x86_64 |
上面這條的功能和 rpm -q zsh 輸出的結果是一樣的;
?
2)查詢一個已經安裝的文件屬于哪個軟件包;
語法 rpm -qf 文件名
注:文件名所在的絕對路徑要指出
舉例:
| 1 2 | [root@LinuxHost?html]#?rpm?-qf?/bin/zsh zsh-4.3.10-7.el6.x86_64 |
?
3)查詢已安裝軟件包都安裝到何處;
語法:rpm -ql 軟件名 或 rpm rpmquery -ql 軟件名
舉例:
| 1 2 | [root@LinuxHost?html]#?rpm?-ql?zsh? [root@LinuxHost?html]#?rpm?rpmquery?-ql?zsh |
?
4)查詢一個已安裝軟件包的信息
語法格式: rpm -qi 軟件名
舉例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@LinuxHost?opt]#?rpm?-qi?zsh Name????????:?zsh??????????????????????????Relocations:?(not?relocatable) Version?????:?4.3.10????????????????????????????Vendor:?CentOS Release?????:?7.el6?????????????????????????Build?Date:?Mon?25?Nov?2013?01:40:59?AM?CST Install?Date:?Mon?24?Nov?2014?04:05:58?AM?CST??????Build?Host:?c6b9.bsys.dev.centos.org Group???????:?System?Environment/Shells?????Source?RPM:?zsh-4.3.10-7.el6.src.rpm Size????????:?5009102??????????????????????????License:?BSD Signature???:?RSA/SHA1,?Mon?25?Nov?2013?03:33:46?AM?CST,?Key?ID?0946fca2c105b9de Packager????:?CentOS?BuildSystem?<http://bugs.centos.org> URL?????????:?http://zsh.sunsite.dk/ Summary?????:?A?powerful?interactive?shell Description?: The?zsh?shell?is?a?command?interpreter?usable?as?an?interactive?login shell?and?as?a?shell?script?command?processor.??Zsh?resembles?the?ksh shell?(the?Korn?shell),?but?includes?many?enhancements.??Zsh?supports command?line?editing,?built-in?spelling?correction,?programmable command?completion,?shell?functions?(with?autoloading),?a?history mechanism,?and?more. |
?
5)查看一下已安裝軟件的配置文件;
語法格式:rpm -qc 軟件名
舉例:
| 1 2 3 4 5 6 7 | [root@LinuxHost?html]#?rpm?-qc?zsh /etc/skel/.zshrc /etc/zlogin /etc/zlogout /etc/zprofile /etc/zshenv /etc/zshrc |
?
6)查看一個已經安裝軟件的文檔安裝位置:
語法格式: rpm -qd 軟件名
舉例:
| 1 | [root@LinuxHost?html]#?rpm?-qd?zsh |
?
7)查看一下已安裝軟件所依賴的軟件包及文件;
語法格式: rpm -qR 軟件名
舉例:
| 1 | [root@LinuxHost?html]#?rpm?-qR?zsh |
?
查詢已安裝軟件的總結:對于一個軟件包已經安裝,我們可以把一系列的參數組合起來用;比如 rpm -qil ;比如:
| 1 | [root@LinuxHost?html]#?rpm?-qil?zsh |
?
?
2、對于未安裝的軟件包的查看:
?
查看的前提是您有一個.rpm 的文件,也就是說對既有軟件file.rpm的查看等;
?
1)查看一個軟件包的用途、版本等信息;
語法: rpm -qpi file.rpm
舉例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | #?rpm?-qpi?SDL_image-1.2.12-1.x86_64.rpm? Name????????:?SDL_image????????????????????Relocations:?/usr? Version?????:?1.2.12????????????????????????????Vendor:?(none) Release?????:?1?????????????????????????????Build?Date:?Sat?21?Jan?2012?09:53:22?AM?CST Install?Date:?(not?installed)???????????????Build?Host:?localhost.localdomain Group???????:?System?Environment/Libraries???Source?RPM:?SDL_image-1.2.12-1.src.rpm Size????????:?246207???????????????????????????License:?LGPL Signature???:?(none) Packager????:?Hakan?Tandogan?<hakan@iconsult.com> Summary?????:?Simple?DirectMedia?Layer?-?Sample?Image?Loading?Library Description?: This?is?a?simple?library?to?load?images?of?various?formats?as?SDL?surfaces. This?library?supports?BMP,?PPM,?PCX,?GIF,?JPEG,?PNG,?and?TIFF?formats. |
?
2)查看一件軟件包所包含的文件;
語法: rpm -qpl file.rpm
舉例:
| 1 2 3 4 5 6 7 | [[root@LinuxHost?opt]#?rpm?-qpl?SDL_image-1.2.12-1.x86_64.rpm?? /usr/lib/libSDL_image-1.2.so.0 /usr/lib/libSDL_image-1.2.so.0.8.4 /usr/share/doc/SDL_image-1.2.12 /usr/share/doc/SDL_image-1.2.12/CHANGES /usr/share/doc/SDL_image-1.2.12/COPYING /usr/share/doc/SDL_image-1.2.12/README |
3)查看軟件包的文檔所在的位置;
語法: rpm -qpd file.rpm
舉例:
| 1 2 3 4 | [root@LinuxHost?opt]#?rpm?-qpd?SDL_image-1.2.12-1.x86_64.rpm /usr/share/doc/SDL_image-1.2.12/CHANGES /usr/share/doc/SDL_image-1.2.12/COPYING /usr/share/doc/SDL_image-1.2.12/README |
?
?
三)軟件包的安裝、升級、刪除等;
?
1、安裝和升級一個rpm 包;
?
[root@LinuxHost opt]#rpm -vih file.rpm 注:這個是用來安裝一個新的rpm 包;
[root@LinuxHost opt]##rpm -Uvh file.rpm 注:這是用來升級一個rpm 包;
如果有依賴關系的,請解決依賴關系,其實軟件包管理器能很好的解決依賴關系,請看前面的軟件包管理器的介紹;如果您在軟件包管理器中也找不到依賴關系的包;那只能通過編譯他所依賴的包來解決依賴關系,或者強制安裝;
語法結構:
| 1 2 | [root@LinuxHost?opt]#?rpm?-ivh?file.rpm?--nodeps?--force [root@LinuxHost?opt]#rpm?-Uvh?file.rpm?--nodeps?--force |
更多的參數,請查看#man rpm
?
安裝一個軟件程序包:
| 1 2 3 4 5 6 7 8 9 10 11 | 選項參數: -h?????????顯示hash以#號顯示安裝速度 -v????????顯示安裝詳細信息,-vv??-vvv越多越詳細 -i????????安裝包 --nodeps忽略依賴關系 --nodigest忽略完整性 --nosignature忽略來源合法性 --replacepkgs重新安裝包 --test????????測試安裝,而不執行真正的安裝過程,dry?run模式 --prefix?NEWPATH指定程序安裝路徑(特定程序包) --oldpackeage降級安裝 |
?
舉例應用:
安裝zsh:
| 1 2 3 | [root@LinuxHost?Packages]#?rpm?-ivh?zsh-4.3.10-7.el6.x86_64.rpm? Preparing...????????????????###########################################?[100%] ????????package?zsh-4.3.10-7.el6.x86_64?is?already?installed |
注:?--replacepkgs 參數是以已安裝的軟件再安裝一次;有時沒有太大的必要;
?
測試安裝參數 --test ,用來檢查依賴關系;并不是真正的安裝;
| 1 2 3 | [root@LinuxHost?Packages]#?rpm?-ivh?--test?zsh-4.3.10-7.el6.x86_64.rpm? Preparing...????????????????###########################################?[100%] ????????package?zsh-4.3.10-7.el6.x86_64?is?already?installed |
?
重新安裝程序包:
| 1 2 3 | [root@LinuxHost?Packages]#?rpm?-ivh?--replacepkgs?zsh-4.3.10-7.el6.x86_64.rpm? Preparing...????????????????###########################################?[100%] ???1:zsh????????????????????###########################################?[100%] |
?
?
升級一個軟件程序包:
| 1 2 3 4 5 | 命令選項 -U????????真正執行升級操作,如果有較老程序則升級,無包執行安裝 -F????????如果有較老程序則升級,否則,中止安裝 --oldpackage降級安裝 --force????????忽略沖突,強制執行過程 |
?
升級一個程序包:
| 1 2 3 4 5 6 7 | [root@LinuxHost?dvd]#?rpm?-qa?zsh zsh-4.3.10-7.el6.x86_64 [root@LinuxHost?dvd]#?rpm?-Uvh?zsh-4.3.10-8.el6_5.x86_64.rpm? Preparing...????????????????###########################################?[100%] ???1:zsh????????????????????###########################################?[100%] [root@LinuxHost?dvd]#?rpm?-qa?zsh zsh-4.3.10-8.el6_5.x86_64 |
?
由新版本降級為舊版本,要加 --oldpackage 參數;
| 1 2 3 4 5 6 7 8 | [root@LinuxHost?dvd]#?rpm?-qa?zsh zsh-4.3.10-8.el6_5.x86_64 [root@LinuxHost?dvd]#?cd?Packages/ [root@LinuxHost?Packages]#?rpm?-Uvh?--oldpackage?zsh-4.3.10-7.el6.x86_64.rpm? Preparing...????????????????###########################################?[100%] ???1:zsh???????????????????###########################################?[100%] [root@LinuxHost?Packages]#?rpm?-qa?zsh? zsh-4.3.10-7.el6.x86_64 |
?
注意:
1.不要對內核執行升級操作:Linux支持多版本內核并存,因此,對新版本內核可直接安裝。
2.如果源程序包的配置文件安裝后曾被改動,升級時,新版本的配置文件并不會直接覆蓋老版本文件,而是把新版本的文件重命名(加后綴.rpmnew)后保留。
?
?
2、刪除一個rpm 包;
| 1 2 3 | 語法: rpm?{-e|--erase}?[--allmatches]?[--nodeps]?[--noscripts] [--notriggers]?[--test]?PACKAGE_NAME?... |
?
首先您要學會查詢rpm 包 ;請看前面的說明;
[root@LinuxHost Packages]#rpm -e 軟件包名
?
舉例:我想移除zsh 包,完整的操作應該是:
| 1 2 | [root@LinuxHost?Packages]#?rpm?-e?zsh [root@LinuxHost?Packages]#?rpm?-qa?zsh |
如果有依賴關系,您也可以用--nodeps 忽略依賴的檢查來刪除。但盡可能不要這么做,最好用軟件包管理器 systerm-config-packages 來刪除或者添加軟件;
| 1 | [root@LinuxHost?Packages]#?rpm?-e?zsh?--nodeps |
?
注意:如果包的配置文件安裝后曾被改動過,卸載時,此文件不會刪除,而是被重命名(原文件名加.rpmsave后綴)并保留。
?
?
四、導入簽名:
程序包來源合法性和完整性驗證:
| 1 2 3 4 5 | 命令語法: rpm?--import?PUBKEY?... rpm?{-K|--checksig}?[--nosignature]?[--nodigest] PACKAGE_FILE?... [root@LinuxHost?Packages]#?rpm?--import?簽名文件 |
?
舉例:
獲取公鑰:RPM-GPG-KEY-CentOS-6
| 1 2 3 4 | #rpm?--import?RPM-GPG-KEY-CentOS-6 #rpm??-K??Packages #?rpm?-K?zsh-4.3.10-7.el6.x86_64.rpm? zsh-4.3.10-7.el6.x86_64.rpm:?rsa?sha1?(md5)?pgp?md5?OK |
關于RPM的簽名功能,詳情請參見 man rpm
?
五、RPM管理包管理器支持網絡安裝和查詢;
?
比如我們想通過 CentOS 6.6 的一個鏡像查詢、安裝軟件包;
地址:
http://mirrors.sohu.com/centos/6.6/os/x86_64/Packages/
舉例:
命令格式:
rpm 參數 rpm包文件的http或者ftp的地址
查詢
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@LinuxHost?Packages]#?rpm?-qpi?http://mirrors.sohu.com/centos/6.6/os/x86_64/Packages/zsh-html-4.3.10-7.el6.x86_64.rpm Name????????:?zsh-html?????????????????????Relocations:?(not?relocatable) Version?????:?4.3.10????????????????????????????Vendor:?CentOS Release?????:?7.el6?????????????????????????Build?Date:?Mon?25?Nov?2013?01:40:59?AM?CST Install?Date:?(not?installed)???????????????Build?Host:?c6b9.bsys.dev.centos.org Group???????:?System?Environment/Shells?????Source?RPM:?zsh-4.3.10-7.el6.src.rpm Size????????:?2993485??????????????????????????License:?BSD Signature???:?RSA/SHA1,?Mon?25?Nov?2013?03:33:46?AM?CST,?Key?ID?0946fca2c105b9de Packager????:?CentOS?BuildSystem?<http://bugs.centos.org> URL?????????:?http://zsh.sunsite.dk/ Summary?????:?Zsh?shell?manual?in?html?format Description?: The?zsh?shell?is?a?command?interpreter?usable?as?an?interactive?login shell?and?as?a?shell?script?command?processor.??Zsh?resembles?the?ksh shell?(the?Korn?shell),?but?includes?many?enhancements.??Zsh?supports command?line?editing,?built-in?spelling?correction,?programmable command?completion,?shell?functions?(with?autoloading),?a?history mechanism,?and?more. This?package?contains?the?Zsh?manual?in?html?format. |
?
安裝
| 1 2 3 4 | [root@LinuxHost?Packages]#?rpm?-ivh?http://mirrors.sohu.com/centos/6.6/os/x86_64/Packages/zsh-html-4.3.10-7.el6.x86_64.rpm Retrieving?http://mirrors.sohu.com/centos/6.6/os/x86_64/Packages/zsh-html-4.3.10-7.el6.x86_64.rpm Preparing...????????????????###########################################?[100%] ???1:zsh-html???????????????###########################################?[100%] |
舉一反三吧;
?
六 、RPM包的命名規則和獲取途徑
命名規則
RPM包的一般格式為:
| 1 2 | name-version-arch.rpm name-version-arch.src.rpm |
?
name:軟件包名稱。
version:帶有主、次和修訂的軟件包版本。
arch:硬件平臺。硬件平臺包括了:i386、i486、i586、i686、x86_64、ppc、sparc、alpha
src.rpm:源代碼包。
?
以“openssl098e-0.9.8e-18.el6_5.2.x86_64.rpm”為例:
?
openssl098e:是軟件名稱。
0.9.8e:是軟件版本。
x86_64:是適用的硬件平臺。
?
其中還包含有特殊的名稱:
1、fcXX,elXX:表示這個軟件包的發行商版本,就像這里的fc18,說明這個軟件包是在Fedora 18下使用的。而openssl098e-0.9.8e-18.el6_5.2.x86_64.rpm表示這個軟件包是在RHEL 6.x(Red Hat Enterprise Linux)/CentOS 6.x下使用。
?
2、devel:表示這個RPM包是軟件的開發包,例如mysql-devel-5.1.73-3.el6_5.x86_64.rpm。
?
3、noarch:說明這樣的軟件包可以在任何平臺上安裝,不需要特定的硬件平臺。在任何硬件平臺上都可以運行。
?
了解了RPM包的命名規則,看到一個RPM包就能知道它適用的環境了。
?
獲取包的途徑:按安全高低排名
1.系統發行版光盤或者官方站點服務器
鏡像站(sohu,163)
2.程序項目官方網站
3.第三方組織
Fedora-EPEL:epel
搜索引擎:
http://rpmfind.net
http://rpm.pbone.net
http://pkgs.org
4.自制程序包。
?
建議做包合法性驗證:
來源合法性
包的完整性
?
轉載于:https://www.cnblogs.com/dyllove98/p/4123028.html
總結
以上是生活随笔為你收集整理的Linux下程序包管理工具RPM的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript中函数作用域和声明提
- 下一篇: 利用Android NDK编译lapac