全面講解RedHat系Linux中的rpm包管理系統(tǒng)
在linux世界里流行两种包管理方式,分别是redhat系的rpm和debian系的deb。其中rpm的使用更为广泛,我打算接下来分多章详细介绍一下rpm的包管理机制。
包管理是操作系统用来维护各组件版本的一种方式,对于软件发行者来说,将自己的程序制作成标准的rpm格式也会使得程序的安装、升级和卸载变得非常容易。因此linux下几乎所有流行的程序都有rpm格式的包,有些是发行者自己打包,也有些第三方提供rpm包,例如redhat发行版里的rpm都是redhat自己打包,他们定期打patch,升级并且维护包之间的依赖关系,他们制作的rpm包是最可以信任的。除此之外,http://dag.wieers.com/rpm/这个网站也提供很多较新的rpm包,在redhat官方找不到的包很多在这里都可以找到。
在网上搜索rpm包最常用的方式是通过rpmfind.net进行搜索,它会提供各个发行版下的各个版本的包下载。注意一定要找到正确的发行版下对应的包,由于依赖底层库和库版本的不同,不同版本的发行版的包最好不要混装。
RPM的安装功能
先介绍rpm的安装,基本的安装命令如下
复制代码代码如下:
rpm -ivh xxxxxxx.rpm
i代表安装,e代表卸载,v代表显示安装过程,h代表显示#号样式的进度
下面看一个简单的例子:
复制代码代码如下:
[leconte@localhost soft]$ sudo rpm -ivh enca-1.9-4.el5.rf.i386.rpm
warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing...########################################### [100%]
1:enca ########################################### [100%]
rpm包这样就装上了,但是很多时候没有这么顺利,由于rpm包之间可能存在依赖关系,在依赖关系无法满足的情况下默认是没法继续安装的;再比如某个包已经安装过,如果想再装一次,也是无法继续的。这种情况下可以通过一些参数来强制执行,但是强制执行的后果可能是装的程序无法正常使用,因为它依赖的包你系统并没有提供。
安装时常用的参数如下:
--test 测试安装,并不真实安装而仅仅是测试能否安装。
--nodeps 忽略依赖关系强行安装
--force 强制替换现有版本
--noscripts 仅安装文件不执行附加脚本
下面演示一个强行安装的例子“
复制代码代码如下:
[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm
error: Failed dependencies:
perl(LWP::UserAgent) is needed by awstats-6.9-1.noarch
[leconte@localhost soft]$ sudo rpm -ivh awstats-6.9-1.noarch.rpm --nodeps
Preparing...########################################### [100%]
1:awstats########################################### [100%]
awstats依赖的PERL模块LWP::UserAgent并没有装,因此默认是无法安装的,但是通过nodeps可以强制安装,而LWP::UserAgent可以通过cpan去后续安装。也就是说,如果你明白你在做什么,那么强制安装并不可怕。
需要注意的是,rpm包的安装和卸载都需要在系统的rpm数据库里保存信息,因此需要root权限。
RPM的查询功能
接着介绍rpm的查询功能,查询是我们最常用的功能,例如查询一个包里包含哪些文件、一个文件属于哪个包、以及包之间的依赖关系等等。
rpm的-q参数是用来进行查询的,需要明确的是rpm既可以对安装在系统上的包进行查询,也可以对一个未安装的rpm包进行查询。当一个rpm包安装到系统上之后,安装信息通常会保存在本地的/var/lib/rpm/目录下,数据会以berkeley DB的方式保存。查看/var/lib/rpm/Packages文件的类型可以验证这一点。
复制代码代码如下:
[leconte@localhost rpm]$ file /var/lib/rpm/Packages
/var/lib/rpm/Packages: Berkeley DB (Hash, version 8, native byte-order)
这种情况下的查询其实就是对bdb的读访问。而对一个未安装的rpm包进行查询,则是通过解读rpm包本身而获取信息,这一点是首先需要明确的。
下面我就简单罗列一下rpm最常用的几个查询功能
1.rpm -qa 用来查询系统安装的所有包,a代表all
2.rpm -ql [包名] 用来查询某个包里的文件列表,例如查询包passwd里包含的内容
复制代码代码如下:
[leconte@localhost rpm]$ rpm -ql passwd
/etc/pam.d/passwd
/usr/bin/passwd
/usr/share/man/man1/passwd.1.gz
3.rpm -qi [包名] 用来查询包信息,其中包含包的介绍,作者,打包日期等重要信息。
4.rpm -qf [文件名] 用来查询一个文件所属的rpm包,例如:
复制代码代码如下:
[leconte@localhost rpm]$ rpm -qf /etc/passwd
setup-2.5.58-4.el5
系统配置文件/etc/passwd是属于setup这个包的。
5.rpm -qV [包名] 用来验证某个包中安装的各文件的状态,如果当前文件的大小、md5和安装时数据库里保存的信息不一致,该命令则会将不一致的文件列出来。该命令对于系统出问题的情况下的故障排查很有帮助。
上面是几个最常用的查询命令,都是针对查询系统rpm包情况的。如果要查询未安装的rpm包则只需要加上p参数和包路径即可。例如查询包perl-Git-1.5.5.6-4.el5.i386.rpm的信息:
复制代码代码如下:
[leconte@localhost soft]$ rpm -qip perl-Git-1.5.5.6-4.el5.i386.rpm
warning: perl-Git-1.5.5.6-4.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6
Name: perl-Git Relocations: (not relocatable)
Version : 1.5.5.6 Vendor: Fedora Project
Release : 4.el5 Build Date: 2009年06月19日 星期五 21时28分05秒
Install Date: (not installed) Build Host: xenbuilder2.fedora.redhat.com
Group : Development/Libraries Source RPM: git-1.5.5.6-4.el5.src.rpm
Size: 24878License: GPL
Signature : DSA/SHA1, 2009年06月20日 星期六 04时07分18秒, Key ID 119cc036217521f6
Packager: Fedora Project
URL : http://kernel.org/pub/software/scm/git/
Summary : Perl interface to Git
Description :
Perl interface to Git.
RPM包的依赖关系
rpm包之间会维持依赖关系,这是包管理系统的特色。我们都经历过安装一个包而因为依赖缺失而装不上的情况。后来yum的出现能一定程度解决这个问题,但我们仍然有必要了解rpm依赖关系背后的细节。
自己打过rpm包的人都知道,在包的spec配置文件往往要明确写出此包所依赖的包名或文件名,同时也可能需要明确写出此包所提供的内容。这个内容可能是动态库也可能是其他一些名字,并不一定是文件名。各个包之间正是依靠这些内容来建立依赖关系的,每个包都提供一些内容同时依赖一些别的内容,整个系统就在这样一种相互依赖中形成了。
在看具体的例子之前先介绍几个指令:
rpm -qR [包名] 可以用来查询指定包所依赖的内容
rpm -q –provides [包名] 可以用来查询指定包所提供的内容
rpm -q –whatprovides [内容] 可以用来查询哪个包提供了指定内容
rpm -q –whatrequires [内容] 可以用来查看哪些包依赖于指定内容
例如我们以time这个包为例进行查询,结果如下:
复制代码代码如下:
[leconte@localhost soft]$ rpm -qR time
/bin/sh
/bin/sh
/sbin/install-info
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.3.4)
rpmlib(CompressedFileNames) lt;= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) lt;= 4.0-1
rtld(GNU_HASH)
可见,time这个包如果要安装,上述内容必须已经存在,否则将会提示依赖缺失而无法安装。我们以列表中的/bin/sh为例进行反查,可以看到系统中哪个包提供了/bin/sh
复制代码代码如下:
[leconte@localhost soft]$ rpm -q --whatprovides "/bin/sh"
bash-3.2-24.el5
很明显,bash这个包提供了/bin/sh,正是由于bash的安装才满足了time的安装需求。
time依赖于bash等包,同时它也提供了一些内容,有可能被别的包依赖:
复制代码代码如下:
[leconte@localhost soft]$ rpm -q --provides time
time = 1.7-27.2.2
[leconte@localhost soft]$ rpm -q --whatrequires 'time'
no package requires time
不幸的是系统中并没有包依赖于time,因为它本身属于较上层的包。
对于一些底层内容就会有很多包依赖它,例如之前碰到的/bin/sh:
复制代码代码如下:
[leconte@localhost soft]$ rpm -q --whatrequires '/bin/sh'
bash-3.2-24.el5
bash-3.2-24.el5
info-4.8-14.el5
ncurses-5.5-24.20060715
libxml2-2.6.26-2.1.2.7
readline-5.1-1.1
......................省略n行
由于篇幅所限就不全列举出来了,这种依赖关系应该可以一目了然了。
和上节类似,rpm -qR和rpm -q –provides这两个查询指令同样可以加上-p参数应用到一个未安装的rpm包,例如
复制代码代码如下:
[leconte@localhost soft]$ rpm -qp --provides enca-1.9-4.el5.rf.i386.rpm
warning: enca-1.9-4.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
libenca.so.0
enca = 1.9-4.el5.rf
可以看到,enca这个rpm包提供了动态库libenca.so.0和enca本身。
通过使用本节这四条依赖关系查询指令基本可以了解到系统上众多rpm包之间的耦合关系,明确了这一点,我们对rpm的理解也就更深了一步。
&&
RPM包的卸载和升级
rpm包的卸载和升级的指令如下:
rpm -e [包名] 用来卸载一个rpm包
rpm -U [包文件] 用来升级一个现有的rpm
需要注意的是,如果要卸载的rpm包中的内容被别的rpm包依赖,那么则无法卸载,例如
复制代码代码如下:
[leconte@localhost ~]$ rpm -ephp-common
error: Failed dependencies:
php-common = 5.2.9-4 is needed by (installed) php-pdo-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-bcmath-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-curl-5.2.9-4.i386
php-common = 5.2.9-4 is needed by (installed) php-dba-5.2.9-4.i386
php-common由于被 php-pdo等包依赖而无法单独卸载,php-pdo和php-common可以利用上节介绍过的依赖关系查询指令查到:
复制代码代码如下:
[leconte@localhost ~]$ rpm -qR php-pdo
config(php-pdo) = 5.2.9-4
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1.3)
libc.so.6(GLIBC_2.3)
libc.so.6(GLIBC_2.4)
librt.so.1
libsqlite3.so.0
php-common = 5.2.9-4
..............
[leconte@localhost ~]$ rpm -q --whatrequires php-common
php-pdo-5.2.9-4
php-bcmath-5.2.9-4
php-curl-5.2.9-4
php-dba-5.2.9-4
php-gd-5.2.9-4
...............
这种情况下想要卸载php-common,只能将它依赖的所有包全部卸载掉。更暴力的方式是指定-nodeps忽略依赖关系限制,但是这样造成的后果就是php-pdo等包将无法正常使用,因此这种方式一般不推荐。
rpm包的升级指的是rpm包的版本升级,这种情况下实际内部执行的动作分两步,即先安装新版本然后卸载老版本。此外,rpm也可以进行包的降级,只需要指定–oldpackages参数即可。
值得注意的是在卸载和升级的过程中,包中的配置文件会被妥善处理,rpm会根据一系列规则决定配置文件是否保留,即使被替换,旧的配置文件也会被重命名后保存起来,你之前对配置文件做过的修改不会因为rpm包的升级而丢失。
推薦系統(tǒng)
雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:WinXP雨林木風(fēng)在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風(fēng)WindowsXP其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用
系統(tǒng)大小:0MB系統(tǒng)類型:Win7蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動(dòng),幫助用戶們進(jìn)行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來(lái)下載安裝吧。
系統(tǒng)等級(jí):進(jìn)入下載 >雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載
系統(tǒng)大?。?/em>1.01GB系統(tǒng)類型:WinXP雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風(fēng)WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動(dòng),可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對(duì)硬件的加速,加固了系統(tǒng)安全策略,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來(lái)都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園
系統(tǒng)等級(jí):進(jìn)入下載 >蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國(guó)內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來(lái)都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園win10國(guó)內(nèi)鏡像版,基于國(guó)內(nèi)用戶的習(xí)慣,做
系統(tǒng)等級(jí):進(jìn)入下載 >windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win11蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對(duì)硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運(yùn)行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級(jí):進(jìn)入下載 >
相關(guān)文章
- 《巫師3:狂獵》游戲中因缺失steam_api64.dll文件導(dǎo)致的問(wèn)題應(yīng)該如何解決
- 解決《巫師3:狂獵》游戲中因缺失nvapi64.dll文件導(dǎo)致的問(wèn)題
- 解決《巫師3:狂獵》游戲中因缺失phyx3common_64.dll文件導(dǎo)致的問(wèn)題
- NBA 2K19啟動(dòng)故障的深度解析與應(yīng)對(duì)策略——解決缺失msvcr110.dll文件的問(wèn)題
- 解決《英雄連2》游戲中steam_api.dll文件丟失導(dǎo)致無(wú)法啟動(dòng)的問(wèn)題
- 解決《勇者斗惡龍:英雄》游戲中丟失steam_api64.dll文件的問(wèn)題
- 解決《勇者斗惡龍:英雄》游戲中缺失msvcp110.dll文件的問(wèn)題
- PUBG(絕地求生)因缺失DLL文件導(dǎo)致無(wú)法啟動(dòng)的全方位解決方案及深度解析
- 當(dāng)電腦C盤滿載時(shí),如何科學(xué)、高效地進(jìn)行清理與釋放空間
- NewtabPro瀏覽器插件:集合ChatGPT、PDF轉(zhuǎn)換、OCR識(shí)別、谷歌翻譯及趣味減壓功能于一體的高效在線工具
- win11任務(wù)欄圖標(biāo)變黑變暗怎么辦?win11任務(wù)欄圖標(biāo)變暗處理教程分享
- win11搜索欄一直在加載無(wú)法使用深入解決方法分享
- win11休眠后喚醒點(diǎn)擊圖標(biāo)沒反應(yīng)?win11休眠后喚醒點(diǎn)擊圖標(biāo)沒反應(yīng)全方位解決指南
- 設(shè)置壁紙后不能鋪滿屏幕電腦桌面的邊緣顯示黑邊怎么處理?
熱門系統(tǒng)
推薦軟件
推薦應(yīng)用
推薦游戲
熱門文章
常用系統(tǒng)
- 1windows11最新穩(wěn)定版下載 電腦公司x64位 激活密鑰 筆記本專用下載
- 2win10中秋國(guó)慶版下載 深度技術(shù)64位專業(yè)版 Ghost鏡像下載 永久免費(fèi)
- 3系統(tǒng)之家windows11企業(yè)版最新 ghost x64bit v2022.05下載
- 4深度技術(shù)win11娛樂(lè)版 X64位最新版下載 ISO鏡像 華碩電腦專用下載
- 5Windows7家庭版下載 電腦公司x86內(nèi)部版 官網(wǎng)鏡像下載 無(wú)需密鑰激活
- 6windowsXP系統(tǒng)之家 純凈版 V2023 XP ghost鏡像最新版下載
- 7電腦公司windows11專業(yè)版 x64 v2022.05 ghost下載
- 8外星人Win11游戲版系統(tǒng) WINDOWS11游戲?qū)S冒鎣2021.11
- 9Windows10經(jīng)典珍藏版下載 電腦公司 x64位穩(wěn)定版下載 筆記本專用