Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
at4JLbk {2YqEX-I* 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
%}e['d h r8?p6E 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
1wFW&|>1 S~)`{
\ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
xy
b=7 --------------------------------------------------------------------------------
mP Hto-=fB c@Br_- qYJ<I'Ux O 以下简要介绍RPM包的安装,删除和查询
+Gg|BTTL/ ~_Fx2T:X RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
?dbSm3 _",<at rpm命令的格式为:
l i)6^f# L""ZI5J{F9 rpm [options] [packages]
;S
\s&. u W@ &a 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
,SidY\FzH @_?2iN?4Z 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
ar#73f --------------------------------------------------------------------------------
<b.p/uA QkC*om'/! Xdx8HB@L RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
Ar[|M2| tH4q*\U 以下为rpm --showrc命令显示的节选:
g$^-WmX\m ~TsRUT 示例:
YoW)]n URs]S~tk 此为部分显示结果
ox%j_P9@: [root@localhost ~]# rpm --showrc
/,\U*'- ARCHITECTURE AND OS:
QS!Z*vG build arch : i386
yQMwt|C4 compatible build archs: athlon i686 i586 i486 i386 noarch
!+A%`m build os : Linux
)obgEJ7Y`l compatible build os's : linux
H`'a|Y install arch : athlon
fLqjBG]< install os : Linux
T.3{}230< compatible archs : athlon i686 i586 i486 i386 noarch
tsL
; wT_ compatible os's : linux
8["%e#%`$ RPMRC VALUES:
^8_yJ=~V macrofiles : /usr/lib/rpm/macros:/usr/lib/rpm/i386-linux/macros:/usr/lib/rpm/redhat/macros:/etc/rpm/macros.*:/etc/rpm/macros:/etc/rpm/i386-linux/macros:~/.rpmmacros
]XbMqHGS optflags : %{__global_cflags} -m32 -march=athlon
i@.Tv.NZ Features supported by rpmlib:
8toOdh rpmlib(VersionedDependencies) = 3.0.3-1
=\|,hg)c PreReq:, Provides:, and Obsoletes: dependencies support versions.
%~x?C4L8 rpmlib(CompressedFileNames) = 3.0.4-1
ah hl file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
C\;l)h_{ rpmlib(PayloadIsBzip2) = 3.0.5-1
"+T`{$Z=C package payload can be compressed using bzip2.
'?| 1\j --------------------------------------------------------------------------------
+Wg/O
- >h)kbsSU0z bXvO+I< rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
`-.2Z
0 @fYVlHT%E 示例:
r
dSL uxB)dS [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
~abyjM Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
X!K> .r_Dg Preparing... ########################################### [100%]
X=KW
> 1:lynx ########################################### [100%]
^)?Wm,{"w --------------------------------------------------------------------------------
[#mkTY N|$9v{ j_ |(Mxbprz 以下列出一些通用选项(可以用于所有模式):
{'tfU "WuUMt --dbpath path
mjWU0. 用path作为RPM数据库的路径。
xi(1H1KN5B 'fl< ac,. --ftpport prot
vRe X7 用port作为FTP端口。
N-?5[T" hdCd:6 --ftpproxy host
O*GF/ R8B 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
#55:qc>m 4qp|g'uXT --help
Rlk3AWl2u 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
n
5R9<A^ oG1zPspL --justdb
+1YEOOfVY 只更新数据库;不改变任何文件。
ioD8- Lo1ySLo$G --pipe command
;W|NG3_y 用管道把rpm输出到commond。
05R"/r* myR{}G --quiet
Lm~<BBp. 仅显示错误信息。
;7qIm83 38p"lT --rcfile filename
H^*AaA9- 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
A6]X
aF m..ajYSQ --root dir
&{.IUg 在dir目录内执行所有操作。
Z8ea)_{# \hgd&H0UU --version
P0}{xq'k9v 输出rpm版本号。
=yZq]g6Q 3\@2!:> -vv
&Y?t 输出调试信息。
olv?$]
iW(LD1~7 --------------------------------------------------------------------------------
rL1yq|]I HvG %## u_$4xNmQ 安装升级和刷新
dEtjcId ;6P>S4`w 安装或升级一个RPM包,install命令的语法为:
hg" i;I Pgr2S I rpm -i [install-options] package_file
(T#$0RFq rpm --install [install-options] package_file
qisvGHo Q}@t' 示例:
xyL)'C {WrEe7dLy [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
0fXMY-$I package lynx-2.8.5-18 is already installed
K 77iv [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
G-T^1? --------------------------------------------------------------------------------
* )<+u~ >|A,rE^Ojt S[3"?$3S 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
,~naKd.ZY e9{0hw7 rpm -U [install-options] package_file
dgpE3
37Lt rpm --upgrade [install-options] package_file
!2KQi=Ng PiKP. 示例:
o@zxzZWg 6]b"n'G 先安装旧版
aNEah [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
z qq FSA%,b;U 再安装新版
\uOM,98xS [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
'_G\_h}5 Ahwi 显示出新版本信息
sWo`dZ\6WB [root@localhost ~]# rpm -q lynx
|ZH(Z}m lynx-2.8.5-18
-p_5T*R A+RW=|: 说明:
_J!^iJ -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
h5'hP>b# &|Duc} t 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
?"9h-g3`x} --------------------------------------------------------------------------------
TM(y%!\ *yRsFC{, Dm)B? H" 刷新的语法是:
C12UZE; ,XO@ZBOM rpm -F [install-options] package_file
"TJu<O"2 tRdf:F\X rpm --freshen [install-options] package_file
.U0Gm_c0 X!Z)V)@J8 示例:
tdH[e0x B gPKf8{#%e 从未安装过lynx包,使用-F选项,将无法升级。
r&
a[? Pz2 b [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
wu.l-VmGp) [root@localhost ~]# rpm -q lynx
%i9 e<.Ot package lynx is not installed
|MZ1j(_ --------------------------------------------------------------------------------
1p.c6[9- QgqJ # 8D )nM| 安装和更新选项为:
NbU`_^oC =o##z5j
K --allfiles
2L](4Q[M 安装或更新所有文件。
GM%OO)dO} X
61|:E --badreloc
9S|sTf 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
GJ*IH9YR H]/~
#a --excludedocs
" !EnQB= 不安装任何文档文件。
M_ukG~/ K'ZNIRr/C --excludepath path
!vgY3S0?rq 不安装文件名以path开始的任何文件。
;0 B1P|7zK [LnPV2@e --force
Vn^GJ'^ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
3@V?L:J A7X
a -h,--hash
:'DyZy2Fd 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
{}YA7M:L dxs5woP --ignorearch
%VO+\L8Fs 即使二进制包用于不同的体系结果也进行安装。
ZG^<<V$h ]
]U )wg --ignoreos
%b^4XTz 即使操作系统不匹配也安装二进制包。
@A1f#Ed< $t;:"i> --ignoresize
7~XC_Yc1 安装前不检查磁盘的可用空间。
s6|'s<x"j
:RnUNz --includedocs
~b~Tq 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
j9h/`Bn 0DicrnH8 --nodeps
ST?{H SCz 不检查这个包是否依赖于其他包的存在。
|!PL"]? I8gNg
Z --noorder
l}uZxKuYx 安装之前,不为了满足依赖关系而对包进行重新排序。
oK\zyNK h vYRAQR: --noscripts
H
d|p@$I 不执行任何预安装或后安装脚本。
a yoC]rE R2Tt6 --notriggers
^!\1q<@n 不执行任何由包安装触发的脚本。
#"UO`2~`l X
hq ss), --oldpackage
H@uu;:l<7A 允许升级以用旧包替换新包。
x2B8G;6u ;|Mfq`s --percent
,m# 当文件被解压时输出完成百分比的信息。
ni ?k' \\ ;A,X,f --prefix path
J>A9]%M 把可重定位包的安装前缀设置为path。
01?+j%k=m/ 5C!zEI) --replacefiles
}%u#TwZ 即使包替换了来自其他安装包的文件,也安装这些包。
r ]7: ?ir X9Ch(nWX --replacepkgs
:PT{>r[ 即使某些包已经被安装,也安装他们。
\t!~s^ Oox ,JZ>)(@) --test
7% D 4 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
r E m/Q! v])ew| --------------------------------------------------------------------------------
i{6&/TBnr "UTW(~D' L/ 7AGR|;C 查询
@ual+=L ,4Q4{Tx query命令的语法为:
RzqgN*]lY SI!A?34 rpm -q[information-options] [package-options]
!.6n=r8d rpm --query[information-options] [package-options]
F{ %*(U v.(dOIrX 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
sE[`x^1'8 --------------------------------------------------------------------------------
a.V5fl0?I@ CV
@P
+ |}4\Gm 以下简单示演示一下包查询:
3>h2W M^Sa{S*? 简单查询:
q-`&C SZKYq8ZA)V 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
&4:R(]| M(a%Qk?]/ 示例:
3mHzOs\jU lOt7ij(,L [root@localhost ~]# rpm -q lynx
}nlS&gew^ lynx-2.8.5-18
J%CCUl2 --------------------------------------------------------------------------------
g!XC5*} lKsn6c,] =@!t/LR7kg 信息查询:
5_;-Qw kO\ O$J^S rpm -qi packagename命令可以得到安装包的汇总信息。
LI%dJ*-V 6nL^"3@S! 示例:
9rMO= [root@localhost ~]# rpm -qi lynx
01'>[h#_n Name : lynx Relocations: (not relocatable)
@-sWXz*W Version : 2.8.5 Vendor: Red Hat, Inc.
,>-j Ztm Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
!h.hJt Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
p^8a<e?f~f Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
M8~3 0L Size : 4837340 License: GPL
#s{^fUN6 Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
'{ _ X1 Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> \\R}3 >Wc URL :
http://lynx.isc.org/ E]'
f&0s Summary : 一个基于文本的网页浏览器。
(u &x.J Description :
Rge>20uTl$ Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
wOf8\s1 图像,但是它支持框架、表格、以及多数其它 HTML
UH MJ(.Wa- 标签。Lynx 优于图形化浏览器的地方是它的速度――
+Vk L?J Links 能够快速启动、退出、及显示网页。
N6._Jb 标识拥有者
N0p6xg~ --------------------------------------------------------------------------------
)k Wxp
~z:]rgX q\@Zf} 找出什么包拥有文件file:
]VjvG}; `E$vWZq} 示例:
dx@dnWRT, &G"s!: [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
G!Brt&_' lynx-2.8.5-18
3Q$4`p; --------------------------------------------------------------------------------
;5ki$)v" |*c1S
-# Tdcc<T
列表包中的文件:
JQQ[jl; ,'0#q 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
v%:deaF
B$g\;$G 示例:
-FJ3;fP& xq((]5P y 此为部分显示结果
GURiW42 [root@localhost ~]# rpm -ql lynx
~]-n%J$q /etc/lynx-site.cfg
wY<s /etc/lynx.cfg
8JY0]G6 /etc/lynx.cfg.cs
_bCAZa&& /etc/lynx.cfg.ja
!i torSl /etc/lynx.cfg.sk
+;~N; BT /usr/bin/lynx
"s0,9;
} /usr/share/doc/lynx-2.8.5
6Hnez @d /usr/share/doc/lynx-2.8.5/INSTALLATION
Dz0D ^(;V /usr/share/doc/lynx-2.8.5/README
!`e`4y*N /usr/share/doc/lynx-2.8.5/docs
5!?5S$> /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
e6taQz@} /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
"B{3q`( /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
Onq^|r's& /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
`PbY(6CF /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
DO(};R%= /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
`^[k8Z( /usr/share/doc/lynx-2.8.5/docs/CMU.announce
qKD /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
vL@<l^`$0 /usr/share/doc/lynx-2.8.5/docs/FM.announce
`0qjaC /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
A1prYD /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
"kP,v&n /usr/share/doc/lynx-2.8.5/docs/README.TRST
a>OYJe /usr/share/doc/lynx-2.8.5/docs/README.chartrans
W/,bz",v3 1O`V_d) --------------------------------------------------------------------------------
)c4tGT< YD[HBF)~j :xr^E] 列出包所提供的实际能力:
7GO9z<m) _|u}^MLO --provides选项的作用是列出这个包所提供的实际能力。
vi}16V84l Ca'BE#q 示例:
~pZ0B#K
J PRU&y/zZmG [root@localhost ~]# rpm -q --provides lynx
(?Mn_FNE| config(lynx) = 2.8.5-18
=_`q;Tu= webclient
]`)5 Qe4 lynx = 2.8.5-18
/F;2wT; --------------------------------------------------------------------------------
V| V9. rC!O}(4t%$ W\~ie}D{ 列出这个包所倚赖的任何包:
M)#9Q=< \}Am]Y/ w -R,--requires选项的作用是列出这个包所依赖的任何包。
^UKAD'_#%O ms0V1` 示例:
}*(_JR4G tM]Gu?6 [root@localhost ~]# rpm -qR lynx
3JGrJ!x /bin/sh
D\_nqx9O config(lynx) = 2.8.5-18
v;\cM/&5 indexhtml
W On<;'}M& libc.so.6
C$[iduS libc.so.6(GLIBC_2.0)
$0 .6No_| libc.so.6(GLIBC_2.1)
`D(V_WZ libc.so.6(GLIBC_2.2)
\ UrD%;sq libc.so.6(GLIBC_2.3)
DP),~8 libcrypto.so.4
X:UlL"G libncursesw.so.5
&9flNoNR9 libssl.so.4
P*!`AWn libz.so.1
C~T,[U rpmlib(CompressedFileNames) <= 3.0.4-1
|~5cNm rpmlib(PayloadFilesHavePrefix) <= 4.0-1
2"G9?)d9 --------------------------------------------------------------------------------
{
YQS fk r2SZC`Z}-M (e'8>Pv 列出包中的配置文件
RTh=x. O8 .iP+ -c,--configfiles选项的作用是列出包中的配置文件
=H)]HxEEM d'96$e o~ 示例:
.6`r`|= [
iTP:8 [root@localhost ~]# rpm -qc lynx
`o#(YEu /etc/lynx-site.cfg
l+6c|([ /etc/lynx.cfg
8e-nzc,] /etc/lynx.cfg.cs
)>1}I_1j) /etc/lynx.cfg.ja
H[hJUR+# /etc/lynx.cfg.sk
{`D]%eRO --------------------------------------------------------------------------------
9HJYrzf{% {j$2=0Cec i975)_X( 显示有关于包的改变信息的日志:
y!1X3X,V ?7NSp2aq2A --changllog选项的作用是显示有关于包的改变信息的日志。
UK,bfLPt~ .L^*9Y0) 示例:
WkiT,(i 6agq^wI 此为部分显示结果
=W7-;& [root@localhost ~]# rpm -q --changelog lynx
gfK_g)'2U * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
+\Vw:~e - Removed perl dependencies (bug #127423).
~+1mH * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
KfjWZ4{v - rebuilt
_+48(QF<