Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
i_^NbC j@\/]oL^We 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
'UCx^- Gf.o{ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
#u(,#(P'# AdW7 vn 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
[:'?}p --------------------------------------------------------------------------------
\`5u@Nzx ,B>b9,~3a euC,]n. 以下简要介绍RPM包的安装,删除和查询
ee[NZz Pt;Ahmi RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
RIx6& 7$ iFchD\E*o rpm命令的格式为:
UHHKI)( .[s82c]]6 rpm [options] [packages]
hvZR4|k> CUcjJ|MZ 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
mQuaO#
I, Qn&^.e9I 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
z3LPR:&Z --------------------------------------------------------------------------------
C^O^Jj5X% K<(sqH HKw4}FC* RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
a$&6a
o:*iT=l 以下为rpm --showrc命令显示的节选:
ixpG[8s mSeNM 示例:
2 -8:qmP( fbkjK`_q 此为部分显示结果
"b7C0NE [root@localhost ~]# rpm --showrc
IV*$U7~ ARCHITECTURE AND OS:
b;ZAz
build arch : i386
rJj~cPwL" compatible build archs: athlon i686 i586 i486 i386 noarch
z5w|+9U build os : Linux
.q }k compatible build os's : linux
>xgd< install arch : athlon
zt}p-U2I install os : Linux
,KaWP compatible archs : athlon i686 i586 i486 i386 noarch
EOC"a}Cq- compatible os's : linux
fdW={}~ RPMRC VALUES:
6GvnyJ{[ 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
o)WSMV(&f optflags : %{__global_cflags} -m32 -march=athlon
,Yz+?SmSZ& Features supported by rpmlib:
=1Jo-!{{ rpmlib(VersionedDependencies) = 3.0.3-1
l]&)an PreReq:, Provides:, and Obsoletes: dependencies support versions.
1ki"UF/ rpmlib(CompressedFileNames) = 3.0.4-1
x*V<afLY[ file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
! .}{
f;Ls rpmlib(PayloadIsBzip2) = 3.0.5-1
pdq h'+5 package payload can be compressed using bzip2.
mr.DP~O:9p --------------------------------------------------------------------------------
_"`h~jB P://Zi6> S45_-aE rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
,BAF?}04= Z8UM0B=i 示例:
-C<aB750O) Wno5B/V [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
t,nB`g? Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
#1R
%7*$i Preparing... ########################################### [100%]
gvYs<,: 1:lynx ########################################### [100%]
49GCj`As --------------------------------------------------------------------------------
k=_@1b- W -&5
v _Oq\YQb v 以下列出一些通用选项(可以用于所有模式):
miqCUbcU xM\ApN~W --dbpath path
K(S/D(\
FL 用path作为RPM数据库的路径。
n
Lb 9$& >j3N-;o@? --ftpport prot
Bs}>#I 用port作为FTP端口。
Q8i6kf! {c;3$ --ftpproxy host
dW68lVWq_ 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
]+P&Y: W9"I++~f --help
*6tN o-)^ 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
C"<@EMU9 t`B']Ac;T --justdb
4uA^/]ygo 只更新数据库;不改变任何文件。
(=9&"UH c2/HY8ttRD --pipe command
#J_i 5KmXJ 用管道把rpm输出到commond。
^EOjq -&}E:zoe
--quiet
OFv} jT 仅显示错误信息。
Q2Rj0E` ) /'s&
D --rcfile filename
^cm^JyS) 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
ri
~2t3gg IIkJ"Qg. --root dir
y
rk#)@/m 在dir目录内执行所有操作。
flqTx)xE 5@ug1F& --version
wn&2-m*a 输出rpm版本号。
X $f%Ss .EO1{2= -vv
L8ke*O$ 输出调试信息。
q0wVV (6nw8vQ --------------------------------------------------------------------------------
D2bUSRrb .&y1gh!= X[<9+Q-& 安装升级和刷新
at!?"u :F&WlU$L 安装或升级一个RPM包,install命令的语法为:
)w-?|2-w5 7}k8-:a% rpm -i [install-options] package_file
C#>C59 rpm --install [install-options] package_file
tUQ)q d/1XL[& 示例:
s9iM hCu| S J5kA` [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
s25012 package lynx-2.8.5-18 is already installed
SCij5il% [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
VzesqVx --------------------------------------------------------------------------------
5oS\uX| o6 /?WR 9 VM[8w` 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
@d\F; o< "|if<hx+ rpm -U [install-options] package_file
3nO|A: t rpm --upgrade [install-options] package_file
n>WS@b/o XJ;/kR 示例:
00i9yC8@6 N2>JG]G 先安装旧版
bb{+ [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
8{C3ijR Tx*m
p+q 再安装新版
#82B`y<<y/ [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
hlRE\YO&8R Y{KJk'xN5W 显示出新版本信息
-MjRFa [root@localhost ~]# rpm -q lynx
KVuv%? lynx-2.8.5-18
'' 6 L6^h3*JyD 说明:
s6B@:9 -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
]G:xT v8 kbY@Y,:w 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
[C$ 0HW --------------------------------------------------------------------------------
L6m'u6:1{ Nu'rn*Y_ Q *he%@w 刷新的语法是:
y_6HQ: wrbDbp1L rpm -F [install-options] package_file
(rJvE* O%r<I*T^r rpm --freshen [install-options] package_file
Ot?rsr fOVRtSls 示例:
xk/(|f{L >L%%B- 从未安装过lynx包,使用-F选项,将无法升级。
DxlX- {)mlXo(On [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
,O}zgf*H; [root@localhost ~]# rpm -q lynx
b7-a0zaN package lynx is not installed
)l=j,4nn --------------------------------------------------------------------------------
-8IiQRS v,jU9D\ J?&9ofj& 安装和更新选项为:
r$KDNa$/a xInWcQ --allfiles
mWh:,[o 安装或更新所有文件。
L-XTIL$$ S'txY\ --badreloc
R`c5-0A 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
4T:ZEvdzf 4Xz|HU? --excludedocs
_#+i;$cO-X 不安装任何文档文件。
'Gk|&^ W;=ZQ5Lw --excludepath path
&b_duWs 不安装文件名以path开始的任何文件。
"k.<" pf GB#7w82 --force
d^7<l_u~ ! 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
!Ej<J&e Rh=h{O -h,--hash
Jps!,Mflc 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
i|t$sBIh q45n.A6a --ignorearch
z8oSh t`+ 即使二进制包用于不同的体系结果也进行安装。
;.iy{&$ 5q\]] LV> --ignoreos
TtzB[F 即使操作系统不匹配也安装二进制包。
[Y[|:_+5 fA8 ,wy|> --ignoresize
?g 3sv5\u 安装前不检查磁盘的可用空间。
COap* 'G&w[8mqY --includedocs
#r\uh\Cy 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
J? C"be= K$4Ky&89
--nodeps
=_5-z|< 不检查这个包是否依赖于其他包的存在。
Af;$}P p|zW2L --noorder
x`4">:IA 安装之前,不为了满足依赖关系而对包进行重新排序。
e.[h "h
"vp&A --noscripts
C`fQ` RL\ 不执行任何预安装或后安装脚本。
}u
:sh >2 m9r
X --notriggers
(UCWSA7oc 不执行任何由包安装触发的脚本。
oZQu&O' h T<v8 --oldpackage
j*GYYEY 允许升级以用旧包替换新包。
y&UsSS 1'ZBtX~A --percent
&a V`u?'e 当文件被解压时输出完成百分比的信息。
TV} H bFcI\Q{4 --prefix path
!( /dbHB 把可重定位包的安装前缀设置为path。
\Q]7Hw< N*eZ4s' --replacefiles
DUaj]V{_^ 即使包替换了来自其他安装包的文件,也安装这些包。
KyjN' F$ _s^sZ{'2_ --replacepkgs
'h$1vT 即使某些包已经被安装,也安装他们。
T5ol2 :p89J\ --test
_f/6bpv 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
biQDupTz ct`89~" --------------------------------------------------------------------------------
[j):2 -{^Gzui vForj*Xo 查询
b^0=X!bg <%!EI@N query命令的语法为:
BRzrtK flRok?iF rpm -q[information-options] [package-options]
gkDB8,C<j rpm --query[information-options] [package-options]
6]M(ElV1H X4gs{kx}| 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
L:7%W dyh --------------------------------------------------------------------------------
3{CXIS NO QM:tBO> )KG.:BO< 以下简单示演示一下包查询:
3= PRe #}o*1 简单查询:
}5`Kn}rY L^dF
)y? 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
{>9vm!<[*\ `2G 0B@ 示例:
^)TZHc2a[ DKR2b`J [root@localhost ~]# rpm -q lynx
qeypa! lynx-2.8.5-18
nPE{Gp) } --------------------------------------------------------------------------------
T< D&%) 8K'3iw>z O|d"0P 信息查询:
;tlvf?0! "_W[X rpm -qi packagename命令可以得到安装包的汇总信息。
U<K)'l6#2n bZLY#g7L" 示例:
zt6GJz1q [root@localhost ~]# rpm -qi lynx
Kqm2TMO]>V Name : lynx Relocations: (not relocatable)
y2KR^/LN|Y Version : 2.8.5 Vendor: Red Hat, Inc.
@kd`9Yw Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
:>f}rq Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
/@ m]@ Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
A{MMY{K3 Size : 4837340 License: GPL
z#m ~} Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
wt]onve}% Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> Z):q 1:y URL :
http://lynx.isc.org/ MR}=tO Summary : 一个基于文本的网页浏览器。
&sJ -&7YZ Description :
\8g'v@$wG Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
vhvFBx0 图像,但是它支持框架、表格、以及多数其它 HTML
}Y:V&4DW 标签。Lynx 优于图形化浏览器的地方是它的速度――
T,r?% G{XE Links 能够快速启动、退出、及显示网页。
shKTj5s? 标识拥有者
g%TOYZr!X --------------------------------------------------------------------------------
BlnR{Y kntYj}F( W[/Txc0$ 找出什么包拥有文件file:
WUrE1%u 0~4Ww=# 示例:
E6XDn`: \xG_q>1_ [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
@q]4]U) lynx-2.8.5-18
6+!$x?5|NP --------------------------------------------------------------------------------
-!q^/ux TXdo,DPv7 {.eo?dQ 列表包中的文件:
{^8?fJ/L w{mw?0 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
xu\s2x$ s5h}MXIXw 示例:
MroN=%|t xIA] 5@;a 此为部分显示结果
pmRm&VgE. [root@localhost ~]# rpm -ql lynx
KrdEB0qh /etc/lynx-site.cfg
f YSH]! /etc/lynx.cfg
[4w*<({* /etc/lynx.cfg.cs
agt/;>q\~ /etc/lynx.cfg.ja
zG{P5@:.R /etc/lynx.cfg.sk
z^vfha /usr/bin/lynx
rtNYX=P /usr/share/doc/lynx-2.8.5
iYD5~pK8 /usr/share/doc/lynx-2.8.5/INSTALLATION
sKCYGt$ /usr/share/doc/lynx-2.8.5/README
<p/zm}?') /usr/share/doc/lynx-2.8.5/docs
DG?g~{Y~b /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
t'1g+g /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
bFjH*~
P /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
pu~b\&^G /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
1oe,>\\ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
>dx/k)~~-L /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
`*6|2 /usr/share/doc/lynx-2.8.5/docs/CMU.announce
e>6|# d /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
DL`8qJ'mJs /usr/share/doc/lynx-2.8.5/docs/FM.announce
{7jl) x3l /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
X$e*s\4 /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
!0dQfj^_ /usr/share/doc/lynx-2.8.5/docs/README.TRST
3^[P /usr/share/doc/lynx-2.8.5/docs/README.chartrans
=^1jVaAL k3K*{"z --------------------------------------------------------------------------------
q
#mBNe62p {0~\ T[qm 4sRM"w; 列出包所提供的实际能力:
9 ,:#Q<UM k@
<dru --provides选项的作用是列出这个包所提供的实际能力。
-L+kt_> P -NR]f 示例:
VCfHm"'E8 -0UR%R7q [root@localhost ~]# rpm -q --provides lynx
>"8;8Ev config(lynx) = 2.8.5-18
:s6aFiz webclient
hr;^.a^ lynx = 2.8.5-18
;plBo%EBV --------------------------------------------------------------------------------
![;={d0 SIapY%)h 1RJFPv 列出这个包所倚赖的任何包:
dP?prT 58XZ]Mc0 -R,--requires选项的作用是列出这个包所依赖的任何包。
" i:[|7 q>Di|5<y 示例:
NB1KsvD{ 1Y87_o'd [root@localhost ~]# rpm -qR lynx
u?"="-^ /bin/sh
"MU-&** config(lynx) = 2.8.5-18
<pfl>Uf indexhtml
2TUV9Z libc.so.6
& XmaGtt libc.so.6(GLIBC_2.0)
O 2-n- libc.so.6(GLIBC_2.1)
6#7hMQ0&;O libc.so.6(GLIBC_2.2)
H1f='k]SZ libc.so.6(GLIBC_2.3)
,VS(4 libcrypto.so.4
)7 q"l3e"u libncursesw.so.5
bn)1G$0| libssl.so.4
k:I,$"y4 libz.so.1
OHi.5 ( rpmlib(CompressedFileNames) <= 3.0.4-1
tPl 4'tW_ rpmlib(PayloadFilesHavePrefix) <= 4.0-1
#B<EMGH --------------------------------------------------------------------------------
}[Z'Sg]s g3].STz6w gu3iaM$W 列出包中的配置文件
Mh*r)B~%[ dzEi^*
(8 -c,--configfiles选项的作用是列出包中的配置文件
4XNheP;b VE-l6@` 示例:
w+/`l* Z/%FQ [root@localhost ~]# rpm -qc lynx
kV+^1@" /etc/lynx-site.cfg
Gsv<Rjj: /etc/lynx.cfg
lhHH|~t0 /etc/lynx.cfg.cs
M#;
ks9 /etc/lynx.cfg.ja
@Wc5r# /etc/lynx.cfg.sk
]o8]b7- --------------------------------------------------------------------------------
&y5"0mA ?OLd
}8y W?5') 显示有关于包的改变信息的日志:
Ux7LN@4og Ez;Q o8 --changllog选项的作用是显示有关于包的改变信息的日志。
JD#x+~pb,8 [EDX@Kdq) 示例:
GuO}CQs^W :a6LfPEAX 此为部分显示结果
K_;vqi^1^& [root@localhost ~]# rpm -q --changelog lynx
tsAV46S * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
H0;Iv#S! - Removed perl dependencies (bug #127423).
7Y9#y{v1 * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
H}$7c`;q - rebuilt
=}0Uw4ub(u * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
ID43s9 - No longer need lynx-284-ipv6-salen.patch.
is4}s,]$6 - No longer need lynx2-8-2-telnet.patch.
I)rO| * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
;.V/ngaj - rebuilt
.JPN '; * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
IplOXD - Updated to dev16, fixing bug #110196.
g3z/yj - No longer need crlf patch.
y6nP=g|')> - Use shipped ja translations.
8@;]@c)m - Use %find_lang.
zMR)w77 - Default config file now sets UTF-8 (bug #110986).
q2*A'C --------------------------------------------------------------------------------
-NXxxK !HvA5'|:} eAf i!!Z< 包选择选项
|tGUx*NN 6N#hN)/ package_name
U?#wWbE1 查询已安装包的package_name。
P9/ (f$ = ^ +SE_ -+] -a,--all
7q+D}+ Xf 查询所有已安装拨。
1(gs({ BM<q;;pO -f file,--file file
m+0yf(w 找出什么包拥有文件file。
_ocCt XI9 23wztEp{a -g group,--group group
;=y"Z^ 找出什么包拥有组group。
:j]1wp+ C(ij_> -p package_file
wb0$FZzh 查询未安装包package_file
A`n>9|R j6GIB_ --querybynumber num
a_RY Yj 查询第num个数据库条目。主要用于调试。
riDb!oC 17 Ugz? -qf,--queryformat num
4rU/2}.q 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
( zWBrCX <0})%V?- --specfile specfile
X:oOp=y]| 查询specfile,就好象它是个包
W:_-I4q~ ISGw}# }]? --triggeredby pkg
J!2Z9<q5 列出触发安装pkg包的包。
^ Oh k7^hcth --whatrequires capability
*%Rmdyn 列出要求特定能力来行使职责的包。
P.y +jyu AJ\&>6GZ(b --whatprovides capability
zmo2uUEd 列出提供特定能力的包。
i"h\*B= --------------------------------------------------------------------------------
w:t~M[kTW $*ff]># 4j={ 9e< 信息选择选项:
V4[-:k !Y ,7% -c,--configfiles
AS7L 列出包中的配置文件。
Az&>.* \N9=13W<lK --changelog
{ ADd[V 显示有关于包的改变信息的日志。
'z$$ZEz!C F\m^slsu7= -d,--docfiles
z`wIb 列出包中的文档文件。
Zw]"p63eMa l7|z]v- --dump
qX,q*hr- 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
3vY-;& 以下列顺序输出信息:
ek][^^4o path size mtime md5sum mode owner group isconfig isdoc rdev symlink
"`>6M&`U =W~7fs --filebypkg
ON,[!pc 列出每个包中的所有文件。
i#'K7XM2 MgeC-XQM -i
|Xt.[1 显示包的信息,包括名字,版本和描述。
Tn&