Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
I$Z"o9" 3!,%;Vz= 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
F JzjS; -l\@50,D 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
zme:U![ 0h7\zoZ5 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
1)r1/0 --------------------------------------------------------------------------------
,y0kzwPR1 ;#;X@BhS gQ?k}D 以下简要介绍RPM包的安装,删除和查询
+o/q@&v;Ax $d"6y RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
6+It>mnR
~DJ/sY2/ rpm命令的格式为:
;'h7
j*6 r=9*2X# rpm [options] [packages]
%=]{~5f> L^=>)\R2$[ 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
u7/M>YJ`T {[$p}#7Y 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
!B\\:k]aO^ --------------------------------------------------------------------------------
J^v_VZ3 ?832#a?FZ; pS%Az)3RZ RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
$exu}% .VUZ4e
以下为rpm --showrc命令显示的节选:
#C+0m` %pMW5]H 示例:
$]Q_x? 'g^]ZTxb 此为部分显示结果
T|E ;U [root@localhost ~]# rpm --showrc
EGs z{c[8@ ARCHITECTURE AND OS:
/
g&mDYV| build arch : i386
I@hC$o compatible build archs: athlon i686 i586 i486 i386 noarch
:g,r l\S7 build os : Linux
toQn]MT compatible build os's : linux
o6q Qzk install arch : athlon
=Xp3UNXg install os : Linux
%PG0PH4? compatible archs : athlon i686 i586 i486 i386 noarch
9A6ly9DIS compatible os's : linux
83S],L RPMRC VALUES:
iw#luHcJ 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
I*#~@:4* optflags : %{__global_cflags} -m32 -march=athlon
pG"
4qw Features supported by rpmlib:
Ad"::&&Wk rpmlib(VersionedDependencies) = 3.0.3-1
b*bR<|dT j PreReq:, Provides:, and Obsoletes: dependencies support versions.
-du+iOe? rpmlib(CompressedFileNames) = 3.0.4-1
J|ILG file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
DF|qNX rpmlib(PayloadIsBzip2) = 3.0.5-1
)ow 3Bl8w package payload can be compressed using bzip2.
[X-Q{c4 --------------------------------------------------------------------------------
.z_^_@qdm 2/;KZ+U& vj#gY2qZ rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
4
Hu+ljdjB jReI+
pS 示例:
eQ*gnV}rE% /aK },+ [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
7Fq|Zc`P Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
;BI{v^()s Preparing... ########################################### [100%]
a#kZY7s 1:lynx ########################################### [100%]
K,So#Ui --------------------------------------------------------------------------------
Edjh* {L8SDU{P sG\=_-"v( 以下列出一些通用选项(可以用于所有模式):
u^{Q|o:=x \>\w-ty[( --dbpath path
vbSz&+52; 用path作为RPM数据库的路径。
>z(6ADq fxc~5~$> --ftpport prot
<
*XC`Ii 用port作为FTP端口。
9J>DLvl; +oyc9PoXF --ftpproxy host
&AoWT:Ea 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
TzIgEn~ $mpfr#!&3o --help
mX<D]Z< k 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
h IGa);g nrZv>r --justdb
ok7DI 只更新数据库;不改变任何文件。
V-jo2+Y5= !1!uB } --pipe command
BG'gk#J+f 用管道把rpm输出到commond。
FMR0?\jnT E P<U:F --quiet
:\.v\.wm 仅显示错误信息。
`_f3o,5 H#1/H@I# --rcfile filename
C#gQJ=!B 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
cW MZw|t <,LeFy\zW --root dir
^tpy8TQ 在dir目录内执行所有操作。
<q_H 3| (=p}b:Z --version
*yt/
Dj 输出rpm版本号。
I{M2nQi {8t;nsdm! -vv
6k^vF~ 输出调试信息。
u]zb<)'_ 9%)'QDVGLf --------------------------------------------------------------------------------
;T/' CD ~kYF/B2* RRV&!<l@$ 安装升级和刷新
;E*ozKpm J,E&Uz95% 安装或升级一个RPM包,install命令的语法为:
2!jbaSH(+ U:`rNHl rpm -i [install-options] package_file
>;HXH^q rpm --install [install-options] package_file
( /uL6W d0 BURiLEYZl 示例:
Z-:$)0f u0i
@. [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
s
n? package lynx-2.8.5-18 is already installed
4I,HvP [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
fF>H7 --------------------------------------------------------------------------------
qT}&XK`Q^ 2*Gl|@~N (spX3n%p 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
XLM 9+L /AWHG._ rpm -U [install-options] package_file
2y,~i;;_ rpm --upgrade [install-options] package_file
89WuxCFS U~7.aZHPx3 示例:
!N!M
NsyDz mV^dIm 先安装旧版
B:9Z;g@& [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
&npf
%Eub CNP?i(Rk 再安装新版
q.MM|;_u` [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
!CEF@J xv1$,|^ts 显示出新版本信息
$'e.bh [root@localhost ~]# rpm -q lynx
QO|ODW+D lynx-2.8.5-18
<01MXT- az`5{hK 说明:
15 SIZ:Q -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
CIV6Qe"< '"I"D9;9 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
O1/!)E! --------------------------------------------------------------------------------
p-ry{"XA ]Q^oc GTLlQy)'= 刷新的语法是:
)TXn7{M: ^GL0|G=(1 rpm -F [install-options] package_file
X2o5Hc)l< rvOR[T> rpm --freshen [install-options] package_file
j^LnHVHk1 Xf#uK\f 示例:
n NAJ8z}Nt }LE.kd& 从未安装过lynx包,使用-F选项,将无法升级。
7O"T`> qo'pU/@ [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
23Eg|Xk [root@localhost ~]# rpm -q lynx
>O~xu^N? package lynx is not installed
-[+FVvS --------------------------------------------------------------------------------
aIkxN& p%j@2U _gU[FUBtJ 安装和更新选项为:
$BNn 1C8[ bZa?h.IF --allfiles
]jM D'vg^b 安装或更新所有文件。
KxiZx I M"~B_t,Nw --badreloc
&0Nd9%> 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
;r8,Wx@f1C ZVda0lex& --excludedocs
>a^H7kp 不安装任何文档文件。
mA{gj[@:x ]>x674H --excludepath path
tXfB.[U 不安装文件名以path开始的任何文件。
AvH/Q_-b 3):7mE( --force
<;W4Th<4 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
(A"oMnjWd en#W<"_" -h,--hash
8f#YUK
sW= 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
EMJ}tvL0Tp 1=#`&f5f& --ignorearch
gSC8qip 即使二进制包用于不同的体系结果也进行安装。
mAXTO7 a!wPBJJ --ignoreos
V
GM/ed5- 即使操作系统不匹配也安装二进制包。
Ik~5j(^E- J2yq|n?2gq --ignoresize
Cvi-4 安装前不检查磁盘的可用空间。
@-Gf+*GZys a#KxjVM --includedocs
'0?5K0
2( 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
g"<kj" +]UPY5:F --nodeps
gNe{P~ $= 不检查这个包是否依赖于其他包的存在。
!L> 'g v82@']IN --noorder
OhIUm4=|$ 安装之前,不为了满足依赖关系而对包进行重新排序。
}p."7( {dCk iF --noscripts
~d>O.*Q) 不执行任何预安装或后安装脚本。
w[loV JQI`9$asuC --notriggers
%M~Ugv_4v 不执行任何由包安装触发的脚本。
I]TL#ywF vUJb- --oldpackage
{:fyz#>>^ 允许升级以用旧包替换新包。
-cJ(iz9! Fa@#nY|UV3 --percent
&a1agi7M 当文件被解压时输出完成百分比的信息。
A@&+!sO +Hv%m8'0| --prefix path
IzkZ^;(N 把可重定位包的安装前缀设置为path。
awMm&8cIM ZH.l^'(W --replacefiles
Z=n& fsE 即使包替换了来自其他安装包的文件,也安装这些包。
Bxz{rR0XV -08Ys c --replacepkgs
h&[!CtPm 即使某些包已经被安装,也安装他们。
)V~<8/) DR^mT$ --test
H| IsjCc 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
rt t?4 us$~6 --------------------------------------------------------------------------------
)FE'#\ <@e6zQG 0^tF_."Y 查询
k|a{|2p vPpbm query命令的语法为:
IRXpk6| (z+[4l7 rpm -q[information-options] [package-options]
oM QH-\(} rpm --query[information-options] [package-options]
Y`\zLX"_m NIQa{R/H 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
H=7dp%b" --------------------------------------------------------------------------------
z_r W1?| %k1*&2"1# C$M^<z 以下简单示演示一下包查询:
'$l*FWOEal (w@|:0t^y[ 简单查询:
@v@'8E Q '}LH,H:%G 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
(w4#?_ m[]pIXc( 示例:
E70
NAHQ:$ [root@localhost ~]# rpm -q lynx
Xs*~[k' lynx-2.8.5-18
Mx0c
#d. --------------------------------------------------------------------------------
7ug mZO}lL @^#y23R U u.$.RkNMQ 信息查询:
G74<sD fM
\T^X rpm -qi packagename命令可以得到安装包的汇总信息。
WY0u9M4 =ww8,z4X 示例:
Ab8~'<F$B [root@localhost ~]# rpm -qi lynx
G
}TT- Name : lynx Relocations: (not relocatable)
.r[J} O" Version : 2.8.5 Vendor: Red Hat, Inc.
LlnIn{C Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
W=PDOzB>K Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
R+rHa#M_ Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
*slZ17xg Size : 4837340 License: GPL
sRt|G Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
P4Wd=Xoz6 Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> (47jop0RDQ URL :
http://lynx.isc.org/ jAN(r>zVL Summary : 一个基于文本的网页浏览器。
80l(,0`, Description :
1b* dC;< Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
+xFtGF) 图像,但是它支持框架、表格、以及多数其它 HTML
OjyS
?YY)b 标签。Lynx 优于图形化浏览器的地方是它的速度――
5#q
^lL Links 能够快速启动、退出、及显示网页。
|0A n|18 标识拥有者
>p2v"X X --------------------------------------------------------------------------------
)bPwB.} kq P@
1D ,Ad\! 找出什么包拥有文件file:
$aG]V-M> |`_TVzA 示例:
9S.R%2xw` kZSe#'R's [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
.oAg
(@^6 lynx-2.8.5-18
~F
uD6f --------------------------------------------------------------------------------
N~Ax78TX 4$SW~BpQ ]:m*7p\uk 列表包中的文件:
efZdtrKgy JI@~FD& 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
tj{rSg7{ sfa T`q 示例:
~O|j*T tJ2l_M^ 此为部分显示结果
qt/"$6]% [root@localhost ~]# rpm -ql lynx
<$,iYx /etc/lynx-site.cfg
8t9sdqM/C /etc/lynx.cfg
\`|,wLgH /etc/lynx.cfg.cs
&hjrJ/'^ /etc/lynx.cfg.ja
~sMn/T*fv /etc/lynx.cfg.sk
VO. Y\8/ /usr/bin/lynx
Ya304Pjd /usr/share/doc/lynx-2.8.5
DCP" /usr/share/doc/lynx-2.8.5/INSTALLATION
(J$JIPF /usr/share/doc/lynx-2.8.5/README
3l5q?" $ /usr/share/doc/lynx-2.8.5/docs
2Xe2%{ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
d=N5cCqq /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
aH,0+ | /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
lt5~rH2 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
ag[ yM /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
khc5h^0 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
x\I9J4Q /usr/share/doc/lynx-2.8.5/docs/CMU.announce
B~LB^
n(>@ /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
-wvJZ /usr/share/doc/lynx-2.8.5/docs/FM.announce
b>Vs5nY! /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
_aa3Qwx /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
!i#;P9K /usr/share/doc/lynx-2.8.5/docs/README.TRST
V@e0VV3yx% /usr/share/doc/lynx-2.8.5/docs/README.chartrans
/rKrnxw #^xiv/sV --------------------------------------------------------------------------------
~wh8)rm ~)sb\o
WoesE:NiR 列出包所提供的实际能力:
C0KP,JS& *kZJ --provides选项的作用是列出这个包所提供的实际能力。
ikyvst>O *RN*Bh|$ 示例:
P0}uTee <bIAq8 [root@localhost ~]# rpm -q --provides lynx
k.
px config(lynx) = 2.8.5-18
Z~muQ c? webclient
*Fp )/Ih lynx = 2.8.5-18
tGv4 S\ --------------------------------------------------------------------------------
,i,f1XJ| /of,4aaK7 X(g<rz1J] 列出这个包所倚赖的任何包:
_U#ue ?6tuo:gP -R,--requires选项的作用是列出这个包所依赖的任何包。
T"dWrtO )]X_')K 示例:
}w"laZ* lZ/Yp~2S [root@localhost ~]# rpm -qR lynx
G)'cd D1 /bin/sh
E83{4A4 config(lynx) = 2.8.5-18
wU?2aXY indexhtml
RHVMlMX libc.so.6
W#-M| libc.so.6(GLIBC_2.0)
F-UY~i8 libc.so.6(GLIBC_2.1)
jDy libc.so.6(GLIBC_2.2)
.VTHZvyn libc.so.6(GLIBC_2.3)
_2U1$0xK libcrypto.so.4
|/YT.c% libncursesw.so.5
FkKx~I: libssl.so.4
0dXZd2oK@ libz.so.1
+4B>gS[ F rpmlib(CompressedFileNames) <= 3.0.4-1
AR/`]"' rpmlib(PayloadFilesHavePrefix) <= 4.0-1
6ZCt xs! --------------------------------------------------------------------------------
YI&^j2 tw\/1wa. AGPZd9 列出包中的配置文件
!3?HpR/nV YuLW]Q?v -c,--configfiles选项的作用是列出包中的配置文件
Eh8.S)E j
YO# 示例:
v3.JG]zLpP eUx|_*` [root@localhost ~]# rpm -qc lynx
Y~fds#y0 /etc/lynx-site.cfg
u=RF6V| /etc/lynx.cfg
=;^2#UxXA& /etc/lynx.cfg.cs
]7c715@ /etc/lynx.cfg.ja
IuB0C!' /etc/lynx.cfg.sk
+r4^oT[- --------------------------------------------------------------------------------
(MwB%g OG!^:OY mhT3 Fwc 显示有关于包的改变信息的日志:
S%g`X '0/t |V< --changllog选项的作用是显示有关于包的改变信息的日志。
8[2^`g 5
EDGl 示例:
*.W![%Be sq&$ 此为部分显示结果
7lf*
v qG [root@localhost ~]# rpm -q --changelog lynx
z1(rHJd * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
M nH4p - Removed perl dependencies (bug #127423).
g^4'42UX * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
sq-[<ryk - rebuilt
F7cv`i?2." * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
/u>")f - No longer need lynx-284-ipv6-salen.patch.
om;jXf}A - No longer need lynx2-8-2-telnet.patch.
dJ:EXVU * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
9M<qk si - rebuilt
]NG`MZ
* 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
<E!M<!h - Updated to dev16, fixing bug #110196.
I:bi8D6 - No longer need crlf patch.
{ p1#H` - Use shipped ja translations.
^e^M
A.kM, - Use %find_lang.
Xxp<qIEm - Default config file now sets UTF-8 (bug #110986).
l*b3Mg
--------------------------------------------------------------------------------
w+*Jl}&\ nOp\43no BWfsk/lej 包选择选项
D]Bvjh /<
h~d package_name
E3;[*ve 查询已安装包的package_name。
wM_k D l#V"14y -a,--all
~48Uch\LG: 查询所有已安装拨。
|f?tyQ 'SvYZ0ot -f file,--file file
5Y_)%u
找出什么包拥有文件file。
%0$$tS + q<D'"7#. -g group,--group group
![{> f6{J 找出什么包拥有组group。
W@JmG`Sy :a[L-lr`e -p package_file
:W-"UW, 查询未安装包package_file
kImS'i{A '-S^z"ZrI --querybynumber num
^szCf|SM 查询第num个数据库条目。主要用于调试。
Z&/bp 1 SA)}---" -qf,--queryformat num
#3\F<AJ<VB 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
yzgDdAM aQ46euth --specfile specfile
Y(-4Agq 查询specfile,就好象它是个包
Y!Wz7
C Mw*R~OX --triggeredby pkg
W6
f *> 列出触发安装pkg包的包。
?b:l.0m egK,e?~ --whatrequires capability
aOA;"jR1 列出要求特定能力来行使职责的包。
d^!)',` qOqQt=ObU --whatprovides capability
w=e~
M 列出提供特定能力的包。
T&fqn!i --------------------------------------------------------------------------------
*'1qA0Xc g75)&U`>}
TB1E1 信息选择选项:
Gt2NUGU Qf6Vj,~N -c,--configfiles
oV&AJ=|\ 列出包中的配置文件。
DnMfHG[< K8ecSs}}J --changelog
b'3w.%^ 显示有关于包的改变信息的日志。
'Oyz/P(p E#Smi507p -d,--docfiles
0x4p!5 列出包中的文档文件。
$*\[I{Zau} jyb/aov --dump
)F8G q, 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
*"d" 以下列顺序输出信息:
y.=ur,Nd path size mtime md5sum mode owner group isconfig isdoc rdev symlink
_qR1M):yJ j7?53e --filebypkg
hg/G7Ur" 列出每个包中的所有文件。
?MHVkGD `p|{(g' -i
-WWa`,: 显示包的信息,包括名字,版本和描述。
R0B\| O0Uv Ugp[Ugr -l,--list
Pe6MDWR 列出包中所有文件
v2 T+I]I Q"h/o"-h --last
2,{m>fF 根据安装时间列出包,最新的包排第一位。
ypSW 9n 1(CpTaa --provides
pd?3_yU 列出这个包所提供的实际能力。
K@)Hm\* U7bbJ>U_| -R,--requires
$-Lk,}s.* 列出这个包所依赖的任何包。
!_3Rd S KB0HM -s,--state
"t$c'` 列出包中的每个文件及其状态。可能的状态为normal,not installed或replaced。
S zR7:U R4.$9_ui --scripts
C!6?.\U/:c 列出任何在安装和卸载过程中所使用的包特定的shell脚本。
P:eY>~m<; q"7rd?r52 --------------------------------------------------------------------------------
0
XxU1w8\V s"7wG!yf w] i&N1i 卸载
56Z 1jN^U B[%FZm $`M uninstall命令的语法为:
oKLL~X>!U }1=V`N( rpm -e package_name
oJE~dY$Q rpm --erase package_name
.bE+dA6:v -r )Q| U 示例:
A>8"8=C vq-Tq> [root@localhost ~]# rpm -e lynx
]:uJ&xUar