Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
R-odc,P= Gt;@.jY& 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
70pt5O3] eyq\a'tyB 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
YbCqZqk &"X6s%ZH| 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
T'YHV}b}vX --------------------------------------------------------------------------------
},1**_#<Br 5WhR| rb8c^u#r 以下简要介绍RPM包的安装,删除和查询
+!_?f'kv` 0u0<)gdX RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
ifA=qn0=} cfZG3" rpm命令的格式为:
KKMzhvf]# b-Fv
vA rpm [options] [packages]
tF:'Y ~3 p J6m`XC 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
-anLp8G* BPf;!. 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
n0nf;E --------------------------------------------------------------------------------
e| AA7 g~q+a- ~vf&JH'! RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
z9> yg_Q 9{OH%bF 以下为rpm --showrc命令显示的节选:
Eu%19s;u CR*9-Y93 示例:
Cjvgf.>$ $lJu2omi1 此为部分显示结果
agQ5%t# [root@localhost ~]# rpm --showrc
1-z*'Ghys ARCHITECTURE AND OS:
xL.T}f~y2> build arch : i386
aFkxR\x
6% compatible build archs: athlon i686 i586 i486 i386 noarch
Y-8qAF?SJ] build os : Linux
5Gj?'Wov9 compatible build os's : linux
_-NS-E install arch : athlon
6yIl)5/= install os : Linux
WW.\5kBl8 compatible archs : athlon i686 i586 i486 i386 noarch
$`nKq4Y compatible os's : linux
T9
@^@l$ RPMRC VALUES:
i?7%z` 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
{HgW9N( optflags : %{__global_cflags} -m32 -march=athlon
re.%$D@ Features supported by rpmlib:
s3G\L<~mB rpmlib(VersionedDependencies) = 3.0.3-1
@ mzf(Aq
PreReq:, Provides:, and Obsoletes: dependencies support versions.
.3;bUJ1 rpmlib(CompressedFileNames) = 3.0.4-1
@G/':N file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
$}[Tj0+: rpmlib(PayloadIsBzip2) = 3.0.5-1
m7:E73: package payload can be compressed using bzip2.
Salu[)+? --------------------------------------------------------------------------------
[\9WqHs E\M{/.4 4 DNgQ.lV rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
wp/u*g 4fDo }~ 示例:
'pE %'8R )B d`N^k+ [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
FV[6">;g Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
1'|6IR1' Preparing... ########################################### [100%]
)g4oUZDF 1:lynx ########################################### [100%]
IBwquw+ --------------------------------------------------------------------------------
0m5Q;|mH -25#Vh d6lhA 7 以下列出一些通用选项(可以用于所有模式):
!g? ~<` -Q@jL{Ue --dbpath path
#unE>#DW 用path作为RPM数据库的路径。
Y^)VHE] &77]h%B> --ftpport prot
ivdw1g|)h 用port作为FTP端口。
y$)gj4k/D Q9K+k*?{N --ftpproxy host
Isq3YY 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
9Ao0$|@b {GF>HHQb --help
^qpa[6D6x 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
vOYcS$,^X% .js4)$W^ --justdb
-;$+`<% 只更新数据库;不改变任何文件。
UQ|zSalv, F"a^`E& --pipe command
PVO9KWv** 用管道把rpm输出到commond。
*$(=I6b p71%-nV --quiet
<$liWAGX\ 仅显示错误信息。
5iola}6 < %Qw
dEO --rcfile filename
> qA5 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
i_GE9A=h A>L(#lz#ek --root dir
Fqzk/m 在dir目录内执行所有操作。
JxQwxey{ *jWU8.W --version
PF .sM( 输出rpm版本号。
4Uz:zB #e%.z+7I -vv
aMTY{ 输出调试信息。
]P0DPea <.3@-z>w2, --------------------------------------------------------------------------------
tC+9W1o @"9y\1u e,E;\x
& 安装升级和刷新
^a`zvrE
v
Xi5kE'_ 安装或升级一个RPM包,install命令的语法为:
[ hj|8) w8%yX$< rpm -i [install-options] package_file
F *;
+-e rpm --install [install-options] package_file
+Z XGT mxHNK4/ 示例:
_}]o~ 4\(;}M-R{ [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
Y,D\_il_ package lynx-2.8.5-18 is already installed
,Ucb)8a [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
HZQ I | --------------------------------------------------------------------------------
}jd[>zk eEsEW<su 9szE^kHS9 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
)I+1 b
!U SU#
S' rpm -U [install-options] package_file
|~H'V4)zXu rpm --upgrade [install-options] package_file
HXU"]s2Z oW]&]*>J 示例:
17D167\X :&)RK~1m_ 先安装旧版
B^Ql[m&5+ [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
62EJ# q[ [ur/` 再安装新版
mC~W/KReA [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
F__>`Dol `M>{43dj 显示出新版本信息
](_(1 [root@localhost ~]# rpm -q lynx
,h/0:?R
KW lynx-2.8.5-18
U7crbj;c)d any\}
说明:
B_cn[?M -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
2|}p&~G( 8Z3+S)6 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
y8+?:=N. --------------------------------------------------------------------------------
?5mVC]W?] ^Hq}9OyS9 V2/+SvB2 刷新的语法是:
6lT'%ho}B FA{I
S0 rpm -F [install-options] package_file
:o}7C%Q8 x6DH0*[. rpm --freshen [install-options] package_file
NkO$
M (f#W:]o/ 示例:
<i`EP/x c<&+[{| 从未安装过lynx包,使用-F选项,将无法升级。
!.t'3~dUf$ /HzhgMV3 [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
nBiSc* [root@localhost ~]# rpm -q lynx
0^ (.(: package lynx is not installed
3SIB #"9 --------------------------------------------------------------------------------
q=?"0i&V 6C]!>i}U Zl,K# 安装和更新选项为:
OD1ns r)j#Skh]. --allfiles
R:.7c(s 安装或更新所有文件。
O1#rCFC|y hChM hc --badreloc
Z<,gSut'Y 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
B8s|VI Olxb`x
--excludedocs
=m/2)R{ 不安装任何文档文件。
oub4/0tN,~ t1Jz?Ix6% --excludepath path
Y6N+,FAk+J 不安装文件名以path开始的任何文件。
|9\Lv$VJ Gj)Qw6
--force
d'3'{C|kk 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
)i!)Tv SbI,9< -h,--hash
S?3{G@!
当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
W'
2)$e S'@"a%EV --ignorearch
kT$4X0} 即使二进制包用于不同的体系结果也进行安装。
Cn`%
*w 4x C0Aw --ignoreos
Cza)s 即使操作系统不匹配也安装二进制包。
9hguC yr@h ~r>UjC_
B: --ignoresize
fGe{7p6XV* 安装前不检查磁盘的可用空间。
i'5bPW 2Q k\}KWs --includedocs
#ASu
SQ 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
lmc-ofEv pH~JPNng --nodeps
gRqz8UI 不检查这个包是否依赖于其他包的存在。
{W4t]Ff !CMN/= --noorder
|y=gp 安装之前,不为了满足依赖关系而对包进行重新排序。
YJL=|v X1'Ze,34 --noscripts
ud#8`/!mq 不执行任何预安装或后安装脚本。
h`GV[Oo : O0{v`|w9+ --notriggers
Y
zvtxX* 不执行任何由包安装触发的脚本。
<1LuYEDq Bpp9I;)c --oldpackage
QV 'y6m\ 允许升级以用旧包替换新包。
w6yeX<!ll hWW<]qzA, --percent
'Qfy+_0 当文件被解压时输出完成百分比的信息。
w`v\/a_ AdYQhF## --prefix path
|$w-}$jq5 把可重定位包的安装前缀设置为path。
;yXnPAtJ
<?7~,#AK --replacefiles
>WEg8'#O 即使包替换了来自其他安装包的文件,也安装这些包。
"nefRz%j+ #FQVhgc --replacepkgs
52 A=c1kb 即使某些包已经被安装,也安装他们。
yTvK)4& !'MD8 --test
nc{<v 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
hWu)0t 3gh^a;uC --------------------------------------------------------------------------------
3//v{ce1] N} h%8\ 7U7 i2 4 查询
t8+93,*B ;C<A} query命令的语法为:
n)H0;25L )K6{_~Kc\ rpm -q[information-options] [package-options]
`j$d(+Gv
rpm --query[information-options] [package-options]
l`]!)j|+ M*HG4(n0 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
O:x%!-w --------------------------------------------------------------------------------
PWU#`>4 =w8 YZs8w Ol@ZH_ 以下简单示演示一下包查询:
U
Oo(7 gA|j\T{c 简单查询:
1GdgF?4 ,'6GG+ 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
;Vy'y 0Q9OQqg
m 示例:
Uwk|M?94 ;v'Y'!-J [root@localhost ~]# rpm -q lynx
OR9){qP lynx-2.8.5-18
$F%?l\7j --------------------------------------------------------------------------------
,m8*uCf Jp#cFUa t `QF|>
N 信息查询:
gD\}CxtG DIAP2LR ? rpm -qi packagename命令可以得到安装包的汇总信息。
7q=0]Hrg(D 19t*THgq 示例:
3Cl9,Z"&6$ [root@localhost ~]# rpm -qi lynx
Uf<vw3 Name : lynx Relocations: (not relocatable)
8(;i~f:bCW Version : 2.8.5 Vendor: Red Hat, Inc.
q}i87a;m Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
y^rg%RV Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
#*/h*GNMs Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
Z#O3s:` Size : 4837340 License: GPL
_JDr?Kg Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
PsnU5f)` Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> C=cTj7Ub URL :
http://lynx.isc.org/ ~] 2R+ Summary : 一个基于文本的网页浏览器。
CQ[-Cp7 Description :
9R[','x Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
$C/Gn~k 5 图像,但是它支持框架、表格、以及多数其它 HTML
y|se^dn 标签。Lynx 优于图形化浏览器的地方是它的速度――
Hdx|k=-Q^ Links 能够快速启动、退出、及显示网页。
(ce NVo& 标识拥有者
zJ`(LnV --------------------------------------------------------------------------------
xW4+)F5P( Fm':sd)'X dFFqs&c Q 找出什么包拥有文件file:
QR'g*Bro kDh(~nfj 示例:
+GS=zNw# HWBom8u0 [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
5aNDW'z`f lynx-2.8.5-18
lg+g:o --------------------------------------------------------------------------------
Sq,ty{j2% Qg!*=<b zY+Et.lg]^ 列表包中的文件:
3(&F.&C$$ EYG E#C;
d 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
B_2>Yt" ZB&Uhi 示例:
Rp*t"HSaAW ^nF$<#a 此为部分显示结果
jYz3(mM'J [root@localhost ~]# rpm -ql lynx
R-fjxM* /etc/lynx-site.cfg
T7~v40jn| /etc/lynx.cfg
AUde_1hi /etc/lynx.cfg.cs
)S;ps /etc/lynx.cfg.ja
pQ{t< > /etc/lynx.cfg.sk
w"i Zn /usr/bin/lynx
uLljM{I /usr/share/doc/lynx-2.8.5
OvG0UXRU /usr/share/doc/lynx-2.8.5/INSTALLATION
*,*qv^ /usr/share/doc/lynx-2.8.5/README
iGk{8Da< /usr/share/doc/lynx-2.8.5/docs
{B.]w9 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
y3]"H( /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
%ko 8P /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
L?+|%[ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
#>B1$(@ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
=_J<thp /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
j//wh1 /usr/share/doc/lynx-2.8.5/docs/CMU.announce
)du{ZWr /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
:q<%wLs /usr/share/doc/lynx-2.8.5/docs/FM.announce
m4>oE|\ /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
h_yR$H&tX /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
@|Bp'`j%J /usr/share/doc/lynx-2.8.5/docs/README.TRST
eE%yo3 /usr/share/doc/lynx-2.8.5/docs/README.chartrans
_|:bac8pL H>iZVE --------------------------------------------------------------------------------
nV*sdSt iQC&d_# ss8v4@C 列出包所提供的实际能力:
#!,`EU p|V1Gh< --provides选项的作用是列出这个包所提供的实际能力。
12xP)*:$ >8O=^7 示例:
kw ^ Sbxm em!R9J. [root@localhost ~]# rpm -q --provides lynx
_Pi:TxY config(lynx) = 2.8.5-18
G5J ZB7C webclient
%esZ}U lynx = 2.8.5-18
(1j$*?iGA --------------------------------------------------------------------------------
5)NBM7h "mDrJTWa L6=RD<~C 列出这个包所倚赖的任何包:
D D;+& fe f+Li'? -R,--requires选项的作用是列出这个包所依赖的任何包。
0]W]#X4A +STzG/9# 示例:
uN3J)@;_ `1<3Hu_ [root@localhost ~]# rpm -qR lynx
,ri--< /bin/sh
6XK`=ss? config(lynx) = 2.8.5-18
%P,^}h7 indexhtml
4$GRCq5N; libc.so.6
91d`LsP libc.so.6(GLIBC_2.0)
V9+"CB^ libc.so.6(GLIBC_2.1)
Sc3M#qm_ libc.so.6(GLIBC_2.2)
C,vc
aC? libc.so.6(GLIBC_2.3)
,<r 3Z$G libcrypto.so.4
"sX?wTag libncursesw.so.5
6x,=SW@4 libssl.so.4
>1pH 91c' libz.so.1
aq/Y}s? rpmlib(CompressedFileNames) <= 3.0.4-1
@<yc .> rpmlib(PayloadFilesHavePrefix) <= 4.0-1
:wmf{c --------------------------------------------------------------------------------
6ilC#yyp ]J=)pDrk Mv`L F 列出包中的配置文件
L9?/ -@M =1OAy`8 -c,--configfiles选项的作用是列出包中的配置文件
`4$Qv'X* ":^
NLBm>5 示例:
tF g'RV{ B5H&DqWzr [root@localhost ~]# rpm -qc lynx
1\{U<Oli /etc/lynx-site.cfg
-JhjTA /etc/lynx.cfg
xjq7%R_, /etc/lynx.cfg.cs
rIfGmh%H /etc/lynx.cfg.ja
T1!Gr!= /etc/lynx.cfg.sk
3=|2Gs?ut --------------------------------------------------------------------------------
#33RhJu5, ~'QeN%qadP *([)X2A@+ 显示有关于包的改变信息的日志:
JP,(4h* lrX0c$) --changllog选项的作用是显示有关于包的改变信息的日志。
't?7.#,6O ~G:2iSi(# 示例:
v[DbhIXU *[~o~e/YCb 此为部分显示结果
qq7X",s [root@localhost ~]# rpm -q --changelog lynx
\ j X N*A * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
|-Esc|J( - Removed perl dependencies (bug #127423).
LI;Efy L * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
~
9~\f - rebuilt
xP6?e s` * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
JrWBcp:Y - No longer need lynx-284-ipv6-salen.patch.
jo3}]KC ! - No longer need lynx2-8-2-telnet.patch.
pH l2!{z * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
I&fh - rebuilt
zMr!WoW * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
`CEj 4 - Updated to dev16, fixing bug #110196.
<6O_t,K] - No longer need crlf patch.
>aC\_Mc - Use shipped ja translations.
kxqc6 - Use %find_lang.
r{2].31' - Default config file now sets UTF-8 (bug #110986).
xm,`4WdG --------------------------------------------------------------------------------
V;hwAQbF m5em<P!G ]v\egfW,W 包选择选项
MAD}Tv\S7 <RPoQ'.^ package_name
b' oGt, 查询已安装包的package_name。
L8]{B 1H,tP|s -a,--all
TFYT vUn 查询所有已安装拨。
G!VF*yW8 u!3]RGJ -f file,--file file
l*\~ew 找出什么包拥有文件file。
6^IqSNn- 'Ywpdzz[ -g group,--group group
{29S`-|P 找出什么包拥有组group。
#DK3p0d waWKpk1Wo -p package_file
mh#FYSp 查询未安装包package_file
KA-/k@1& J1]w*2 --querybynumber num
N>pmhskN? 查询第num个数据库条目。主要用于调试。
H1%[\X?= g?[&0r1 -qf,--queryformat num
Ph+X{| 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
z(`
}:t bA<AG* --specfile specfile
\aVY>1` 查询specfile,就好象它是个包
z'oiyXEE3 ){ --triggeredby pkg
}uI7\\S 列出触发安装pkg包的包。
#3Ej0"A@-B !H1tBg]5 --whatrequires capability
rx6-~0!eI= 列出要求特定能力来行使职责的包。
A6NxM8ybn+ Ed^uA+D --whatprovides capability
qQxA@kdd 列出提供特定能力的包。
<< ;HY}s --------------------------------------------------------------------------------
(e8G
( LZc$:<J<6 lTr*'fX 信息选择选项:
a\{1UD PwB g -c,--configfiles
% nmY:}um 列出包中的配置文件。
[l':G ] y5/'!L)g --changelog
`/w\2n 显示有关于包的改变信息的日志。
R{)
Q1~H=q hY=w|b=Y -d,--docfiles
Rj}o4s2x 列出包中的文档文件。
4g7ja ran^te^Ks( --dump
WfRfx#MMt 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
S~k*r{?H}) 以下列顺序输出信息:
R>d@tr path size mtime md5sum mode owner group isconfig isdoc rdev symlink
hr[B^?6 )W`SC mr] --filebypkg
',JrY) 列出每个包中的所有文件。
4N~+G ` ,'C30 A*p -i
v.Xoq 显示包的信息,包括名字,版本和描述。
gE@$~Q>M \+iu@C -l,--list
_^ q\XPS 列出包中所有文件
eB=v~I3 a(@p0YpKT --last
<8rgtu!VU 根据安装时间列出包,最新的包排第一位。
G`,u40a 3$c (M99r --provides
Il{^
j6 列出这个包所提供的实际能力。
[6; N3?+ 69C8-fF0[I -R,--requires
hI|/>4< 列出这个包所依赖的任何包。
,{?q^" &:c:9w -s,--state
F<Hqo>G 列出包中的每个文件及其状态。可能的状态为normal,not installed或replaced。
4L5o\'X .!(,$'(@= --scripts
Z&FkLww 列出任何在安装和卸载过程中所使用的包特定的shell脚本。
x"
'KW
( K DYYB6| --------------------------------------------------------------------------------
{)V? R >*dQqJI gEv-> pc 卸载
=n-z;/NL WY+(]Wkao uninstall命令的语法为:
LY-lTr@A^
}iilzE4oH# rpm -e package_name
9<|m4 rpm --erase package_name
U_}7d"<| ? F#(.v7Za 示例:
e,f ; 5-D`<\ [root@localhost ~]# rpm -e lynx
-<^jGrb [root@localhost ~]# rpm -q lynx
=-$!:W~ package lynx is not installed
OlMBMUR: --------------------------------------------------------------------------------
#B @X i`prv& VpkD'<