Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
(FZL> ,$5; 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
#G{}Rd|! gVCkj!{ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
||hy+f[A D2|-\vJ> 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
V`~$|
K[ --------------------------------------------------------------------------------
/tA$'tZ M]!\X6<_ w<j6ln+nM 以下简要介绍RPM包的安装,删除和查询
;+K:^*oJ kac@yQD RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
6}R^L(^M vrn IEur rpm命令的格式为:
TveCy & H? N!F7s rpm [options] [packages]
]7zDdI|
&q1(v3cOO 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
cRz7.9-< 5R4h9D5 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
UV)[a%/SB& --------------------------------------------------------------------------------
=Y|TShKk 6k"Wy3/ xXH%7%W'f RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
C]*9:lK lW'6rat 以下为rpm --showrc命令显示的节选:
srx`"
: wM (!9Ws3 示例:
{.SN !Qrlb>1z- 此为部分显示结果
Svn|vH [root@localhost ~]# rpm --showrc
zm2&\8J ARCHITECTURE AND OS:
#QZg{ build arch : i386
Eag->mw/~ compatible build archs: athlon i686 i586 i486 i386 noarch
B$g!4C
`g build os : Linux
~b5aT;ObR compatible build os's : linux
O<S*bN>BF install arch : athlon
!6|Kpy8 install os : Linux
L':;Vv~- compatible archs : athlon i686 i586 i486 i386 noarch
eOy{]<l3 compatible os's : linux
KQ?E]}rZ RPMRC VALUES:
En+4@BC 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
+Es3iE @
optflags : %{__global_cflags} -m32 -march=athlon
aMuc]Wy# Features supported by rpmlib:
4 *He<2g rpmlib(VersionedDependencies) = 3.0.3-1
.Xo, BEjE/ PreReq:, Provides:, and Obsoletes: dependencies support versions.
ywmx6q4MFL rpmlib(CompressedFileNames) = 3.0.4-1
N4!YaQQ;} file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
2uS&A
\ rpmlib(PayloadIsBzip2) = 3.0.5-1
ujB:G0'r package payload can be compressed using bzip2.
-`]B4Nt6 --------------------------------------------------------------------------------
]jG%<j9A W5$jIQ}Bw Z4}Yw{=f rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
Y[$[0 RmO-".$yt 示例:
c;w
cgU Y%p"RB[ [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
tbAN{pX Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
~zRUJ2hD! Preparing... ########################################### [100%]
PmvTCfsg 1:lynx ########################################### [100%]
ho#]?Z# --------------------------------------------------------------------------------
B^U5=L[:p Ha$|9li` ?ZdHuuDN~ 以下列出一些通用选项(可以用于所有模式):
f!P.=Qo[= "My \&0- --dbpath path
KmZUDU%R 用path作为RPM数据库的路径。
>2Al+m<w CcgCKT --ftpport prot
=/.[&DG 用port作为FTP端口。
LH]nJdq?) g-oHu8 --ftpproxy host
"FcA:7 + 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
`*9W{|~Gwx N-3w)23*: --help
h_?D%b~5 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
h\C 9g"a`a?c --justdb
Gi]Pwo${ 只更新数据库;不改变任何文件。
9g J`H' mY(~94{d --pipe command
PPDm*,T. 用管道把rpm输出到commond。
[@#P3g\:>W I6YN&9Y --quiet
],>Z'W 仅显示错误信息。
$tj[* wi:]o o# --rcfile filename
RFDwL~-p 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
;.!AX|v ?&)<h_R4p --root dir
;*wZgl 在dir目录内执行所有操作。
>8 t3a-/ DB:Ia5|*i --version
i4'?/UPc 输出rpm版本号。
.2!'6;K /V46:`V -vv
cc.zC3Hs3 输出调试信息。
m]=|%a6 vhTte
|( --------------------------------------------------------------------------------
6T"[M cQu1WgQ
G ?*tpW75hR[ 安装升级和刷新
n:`> QY CO0Nq/@ 安装或升级一个RPM包,install命令的语法为:
:v
Pzw! F_zs"ex/ rpm -i [install-options] package_file
`t{aN|3V[ rpm --install [install-options] package_file
+MGEO+ +aEE(u6%E@ 示例:
vxZvK0b620 'RTz*CSZ [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
ZR6KE_ package lynx-2.8.5-18 is already installed
_&.CI6 [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
8>T
' --------------------------------------------------------------------------------
t 4{{5U'\ i~n>dc YW fi:Z*- 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
Z99%uI3 Goz9"yazg rpm -U [install-options] package_file
;?yd;GOt) rpm --upgrade [install-options] package_file
"[BuQ0(g E{_p&FF 示例:
G7M:LcX +<Uc42i7n 先安装旧版
.?[2,4F; [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
5bH@R@3 m B<H5WI 再安装新版
}a'8lwF%I [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
W _yVVr BB|w-W=Kd 显示出新版本信息
+ 3aAL& [root@localhost ~]# rpm -q lynx
4 rw<C07Z lynx-2.8.5-18
hoO8s#0ED $0AN5 |`g\ 说明:
S3P;@Rm -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
;I:jd") v /G, 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
nr!kx)j --------------------------------------------------------------------------------
G3OqRH 7 H.2]X 0{@E=}}h 刷新的语法是:
0KHA5dt [9Q2/V;Uk% rpm -F [install-options] package_file
&f|LjpMCf yg5 Ik{ rpm --freshen [install-options] package_file
Xi6XV3G JyjS#BWi 示例:
[q?{e1 -SlLX\>p 从未安装过lynx包,使用-F选项,将无法升级。
0V}%'Ec<e L/F!Y%=;[ [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
@2L+"=u# [root@localhost ~]# rpm -q lynx
m.&z:`x[ package lynx is not installed
3EI$tP @4 --------------------------------------------------------------------------------
U9SByqa1 b_|`jHes >(|T]u](q 安装和更新选项为:
WDP$w(M t1 OnA#]/_ --allfiles
*<i
{
Mb Q 安装或更新所有文件。
K`M 8[ %S @@# ^G8+l --badreloc
va:5pvt2& 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
]pzf{8% f]qPxRw --excludedocs
{3i.U028] 不安装任何文档文件。
Eii)zo8Xd `$AX!,<!G --excludepath path
H CZ#7Z 不安装文件名以path开始的任何文件。
Vge9AH:op NJI-8qTGI --force
Z7V1e<E 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
<2fZYt vt q$yTG!q* -h,--hash
qdx(wGG 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
w+fsw@dK& N41)?-7F --ignorearch
o3#qp>R 即使二进制包用于不同的体系结果也进行安装。
:3gtc/p t> 2>Xgo% --ignoreos
%u,H2* 即使操作系统不匹配也安装二进制包。
Ovq-rI{ [O2xE037h` --ignoresize
,gVA^]eDh 安装前不检查磁盘的可用空间。
0B>hVaj>- K63OjR>H --includedocs
&u&/t? 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
c/jU+,_g P6!c-\ --nodeps
[o<Rgq4 不检查这个包是否依赖于其他包的存在。
dzjp,c@ \'xF\V --noorder
DJdW$S7 安装之前,不为了满足依赖关系而对包进行重新排序。
Tv_KdOv8 \xlelsmB* --noscripts
2`9e20 不执行任何预安装或后安装脚本。
7v]>ID 5V':3o;D__ --notriggers
h8&VaJ 不执行任何由包安装触发的脚本。
\uQ yp*P1s xA& tVQ2! --oldpackage
FO<PMK 允许升级以用旧包替换新包。
H9?(5 J/mLmSx --percent
b}HLuX 当文件被解压时输出完成百分比的信息。
)\s{\u
\ C< 3`]l --prefix path
M4w,J2_8MK 把可重定位包的安装前缀设置为path。
F{WV}o=MY <wfPbzs-V --replacefiles
l+HmG< P 即使包替换了来自其他安装包的文件,也安装这些包。
QbjO*:c4 w
&1_k:Z& --replacepkgs
!nQ_< 即使某些包已经被安装,也安装他们。
_ I"}3* v*iD)k:|t --test
<j,ZAA&5%Y 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
_C2iP[YwQ{ 2w_[c. --------------------------------------------------------------------------------
HL]8E}e\" t6DgWKT6 j#G4A%_ 查询
hfE5[ RL4J{4K query命令的语法为:
{e~#6.$: io%WV%1_ rpm -q[information-options] [package-options]
i/E"E7 rpm --query[information-options] [package-options]
|(u6xPs;P <| 8N\FU{ 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
1Bp?HyCR --------------------------------------------------------------------------------
td JA? @rI+.X NXo$rf: 以下简单示演示一下包查询:
4zKmoYt v+Mi"ZAd 简单查询:
hGh91c;4 l7 Pn5c 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
N iw~0"-V "'U+T:S 示例:
N!!=9'fGF cZC%W!pT [root@localhost ~]# rpm -q lynx
5QN~^ lynx-2.8.5-18
3N c#6VI --------------------------------------------------------------------------------
"`g5iUHqUl g]&7c:/ u#!QIQW 信息查询:
tf[)Q:| +lC?Vpi^ rpm -qi packagename命令可以得到安装包的汇总信息。
hhWIwR o|`[X' 示例:
y/i{6P2`,D [root@localhost ~]# rpm -qi lynx
B0E`C Name : lynx Relocations: (not relocatable)
c(Ws3 Version : 2.8.5 Vendor: Red Hat, Inc.
X!,huB^i Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
OD[q
u Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
3Gi^TXE] Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
=sZ58xA Size : 4837340 License: GPL
$ /`X7a{ Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
3fGL(5|_ Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> !aQb
Kp URL :
http://lynx.isc.org/ rDI}X?JmX Summary : 一个基于文本的网页浏览器。
>|zMN$: Description :
+xNV1bM Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
sE^ee2]OI@ 图像,但是它支持框架、表格、以及多数其它 HTML
B703{k 标签。Lynx 优于图形化浏览器的地方是它的速度――
sU Er?TZ Links 能够快速启动、退出、及显示网页。
&_cH9zw@ 标识拥有者
C(CwsdlP --------------------------------------------------------------------------------
UOIB}ut
V
$Mg[e*ct fofYe0z 找出什么包拥有文件file:
bT>MZK8b /U26IbJ 示例:
*T6*Nxs0k +~(SeTY [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
KE[!{O^(a lynx-2.8.5-18
C&|K7Zp0v --------------------------------------------------------------------------------
jYUN: L:j3 d!{]CZ"@ 列表包中的文件:
%(&$CmS@ CKI.\o 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
uM)#T*( Znw3P|>B 示例:
8+i=u"< fHK.q({Qc 此为部分显示结果
&R5zt]4d& [root@localhost ~]# rpm -ql lynx
A=W:}szt] /etc/lynx-site.cfg
.Ht;xq /etc/lynx.cfg
}#r awVe= /etc/lynx.cfg.cs
{x{~%)- /etc/lynx.cfg.ja
7F2 WmMS /etc/lynx.cfg.sk
XEegUTs /usr/bin/lynx
~+ kfb^<- /usr/share/doc/lynx-2.8.5
3iM7c.f*/ /usr/share/doc/lynx-2.8.5/INSTALLATION
Vx z` /usr/share/doc/lynx-2.8.5/README
hT`fAn_ /usr/share/doc/lynx-2.8.5/docs
tm&,u*6$W? /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
J6J"> /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
?wP/l /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
`G0k)eW /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
Um^4[rl:#g /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
RDfvD|}VN /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
O!!N@Q2g /usr/share/doc/lynx-2.8.5/docs/CMU.announce
j*\oK@ /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
40%fOu,u` /usr/share/doc/lynx-2.8.5/docs/FM.announce
[*C%u_h /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
WD55( /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
/:tzSKq} /usr/share/doc/lynx-2.8.5/docs/README.TRST
fUMjLA|*I< /usr/share/doc/lynx-2.8.5/docs/README.chartrans
}W)b f$76p!pDa --------------------------------------------------------------------------------
Vy=P* 3n,jrX75u FI,K 0sO/| 列出包所提供的实际能力:
jB<B_" oN2#Jh%dH --provides选项的作用是列出这个包所提供的实际能力。
xkC M*5: /!?b&N/d) 示例:
cJerYRjsL r]@T9\9 [root@localhost ~]# rpm -q --provides lynx
!(Ymc_s config(lynx) = 2.8.5-18
IR:GoD+ webclient
7Kf lynx = 2.8.5-18
jW]"Um-] --------------------------------------------------------------------------------
Q6)?#7<jy N5c*#lHI jG~-V<& 列出这个包所倚赖的任何包:
:i4AkBNK 0K'{w]Q -R,--requires选项的作用是列出这个包所依赖的任何包。
5vFM0 zo1T`"Y 示例:
inY_cn? 0W0GSDx [root@localhost ~]# rpm -qR lynx
D6~KLSKm /bin/sh
Wv|CJN;4 config(lynx) = 2.8.5-18
LC4VlfU indexhtml
P3 . libc.so.6
o}DRp4;Ka libc.so.6(GLIBC_2.0)
ClY`2 libc.so.6(GLIBC_2.1)
Iprt
ZqiL libc.so.6(GLIBC_2.2)
T+^Sa
J libc.so.6(GLIBC_2.3)
ic5af"/(\ libcrypto.so.4
uh2 Fr libncursesw.so.5
^&D5J\][ libssl.so.4
JH| D libz.so.1
tnAj3wc rpmlib(CompressedFileNames) <= 3.0.4-1
i=L 86Ks rpmlib(PayloadFilesHavePrefix) <= 4.0-1
{yv_Ni*6! --------------------------------------------------------------------------------
8 :WN@ Siq]Ii0F;> 0cSm^a 列出包中的配置文件
^KdT,^6T EnGh&] -c,--configfiles选项的作用是列出包中的配置文件
>fMzUTJ4 @<3E`j'p 示例:
\pk9i+t `*cqT [root@localhost ~]# rpm -qc lynx
qdLzB /etc/lynx-site.cfg
/O<~n%< G /etc/lynx.cfg
9 Jw,ls /etc/lynx.cfg.cs
>yr;Y4y7K /etc/lynx.cfg.ja
/lbj!\~ /etc/lynx.cfg.sk
W/\pqH --------------------------------------------------------------------------------
)H @<A93 vp2w^/])u 0Ix,c( % 显示有关于包的改变信息的日志:
)u+O~Y95&i :-O$rm --changllog选项的作用是显示有关于包的改变信息的日志。
'j*Q qH0JZdk 示例:
>-\^ )z sBYDo{01 此为部分显示结果
ZBR^$?nj [root@localhost ~]# rpm -q --changelog lynx
BdMd\1eMw * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
w+"E{#N - Removed perl dependencies (bug #127423).
w>8HS+ * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
c0Bqm - rebuilt
VH4wsEH] * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
i3mw.`7 - No longer need lynx-284-ipv6-salen.patch.
_YG@P1 - No longer need lynx2-8-2-telnet.patch.
)Nqx=ms[(! * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
OwEV$Q - rebuilt
%f'=9pit * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
gxmo 1 - Updated to dev16, fixing bug #110196.
)^BZ,e - No longer need crlf patch.
f,i2U|1pbj - Use shipped ja translations.
K\KQ(N8F - Use %find_lang.
b1>]?. - Default config file now sets UTF-8 (bug #110986).
.rG~\Ws --------------------------------------------------------------------------------
w_o+;B|I >?OUs>}3y2 T u%XhXl:j 包选择选项
l?$X.CwX 6eUGE 4NF( package_name
M*bsA/Z 查询已安装包的package_name。
Y-Q)sv (&NLLrsio -a,--all
k~so+k&=b 查询所有已安装拨。
,t QNL\t :-#7j}
R& -f file,--file file
T59FRX 找出什么包拥有文件file。
eI:x4K,# ]KEE+o -g group,--group group
Ky7.&6\n 找出什么包拥有组group。
tK[o"?2y lwfM>%%N -p package_file
x1Y/^ks@2 查询未安装包package_file
@I|kY5' c 4[#)p}V --querybynumber num
@67GVPcxl 查询第num个数据库条目。主要用于调试。
0LXu!iix (SQGl!Lai0 -qf,--queryformat num
*Gv:N6 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
wl%ysM|x m'
S{P:TK --specfile specfile
%
>a
/m.$ 查询specfile,就好象它是个包
y`8U0TE3R V~#5^PF{ --triggeredby pkg
I$S*elveG 列出触发安装pkg包的包。
jl}!UG Xs|d#WbX --whatrequires capability
L~e0^X? 列出要求特定能力来行使职责的包。
;F*^c
) m>48?% --whatprovides capability
N%'(8%; 列出提供特定能力的包。
[kpQ:'P3 --------------------------------------------------------------------------------
>r
C*. 6W s o1 信息选择选项:
sN-u?EiF8 5D=U.UdR -c,--configfiles
]@cI _n 列出包中的配置文件。
7[0Mr,^ =w;-4 --changelog
H" A@Q.' 显示有关于包的改变信息的日志。
w2V:x[ $<XQv $YS -d,--docfiles
nu:l;+,VY 列出包中的文档文件。
cUP1Uolvn O"|d~VQ --dump
.b`8
+ 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
7p\&