Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
'd.EC# b6}H$Sx~ 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
t?q@H8 iJ~Zkd 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
V"*O=h .l>77zM6 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
#z&&M"*a| --------------------------------------------------------------------------------
X*M#FT- } ~h3c| M*z~gOZ 以下简要介绍RPM包的安装,删除和查询
U@gn;@\ >xF/Pl RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
#N#'5w-G FuVnk~gq rpm命令的格式为:
v\!Be[ ? Y]NSN-t rpm [options] [packages]
afv~r>q(- OZx
W?wnd 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
AmaT0tzJC ]e^c=O`$ 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
|zR8rqBX; --------------------------------------------------------------------------------
3 DD ML, >=RmGS gg[WlRQK4A RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
p<zSJLN d{XO/YQw 以下为rpm --showrc命令显示的节选:
L[^9E'L$ S'A>2> 示例:
(5R?#vj +s,Qmmb7) 此为部分显示结果
/4c\K-Z; [root@localhost ~]# rpm --showrc
Jd%H2` ARCHITECTURE AND OS:
LJ*q 1
;<E build arch : i386
86(I^= compatible build archs: athlon i686 i586 i486 i386 noarch
I|>^1kr8w build os : Linux
e?opkq\f compatible build os's : linux
IIg^FZ*]_ install arch : athlon
LNrX;{ Z install os : Linux
BnCbon) compatible archs : athlon i686 i586 i486 i386 noarch
.C&ktU4 compatible os's : linux
?0)&U RPMRC VALUES:
F">Qpgt 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
oX0 D optflags : %{__global_cflags} -m32 -march=athlon
q8s0AN'@t' Features supported by rpmlib:
OJ/,pLYu rpmlib(VersionedDependencies) = 3.0.3-1
IqC]! H0 PreReq:, Provides:, and Obsoletes: dependencies support versions.
}D7I3]2> rpmlib(CompressedFileNames) = 3.0.4-1
>;L6xt3 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
h v8P4"i v rpmlib(PayloadIsBzip2) = 3.0.5-1
VG,u7A*Z# package payload can be compressed using bzip2.
zoOaVV&1 --------------------------------------------------------------------------------
\<y`!"c
Fe]B&n x*?x=^I{ rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
,17hGKM >+]_5qc 示例:
wW#}:59} )+}]+xRWGj [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
ROk5]b. Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
?\$#L^;b} Preparing... ########################################### [100%]
rypTKT|U; 1:lynx ########################################### [100%]
{jYOsl --------------------------------------------------------------------------------
T2SP
W@#Z3 4T!+D Q.]}]QE
以下列出一些通用选项(可以用于所有模式):
c8L~S/t %7"X(Ts7B --dbpath path
cJ1#ge%4 用path作为RPM数据库的路径。
31rx-D8o 3H|_mX --ftpport prot
bKrhIU[ 用port作为FTP端口。
D+]a.& {p cgm81+[%r --ftpproxy host
Fb7#<h 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
TQx.KM>y IG|X!l --help
o3I Tr'; 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
fRtUvC-#H O)ME"@r@: --justdb
'h^0HE\~p 只更新数据库;不改变任何文件。
MxGu>r j:E<p_T --pipe command
KnsT\>[K 用管道把rpm输出到commond。
qW!]co s<oNE)xe --quiet
1_\;- !t 仅显示错误信息。
!1q 9+e E}sO[wNPf --rcfile filename
q)Fq
i 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
?pn}s]*/ Md0sK --root dir
EmODBTu+ 在dir目录内执行所有操作。
hjIT_{mk i?fOK_d --version
G8r``{C! 输出rpm版本号。
Hm$=h>rY9[ =,Dqqf -vv
WAn~+=Ax 输出调试信息。
'Y56+P\u q|Q k2M --------------------------------------------------------------------------------
qe!fk?T} =Qgt${| h"_~7jq" 安装升级和刷新
=!`j7#: h\nI!{A0 安装或升级一个RPM包,install命令的语法为:
NGOqy+Ty{f \hhmVt@@ rpm -i [install-options] package_file
T}"6wywM rpm --install [install-options] package_file
b@S Cn9 PB#fP_0C 示例:
mml<9fbH 6(G?MW. [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
-5T=:2M package lynx-2.8.5-18 is already installed
:_t}QP" [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
J2j U4mR --------------------------------------------------------------------------------
Y=?yhAw hi0R.V& ,4ei2`wV 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
"g'jPwFG J41G&$j( rpm -U [install-options] package_file
e46/{4F, rpm --upgrade [install-options] package_file
<
V\I~; (rkU)Q 示例:
aj?a^}X 'JNElXqrv 先安装旧版
2n `S5(V [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
=k/IaFg 6w mZx&Xez_G 再安装新版
cZT({uYGL [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
RTv
qls lWqrU1Sjl 显示出新版本信息
%-<'QYYP [root@localhost ~]# rpm -q lynx
#/I[Jqf lynx-2.8.5-18
]|sAK%/ 2 Sh
说明:
NMww>80 -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
vP!{",> $ZNu+tn
Y 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
$dA-2e10 --------------------------------------------------------------------------------
Q" ,0F{' 8HR mQ e0J6Ae4V[ 刷新的语法是:
~t^eiyv LrATSq@ rpm -F [install-options] package_file
(4\d]*u5-c QK+(g,)_86 rpm --freshen [install-options] package_file
i} N8(B( HO[wTB|D] 示例:
'
4ER00 om]4BRe 从未安装过lynx包,使用-F选项,将无法升级。
<0S,Q+& SF5@Vg [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
1!.(4gV [root@localhost ~]# rpm -q lynx
hs?sGr package lynx is not installed
CYKr\DA --------------------------------------------------------------------------------
jiYmb8Q4D _>v<(7 fgBM_c&9T 安装和更新选项为:
1&P< !w H'b --allfiles
`\m*+Bk[5 安装或更新所有文件。
i| ZceX/ >5j<4ShW --badreloc
#vzEu
)Ul 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
!YP@m~ n_B"-n --excludedocs
*FmTy| 不安装任何文档文件。
8X I? IN,(yaC --excludepath path
v$=QA:!U 不安装文件名以path开始的任何文件。
Y;)dct Dc+'<" --force
|gsE2vV 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
]>+PnP35G MNg^]tpf -h,--hash
8Th` ]tI 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
bO&7-Z~:= J@OB`2?Zv --ignorearch
H<QT3RF2 即使二进制包用于不同的体系结果也进行安装。
EZYBeqv 9
Rx
s --ignoreos
8o/}}=m$ 即使操作系统不匹配也安装二进制包。
5r?m&28X
!xwG%{_ --ignoresize
]XTu+T.aT 安装前不检查磁盘的可用空间。
1Jj Y! CEC
nq3 --includedocs
YFTjPBV 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
w=}uwvn NX Nr0
(E --nodeps
9{$'S4 不检查这个包是否依赖于其他包的存在。
Vp<seO;7o JICawj:I --noorder
LC})ciWa 安装之前,不为了满足依赖关系而对包进行重新排序。
fd#jY} vAX|hwn; --noscripts
vBsP+K 不执行任何预安装或后安装脚本。
#BQ.R, $z$u{ --notriggers
7c;9$j 不执行任何由包安装触发的脚本。
jr)7kP@ ^::EikpF% --oldpackage
P1 zdK0TM 允许升级以用旧包替换新包。
5BR2?hO4 wP57Pf0 --percent
I"1;|`L~: 当文件被解压时输出完成百分比的信息。
@&"Pci+-| jM&r{^( --prefix path
!gLkJ) 把可重定位包的安装前缀设置为path。
dVQ-k RID]pek --replacefiles
n 3lE,b 即使包替换了来自其他安装包的文件,也安装这些包。
?X-)J=XG ^0#;YOk --replacepkgs
z`Hy'{1 即使某些包已经被安装,也安装他们。
k@ K7yK 3b YCOqG --test
~Aq5XI%i 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
l?iSxqdT \@>b;4Fb+N --------------------------------------------------------------------------------
a"av#Y i_kE^SSgm 0I{gJSK., 查询
tV9LD>3 ](B@5-^ query命令的语法为:
nkv(~ej( @vMA=v7a rpm -q[information-options] [package-options]
kqb0>rYa rpm --query[information-options] [package-options]
9
C{;h 4G@nZn 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
\j2;4O?` --------------------------------------------------------------------------------
zd_HxYrN X]loJoM9 w0ZLcND{ 以下简单示演示一下包查询:
7?v#'Ies m>}8'N) 简单查询:
f,z P* 63!rUB!
最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
?+c`]gO7N ZvGgmLN 示例:
UA~RK2k? !m(4F(!"h [root@localhost ~]# rpm -q lynx
]hud4i~ lynx-2.8.5-18
`p'Q7m2y/b --------------------------------------------------------------------------------
7n o5b]
\ 3@n>*7/E +m}Pmi$ 信息查询:
1G7b%yPA < pTTo rpm -qi packagename命令可以得到安装包的汇总信息。
3jogD 4Iq'/r 示例:
z5*=MlZ)R. [root@localhost ~]# rpm -qi lynx
[0OJdY4 Name : lynx Relocations: (not relocatable)
6r"u$i`o Version : 2.8.5 Vendor: Red Hat, Inc.
nJ?^?M'F% Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
AOp/d(vx5i Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
0e[d=)XG Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
\#'TNmS Size : 4837340 License: GPL
qi^!GA'5j Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
#,(sAj Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> q@hp.(V URL :
http://lynx.isc.org/ >O/D!j| Summary : 一个基于文本的网页浏览器。
`d 2,*KR Description :
ki;UY~ Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
$3X-rjQtW 图像,但是它支持框架、表格、以及多数其它 HTML
O|cu.u| 标签。Lynx 优于图形化浏览器的地方是它的速度――
%~NH0oFO Links 能够快速启动、退出、及显示网页。
OOBhbpg!D 标识拥有者
Zc"B0_&?:7 --------------------------------------------------------------------------------
>%Ee#m >\<*4J$PZ ]v G{kAnH 找出什么包拥有文件file:
CnN9!~]" qP!P
+'B 示例:
8_H=^a>2 _)$PKOzbb [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
?hYqcT[% lynx-2.8.5-18
!}M, --------------------------------------------------------------------------------
JIO$=+p #(LfYw.P1V iv(5&'[p 列表包中的文件:
"tS'b+SJ-S r'BAT3 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
'j%F]CK Xl |1YX1&m 示例:
ExHAY|UA XH7xT@ 此为部分显示结果
?RFg$Z'^ [root@localhost ~]# rpm -ql lynx
K:y^OAZfV /etc/lynx-site.cfg
:RxHw;! /etc/lynx.cfg
s,*c@1f? /etc/lynx.cfg.cs
DZ
^1s~ /etc/lynx.cfg.ja
s]27l3)B /etc/lynx.cfg.sk
HjWq[[Nz /usr/bin/lynx
W</n=D<,I /usr/share/doc/lynx-2.8.5
t j Vh^ /usr/share/doc/lynx-2.8.5/INSTALLATION
VyG4(Xva /usr/share/doc/lynx-2.8.5/README
)<4_: /usr/share/doc/lynx-2.8.5/docs
\nrP$ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
Q}A=jew /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
aaWJ*
>rJ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
N?4q /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
*B)yy[8j+ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
ALd;$fd qf /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
Fs/? /usr/share/doc/lynx-2.8.5/docs/CMU.announce
IxDWJ#k /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
&ogt2<1W /usr/share/doc/lynx-2.8.5/docs/FM.announce
]"fsW 9s /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
gd@p|PsS^ /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
|`yZIY_ /usr/share/doc/lynx-2.8.5/docs/README.TRST
+$z]w(lb T /usr/share/doc/lynx-2.8.5/docs/README.chartrans
YJ7V`Np !$XHQLqF2 --------------------------------------------------------------------------------
dpN@#w }b["Jk\2 q W^vz 列出包所提供的实际能力:
cX2^wu Vs0 SXj --provides选项的作用是列出这个包所提供的实际能力。
":?T%v> {#Q\z> 示例:
farDaS[\VY N1--~e [root@localhost ~]# rpm -q --provides lynx
u~ F;xQ config(lynx) = 2.8.5-18
;@4H5p webclient
GtI6[ :1t lynx = 2.8.5-18
6DSH`-; --------------------------------------------------------------------------------
T*q"N?/4 !#D=w$@r: ,i`h
x,
Rg 列出这个包所倚赖的任何包:
W,hWOO IvBGpT"(I -R,--requires选项的作用是列出这个包所依赖的任何包。
*8g<R Vj^dD9: 示例:
{gy+3
@O3/3vi1 [root@localhost ~]# rpm -qR lynx
(hZ:X)E> /bin/sh
)xl6,bq3 config(lynx) = 2.8.5-18
f!GHEhQ9 indexhtml
+S { libc.so.6
"4}wnu6/ libc.so.6(GLIBC_2.0)
T.?k>Ak libc.so.6(GLIBC_2.1)
(
76{2 libc.so.6(GLIBC_2.2)
uOk%AL> libc.so.6(GLIBC_2.3)
Mn^zYW|( libcrypto.so.4
@6xGJ,s libncursesw.so.5
+QqH}=
M libssl.so.4
d;suACW libz.so.1
0my9l;X rpmlib(CompressedFileNames) <= 3.0.4-1
~\_T5/I% rpmlib(PayloadFilesHavePrefix) <= 4.0-1
.{rbw9 --------------------------------------------------------------------------------
H"YL
k j64 4V|z <4?*$ 列出包中的配置文件
} ~enEZ 5h_5Z~ -c,--configfiles选项的作用是列出包中的配置文件
6nw&$I ,a(O`##Bn 示例:
Wpm9`K b6W#SpCF [root@localhost ~]# rpm -qc lynx
4Z%Y"PL(K /etc/lynx-site.cfg
X.J /etc/lynx.cfg
2)LX^?7R /etc/lynx.cfg.cs
/(6zsq'v| /etc/lynx.cfg.ja
}ymvC /etc/lynx.cfg.sk
#Q6w+" --------------------------------------------------------------------------------
]if;A ) ' {/UhUG I"Q<n[g0' 显示有关于包的改变信息的日志:
ua& @GXvZ U}P,EP%p --changllog选项的作用是显示有关于包的改变信息的日志。
~w.2-D pzEABA 示例:
r\mPIr| j 2}v} 此为部分显示结果
[yd6gH [root@localhost ~]# rpm -q --changelog lynx
W8/(;K`/ * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
,Aa|Bd]b
- Removed perl dependencies (bug #127423).
Zq?_dIX
% * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
^8742. - rebuilt
?V+wjw * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
P>htQ - No longer need lynx-284-ipv6-salen.patch.
V/H@vKN2 - No longer need lynx2-8-2-telnet.patch.
wc[c N+p * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
T Oy7?;|= - rebuilt
8W{~wg` * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
dq8+m(7k - Updated to dev16, fixing bug #110196.
5~xeO@%I - No longer need crlf patch.
%Dyh:h - Use shipped ja translations.
(|0b7|'T - Use %find_lang.
r@$B'CsLj - Default config file now sets UTF-8 (bug #110986).
6&],WGz --------------------------------------------------------------------------------
9s
$PrF b>=7B6 Aw IQ{?_' 包选择选项
(v;A'BjN 3}4#I_<$F@ package_name
FE6C6dW{ 查询已安装包的package_name。
uX0
Bp8P d^SE)/j -a,--all
Qp 69Sk@H{ 查询所有已安装拨。
Y\8+}g;KR SKxe3
-f file,--file file
"t+r+ipf]) 找出什么包拥有文件file。
N9*UMVU zlMlMyG4 -g group,--group group
cs5ix"1A 找出什么包拥有组group。
W?PWJkIw hT=f;6$ -p package_file
*f*f&l