Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
>ON.ftZi TnAX;+u 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
z*1K<w8 uS,$P34^oy 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
f/m6q8!L{ 6GvnyJ{[ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
?QVI'R:Z? --------------------------------------------------------------------------------
-2d&Aq4m) ;Nij*-U4~ T6#GlO)8) 以下简要介绍RPM包的安装,删除和查询
11+_OC2-
[)u{ - RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
:E*U*#h/ NWj@iyi< rpm命令的格式为:
Z_+No :F7I `^{P,N>X rpm [options] [packages]
CgE5;O $Bb/GXn{\ 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
(DAJ(r~ 5)6%D 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
PCjY,O --------------------------------------------------------------------------------
n3,wwymQ gu&oCT NE"fyX` RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
A>yIH)b T667&@ 以下为rpm --showrc命令显示的节选:
h (2k;M^s gp2)35 示例:
PD4E&k JnJz{(c
此为部分显示结果
s6uAF(4, [root@localhost ~]# rpm --showrc
h65j,v6B ARCHITECTURE AND OS:
H)tDfk sq\ build arch : i386
N3) v,S- compatible build archs: athlon i686 i586 i486 i386 noarch
~G:7*:[b build os : Linux
cw{[B%vw compatible build os's : linux
"-%H</ install arch : athlon
v^'~-^s
install os : Linux
iSHl_/I< compatible archs : athlon i686 i586 i486 i386 noarch
nrBitu, compatible os's : linux
!f6 RPMRC VALUES:
:DJ@HY 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
w4a7c optflags : %{__global_cflags} -m32 -march=athlon
v(~m!8!TI Features supported by rpmlib:
*E'K{?-K rpmlib(VersionedDependencies) = 3.0.3-1
wt;aO_l PreReq:, Provides:, and Obsoletes: dependencies support versions.
UtN>6$u
rpmlib(CompressedFileNames) = 3.0.4-1
jfamuu 7 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
ow"Xv rpmlib(PayloadIsBzip2) = 3.0.5-1
;0'v`ob'.? package payload can be compressed using bzip2.
Z
ngJ9js --------------------------------------------------------------------------------
UepBXt3) +_Z/VQv _!zY(9% rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
lfP|+=^B
pkx>6(Y 示例:
vKf=t&gqr IIkJ"Qg. [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
f'dI"o&^/d Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
Km7 Preparing... ########################################### [100%]
$(U|JR@ 1:lynx ########################################### [100%]
wn&2-m*a --------------------------------------------------------------------------------
mZyTo/\0 wQT'~'kL 6*7&X#gG 以下列出一些通用选项(可以用于所有模式):
q0wVV (6nw8vQ --dbpath path
D2bUSRrb 用path作为RPM数据库的路径。
.&y1gh!= jL SZ#H --ftpport prot
0J~4
用port作为FTP端口。
Z]<_a)> <h({+N --ftpproxy host
L%FL{G
用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
#ZA
YP Hik[pVK@ --help
"L]_NST 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
`Z-`-IL j$6}r --justdb
{Y Ymt!Ic 只更新数据库;不改变任何文件。
+zsya4r $]FWpr%) --pipe command
uc_
X;M; 用管道把rpm输出到commond。
MXb(Z9)]kw |k+^D : --quiet
x<(h9tB 仅显示错误信息。
JN_#
[S$
*C \O]r:' --rcfile filename
}kpkHq"`f 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
&^.'g{\Y ,tZwXP{ --root dir
)c/]
8KU 在dir目录内执行所有操作。
4"sP= C
c'b,=SM --version
D_Y;N3E/rS 输出rpm版本号。
FWg7e3 9\F^\h{ -vv
-MjRFa 输出调试信息。
KVuv%? ^ ;a[v^&9 --------------------------------------------------------------------------------
:"4~VDu }MNm>3 cF6|IlhO 安装升级和刷新
iX=*qiVX Qxwe,: 安装或升级一个RPM包,install命令的语法为:
5WUrRQ?E Nu'rn*Y_ rpm -i [install-options] package_file
9L};vkYk# rpm --install [install-options] package_file
|NI0zd ?@_dx=su 示例:
~J|0G6H V;"'!dVX [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
{8' 5 package lynx-2.8.5-18 is already installed
' vwBG=9C [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
6{M.S}.^ --------------------------------------------------------------------------------
x?3p3[y Z(L>~+% pfT7 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
ydt1ED0Q- QU t!fF@t rpm -U [install-options] package_file
157X0&EX rpm --upgrade [install-options] package_file
pPE4~g 05h '&9b*u";x( 示例:
;>~iCFk]? mS0W@# |K 先安装旧版
?CIa)dhu [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
&~i1 @\] C.@TX
再安装新版
G.Q+"+*^ [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
8PQt8G. M-NR!? 9 显示出新版本信息
jAu/]
HZx [root@localhost ~]# rpm -q lynx
*$QUE0 lynx-2.8.5-18
5J,vH[E \m<*3eS 说明:
WI%,m~ -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
`)'YU^s L,i-T:Z~= 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
}sFHb[I & --------------------------------------------------------------------------------
YW*ti|u|w C
RNO4 vQ;Z 0_ 刷新的语法是:
%]-tA,u t?\osPL rpm -F [install-options] package_file
{S?.bT%& m*1=-"P rpm --freshen [install-options] package_file
R&?p^!`% C<3An_Dy 示例:
'
{Q L`L ^#nAS2w7U 从未安装过lynx包,使用-F选项,将无法升级。
j'Fni4; 'G&w[8mqY [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
K&/W cuP& [root@localhost ~]# rpm -q lynx
#r\uh\Cy package lynx is not installed
=#W6+=YN8 --------------------------------------------------------------------------------
v"j7},P@ B#=dz,} rB4]TQ`c 安装和更新选项为:
sS._N@f 7j^,4; --allfiles
.m
.v$( 安装或更新所有文件。
RW'QU`N[Y zR%#Q_ --badreloc
, vWcWT 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
r;-\z(h @ Fu|et --excludedocs
kp[Jl0K5 不安装任何文档文件。
jN'zNOV~ h T<v8 --excludepath path
j*GYYEY 不安装文件名以path开始的任何文件。
y&UsSS 1'ZBtX~A --force
&a V`u?'e 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
dI`b AP;\ y@F{pr+dA -h,--hash
hUqIjc uL4 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
5( 3tPbm{ GE|V^_|i --ignorearch
_o;alt 即使二进制包用于不同的体系结果也进行安装。
L~\Ir HM`;%0T0( --ignoreos
2gA6$s7 即使操作系统不匹配也安装二进制包。
_T1|_9b `U(FdT --ignoresize
kxh
$R> 安装前不检查磁盘的可用空间。
9Z}-%Z[,) D ,nF0p --includedocs
LVX.s tN#p 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
&U:;jlST9 $aEL>,X --nodeps
d%iMjY`~[g 不检查这个包是否依赖于其他包的存在。
gF&1e5`i Zf ;U=]R --noorder
LBTf}T\ 安装之前,不为了满足依赖关系而对包进行重新排序。
iNcB6,++ [S4<bh! --noscripts
XLB7
E 不执行任何预安装或后安装脚本。
)Zox;}WK+ O9bIo]B --notriggers
kIyif7 不执行任何由包安装触发的脚本。
"5=Gu1 @I9A"4Im --oldpackage
->d3FR 允许升级以用旧包替换新包。
5-*/wKjLz Vf0m7BJc3 --percent
_G@)Bj^* 当文件被解压时输出完成百分比的信息。
[:Sl^ Z&6M -GH>12YP --prefix path
r+>gIX+Fl 把可重定位包的安装前缀设置为path。
n}EH{k9# I=0`xF|4K- --replacefiles
RK< uAiU 即使包替换了来自其他安装包的文件,也安装这些包。
>HyZ~M V3
2F --replacepkgs
XsEDI?p2 即使某些包已经被安装,也安装他们。
09/Mg `KB; 3L --test
tmKHT 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
L\aG.\ 5y0N }} --------------------------------------------------------------------------------
wZ0RI{)s' UZz/v#y~ `fS$@{YI_ 查询
zt6GJz1q Kqm2TMO]>V query命令的语法为:
m9 1Gc?c @kd`9Yw rpm -q[information-options] [package-options]
G8}k9?26( rpm --query[information-options] [package-options]
jBb:) A{MMY{K3 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
z#m ~} --------------------------------------------------------------------------------
\(C6|-:GY UyENzK<%u yhc}*BMZ 以下简单示演示一下包查询:
a[I
: ^S mb,\ wZ 简单查询:
;?4EVZ#o %py3fzg 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
~wvu7 6/6M.p 示例:
]jjHIFX zc K`hS [root@localhost ~]# rpm -q lynx
*PM#ngLX}r lynx-2.8.5-18
}]<0!q &xB --------------------------------------------------------------------------------
DHQS7%)f` ]Q$S ei5 }p5_JXBV 信息查询:
!Ah v07SI )V d^#p rpm -qi packagename命令可以得到安装包的汇总信息。
$t0o*i{ c^3,e/H 示例:
iSbPOC7 [root@localhost ~]# rpm -qi lynx
||D PIn] Name : lynx Relocations: (not relocatable)
!y+uQ_IS@ Version : 2.8.5 Vendor: Red Hat, Inc.
x n?$@ Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
4(
$p8J Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
MQ#k`b#() Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
%tB7 &%ut Size : 4837340 License: GPL
2ca#@??R Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
`3g5n:"g\ Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> }k;wSp[3 URL :
http://lynx.isc.org/ 7cB/G:{
Summary : 一个基于文本的网页浏览器。
B`|f"+. Description :
|P@N}P@ Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
f*}}Az.4 图像,但是它支持框架、表格、以及多数其它 HTML
"%lIB{ 标签。Lynx 优于图形化浏览器的地方是它的速度――
xqs ,4bcbY Links 能够快速启动、退出、及显示网页。
ijP`fM8 标识拥有者
.exBU1Yk@ --------------------------------------------------------------------------------
?zex]!R >$,P )cB' .d I".L 找出什么包拥有文件file:
D%L^[|)c\s oz:"w
nX 示例:
D6-R>"} P?p]sLrP [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
|M`'
lynx-2.8.5-18
I3HO><of --------------------------------------------------------------------------------
)pSA|Qt N kMJ}sS $GP66Ev 列表包中的文件:
60;_^v C#-HWoSi 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
}{y)a<` EHN(K- 示例:
tk]D)+{u&c i\<S ; 此为部分显示结果
k4a51[SYBK [root@localhost ~]# rpm -ql lynx
T*:w1*: /etc/lynx-site.cfg
!c`&L_ "! /etc/lynx.cfg
; [G: /etc/lynx.cfg.cs
Q3Pu<j}Y /etc/lynx.cfg.ja
{n|ah{_p| /etc/lynx.cfg.sk
"AU.Eh"-1 /usr/bin/lynx
f0vO(@I /usr/share/doc/lynx-2.8.5
#9gx4U /usr/share/doc/lynx-2.8.5/INSTALLATION
KLvAe>#, /usr/share/doc/lynx-2.8.5/README
}4N'as/ZO /usr/share/doc/lynx-2.8.5/docs
)X?oBNsj /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
Mgr?D /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
yX4Vv{g /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
58XZ]Mc0 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
" i:[|7 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
|QS3nX< /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
NB1KsvD{ /usr/share/doc/lynx-2.8.5/docs/CMU.announce
1Y87_o'd /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
u?"="-^ /usr/share/doc/lynx-2.8.5/docs/FM.announce
"MU-&** /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
<pfl>Uf /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
MA,*$BgZ /usr/share/doc/lynx-2.8.5/docs/README.TRST
9w- )?? /usr/share/doc/lynx-2.8.5/docs/README.chartrans
D6Au)1y=& .u>[m. --------------------------------------------------------------------------------
Tf~eH!~0 iLch3[p% .<zKBv 列出包所提供的实际能力:
<Y."()}GeH o2X95NiH --provides选项的作用是列出这个包所提供的实际能力。
:`e#I/,
V1B!5N< 示例:
}/dk2!?ig 9wZ?")2 [root@localhost ~]# rpm -q --provides lynx
M^[;{p2uZ config(lynx) = 2.8.5-18
_tJt
eDRY webclient
] L97k(:Ib lynx = 2.8.5-18
ele@xl --------------------------------------------------------------------------------
<Xl#}6II %ggf|\-e Asv]2> x 列出这个包所倚赖的任何包:
XHekz6_ ?<${?L> -R,--requires选项的作用是列出这个包所依赖的任何包。
)i}j\";>L OL>)SJj5 示例:
Qn7T{ BW '{cSWa|
# [root@localhost ~]# rpm -qR lynx
Rjq Xz6 /bin/sh
._^}M<o L config(lynx) = 2.8.5-18
0W(mx-[H/ indexhtml
][wb4$2 libc.so.6
o>_})WM1[ libc.so.6(GLIBC_2.0)
rw,Ylr:3 libc.so.6(GLIBC_2.1)
])wdd>' libc.so.6(GLIBC_2.2)
^#d\HI libc.so.6(GLIBC_2.3)
AY{KxCrb^ libcrypto.so.4
'g!T${ libncursesw.so.5
#h?IoB7 libssl.so.4
q)i %*IY libz.so.1
HD^#" rpmlib(CompressedFileNames) <= 3.0.4-1
?>Sv_0 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
EW|$qLg --------------------------------------------------------------------------------
ao2^3e }9+;-*m/ uR ?W|a 列出包中的配置文件
N$6e KJ] Yy88 5 -c,--configfiles选项的作用是列出包中的配置文件
Q]YB.n3 .JPN '; 示例:
IplOXD 3Do0?~n [root@localhost ~]# rpm -qc lynx
>x{("``D0y /etc/lynx-site.cfg
)GkJ%o#H2 /etc/lynx.cfg
T9
/;$6s* /etc/lynx.cfg.cs
cc|W1,q /etc/lynx.cfg.ja
5E\.YqdV /etc/lynx.cfg.sk
r }lGcG) --------------------------------------------------------------------------------
N[po)}hp k5I;Y:~` [3jJQ3O, 显示有关于包的改变信息的日志:
F{0\a;U@^ !l9{R8m>eJ --changllog选项的作用是显示有关于包的改变信息的日志。
pcy;]U? xj3qOx$ 示例:
WeM38&dWY kJJT`Ba&/ 此为部分显示结果
bZ\R0[0 [root@localhost ~]# rpm -q --changelog lynx
s0/O/G? * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
o]4]fLQ - Removed perl dependencies (bug #127423).
x~V[}4E%> * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
3PE.7-HF - rebuilt
4yxQq7
m, * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
0G+Q^]0 - No longer need lynx-284-ipv6-salen.patch.
KLyRb0V - No longer need lynx2-8-2-telnet.patch.
5MVa;m * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
CIx(SeEF - rebuilt
{Rkd;`Q`! * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
E+aePo U - Updated to dev16, fixing bug #110196.
)A\
ZS<@Z7 - No longer need crlf patch.
4rU/2}.q - Use shipped ja translations.
( zWBrCX - Use %find_lang.
fzIs^(:fl - Default config file now sets UTF-8 (bug #110986).
; ~pgF_ --------------------------------------------------------------------------------
J#I RbO) +/ZIs|B4,z i>YS%&O? 包选择选项
2!{D~Gfl= fB8, )& package_name
#7]Jz.S 查询已安装包的package_name。
,U~A=bsa h3o'T=`Sm -a,--all
suY47DCX) 查询所有已安装拨。
1,-C*T}nR ye(b 7CX -f file,--file file
l~i? 找出什么包拥有文件file。
&DLWlMGq dH y9
wU -g group,--group group
aKDY_D 找出什么包拥有组group。
7?*+,Fo# i g(O$y -p package_file
Fw 0m(7 查询未安装包package_file
50cVS)hG6d '^UHY[mX8 --querybynumber num
0k
(- 查询第num个数据库条目。主要用于调试。
Fi/iA%, o-\h;aQJ -qf,--queryformat num
^%r6+ey 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
J$#T_4 ) 24 [KGp --specfile specfile
\ %Mcvb.? 查询specfile,就好象它是个包
8!E.3'jb IRN,= --triggeredby pkg
'Aq^z%| 列出触发安装pkg包的包。
P([!psgu 5#GMp --whatrequires capability
kelBqJ-,p 列出要求特定能力来行使职责的包。
`
,\b_SFg "w:h --whatprovides capability
!"N,w9MbD 列出提供特定能力的包。
/6')B !& --------------------------------------------------------------------------------
yaR>?[h @IL04' \ wlXs/\es 信息选择选项:
]l,D,d81 "^#O7.oVi+ -c,--configfiles
"`qk}n- 列出包中的配置文件。
P~j#8cH7 Bgxk>Y --changelog
S2$66xr# 显示有关于包的改变信息的日志。
{KG}m'lx +F)EGB%LXs -d,--docfiles
7m2iL#5[ 列出包中的文档文件。
1#vu)a1+b 2Re8rcQQU --dump
#Zdh<. 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
o%_-u
+ 以下列顺序输出信息:
/HdXJL9B path size mtime md5sum mode owner group isconfig isdoc rdev symlink
A(2 0+ ZFtx&vrP --filebypkg
T8S&9BM7 列出每个包中的所有文件。
L1SX2F8 [+\He/M6 -i
2j-l<!s 显示包的信息,包括名字,版本和描述。
A%^?z. ctP+ECH -l,--list
n9Fq^^? 列出包中所有文件
k-~}KlP f Fi=/} --last
Xh8U}w<k6 根据安装时间列出包,最新的包排第一位。
So ziFI G<C D4:V --provides
#:?:gY< 列出这个包所提供的实际能力。
BZ?w}%-MO JN8Rh -R,--requires
tj;47UtH 列出这个包所依赖的任何包。
y4kn2Mw; 7J);{ &x9h -s,--state
bW`nLiw}% 列出包中的每个文件及其状态。可能的状态为normal,not installed或replaced。
wq?"NQ?O< iHv+I~/ --scripts
F@<cp ?dR 列出任何在安装和卸载过程中所使用的包特定的shell脚本。
7m#EqF$P E-WpsNJ)X --------------------------------------------------------------------------------
lf=G EB3/o7)L f&vMv. 卸载
jRsl/dmy Tb]7# v uninstall命令的语法为:
ja9u?UbW -8)Hulo/{U rpm -e package_name
fM.#FT?? rpm --erase package_name
XpANaqH\ oXZWg~&l^ 示例:
PJK:LZw KH2]:&6:Q [root@localhost ~]# rpm -e lynx
}XUL\6 U [root@localhost ~]# rpm -q lynx
wqG#jC!5 package lynx is not installed
&k'<