Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
g*+>H1} $VOFOc 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
@-`*m+$U6 3F^Q51:t 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
M/`lM$98: }W^A*]X 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
('+d.F[109 --------------------------------------------------------------------------------
F#5~M<`.o yyTnL 2Y9 /PXzwP_(A 以下简要介绍RPM包的安装,删除和查询
G7/ +ogV ;L ^o*` RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
`r 4fm`< XC#oB~K' rpm命令的格式为:
aV0"~5 ]\HvK CN} rpm [options] [packages]
b4Ekqas 6[AL|d
DK 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
KLk~Y0$:v N?`' /e 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
jT;;/Fd3/ --------------------------------------------------------------------------------
n|yO9:Uw< QIFgQ0{ .O<obq~;C RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
+R75v ) i SQu#p@ 以下为rpm --showrc命令显示的节选:
sU^1wB
Rj (+hK%}K> 示例:
KD.]i' d< y$M%2mh` 此为部分显示结果
<\S:'g"( [root@localhost ~]# rpm --showrc
i{qgn%#}Y ARCHITECTURE AND OS:
cl/_JQ& build arch : i386
E<*xx#p compatible build archs: athlon i686 i586 i486 i386 noarch
ft
Wv~Eh build os : Linux
Yz93'HDB compatible build os's : linux
7IM@i>p% install arch : athlon
PmM3]xVzd install os : Linux
l9H!au= compatible archs : athlon i686 i586 i486 i386 noarch
0Y5_PTWb+Y compatible os's : linux
f|oh.z_R RPMRC VALUES:
AkiDL=;w 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
/2VJX@h optflags : %{__global_cflags} -m32 -march=athlon
Mrb) Features supported by rpmlib:
l}M!8:UzU rpmlib(VersionedDependencies) = 3.0.3-1
mRK>U$v PreReq:, Provides:, and Obsoletes: dependencies support versions.
,9
a rpmlib(CompressedFileNames) = 3.0.4-1
E&:,oG2M file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
ZSm3 XXk rpmlib(PayloadIsBzip2) = 3.0.5-1
{BU;$ package payload can be compressed using bzip2.
~flV`wy$$1 --------------------------------------------------------------------------------
X#;bh78&- vY`s'%WV eb$#A _m rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
B4 }bVjs El"Q'(:/U 示例:
n'6jou b5n'=doR/I [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
BTrn0 Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
"U"Z 3* Preparing... ########################################### [100%]
\Y}8S/] 1:lynx ########################################### [100%]
Wo=jskBrQ --------------------------------------------------------------------------------
<1M-Ro?5k }*"p?L^p{ m&yJzMW| 以下列出一些通用选项(可以用于所有模式):
Jxm.cC5z. y"wShAR --dbpath path
|LKXOU
c 用path作为RPM数据库的路径。
7Hu3>4< 4H]L~^CD --ftpport prot
xKp4*[}m 用port作为FTP端口。
k|d+#u[Mj@ }JAG7L&{ --ftpproxy host
<Q?F?.^e 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
>[*qf9$ _:27]K: --help
{Y9q[D'g . 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
|ZBI * tIgN$BHR> --justdb
b|W=pSTY 只更新数据库;不改变任何文件。
c0u^zH< 6NHX2Ja --pipe command
BThrO d 用管道把rpm输出到commond。
'b{]:Y K(Bf2Mfq --quiet
3$9W%3 仅显示错误信息。
@s2y~0}# +; AZ+w]ZF --rcfile filename
9qG6Pb 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
FJP-y5 0rs"o-s< --root dir
YquI $PV _ 在dir目录内执行所有操作。
j2t7'bO_ @+&LYy72 --version
R~TTL 输出rpm版本号。
Z\(q@3 C $f$SNx)), -vv
lB8-Z ow 输出调试信息。
iOf<$f o@_q]/Mh --------------------------------------------------------------------------------
*[Imn\hu RF?`vRZOe +N]J5Ve-`t 安装升级和刷新
mtpeRVcF xS5vbJ 安装或升级一个RPM包,install命令的语法为:
]"pVj6O 1>.Ev,X+e rpm -i [install-options] package_file
4V"E8rUL( rpm --install [install-options] package_file
j}#w)M bS{bkE> 示例:
c rQ8q;: !K#qe Y} [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
K$z2YJ% package lynx-2.8.5-18 is already installed
3RUy,s [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
JB\UKZXw --------------------------------------------------------------------------------
kx8G qRu~$K 44J]I\+ 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
xPdG*OcX! Q1lyj7c#x rpm -U [install-options] package_file
W
PC]%:L" rpm --upgrade [install-options] package_file
C;v.S5x \a<wKTkn 示例:
{aZ0; [=C6U_vU 先安装旧版
r[e##M [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
yER(6V'\iQ ^"E^zHM( 再安装新版
]IaMp788 [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
SV4E0c> Z<oaK 显示出新版本信息
{'flJ5] [root@localhost ~]# rpm -q lynx
W<{h,j8 lynx-2.8.5-18
LG0;#3YwH y
G~?MEh{ 说明:
z9f-.72"X -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
]2A^1Del Ng&%o 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
.N;=\C* --------------------------------------------------------------------------------
U)TUOwF !vi>U|rh e)IzQ7Zex 刷新的语法是:
> tS'Q`R Gm`8q}<I rpm -F [install-options] package_file
Nboaf Rb;'O89Hj@ rpm --freshen [install-options] package_file
n"8Yv~v*2j {..6>fS 示例:
C#pjmT_ i~72bMwsA 从未安装过lynx包,使用-F选项,将无法升级。
)5H?Vh>36 A}w/OA97RO [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
O0:q;<>z [root@localhost ~]# rpm -q lynx
iRBfx package lynx is not installed
7$#u --------------------------------------------------------------------------------
^f@=:eWI ig"L\ C"T ^^Vg~){4 安装和更新选项为:
F[MFx^sT{ V~#tuv --allfiles
j1Ezf=N6` 安装或更新所有文件。
#z42C?V sq]F;=[5 --badreloc
r<\u6jF 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
8EY:tzw /@5YW"1 --excludedocs
k=^xVQuI 不安装任何文档文件。
! P4*+')M [ hsds\ --excludepath path
qP;OaM
CX 不安装文件名以path开始的任何文件。
f
mGc^d|= !9x} --force
JtZ7ti 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
JI5Dy>u: n !(F, b -h,--hash
>d6| ^h'0 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
Ts9uL5i 11lsf/IP --ignorearch
Ss`LLq0LO 即使二进制包用于不同的体系结果也进行安装。
iQ{VY
^
0 n`KY9[0U= --ignoreos
SAz 即使操作系统不匹配也安装二进制包。
I_BJH'!t "5
A!jq --ignoresize
snJ129}A 安装前不检查磁盘的可用空间。
+h$
9\ Ep}s}Stlr} --includedocs
3oqHGA:} 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
d'2A,B~_* =Sv/IXX\di --nodeps
-HuA
\0J 不检查这个包是否依赖于其他包的存在。
o(HbGHIP p#Bi>/C6 --noorder
N;gfbh] 安装之前,不为了满足依赖关系而对包进行重新排序。
j#6.Gq rs.)CMk53 --noscripts
q:(%*sY> 不执行任何预安装或后安装脚本。
UI#h&j5pW F\!
`/4 --notriggers
8-i#8'/x 不执行任何由包安装触发的脚本。
he4(hX^ |{8Pb3#U --oldpackage
+d>IHpt 允许升级以用旧包替换新包。
]?*wbxU0 #*}+J3/ --percent
HP=+<]?{G 当文件被解压时输出完成百分比的信息。
]-q;4. Jb(H %NJ --prefix path
Ned."e 把可重定位包的安装前缀设置为path。
XRH!]! OYd !v`< --replacefiles
putrSSL} 即使包替换了来自其他安装包的文件,也安装这些包。
YMgNzu PdCEUh\>y --replacepkgs
Ib`XT0k 即使某些包已经被安装,也安装他们。
]3gSQ7 99S^f:t --test
P%6~&woF 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
#jk_5W G#CXs:1pd+ --------------------------------------------------------------------------------
~`/V(r;o xmX 4qtAL g*Phv|kI 查询
^"g~- /,dz@ query命令的语法为:
U17d>]ka Th%zn2R B rpm -q[information-options] [package-options]
yuVs
YV@" rpm --query[information-options] [package-options]
q<J~ ~' -12U4h<e 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
>Q/Dk7 # --------------------------------------------------------------------------------
cR{#V1Z mR~&)QBP. I|OoRq 以下简单示演示一下包查询:
zqku e%^?- [ )F<V! 简单查询:
rA1._
y}
'@R$ 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
iCoX&"lb q)GdD== 示例:
=D(j)<9$A IBGrt^$M [root@localhost ~]# rpm -q lynx
:m;p:l|W lynx-2.8.5-18
)+^+sd --------------------------------------------------------------------------------
W9&=xs6 + {]j]OP ]Ljf?tk 信息查询:
mpyt5#f F|8& rpm -qi packagename命令可以得到安装包的汇总信息。
e-;}366} T{"(\X$ 示例:
+@UV?"d [root@localhost ~]# rpm -qi lynx
?dTD\)%A Name : lynx Relocations: (not relocatable)
rv;3~'V Version : 2.8.5 Vendor: Red Hat, Inc.
~*7]r`6\@ Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
'u658Tj Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
crCJrN= Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
z?zL9 7H Size : 4837340 License: GPL
4-w{BZuS Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
lZ0 =;I Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> `cO:<^% URL :
http://lynx.isc.org/ }H4RR}g Summary : 一个基于文本的网页浏览器。
<@}9Bid!o Description :
!>tL6+yj Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
,4rPg]r@ 图像,但是它支持框架、表格、以及多数其它 HTML
2%1hdA< 标签。Lynx 优于图形化浏览器的地方是它的速度――
PF2nLb2- Links 能够快速启动、退出、及显示网页。
*Ex|9FCt$ 标识拥有者
CLSK'+l --------------------------------------------------------------------------------
ESs\O?nO *:1ey{w: p_ =z# 找出什么包拥有文件file:
58K5ZZG zDp 2g) 示例:
oU|c.mYe \v{=gK [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
3T
9j@N77 lynx-2.8.5-18
!k%#R4*> --------------------------------------------------------------------------------
d-m7}2c Cw%{G'O Vi}_{
Cy 列表包中的文件:
neh(<> tkhCw/ 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
>7r!~+B"9' tgaO!{9I? 示例:
|o@%dH )+M0Y_r 此为部分显示结果
K^$=dLp [root@localhost ~]# rpm -ql lynx
HDKbF/ /etc/lynx-site.cfg
ddo#P%sH' /etc/lynx.cfg
-/k 3a*$/ /etc/lynx.cfg.cs
h~26WLf. /etc/lynx.cfg.ja
1}37Q&2 /etc/lynx.cfg.sk
$cR{o# /usr/bin/lynx
1cGmg1U; /usr/share/doc/lynx-2.8.5
7KPwQ?SjT /usr/share/doc/lynx-2.8.5/INSTALLATION
8f7>?BUS, /usr/share/doc/lynx-2.8.5/README
<Qq*p /usr/share/doc/lynx-2.8.5/docs
l@\FWWQ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
fV:83|eQ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
&R siVBA /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
H[UlY?&+ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
Wf<LR3 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
bfO=;S]b! /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
9Ee'Cm /usr/share/doc/lynx-2.8.5/docs/CMU.announce
kl,3IKHa /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
nd(S3rct& /usr/share/doc/lynx-2.8.5/docs/FM.announce
9akH /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
rbQR,Nf2x /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
4~=l}H>& /usr/share/doc/lynx-2.8.5/docs/README.TRST
fQ98(+6 /usr/share/doc/lynx-2.8.5/docs/README.chartrans
KU;9}!# 7?t6UPf --------------------------------------------------------------------------------
*qMY22X SB7c.H, LF7SS;&~f 列出包所提供的实际能力:
&/b~k3{M_ (ik\|y% A --provides选项的作用是列出这个包所提供的实际能力。
2j UEL=+Y +pefk+ 示例:
9bxBm ,1! ~@dhs [root@localhost ~]# rpm -q --provides lynx
\uUd * config(lynx) = 2.8.5-18
us0{y7(p webclient
CU7WK}2h2C lynx = 2.8.5-18
\@KK X --------------------------------------------------------------------------------
f-BEfC,}' .GM}3(1fX` iem@K 列出这个包所倚赖的任何包:
p[J 8
r{' p3L0'rY|+ -R,--requires选项的作用是列出这个包所依赖的任何包。
mx ]a@tu *Bj7\8cKC 示例:
j/Dc';,d.( DJGq=* [root@localhost ~]# rpm -qR lynx
uHNh|ew21 /bin/sh
K@0/iWm* config(lynx) = 2.8.5-18
M#U #I:z% indexhtml
R'Y=-
yF libc.so.6
=ll{M{0Q]! libc.so.6(GLIBC_2.0)
pp!>: % libc.so.6(GLIBC_2.1)
P\3$Y-id libc.so.6(GLIBC_2.2)
]JUb;B;Z libc.so.6(GLIBC_2.3)
;#>,eD2u libcrypto.so.4
OSDx libncursesw.so.5
_Cd_i[K[ libssl.so.4
#dKHU@+U" libz.so.1
'(4#He?Gd rpmlib(CompressedFileNames) <= 3.0.4-1
?u)[xEx6}+ rpmlib(PayloadFilesHavePrefix) <= 4.0-1
UojHlTg#bT --------------------------------------------------------------------------------
`H7V[' \kQ@G pEn3:.l< 列出包中的配置文件
+=qazE<:0 QSNLo_z -c,--configfiles选项的作用是列出包中的配置文件
5YQq*$|'+ , id`=L= 示例:
! 54(K6a[ }_A#O|dxO [root@localhost ~]# rpm -qc lynx
R'.YE;leBG /etc/lynx-site.cfg
EA/+~ux /etc/lynx.cfg
2S{IZ] /etc/lynx.cfg.cs
;44?`[oP /etc/lynx.cfg.ja
+"!=E
erKi /etc/lynx.cfg.sk
n*
7mP --------------------------------------------------------------------------------
d_5wMK6O6 }k-rOi'jL 6}vPwI 显示有关于包的改变信息的日志:
@+S5"W 9%VNzPzf --changllog选项的作用是显示有关于包的改变信息的日志。
D-zqu~f` rdL>yT/A 示例:
P9wx`x""k CDz-IQi 此为部分显示结果
Q\>Kd
N{ [root@localhost ~]# rpm -q --changelog lynx
.-:R mYGR * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
fYU-pdWPT - Removed perl dependencies (bug #127423).
T]5JsrT * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
IX /r - rebuilt
9tnW:Nw~ * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
L;},1
\ - No longer need lynx-284-ipv6-salen.patch.
SGU~LW& - No longer need lynx2-8-2-telnet.patch.
RyGce'
q * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
olC@nQ1c* - rebuilt
JvHGu&Nr! * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
!50Fue^JM - Updated to dev16, fixing bug #110196.
>Fzu]G4] - No longer need crlf patch.
kpkN GQ2 - Use shipped ja translations.
Ou
_bM n - Use %find_lang.
]hBp
elKJ - Default config file now sets UTF-8 (bug #110986).
crJyk #_ --------------------------------------------------------------------------------
;b[% L& x.7Ln9 y@|gG&f
T 包选择选项
%#rH~E 5]WpH0kzO package_name
^G,]("di` 查询已安装包的package_name。
RNyw`> )w8h2=l -a,--all
]-$0?/`p8 查询所有已安装拨。
"%aJ'l2 A| #9 -f file,--file file
9L}=xX`>? 找出什么包拥有文件file。
h Znq\p~ 9=D\xBd|w -g group,--group group
JkazB1h 找出什么包拥有组group。
j*m7&wOE C?e1 a9r -p package_file
'AX/?Srd 查询未安装包package_file
ZZf-c5 g uL^Qtmm>M --querybynumber num
Y" &