Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
Gm>8=
=c elP`5BuN 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
im1]:kr7 I{1w8m4O6 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
g~Q#U;] ?,s{M^sj^ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
/{qr~7k,oQ --------------------------------------------------------------------------------
YTYYb#"Q 2@^8{ "$Rl9(} 以下简要介绍RPM包的安装,删除和查询
dks0 QZ{:#iuig RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
;J?!D x Lb/a_8<E? rpm命令的格式为:
uOBpMAJ Txw,B2e)> rpm [options] [packages]
Rmd;ug9 *M KVm)Iv 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
{d7KJmN 0HG*KW 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
q+LjWZ+O --------------------------------------------------------------------------------
P7@qvg E[_Z%zd^ OjZ+gl} RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
v3aiX Wxp^*._q3I 以下为rpm --showrc命令显示的节选:
VMtR4! :q k,q` ^E8k 示例:
O
gycP4z[ ~8|$KD4I 此为部分显示结果
][qZOIk@ [root@localhost ~]# rpm --showrc
&|9?B!,` ARCHITECTURE AND OS:
Hj2P|;2S build arch : i386
y0=BL compatible build archs: athlon i686 i586 i486 i386 noarch
_;0:wXib= build os : Linux
AY * compatible build os's : linux
Z/ThYbk install arch : athlon
!)&-\!M> install os : Linux
6NZf!7,B compatible archs : athlon i686 i586 i486 i386 noarch
&G'R{s&" compatible os's : linux
VY![VnHsB RPMRC VALUES:
^{Mx?]z 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
@];Xbbw+c optflags : %{__global_cflags} -m32 -march=athlon
z2,rnm)Q Features supported by rpmlib:
s'5
jvlG rpmlib(VersionedDependencies) = 3.0.3-1
8I~ H1 PreReq:, Provides:, and Obsoletes: dependencies support versions.
Mb/R+:C` rpmlib(CompressedFileNames) = 3.0.4-1
(D~mmffY1 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
eL-92]]e rpmlib(PayloadIsBzip2) = 3.0.5-1
W 6jB!W package payload can be compressed using bzip2.
Dcp,9"yt% --------------------------------------------------------------------------------
0jg-] Q>z0?%B B"{CWH O rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
%`gqV9a a_Xh(d$ 示例:
KXdls(ROP 12k)Ek9 [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
-pLb%f0? Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
9K%E+_7b Preparing... ########################################### [100%]
4V[+6EV 1:lynx ########################################### [100%]
sb8SG_ c. --------------------------------------------------------------------------------
Z i|'lHr I@x*> xi|iV1A 以下列出一些通用选项(可以用于所有模式):
I*}:C w#"c5w~ --dbpath path
az19-QIcg 用path作为RPM数据库的路径。
G.(9I~! 9$Hgh7'hvs --ftpport prot
ql_aDoj 用port作为FTP端口。
`Y+p7*Qr2 EcP"GO5 --ftpproxy host
eQYW>z'%, 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
`%rqQnVB a:P%
r --help
C0kwI*) 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
\WZ00Y,* p%,JWZ[ --justdb
HK
;C*;vC% 只更新数据库;不改变任何文件。
>r{,$)H0 sy]1Ba% --pipe command
KXR 用管道把rpm输出到commond。
)|2g#hH5 7$b78wax --quiet
r)*KgGsk 仅显示错误信息。
9fe~Q%x=u ,"*[T\u --rcfile filename
N!btj,vx 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
3
vE;s"/ m~X:KwK4 --root dir
\N;s@j W 在dir目录内执行所有操作。
eaCEZHr$ ?2.<y_1 --version
k.0$~juu 输出rpm版本号。
==|//:: \ JqFFI:Q5a -vv
Z/a]oR@ 输出调试信息。
*jDzh;H!w i\,#Z! --------------------------------------------------------------------------------
<;_X=s`f, |ss_< QvqX3FU 安装升级和刷新
03{e[#6 <tFq6| 安装或升级一个RPM包,install命令的语法为:
*y.KD4@{ KS%xo6k. rpm -i [install-options] package_file
Is%-r.i rpm --install [install-options] package_file
!_zmm$bR
g3"`b)M 示例:
|-Y,:sY: 9g "?`_ [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
a}%>i~v< package lynx-2.8.5-18 is already installed
x/5%a{~j2 [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
G?YKm1:w --------------------------------------------------------------------------------
h5B'w z^=9%tLJ 6i>xCb 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
8<IOX {wCQ#V rpm -U [install-options] package_file
;Wb
W\,P' rpm --upgrade [install-options] package_file
? NVN&zD] pGUrYik4 示例:
p?5`+Z E+[K?W5 先安装旧版
.}]5y4UQ. [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
iv3NmkP1 Qs</.PO 再安装新版
opdi5e)jK [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
kjjO<x?&* IDwneFO 显示出新版本信息
dp-8,Seu [root@localhost ~]# rpm -q lynx
i wK,XnIR lynx-2.8.5-18
zq(AN< >_tn7Z0L 说明:
B
ljZ&wZW -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
dt;R H?^Poe(=( 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
)I`B+c: --------------------------------------------------------------------------------
M(SH3~ P62g7>B5^ #@lLx?U 刷新的语法是:
J`V7FlM \$GlB+ iCx rpm -F [install-options] package_file
vvdC.4O W
aks*^| rpm --freshen [install-options] package_file
r!j_KiUy :C>slxY 示例:
D0tI 1^Ci$ra 从未安装过lynx包,使用-F选项,将无法升级。
E3sl"d;~ Z*x Q"+\ [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
i>>_S&!9p [root@localhost ~]# rpm -q lynx
p\F*Y,4 package lynx is not installed
:/d#U:I --------------------------------------------------------------------------------
#L[Atx >*k3D& yv]/A<gP+ 安装和更新选项为:
} n_9d. qp'HRh@P2: --allfiles
zTm&m#){3A 安装或更新所有文件。
ocGqXDg3 I`zn#U' --badreloc
57D /" 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
%A:<rO85o exZa:9 sp --excludedocs
+-K-CXt 不安装任何文档文件。
YG!~v~sV 4GeWo@8h --excludepath path
;1K.SDj 不安装文件名以path开始的任何文件。
x4R[Q&:M U
$e-e/ --force
)Q&:$] 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
0P&rTtU6 3zv_q&+8b -h,--hash
0ir] 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
^ JJ*pT: qAHQZKk --ignorearch
>t 3%-Kc 即使二进制包用于不同的体系结果也进行安装。
T"XZ[q -7$7TD`'7 --ignoreos
`a98+x?JF 即使操作系统不匹配也安装二进制包。
rp+&ax}Wh kk
)9!7 --ignoresize
M7BJ$fA0E 安装前不检查磁盘的可用空间。
Nz\=M|@(# <jY"+@rF --includedocs
0a ZplE, 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
ggXg4~WL J*5 )g --nodeps
m ['UV2 不检查这个包是否依赖于其他包的存在。
%F]4)XeW-+ K;k&w; j --noorder
josc 安装之前,不为了满足依赖关系而对包进行重新排序。
MXq+aS{ m\O<Yc keA --noscripts
+MvcW.W~ 不执行任何预安装或后安装脚本。
Qis[j-?: pa`"f&JO --notriggers
_.KKh62CN 不执行任何由包安装触发的脚本。
Uf1i"VY Xg_M{t --oldpackage
f{t5r 允许升级以用旧包替换新包。
z ~#
.Ey _2R;@[f2 --percent
4'RyD<K\ 当文件被解压时输出完成百分比的信息。
&k+jVymH 4w<U%57 --prefix path
f]jAa?d T& 把可重定位包的安装前缀设置为path。
,Hlbl}.ls iqRk\yq< --replacefiles
Y1h8O%? 即使包替换了来自其他安装包的文件,也安装这些包。
[z5pqd- x9hkE!{8 --replacepkgs
&O/;YGEAB 即使某些包已经被安装,也安装他们。
g+bc4eU ]p:s5Q --test
mG*[5?=r 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
F\^9=}b_i 2/<VoK0b --------------------------------------------------------------------------------
V\5ZRLawP @A GM=v *I:^g 查询
\Z{6j&; \7n ;c query命令的语法为:
3WHj|ENW x\z*iv rpm -q[information-options] [package-options]
)*}2L_5] rpm --query[information-options] [package-options]
(P%{Tab 7k.=_Tl 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
@eU;oRVc{ --------------------------------------------------------------------------------
=]X_wA;% ]|KOc& y:I zy^t95/m 以下简单示演示一下包查询:
ecfw[4B` 6q-X$ 简单查询:
o
EXN$SIs 4! ]28[2B6 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
ixm-wZI }TI"j{(QJ 示例:
7:awUoV8f 2K[Y|.u8>q [root@localhost ~]# rpm -q lynx
U$-Gc[=| lynx-2.8.5-18
OHTJQ5%zL --------------------------------------------------------------------------------
JVy- Y ~\B1\ G I.As{0cc 信息查询:
Tk\?$n t@m!k+0 rpm -qi packagename命令可以得到安装包的汇总信息。
OMgFp |^ 0&XdCoIe 示例:
E]Dcb*t [root@localhost ~]# rpm -qi lynx
{"k}C2K'r Name : lynx Relocations: (not relocatable)
sl?> X)} Version : 2.8.5 Vendor: Red Hat, Inc.
b9`vYnLk Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
Y_'3pX, Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
,Q:Ylc8 Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
PWUS@I Size : 4837340 License: GPL
zmaf@T Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
m3[R Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> ;7=pNK URL :
http://lynx.isc.org/ Y<0}z>^ Summary : 一个基于文本的网页浏览器。
n sW# Description :
xDJ@MW# Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
Vcjmj 图像,但是它支持框架、表格、以及多数其它 HTML
r I)Y
W0 标签。Lynx 优于图形化浏览器的地方是它的速度――
.xG3`YH Links 能够快速启动、退出、及显示网页。
~nLE?>x|Z 标识拥有者
%+gK5aVab --------------------------------------------------------------------------------
ul@G{N{L lqdil l\ -|_#6-9 找出什么包拥有文件file:
,cj531. $D&N^}alW 示例:
JO3"$s|t my|]:(_0d [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
wN}@%D-[v lynx-2.8.5-18
tE=;V) %we --------------------------------------------------------------------------------
)w/ #T #7(?B{i "wqN,}bj\ 列表包中的文件:
%BBM%Lj ':fq/k3;& 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
VDy2!0 *n]f) Jc 示例:
#POVu|Y;h naOCa 此为部分显示结果
4gKu8G [root@localhost ~]# rpm -ql lynx
WK$d<:" /etc/lynx-site.cfg
g+v.rmX /etc/lynx.cfg
'\g-z /etc/lynx.cfg.cs
>`{B /etc/lynx.cfg.ja
4 q-/R /etc/lynx.cfg.sk
Yf&P|Iiw /usr/bin/lynx
kz30! L /usr/share/doc/lynx-2.8.5
' v)@K0P /usr/share/doc/lynx-2.8.5/INSTALLATION
-/)>DOgUq /usr/share/doc/lynx-2.8.5/README
L[s7q0 F`l /usr/share/doc/lynx-2.8.5/docs
z:gp\ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
r~2>_LK /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
'aV/\a:* /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
o*5iHa(Qm /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
yq7gBkS /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
~(v7:? /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
)/87<Y;o /usr/share/doc/lynx-2.8.5/docs/CMU.announce
B:X,vE /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
E^K<b7 /usr/share/doc/lynx-2.8.5/docs/FM.announce
\mo NpKf /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
IJ[r!&PY /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
(D5sJ$&E@\ /usr/share/doc/lynx-2.8.5/docs/README.TRST
cVb&Jzd /usr/share/doc/lynx-2.8.5/docs/README.chartrans
Mn>/\e a%g |E'\Jw --------------------------------------------------------------------------------
O-uno{Fd* uE'O}Y95 b@s6jNhVO^ 列出包所提供的实际能力:
>(.GIR AX{X:L8Ut2 --provides选项的作用是列出这个包所提供的实际能力。
GBg~NkC7. f$y`tT %o 示例:
NpPuh9e{ j-$F@p_2F [root@localhost ~]# rpm -q --provides lynx
`>1XL 2 config(lynx) = 2.8.5-18
#];b+ T webclient
Ga$ J7R lynx = 2.8.5-18
Vd&&GI(:?^ --------------------------------------------------------------------------------
gc6Zy|^V4` 4>t'4p6{ yw@kh^L 列出这个包所倚赖的任何包:
NNgpDL* * a ?qV -R,--requires选项的作用是列出这个包所依赖的任何包。
|^09ny| s;!_'1pi@ 示例:
R]LuZN fFe{oR
[root@localhost ~]# rpm -qR lynx
C0`Bi:Ze /bin/sh
zhdS6Gk+ config(lynx) = 2.8.5-18
$S6%a9m
indexhtml
rWMG6+Scb libc.so.6
% S vfY { libc.so.6(GLIBC_2.0)
{VmJVO]S libc.so.6(GLIBC_2.1)
gJFx#s0?6. libc.so.6(GLIBC_2.2)
'W_u1l/ libc.so.6(GLIBC_2.3)
fHV%.25 libcrypto.so.4
Mil+> X0 libncursesw.so.5
3QF/{$65! libssl.so.4
w\}@+w3b~ libz.so.1
GZt L- rpmlib(CompressedFileNames) <= 3.0.4-1
%iq8dAW% rpmlib(PayloadFilesHavePrefix) <= 4.0-1
\#(tI3 --------------------------------------------------------------------------------
&02I-lD4+ G^%FP!'D? 0d|DIT#>? 列出包中的配置文件
?h|&kRq 6k9cvMs%H -c,--configfiles选项的作用是列出包中的配置文件
Hy~+|hLvh Rt+ak} 示例:
@,^c?v $*')Sma [root@localhost ~]# rpm -qc lynx
uB1>.Pvxb /etc/lynx-site.cfg
ks|c'XQb /etc/lynx.cfg
)q|a Sd /etc/lynx.cfg.cs
tv 7"4$T /etc/lynx.cfg.ja
4`[2Te> /etc/lynx.cfg.sk
2{}8_G --------------------------------------------------------------------------------
5._1G| 3 $a#-d; Fm#`}K_ 显示有关于包的改变信息的日志:
Kt5k_9 , G2(l --changllog选项的作用是显示有关于包的改变信息的日志。
dTrz7ayH [,0[\NC 示例:
Kl/n>qEt UbDpSfub 此为部分显示结果
-]. a0 [root@localhost ~]# rpm -q --changelog lynx
Dbg,|UH * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
V'^E'[Dd{ - Removed perl dependencies (bug #127423).
:B7dxE9[r * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
L/c`t7 - rebuilt
/6{P
?)]pE * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
aN?^vW< - No longer need lynx-284-ipv6-salen.patch.
ia#8 ^z - No longer need lynx2-8-2-telnet.patch.
XVfw0-O * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
l.Q.G<ol - rebuilt
8= "01 * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
^JMO POm - Updated to dev16, fixing bug #110196.
;k:17&:8ue - No longer need crlf patch.
y2M]z:Y U - Use shipped ja translations.
[[7=rn}@< - Use %find_lang.
3C
gmZ7[ - Default config file now sets UTF-8 (bug #110986).
1:;S6{oQ --------------------------------------------------------------------------------
1smKU9B2) BVzMgn; <~teD[1k" 包选择选项
jB"IJ$cD JKTn package_name
w| eVl{~p 查询已安装包的package_name。
1k0*WCfZ :|a$[g5
-a,--all
I~F]e|Ehqr 查询所有已安装拨。
Ay@/{RZz 83!{?EPE -f file,--file file
Tf40lv+{ 找出什么包拥有文件file。
6an= C_Mb` "t)$4gERK -g group,--group group
(91 YHhk{ 找出什么包拥有组group。
U1;&G z7_h$v -p package_file
\C<'2KZR, 查询未安装包package_file
{|B
2$1': Y[0mTL4IO --querybynumber num
0[ZB ^ 查询第num个数据库条目。主要用于调试。
j8)rz xnOd$] -qf,--queryformat num
aQ*?L
l 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
| Di7,$c y>>)Yo&| --specfile specfile
*cP(3n3]R 查询specfile,就好象它是个包
Aa+<4
R kx,3[qe'S --triggeredby pkg
%v4*$E!f 列出触发安装pkg包的包。
DX_?-jw})f i`}!<{k --whatrequires capability
WBWIHv{j 列出要求特定能力来行使职责的包。
@TJ2
|_s6] 8?N![D\@ --whatprovides capability
sSy!mtS 列出提供特定能力的包。
&!F"3bD0 --------------------------------------------------------------------------------
WH_
W:
i ?%_Pu &Jd_@F#J 信息选择选项:
dUL*~%2I FQ>y2n=<d -c,--configfiles
9]vy#a# 列出包中的配置文件。
^'p!#\T;H zF@[S --changelog
qVW3oj<2 显示有关于包的改变信息的日志。
WK5B8u*< 4\E1M[ 6
-d,--docfiles
u'T?e+= 列出包中的文档文件。
4_-L1WH LP'~7FG --dump
RiZ)#0 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
22/"0=2g 以下列顺序输出信息:
c_T+T/O path size mtime md5sum mode owner group isconfig isdoc rdev symlink
DQ@M?~1hp EXsVZg"# --filebypkg
qr (t_qR& 列出每个包中的所有文件。
AC*SmQ\>! 7+;.Q
-i
M8R/a[ -A 显示包的信息,包括名字,版本和描述。
"R\D:Olb# 8g {;o7 -l,--list
'p[*2J"K4 列出包中所有文件
<v!jS=T 7LB%7~{< --last
@KRia{
根据安装时间列出包,最新的包排第一位。
`CRF E5 0oe2X1.% --provides
N;a' `l 列出这个包所提供的实际能力。
WfHa nlZJ}xZ -R,--requires
A
^t _"J 列出这个包所依赖的任何包。
@~}~;}0x L}7 TM:% -s,--state
U|<>xe*|% 列出包中的每个文件及其状态。可能的状态为normal,not installed或replaced。
}`aT=_ B g'td(i[ --scripts
;9<?~S 列出任何在安装和卸载过程中所使用的包特定的shell脚本。
X%5 `B2Wu G8WPXj( --------------------------------------------------------------------------------
YU XxQ| x*p'm[Tdtm N2 t` 卸载
l.(|&