Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
v+`gQXJ"G B}p{$g! 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
4T:@W C $>PV6 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
f>_' ]eM% h>'Mh;+ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
b\Gw|?Rv --------------------------------------------------------------------------------
eB*0}) -]~vEfq+T v|u[BmA)*k 以下简要介绍RPM包的安装,删除和查询
5"9!kZ(< b$1W> RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
UgZuEfEGve aRF}FE,u rpm命令的格式为:
S6Fn(%T+9 :HQQ8uQfb rpm [options] [packages]
<2>Qr(bb dBMr%6tz 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
rOd~sa-H i"o
%Gc 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
P+nd?:cz --------------------------------------------------------------------------------
[kyIF\0 o&"nF+, hV]]%zwR+ RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
JQ)w/@Vu= `z{sDe; 以下为rpm --showrc命令显示的节选:
'9d]
B^)F +GqUI~a 示例:
7[?{wbq [b6P
}DW 此为部分显示结果
7$u}uv`j [root@localhost ~]# rpm --showrc
YZ0Jei8+- ARCHITECTURE AND OS:
Y<0R5rO build arch : i386
R-V4Ju[: compatible build archs: athlon i686 i586 i486 i386 noarch
qTUyax build os : Linux
OkaNVTB compatible build os's : linux
)tW0iFY install arch : athlon
=9AX\2w*H; install os : Linux
soXIPf compatible archs : athlon i686 i586 i486 i386 noarch
2/m4| compatible os's : linux
hFp\,QSx
RPMRC VALUES:
8\{1y:| 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
_gl7Ma optflags : %{__global_cflags} -m32 -march=athlon
^\ocH|D Features supported by rpmlib:
~ '/Yp8( rpmlib(VersionedDependencies) = 3.0.3-1
c Y(2}Ay PreReq:, Provides:, and Obsoletes: dependencies support versions.
5b5Hc Inu rpmlib(CompressedFileNames) = 3.0.4-1
R
*uwp'@ file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
TKBW2 rpmlib(PayloadIsBzip2) = 3.0.5-1
Q'qz(G0 package payload can be compressed using bzip2.
=AIeYUh --------------------------------------------------------------------------------
M6o"|\ $vK(Qm [DzZ:8 rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
BL^\"Xh$| |qFCzK9tD/ 示例:
}5qpiS"V9 1ms(03dp [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
oW
\k%Vj Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
l" P3lKS Preparing... ########################################### [100%]
E6Uiw]3 1:lynx ########################################### [100%]
O4.`N?Xq --------------------------------------------------------------------------------
9`X}G` b>Em~NMu_ /_l$h_{DH 以下列出一些通用选项(可以用于所有模式):
AkE(I16Uy~ bs9X4n5 --dbpath path
6A23H7 用path作为RPM数据库的路径。
Cl>{vSN j}fu|- --ftpport prot
9H#;i]t & 用port作为FTP端口。
J':x]_; O-jpS?@ --ftpproxy host
3JJEj1O 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
zD,K_HicI I->BDNk --help
^ 9`O
^ 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
=dM'n}@U
&b:SDl6 --justdb
:qe.*\
c 只更新数据库;不改变任何文件。
?hh#@61
1@S(v L3a --pipe command
NwbX]pDT 用管道把rpm输出到commond。
r&_bk
Y% VkJBqRzBOa --quiet
;5PBZ<w 仅显示错误信息。
sf5 F$ ~,O&A B --rcfile filename
V+Y; 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
fDD^?/^ P4{!/&/ --root dir
)N'rYS'9 在dir目录内执行所有操作。
sRKoM e[l#r>NT --version
,|G~PC8 输出rpm版本号。
>o,l/#z 1 ` ={** -vv
VteMsL/H 输出调试信息。
YM.Q?p4g >%1mx\y^ --------------------------------------------------------------------------------
Oz-;2 GMW,+ /|#" ;QsPN 安装升级和刷新
6 TkV+\ 'S#D+oF(1~ 安装或升级一个RPM包,install命令的语法为:
w6&p4Jw/H? cl1>S 3 rpm -i [install-options] package_file
Or<OmxJg rpm --install [install-options] package_file
oj%(@6L (F=q/lK$ 示例:
*pj^d>< :xy4JRcF [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
i!u:]14> package lynx-2.8.5-18 is already installed
XkRPD [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
YE;Tpji --------------------------------------------------------------------------------
h6~H5X ZBsV n&\DJzW\# 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
7Q>bJ Ek7 Cr>YpWm rpm -U [install-options] package_file
9AP." RV rpm --upgrade [install-options] package_file
![Ll$Lr B`mTp01 示例:
8'|_O q>f|1Pf 先安装旧版
fq4[/%6,O [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
JS2h/Y$ Zt/4|&w 再安装新版
m4x8W2q [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
iOXsj hZwJ@ Vm# 显示出新版本信息
%R m`+ [root@localhost ~]# rpm -q lynx
!cNw8"SIU lynx-2.8.5-18
1)v]<Ga~%1 B
x-"<^< 说明:
W!B\VB -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
w
21g& /v8yE9N_ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
oxZXY]$y --------------------------------------------------------------------------------
kG>m(n vugGMP;D( :F`"CR^, 刷新的语法是:
u`?v- 0'zX6% rpm -F [install-options] package_file
7
V3r!y KvY1bMU! rpm --freshen [install-options] package_file
*|Bt! Ju"K" 示例:
Lpv,6#m`) ')zf8>, 从未安装过lynx包,使用-F选项,将无法升级。
U^
;H{S vR*p1Kq: [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
y#v<V1b] [root@localhost ~]# rpm -q lynx
t~_bquGk package lynx is not installed
h[i@c`3/2 --------------------------------------------------------------------------------
12LGWhDp nxhn|v ^?R8>97_? 安装和更新选项为:
8fWk C<f} \V%l.P4>e --allfiles
m<I>NYfE 安装或更新所有文件。
<_3OiU=w [ XBVES8 --badreloc
Lhmb=
@ 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
h[>Puoz k7)<3f3&S. --excludedocs
0P l>k'9 不安装任何文档文件。
7p_B?r ^,{ r[} --excludepath path
3A!Qu$r9 不安装文件名以path开始的任何文件。
TrR=3_;.7 O#n=mJ --force
dM)x|b3z 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
K9QC$b9( S+7u,%n/ -h,--hash
Z3 O_K 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
Lq]t6o] LO@o`JF --ignorearch
bzyy;`;6Q~ 即使二进制包用于不同的体系结果也进行安装。
6<Txkk XCj8QM.o --ignoreos
A@ZsL 即使操作系统不匹配也安装二进制包。
'#NDR:J" 2bAH)= --ignoresize
W*~[KdgC 安装前不检查磁盘的可用空间。
:wY(</H v{;^>"5o --includedocs
P2fiK 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
Kr%w"$< J936o3F_ --nodeps
tJII-\3" 不检查这个包是否依赖于其他包的存在。
J0FJ@@ =^mBj?(V7 --noorder
:!L>_ f 安装之前,不为了满足依赖关系而对包进行重新排序。
7bY N l?O%yf`s --noscripts
)7 M 不执行任何预安装或后安装脚本。
q{uv?{I
;(
[^+_/ --notriggers
a[ yyEgm2 不执行任何由包安装触发的脚本。
y`a]##1j$M mGh8/Xt --oldpackage
V6kJoSyde 允许升级以用旧包替换新包。
s[Whg!2~
*]*0uo --percent
<2t%<<% 当文件被解压时输出完成百分比的信息。
\pVNJy$`< f0 "_ {\ --prefix path
K;*B$2Z#k 把可重定位包的安装前缀设置为path。
[7Liken go?}M]c%7 --replacefiles
NeR1}W 即使包替换了来自其他安装包的文件,也安装这些包。
N)
'|l0x0 b8&z~'ieR --replacepkgs
#L+ZHs~ 即使某些包已经被安装,也安装他们。
"{x+ \Z\ @*=eqO --test
(05a9 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
gB])@O%/ qo7jrY5G --------------------------------------------------------------------------------
6r)B|~,OA yX%NFXD < Y)A ez 查询
l0lvca=; /)<Xoa query命令的语法为:
~(}nd G]T&{3g-. rpm -q[information-options] [package-options]
l*b0uF rpm --query[information-options] [package-options]
@me ( pnD B8>3GZi 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
jE!?;} P1 --------------------------------------------------------------------------------
{w mP 4^7*R juEH$7N! 以下简单示演示一下包查询:
C}]143a/Q IgEVz^W?h 简单查询:
I[KAW" eE" *c>I 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
2`A\'SM'4 AA5UOg\jI 示例:
Bpp(5 +pxtar [root@localhost ~]# rpm -q lynx
x.>&|Ej lynx-2.8.5-18
UV\&9>@L --------------------------------------------------------------------------------
[<.dOe7| 8gJg7RxL z-m:l; 信息查询:
<;hy-Q()D }*c[}VLN rpm -qi packagename命令可以得到安装包的汇总信息。
~ep^S^V+ t: 03 示例:
vz^=o' [root@localhost ~]# rpm -qi lynx
zKFiCP
K Name : lynx Relocations: (not relocatable)
ntn ~=oL Version : 2.8.5 Vendor: Red Hat, Inc.
nG7E j#1 Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
<x1,4a~ Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
naM=oSB( Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
V3$zlzSm, Size : 4837340 License: GPL
O
+Xu?W] Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
C,$7fW{? Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> wLKC6@
W URL :
http://lynx.isc.org/ v*^'|QyM7 Summary : 一个基于文本的网页浏览器。
\Wb3JQ) Description :
9PG3cCr? Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
(t"e#b(: 图像,但是它支持框架、表格、以及多数其它 HTML
f<vZ4 IU 标签。Lynx 优于图形化浏览器的地方是它的速度――
/gP"X1. Links 能够快速启动、退出、及显示网页。
UVD*GsBk 标识拥有者
1 Ay.^f --------------------------------------------------------------------------------
KNSMx<GP $u,
~183 <
;fI*km 找出什么包拥有文件file:
+@MG$*}Oz i([|@Y= 示例:
sPRs;to- QLb!e"C [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
95*=&d lynx-2.8.5-18
7upN:7D- --------------------------------------------------------------------------------
`FByME ><{Lh@{ Tz{-L%*# 列表包中的文件:
J )UCy;Y Bs\&'=l 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
e\! ic vq1u!SY 示例:
!wIrI/P7# .F@ 2C
此为部分显示结果
4K$_d,4`U [root@localhost ~]# rpm -ql lynx
R2y~+tko? /etc/lynx-site.cfg
s\.\z[1 /etc/lynx.cfg
.`^wRpa2M /etc/lynx.cfg.cs
i*e'eZ;) /etc/lynx.cfg.ja
a>#]d /etc/lynx.cfg.sk
_^p\
u /usr/bin/lynx
u(g9-O /usr/share/doc/lynx-2.8.5
EO"G(v /usr/share/doc/lynx-2.8.5/INSTALLATION
(#rhD} /usr/share/doc/lynx-2.8.5/README
U?j[
8z /usr/share/doc/lynx-2.8.5/docs
c
Sktm&SP /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
5
&s<&h /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
*_eY +\j /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
X yD*V;.E /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
(4IH%Ez){ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
A5,(P$@k /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
s[}cj+0 /usr/share/doc/lynx-2.8.5/docs/CMU.announce
afye$$X /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
(
\7Yo^ /usr/share/doc/lynx-2.8.5/docs/FM.announce
B dxV [SF /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
DS=Dg@y /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
BoofJm /usr/share/doc/lynx-2.8.5/docs/README.TRST
gNSsT]) /usr/share/doc/lynx-2.8.5/docs/README.chartrans
U\6Ee-1#_ h-5] nL3 --------------------------------------------------------------------------------
`A$zLqz)Vm T<U_Iq 2Jqr"|sw 列出包所提供的实际能力:
66HxwY3a Nh+XlgXG --provides选项的作用是列出这个包所提供的实际能力。
~;I'.TW PF:'dv 示例:
%Ktlez:S ]?s^{ [root@localhost ~]# rpm -q --provides lynx
s:^Xtox/ config(lynx) = 2.8.5-18
MG4(,"c! webclient
6eW9+5oL lynx = 2.8.5-18
Z"E2ZSa0 --------------------------------------------------------------------------------
c@{M),C~E IaGF{O3. 59k-,lyU, 列出这个包所倚赖的任何包:
x%55:8{ tF!-}{c"k -R,--requires选项的作用是列出这个包所依赖的任何包。
ZvSEa{ FIpJ>E"n 示例:
$aj:\A0f }PzHtA,V [root@localhost ~]# rpm -qR lynx
'Xg9MS& /bin/sh
,<fs+oi config(lynx) = 2.8.5-18
#<yKG \X? indexhtml
jNW/Biy4u libc.so.6
TlJ'pG 4^ libc.so.6(GLIBC_2.0)
j4E`O%@^ libc.so.6(GLIBC_2.1)
%RXFgm!{f libc.so.6(GLIBC_2.2)
@WP%kX.? libc.so.6(GLIBC_2.3)
J pKCux libcrypto.so.4
L[lS
>4eN libncursesw.so.5
?]0bR]}y libssl.so.4
B2,JfKk/ libz.so.1
b#:!b rpmlib(CompressedFileNames) <= 3.0.4-1
/y-8dgv0a rpmlib(PayloadFilesHavePrefix) <= 4.0-1
/ a$B8, --------------------------------------------------------------------------------
qoOq47F $rH}2 lfte 列出包中的配置文件
_tfi6UQ&lY 8v\^,'@ -c,--configfiles选项的作用是列出包中的配置文件
/qweozW_+ ^'$P[ 示例:
|/;X-+f8 "PC9[i [root@localhost ~]# rpm -qc lynx
y@\J7 h: /etc/lynx-site.cfg
2UEjn>2 /etc/lynx.cfg
VP:9&?>G
/etc/lynx.cfg.cs
[\.@,Y0j /etc/lynx.cfg.ja
7z3YzQ=Kg /etc/lynx.cfg.sk
C^ Oy.s --------------------------------------------------------------------------------
en29<#8TO {r1}ACw{ UKf0cU 显示有关于包的改变信息的日志:
Ia-nA|LBxI z&Lcl{<MA --changllog选项的作用是显示有关于包的改变信息的日志。
>{k0N@_ F"t.ND 示例:
k4YW;6<C+ -qJO6OM 此为部分显示结果
Il$Jj-) [root@localhost ~]# rpm -q --changelog lynx
8Oo16LPD * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
`D0Hu!; - Removed perl dependencies (bug #127423).
*w6(nG'M{ * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
_[S<Cb*1 - rebuilt
AI2@VvB * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
Kl w9 - No longer need lynx-284-ipv6-salen.patch.
y\<