Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
EZp >Cf7 SpIiMu( 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
7 > _vH] BEAY}P(y3 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
dtG>iJ q&:%/?)x 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
McbbEs=) --------------------------------------------------------------------------------
[1Qg * +'w6=qI d&ff1(j( 以下简要介绍RPM包的安装,删除和查询
[_KOU2 XKOPW/ RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
3_&s'sG5 Fl(j,B6Z rpm命令的格式为:
0\k{v [s]
ZT rpm [options] [packages]
A^|~>9 y\:Ma7V 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
^FTS'/Q pz{ ]O_px 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
k|jr+hmn": --------------------------------------------------------------------------------
tQ.H/; v@fy*T\3 cQ`0d3 RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
s?Gv/& n0 V^/j} 以下为rpm --showrc命令显示的节选:
!@arPN$ OeZ"WO 示例:
<a+@4d; JZ>
(h 此为部分显示结果
w)R5@
@C* [root@localhost ~]# rpm --showrc
s._,IW;
ARCHITECTURE AND OS:
xbCQ^W2YU| build arch : i386
^8dCFw.rU compatible build archs: athlon i686 i586 i486 i386 noarch
]1[:fQF7/L build os : Linux
.E7"Lfs- compatible build os's : linux
MlbcJo3 install arch : athlon
Z(LTHAbBk| install os : Linux
/*"pylm compatible archs : athlon i686 i586 i486 i386 noarch
4l>d^L compatible os's : linux
\lwLVe RPMRC VALUES:
:N_DJ51 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
7e#|Iq:o optflags : %{__global_cflags} -m32 -march=athlon
C/9]TkX}q Features supported by rpmlib:
e)XnS ' rpmlib(VersionedDependencies) = 3.0.3-1
3m & PreReq:, Provides:, and Obsoletes: dependencies support versions.
}{&;\^i rpmlib(CompressedFileNames) = 3.0.4-1
CHCT
e file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
[;~"ctf{ rpmlib(PayloadIsBzip2) = 3.0.5-1
+A$>F@u package payload can be compressed using bzip2.
*q[;-E(fZ# --------------------------------------------------------------------------------
eq<!
.Ep&O# >V\^oh)t]t rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
|GP&!] 5-&"nn2*}1 示例:
*|@386\ $e uI [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
PY+4OZ$ Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
Qf'g2
\ Preparing... ########################################### [100%]
"];@N!dA 1:lynx ########################################### [100%]
z'"Y+EWN --------------------------------------------------------------------------------
[1z.JfC :S Pl2eDv-y bg)}-]u] 以下列出一些通用选项(可以用于所有模式):
g^\!> i zXbA$c --dbpath path
Tv
5J 用path作为RPM数据库的路径。
*=T(ncR[' Nn U`u.$D --ftpport prot
ovi^bNQ 用port作为FTP端口。
|goK@< % w --ftpproxy host
F'B0\v= 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
J`{o`> Y;
to9Kv$ --help
dB:c2 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
{:Kr't<XzF q)AX*T+ --justdb
0y+i?y
9 只更新数据库;不改变任何文件。
A<( DYd1H Ea-U+7JC --pipe command
dt"& 用管道把rpm输出到commond。
_8\B~;0 +!$`0v --quiet
}WBHuVcZG 仅显示错误信息。
~_g{P3 @S>;t)\J --rcfile filename
OkCAvRg 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
| :id/ )%lPKp4] --root dir
]IzD` 在dir目录内执行所有操作。
K%Bz6 ~ e,W,NnCICj --version
"7jE&I 输出rpm版本号。
p(Osz7K :AI%{EV-L -vv
:)&vf<JL 输出调试信息。
,*?[Rg0]+ ooC9a>X --------------------------------------------------------------------------------
>vO+k^'Y JZ&_1~Z= aeAx0yE[p 安装升级和刷新
)8SWU)/
<$WS~tTz 安装或升级一个RPM包,install命令的语法为:
t`>Z#=cl\ yO* rpm -i [install-options] package_file
:fq4oHA# rpm --install [install-options] package_file
Ps[#z@5{x %&q}5Y4! 示例:
-~X[j2 6E9/z [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
XP?)xDr8 package lynx-2.8.5-18 is already installed
vJV/3-yX [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
&
d$X: --------------------------------------------------------------------------------
gFTlP }d;6.~Gw Xkg 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
["4Tn0g ; l"jYY3N|h rpm -U [install-options] package_file
)}t't" rpm --upgrade [install-options] package_file
L'
bY,D(J> >mG64N 示例:
Zj1bG{G=i Fop +xR,Z 先安装旧版
,LxkdV [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
TY'61xWi IOY7w"|LW 再安装新版
=)gdxywoC [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
WIpV'F|t]` fGRV]6?V 显示出新版本信息
6<R[hIWpZ} [root@localhost ~]# rpm -q lynx
5NH4C lynx-2.8.5-18
nj0]c`6rN@ siT`O
z|, 说明:
5C^@w -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
I3d}DpPx% ~1 31|e`C 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
p8?v
o?^ --------------------------------------------------------------------------------
>}W[>WReI HXztEEK6 = 刷新的语法是:
J_-fs#[x vLyazVj.. rpm -F [install-options] package_file
B&0W P5OF 5Z5x\CcC3 rpm --freshen [install-options] package_file
<V Rb .>P:{'' 示例:
t8rFn D|Wlq~IpQ 从未安装过lynx包,使用-F选项,将无法升级。
Kfr1k kxJ[Bi# [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
4v3gpLH [root@localhost ~]# rpm -q lynx
;ko6igx)+ package lynx is not installed
)5gj0#|CG@ --------------------------------------------------------------------------------
eF9GhwE= VuH -> <JU3sXl 安装和更新选项为:
2lOUNx Q$ =WBfaxL} --allfiles
DuZ Zu 安装或更新所有文件。
Q~VM.G x\f~Gtt7Y --badreloc
Gn_DIFa 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
(V]3w &
d2`{H --excludedocs
Jww#zEK 不安装任何文档文件。
v+W'0ymbnV ]sk=V.GGQ --excludepath path
-)VjjKz]8 不安装文件名以path开始的任何文件。
Lhe& y_=y% --force
#kq!{5, 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
x\8|A wWiYxBeN -h,--hash
Q}KOb4D 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
Jou*e% L\E>5G; --ignorearch
&tvp)B?cWk 即使二进制包用于不同的体系结果也进行安装。
O=(F46 M EwA* --ignoreos
4gsQ:3 即使操作系统不匹配也安装二进制包。
*4}NLUVX VJ&<6 --ignoresize
,m5i(WL 安装前不检查磁盘的可用空间。
a%`%("g! }$'_%, --includedocs
!*NDsC9 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
/UK]lP^w]! R_KD Y --nodeps
e5P9P%1w 不检查这个包是否依赖于其他包的存在。
Br7q. d(d<@cB9 --noorder
/bB4ec8! 安装之前,不为了满足依赖关系而对包进行重新排序。
L-C^7[48= 9Ffam# --noscripts
zIjfxK 不执行任何预安装或后安装脚本。
H@?} !@ 'ET];iZ2 --notriggers
o,dp{+({ 不执行任何由包安装触发的脚本。
h\w;SDwOk ,)#rD9ZnC --oldpackage
)`f-qTe 允许升级以用旧包替换新包。
~ILv*v@m $5)#L$!,] --percent
NimgU Fa 当文件被解压时输出完成百分比的信息。
(EY@{'.& 3?]81v/ --prefix path
0#!}s&j/ 把可重定位包的安装前缀设置为path。
Y6VJr+Ap( A#T"4'#?< --replacefiles
PENB5+1OK 即使包替换了来自其他安装包的文件,也安装这些包。
!V3+(o1 :VZS7$5 --replacepkgs
~io. TS|r 即使某些包已经被安装,也安装他们。
[Tp?u8$p` Zja3HGL --test
AG=PbY9 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
}3X/"2SW^ 8TT#b?d --------------------------------------------------------------------------------
Cd
2<r6i ;Jg$C~3tf \2 N;VE 查询
%bN{FKNN LkS tU) query命令的语法为:
eTvjo(Lvx ZZI}
Ot{ rpm -q[information-options] [package-options]
+u0of^}= rpm --query[information-options] [package-options]
r+E!V'{C |xFA} 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
~rdS#f&R2 --------------------------------------------------------------------------------
ZF[W<Q 1LRP
R@b^ [,AFtg[ 以下简单示演示一下包查询:
S*h^7?Bu if|5v^/ 简单查询:
9=MNuV9/s }_zN%Tf~ 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
-@"3`uv" [+dCA 示例:
=JzzrM|V* ~Dq-q6-@t [root@localhost ~]# rpm -q lynx
q| 1%G Nb lynx-2.8.5-18
~&D
=;M/ --------------------------------------------------------------------------------
`mz}D76~# C?gqX0[ q HJ7A/XW 信息查询:
8$_{R!x ]?@ [Ny=0 rpm -qi packagename命令可以得到安装包的汇总信息。
DPxx9lN_rx ;7:} iKU 示例:
~
O#\$u [root@localhost ~]# rpm -qi lynx
SQ4^sk_! Name : lynx Relocations: (not relocatable)
z:f&k}( Version : 2.8.5 Vendor: Red Hat, Inc.
)H
W Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
$`3yImv+w Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
Z%3CmKdeF Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
M> WWP3 Size : 4837340 License: GPL
)Y)_T&O Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
q=5aHH% | Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> +\Jo^\ URL :
http://lynx.isc.org/ it\$Pih] Summary : 一个基于文本的网页浏览器。
O~V^] Description :
q<q IT Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
KMIe%2:b5 图像,但是它支持框架、表格、以及多数其它 HTML
>=; -: 标签。Lynx 优于图形化浏览器的地方是它的速度――
g:Qq%' Links 能够快速启动、退出、及显示网页。
)
~=pt&+ 标识拥有者
B1 }-
--------------------------------------------------------------------------------
/'jX_
V_$| + m-88 #ay/VlD@ 找出什么包拥有文件file:
NgyEy n
\
QvZ"{ 示例:
FJtmRPP[r e7;7TrB. [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
k+ t(u] lynx-2.8.5-18
OXrm!' --------------------------------------------------------------------------------
iRsB|7v[ , -z`FKej jSE)&K4nI 列表包中的文件:
. J O3# gdf0 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
gxVr1DIkN $uTrM8 示例:
q1:dcxR[ K^fs#7 此为部分显示结果
hO8xH +; [root@localhost ~]# rpm -ql lynx
1<_][u@ /etc/lynx-site.cfg
1(BLdP3& /etc/lynx.cfg
g]vB\5uA: /etc/lynx.cfg.cs
K{DC{yLu /etc/lynx.cfg.ja
N=1ue`i /etc/lynx.cfg.sk
ZEI)U,
I. /usr/bin/lynx
C5dM`_3L /usr/share/doc/lynx-2.8.5
c%pf,sm' /usr/share/doc/lynx-2.8.5/INSTALLATION
$~FZJ@qa /usr/share/doc/lynx-2.8.5/README
Hj{.{V /usr/share/doc/lynx-2.8.5/docs
88_ef7w /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
Bu=1-8@=qs /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
iuY,E /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
.|[{$&B /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
USyc D` /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
)v;O2z /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
B=d<L^ /usr/share/doc/lynx-2.8.5/docs/CMU.announce
^>l <)$s /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
-8qCCV&1i /usr/share/doc/lynx-2.8.5/docs/FM.announce
1}\p:` /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
3Sfd|0^ /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
k^%=\c /usr/share/doc/lynx-2.8.5/docs/README.TRST
LhLAQ2~ /usr/share/doc/lynx-2.8.5/docs/README.chartrans
; H ;h[ /lC# !$9vz --------------------------------------------------------------------------------
+I3Vfv h-ii-c?R@0 r!Dk_|Cd 列出包所提供的实际能力:
Hdew5Xn(: 4aOz=/x2 --provides选项的作用是列出这个包所提供的实际能力。
$XQgat@&] \09A"fs{ 示例:
fVn4=d6X 06Wqfzceb [root@localhost ~]# rpm -q --provides lynx
$4g{4-) config(lynx) = 2.8.5-18
o^2MfFS webclient
ZXb|3|D lynx = 2.8.5-18
2@tnOs(* --------------------------------------------------------------------------------
9k;,WU(K< aU(.LC o C|oh 列出这个包所倚赖的任何包:
s*Qyd{"z y-+W -R,--requires选项的作用是列出这个包所依赖的任何包。
N0S^{j,i ;VKWY 示例:
*?t$Q|2Xr b+qd'
,.Z [root@localhost ~]# rpm -qR lynx
DehjV6t /bin/sh
^~V2xCu! config(lynx) = 2.8.5-18
Ds(Z. indexhtml
/.e7#-+? libc.so.6
[+D]!&