Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
']1a 45jImCm 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
GI:!,9 !>kg:xV 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
\E05qk_;K ]<Q& 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
fy&u[Jd{ --------------------------------------------------------------------------------
#nZPnc: P9q=tC3^ !g#y$ 以下简要介绍RPM包的安装,删除和查询
KhL%ov }"kF<gG1 RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
D& &71X ' Wk!<P"
nHd rpm命令的格式为:
?@6Zv$vZ >5Y. rpm [options] [packages]
6%wlz%Fp |=:hUp Jp 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
r;wm`(e Z:2%gU&W 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
cXYE!( --------------------------------------------------------------------------------
Qj|tD+< wuSotbc/ {qCFd RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
\
*g3j 3Lv5>[MnN 以下为rpm --showrc命令显示的节选:
S{{wcH$n'i :1]J{,VG 示例:
1vJj?Uqc |PGTP#O< 此为部分显示结果
95ix~cH3q [root@localhost ~]# rpm --showrc
TWfkr ARCHITECTURE AND OS:
_E/ build arch : i386
,<s:*
k compatible build archs: athlon i686 i586 i486 i386 noarch
wZKmU build os : Linux
eIhfhz?Q;# compatible build os's : linux
vM:c70= install arch : athlon
jQBn\^w install os : Linux
[b~+VeP+p4 compatible archs : athlon i686 i586 i486 i386 noarch
7m:TY>{ compatible os's : linux
q_"w,28 RPMRC VALUES:
l=#b7rBP 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
PM&NY8|Zy optflags : %{__global_cflags} -m32 -march=athlon
gebL6oc% Features supported by rpmlib:
4sC)hAx&f rpmlib(VersionedDependencies) = 3.0.3-1
nu2m5RYx PreReq:, Provides:, and Obsoletes: dependencies support versions.
WKwYSbs( rpmlib(CompressedFileNames) = 3.0.4-1
152LdZevF file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
ob|^lAU rpmlib(PayloadIsBzip2) = 3.0.5-1
8CH9&N5W5t package payload can be compressed using bzip2.
-*kZ2grLt --------------------------------------------------------------------------------
8~|v:qk OAgZeK$ E;q+u[$ rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
.;(a;f+{; ~Qf\DTM& 示例:
=p:~sn# J- 5kvQi8 [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
4RH>i+)pS\ Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
TJZar Nc$ Preparing... ########################################### [100%]
f6PYB&<1 1:lynx ########################################### [100%]
TpdYU*z_Br --------------------------------------------------------------------------------
?>gr9w\ !HeQMz vTL/% SJ8 以下列出一些通用选项(可以用于所有模式):
a^Q
?K\c4N !"'6$"U\K --dbpath path
RPjw12Ly 用path作为RPM数据库的路径。
w?Cho</Xu cxx8I --ftpport prot
+G,_|C2J 用port作为FTP端口。
]Z52L`k KUUZN --ftpproxy host
!\'HKk~V 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
5'<mfY'B Fzn! --help
|qU~({=b 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
BA8!NR| IIF <Zkpb --justdb
,| j\x 只更新数据库;不改变任何文件。
6]4=8! J +k0UVZZX? --pipe command
\XfLTv 用管道把rpm输出到commond。
_SH~.Mt_! 7h>, --quiet
[@]i_L[ 仅显示错误信息。
R 0G!5>1i >X5RRSo --rcfile filename
Kk|)N3AV: 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
"I @akM$x -KZ9TV # R --root dir
;wZplVB7y 在dir目录内执行所有操作。
xlh<}Vtp K~fWZT3] --version
xU(b:D Z 输出rpm版本号。
by$mD_sr rqKK89fD' -vv
M-e|$'4u 输出调试信息。
Z4m+GFY Cm0K-~
U --------------------------------------------------------------------------------
FV/lBWiQQ _<l)4A3rS 0C6T>E7 安装升级和刷新
7y$U$6 3 FMYs&0r4 安装或升级一个RPM包,install命令的语法为:
Qtt3;5m |D[LU[<C rpm -i [install-options] package_file
Or55_E rpm --install [install-options] package_file
zy|h1.gd qa4j>; 示例:
hZ')<@hNP =4OV
}z=I [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
}C$D-fH8sW package lynx-2.8.5-18 is already installed
nj-LG!"a [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
1KjzKFnb --------------------------------------------------------------------------------
tg9{(_t/W r?pN-x$M= 3-)R' 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
gf^y3F[\ c(!pcB8 rpm -U [install-options] package_file
b=SCyGxlZ5 rpm --upgrade [install-options] package_file
q2;CvoF .k%/JF91n 示例:
6LqF*$+$` Hr \vu`p$ 先安装旧版
:!FGvR6 [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
w8#ji 1gX i8#:y`ai 再安装新版
n1b^o~agwC [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
&G?w*w_n ~
cI`$kJ 显示出新版本信息
j9BcoEl:; [root@localhost ~]# rpm -q lynx
3ik~PgGoKQ lynx-2.8.5-18
U}l=1B at\$
IK_ 说明:
O>9-iqP>`d -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
v9Lf|FXo& k4` %.; 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
iT+t --------------------------------------------------------------------------------
AdzdYZiM_ s=Kz9WLy &3itBQF 刷新的语法是:
=p dLh ViUx^e\ rpm -F [install-options] package_file
}n
+MVJ;dG (@bq@0g rpm --freshen [install-options] package_file
'u_j5 4~hP25q 示例:
TxTxyYd T iJ \J{ 从未安装过lynx包,使用-F选项,将无法升级。
gb}ov** }^*`&Lh [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
G\(*z4@Gz [root@localhost ~]# rpm -q lynx
n} ]gAX package lynx is not installed
t$lJgj(
--------------------------------------------------------------------------------
m]}EVa_I`/ pezfB{x? {J/+KK 安装和更新选项为:
]1I-e2Q-J OUN"'p%% --allfiles
?q y*` 安装或更新所有文件。
}|RL6p-/' m&[(xVM --badreloc
l(}l([rdQ 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
OJ.oHf=K! _P%PjFQ)
--excludedocs
:zpT Gk8Z 不安装任何文档文件。
M"$g*j :J+ANIRI --excludepath path
LCb0Kq}*/( 不安装文件名以path开始的任何文件。
}s8xr> Wxi;Tq9C@_ --force
Q v},X~^R 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
g9IIC5 JtF)jRB0, -h,--hash
0QEcJ]Qb8 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
i;:}{G< &7Xsn^opku --ignorearch
~N)(|N 即使二进制包用于不同的体系结果也进行安装。
$-(lp0\*
8L`wib2 --ignoreos
YI]/gWeu 即使操作系统不匹配也安装二进制包。
xJOp~fKG |{rhks~ --ignoresize
6}*4co 安装前不检查磁盘的可用空间。
&0{&4, BT
f --includedocs
|Vp
? 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
`*]r+J2 V-"#Kf9 --nodeps
!.O;SG 不检查这个包是否依赖于其他包的存在。
SXV2Y- <irr.O --noorder
EWWCh0
{ 安装之前,不为了满足依赖关系而对包进行重新排序。
JZqJ& oMNBK/X_ --noscripts
{<cgeH 不执行任何预安装或后安装脚本。
gUiZv8C DP!8c --notriggers
tn |H~iF{ 不执行任何由包安装触发的脚本。
}t1 q5@QU `'pfBVBz --oldpackage
eGWwPSIp 允许升级以用旧包替换新包。
'a~F'FN$ =~q$k --percent
vpdT2/F 当文件被解压时输出完成百分比的信息。
I~-sBMm(w p.,`3"C1 --prefix path
.{(gku>g( 把可重定位包的安装前缀设置为path。
d-I=xpB D8b9T.[( --replacefiles
*#GX~3A 即使包替换了来自其他安装包的文件,也安装这些包。
H8E#r*"-m _OK!/T*FBt --replacepkgs
?` 2z8uD/ 即使某些包已经被安装,也安装他们。
7bR[.|T hl,x|.f}4Y --test
`J;g~#/k 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
lEw!H^O4 |w>d]eA5 --------------------------------------------------------------------------------
,5x9o"N! yEVnG`
1
<4I`|D3@ 查询
E:P_CDSd] UUvR>5@n query命令的语法为:
k7 Ne(4P xzf/W+.>. rpm -q[information-options] [package-options]
~e5E%bXxC rpm --query[information-options] [package-options]
e_FoNT 41+@!`z7 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
2l~qzT- --------------------------------------------------------------------------------
pQ8f$I#v =
jTC+0u g c<Y?a- 以下简单示演示一下包查询:
"rpP MQX9BJ% 简单查询:
~6[3Km|2 A|m0.'/ 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
QjTs$#eMW -r[O_[g w 示例:
:GM3n$ $7p0<<Nck [root@localhost ~]# rpm -q lynx
{k']nI.> lynx-2.8.5-18
(Y"./BDY --------------------------------------------------------------------------------
P R_|
8H| ;20sh^~ $$'[% 信息查询:
/^`do3a} LXRIo2ynuw rpm -qi packagename命令可以得到安装包的汇总信息。
$Ut1vp1$ DyRU$U 示例:
e )] [root@localhost ~]# rpm -qi lynx
=bQ\BY# Name : lynx Relocations: (not relocatable)
Bey9P)_Of Version : 2.8.5 Vendor: Red Hat, Inc.
:=K+~?
Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
gbu)bqu2x Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
mqiCn]8G Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
=ibKdPtTh^ Size : 4837340 License: GPL
O#)YbaE Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
.gCun_td# Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> hh-sm8 URL :
http://lynx.isc.org/ 'Ojxzz*tT Summary : 一个基于文本的网页浏览器。
so@ijl4{Z Description :
Iz!]LW Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
g,f
AVM 图像,但是它支持框架、表格、以及多数其它 HTML
w1+
%+x 标签。Lynx 优于图形化浏览器的地方是它的速度――
9]|C$;kw@ Links 能够快速启动、退出、及显示网页。
y!~ }7= 标识拥有者
(^~~&/U_U$ --------------------------------------------------------------------------------
,F=FM>o QPB^%8 ,oJ$m$(Lj 找出什么包拥有文件file:
2rM/kF >g /WI H#M 示例:
t1!>EI` /7WdG)' [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
@\U] hN? lynx-2.8.5-18
id>2G
%Tx --------------------------------------------------------------------------------
Crezo? 2
yRUw ixB"6O 列表包中的文件:
"?'9\<> M|UCV_omN 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
IJLuu@kRm, ZUl-&P_X 示例:
ye4GHAm,p 4?c0rC< 此为部分显示结果
/LG}nY [root@localhost ~]# rpm -ql lynx
ziv*4 /etc/lynx-site.cfg
e8k|%m<Sp /etc/lynx.cfg
PD-*rG ` /etc/lynx.cfg.cs
,S&p\(r. /etc/lynx.cfg.ja
bMqFrG /etc/lynx.cfg.sk
{wf5HA /usr/bin/lynx
GFvLd:p` [ /usr/share/doc/lynx-2.8.5
HHT8_c'CC# /usr/share/doc/lynx-2.8.5/INSTALLATION
,9$| "e& /usr/share/doc/lynx-2.8.5/README
$Q= S`z= /usr/share/doc/lynx-2.8.5/docs
^g"% :4zO /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
ZSLvr-,D /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
zOYG`:/' /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
<ti,Wn. /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
K#R|GEwr /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
I.U=%{. /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
2F/oWt|w? /usr/share/doc/lynx-2.8.5/docs/CMU.announce
NH+N+4dEO /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
##s:Ww /usr/share/doc/lynx-2.8.5/docs/FM.announce
,2mq}u>WU /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
m1RjD$fM /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
=Nr?F'< /usr/share/doc/lynx-2.8.5/docs/README.TRST
>oapw5~5 /usr/share/doc/lynx-2.8.5/docs/README.chartrans
<Kk?BRxi nd{k
D>a --------------------------------------------------------------------------------
)k81 Pje1,B q _lfS"ae 列出包所提供的实际能力:
6h1pPx7zU K}p0$Lc --provides选项的作用是列出这个包所提供的实际能力。
]<u%jTQREd x.'Ys1M 示例:
9T<k|b[6 "71Y{WQ [root@localhost ~]# rpm -q --provides lynx
v|nt(-JX config(lynx) = 2.8.5-18
}D!o=Mg^ webclient
VL$?vI' lynx = 2.8.5-18
Q5*"t*L!N --------------------------------------------------------------------------------
-`1)yhS P&*e\"{ 'wo}1^V 列出这个包所倚赖的任何包:
p\tA&>3- "||'
-(0 -R,--requires选项的作用是列出这个包所依赖的任何包。
3o#K8EL Y0ACJ?| 示例:
A"IaFXB S"@@BQ#mf [root@localhost ~]# rpm -qR lynx
&Zo+F]3d /bin/sh
P8 R^46 config(lynx) = 2.8.5-18
VYQ]?XF3i indexhtml
5L,q,kVS libc.so.6
.+~9
vH libc.so.6(GLIBC_2.0)
'^tC |) libc.so.6(GLIBC_2.1)
)+f"J$ah libc.so.6(GLIBC_2.2)
C-/+n5J libc.so.6(GLIBC_2.3)
Sre:l'. libcrypto.so.4
)O>M~ libncursesw.so.5
1|$J> libssl.so.4
*nwH1FjH libz.so.1
w=thaF. rpmlib(CompressedFileNames) <= 3.0.4-1
s^/2sjoL rpmlib(PayloadFilesHavePrefix) <= 4.0-1
$I9U.~* --------------------------------------------------------------------------------
nQG<OVRClS yjM!M| ?&POVf> 列出包中的配置文件
d26#0Gt-4i e/$M6l$Q*4 -c,--configfiles选项的作用是列出包中的配置文件
ONLhQJCb `*cJc6 示例:
1vCVTuRF Z.N9e [root@localhost ~]# rpm -qc lynx
k-sBf Jy\ /etc/lynx-site.cfg
CH $*=3M /etc/lynx.cfg
0bjZwC4J /etc/lynx.cfg.cs
v1 f^gde /etc/lynx.cfg.ja
a4",BDx /etc/lynx.cfg.sk
G'Uq595'- --------------------------------------------------------------------------------
wYh]3 o)H|
#9h5 w}
r mYQ 显示有关于包的改变信息的日志:
\<\147&)r x#t?` --changllog选项的作用是显示有关于包的改变信息的日志。
;ih;8 ~$YasFEz 示例:
5Z13s r(g2&}o\ 此为部分显示结果
GQ*or>R1 [root@localhost ~]# rpm -q --changelog lynx
y4Nam87;/? * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
VA%4ssy - Removed perl dependencies (bug #127423).
6.vwK3\>~ * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
4r9AU mJqw - rebuilt
8cj}9}k * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
ngzQVaB9 - No longer need lynx-284-ipv6-salen.patch.
dDl_Pyg4K - No longer need lynx2-8-2-telnet.patch.
@`HW0Y_: * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
aQV? } - rebuilt
0VIR=Pbp * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
vSk1/ - Updated to dev16, fixing bug #110196.
S~GS:E# - No longer need crlf patch.
?Xqkf> - Use shipped ja translations.
'N/u<`) - Use %find_lang.
ZsGJ[ - Default config file now sets UTF-8 (bug #110986).
LqS_%6^ --------------------------------------------------------------------------------
z/i&Lpr: }L>0}H Q1x=@lXR 包选择选项
wLo<gA6; IC-W[~ package_name
BuS[( 查询已安装包的package_name。
3*eS<n[uG E-#C#B -a,--all
b3q&CJ4| 查询所有已安装拨。
/=KEM gI? K%;=i2: -f file,--file file
HyIyrU rYW 找出什么包拥有文件file。
`Nv7c{M^ KnUVR!H| -g group,--group group
!ZayN 找出什么包拥有组group。
P#AS")Sj 4K
>z?jd -p package_file
vP,$S^7$ 查询未安装包package_file
O*c<m, l@>@2CB --querybynumber num
/&yc?Ui 查询第num个数据库条目。主要用于调试。
8 LsJ}c ex|h&Vma2V -qf,--queryformat num
#m3!U(Og` 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
_hEr,IX=J ]x6rP --specfile specfile
=@MJEo` D 查询specfile,就好象它是个包
v R!
y# 4C9k0]k2 --triggeredby pkg
6e"Lod_ L 列出触发安装pkg包的包。
Oki{)Ssy 1}OM"V --whatrequires capability
I~,b ZA 列出要求特定能力来行使职责的包。
_BG7JvI ~zQxfl/ --whatprovides capability
xU
|8.,@ 列出提供特定能力的包。
[!`5kI --------------------------------------------------------------------------------
)-\qo#0l -K6y#O@@ -6#
_ t 信息选择选项:
A1B%<$|pz E|_}?>{R -c,--configfiles
k!d<2Qp W 列出包中的配置文件。
`{Fz igF<].'V --changelog
2FR5RG
oD 显示有关于包的改变信息的日志。
gN[^ ,u ^O&&QR