Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
2qdc$I&$ eQz.N<f" 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
c/7}5#Rs h`dHk]O 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
^g|j4N ;hPVe_/ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
ppo.# p0w --------------------------------------------------------------------------------
%+htA0aX GorEHlvVh ]=o1to- 以下简要介绍RPM包的安装,删除和查询
L+mE& 6FYL},.R RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
&OlX CxH We++DWp rpm命令的格式为:
1N_T/I8_F blLl1Ak rpm [options] [packages]
H&8~"h6n `_f&T}] 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
Kton$%Li Egz6rRCvg 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
`$Um --------------------------------------------------------------------------------
q*Oj5; ?S;z!)
H)P W__Y^\~ RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
*LMzq9n3o =0L%<@yA 以下为rpm --showrc命令显示的节选:
`YUeVz>q? *8Su:=*b 示例:
&zd@cr1 @~Ys*]4UE 此为部分显示结果
<ne?;P1L [root@localhost ~]# rpm --showrc
CA1Jjm= ARCHITECTURE AND OS:
S}fQis build arch : i386
!?R#e`} compatible build archs: athlon i686 i586 i486 i386 noarch
4X",:B} build os : Linux
])G|U A. compatible build os's : linux
qzNXz_#+u install arch : athlon
# >I_ install os : Linux
:@@`N_2? compatible archs : athlon i686 i586 i486 i386 noarch
=jKu=!QPq compatible os's : linux
15VvZ![$V RPMRC VALUES:
W\($LD"X 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
Yecdw'BW? optflags : %{__global_cflags} -m32 -march=athlon
{sxdDl Features supported by rpmlib:
)3A+Ell` rpmlib(VersionedDependencies) = 3.0.3-1
#D#kw*c PreReq:, Provides:, and Obsoletes: dependencies support versions.
C?k\5AzT rpmlib(CompressedFileNames) = 3.0.4-1
amq,^ file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
=`*@OJHH rpmlib(PayloadIsBzip2) = 3.0.5-1
>0[:uu,'> package payload can be compressed using bzip2.
,cxe"U --------------------------------------------------------------------------------
}9^'etD M)ao}m> =E$bZe8 rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
A9g/At_ 33KCO 示例:
s Pb}A$' RX%)@e/@ [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
nGwon8&]] Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
U.V/JbXX Preparing... ########################################### [100%]
3#x1(+c6 1:lynx ########################################### [100%]
m]*a;a'}# --------------------------------------------------------------------------------
+=Q:g,kP -+u}u=z% =>lX brJ 以下列出一些通用选项(可以用于所有模式):
;
wxmSX9 S,C c0)j> --dbpath path
,}khu 用path作为RPM数据库的路径。
@ ;@~=w -T;^T1
--ftpport prot
Q=>5@sZB 用port作为FTP端口。
3M(*q4A$" YD@Z}NE
v" --ftpproxy host
FZ RnIg 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
[3sZ=)G E<}sGzMc --help
e v0>j4Q 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
~(^pGL3< 6;\1bP? --justdb
0Gc:+c7{ 只更新数据库;不改变任何文件。
$m~&| s
qou\4YZ --pipe command
]'?Ue7 用管道把rpm输出到commond。
#AP;GoIf"j Z m%,L$F*L --quiet
OiXO<1'$ 仅显示错误信息。
.gGO+8[N* 7QnWw0 --rcfile filename
oH&@F@r:+ 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
eub}+~_?[ O9- `e --root dir
aeI0;u 在dir目录内执行所有操作。
\2=I//YF m&b1H9ymd --version
0:n"A,-p 输出rpm版本号。
A`JE(cIz3 0>Td4qr+u -vv
YlUh|sK7m 输出调试信息。
B6;>V`! d(XOZF --------------------------------------------------------------------------------
LLT6*up$ !'rdHSy ,Y6]x^W 安装升级和刷新
[0105l5 ~4Gc~ " 安装或升级一个RPM包,install命令的语法为:
jUKMDlH :*h1ik4t rpm -i [install-options] package_file
t2vm&jk rpm --install [install-options] package_file
Y>/_A%vQU h,B4Tg' 示例:
AG}j'
BfCM\ij [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
`L 1+j package lynx-2.8.5-18 is already installed
N8df1>mW [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
aNY-F)XWa --------------------------------------------------------------------------------
rQlQ^W$=? +TA~RCd 1fsNQ!vQP 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
tY]?2u%) N>YSXh`W`y rpm -U [install-options] package_file
?;htK_E\* rpm --upgrade [install-options] package_file
R4VX*qkB 5@r6'Z 示例:
u-y?i` ,SNrcwv 先安装旧版
+ctU7
rVy [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
) 3"!Q+ XEbVsw 再安装新版
0,)2\`99#k [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
VD@$y^!H !QvmzuK 显示出新版本信息
T fkGkVR [root@localhost ~]# rpm -q lynx
P(Rl/eyRM lynx-2.8.5-18
J^CAQfcx eR>8V8@ 说明:
b/qK/O8J -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
L7aVj&xM s@iY'11 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
l1lYb;C --------------------------------------------------------------------------------
Z2yO /$< Cw(yp u D@9 +yu=S 刷新的语法是:
h%$^s0w 4U}J?EB?K rpm -F [install-options] package_file
GTTEg{ OomC%9/=, rpm --freshen [install-options] package_file
l,]%D 4Eu'_>"a 示例:
D&"lu*"tg d>mZY66P 从未安装过lynx包,使用-F选项,将无法升级。
o+x!
( gg rYf* [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
_eq$C=3Ta [root@localhost ~]# rpm -q lynx
#BcUE?K*N package lynx is not installed
41d+z>a] --------------------------------------------------------------------------------
lEwQj[ k `:~Wu/Ogr gCPH>8JwS0 安装和更新选项为:
w{dRf!b69 M&hNkJK*G --allfiles
'R'hRMD9o 安装或更新所有文件。
,aUbB8 0fBwy/: --badreloc
/3rNX}tOMH 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
2jC:uk ogQfzk --excludedocs
RD)Vb$.B: 不安装任何文档文件。
u0arJU_.) ]i6*$qgma --excludepath path
/bo=,%wJ[ 不安装文件名以path开始的任何文件。
b\H&E{Gn|x (M1YOK) I --force
{V(~ 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
"5k6FV o938!jML_ -h,--hash
&}Wi@;G]2 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
r9N?z2X Cj4Y, N --ignorearch
fU
;H 即使二进制包用于不同的体系结果也进行安装。
c CDT27@ CP;<B1 --ignoreos
WHv6E!^\_ 即使操作系统不匹配也安装二进制包。
@{fwM;me]P oz.z>+Q --ignoresize
0{B<A^Bf 安装前不检查磁盘的可用空间。
j2IK\~W?- BI-'&kPk --includedocs
i}C%8}% 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
#o}/' WvJ:yUb2 --nodeps
ReM]I<WuY 不检查这个包是否依赖于其他包的存在。
v9r.w- :;hg :Q: --noorder
e~(e&4pb 安装之前,不为了满足依赖关系而对包进行重新排序。
!idVF!xG [o(!/38"@= --noscripts
D=3Z] 'A 不执行任何预安装或后安装脚本。
z7:*
,X |y0k}ed --notriggers
tw<Oy^i 不执行任何由包安装触发的脚本。
ak_y:O| /%,aX[ --oldpackage
s:xJ }Ll 允许升级以用旧包替换新包。
ke;=Vg| Z:AB(c --percent
f'5
6IT
当文件被解压时输出完成百分比的信息。
T{^mh(3/" bfncO[Q,? --prefix path
`S-l.zSZ4B 把可重定位包的安装前缀设置为path。
hg0{x/Dgny x`C"Z7t --replacefiles
_6h.<BR
即使包替换了来自其他安装包的文件,也安装这些包。
Hik=(pTu> oLX[!0M^ --replacepkgs
t>N2K-8Qh 即使某些包已经被安装,也安装他们。
T+B-R\@t qyVARy --test
zY*~2|q,s 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
Cc{{9Ud HbB8A#u --------------------------------------------------------------------------------
N3\RXXY 2p;I<C:Eo H? z~V-8 查询
<>f;g"qS O:rfDO query命令的语法为:
-eh .Tk WFk%nO/ rpm -q[information-options] [package-options]
2!W[ff@~7 rpm --query[information-options] [package-options]
]ke9ipj]: /8l@ndZf 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
ST[TKL<] --------------------------------------------------------------------------------
<Rn-B).3bs V0
Z8VqV (j@c946z"" 以下简单示演示一下包查询:
1fIx@ O9?.J,,mVh 简单查询:
{`M\}(E e&T-GL 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
RR+kjK? P/WGB~NH 示例:
w{L9-o3A 03zt^< [root@localhost ~]# rpm -q lynx
D~i 5E9s5 lynx-2.8.5-18
^;s/4 --------------------------------------------------------------------------------
C%E~9_w J|
wk})? W(Sni[c{ 信息查询:
wM7Iu86 Hq<4G:# rpm -qi packagename命令可以得到安装包的汇总信息。
iQ2}*:Jc$ RkF^V( 示例:
J[Mj8ee# [root@localhost ~]# rpm -qi lynx
Ev3'EA~` Name : lynx Relocations: (not relocatable)
{t!
&x: Version : 2.8.5 Vendor: Red Hat, Inc.
V;CRs\aYf Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
"mE/t ( Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
I;wxgWOP Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
k}nGgd6XD Size : 4837340 License: GPL
x_<#28H! Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
`~VL&o1> Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> v9 /37AU URL :
http://lynx.isc.org/ }m^^6h Summary : 一个基于文本的网页浏览器。
r9M3rj] Description :
QbSLSMoL Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
YG=:lf 图像,但是它支持框架、表格、以及多数其它 HTML
ZWS:-]P. 标签。Lynx 优于图形化浏览器的地方是它的速度――
-
uO(qUa# Links 能够快速启动、退出、及显示网页。
)l
m7ly8a| 标识拥有者
45[,LJaMd --------------------------------------------------------------------------------
"0 %fR" ?,v&
o>* VCnf`wZB" 找出什么包拥有文件file:
Zon7G6s9` :a2[d1 示例:
G~u$BV' nr&| [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
wX6-WQR lynx-2.8.5-18
~}ifwm'7 a --------------------------------------------------------------------------------
7CF>cpw ^pew'pHQ ^:ny 列表包中的文件:
\/SOpC #l-zY}& 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
D'ZUbAh! .9z}S=ZK 示例:
1~E4]Ef:W ft@#[Bkx 此为部分显示结果
Y?K?*`Pkc1 [root@localhost ~]# rpm -ql lynx
.+?]"1>] /etc/lynx-site.cfg
37?X@@Z= /etc/lynx.cfg
>f^kp8`3{Y /etc/lynx.cfg.cs
)Kl@dj /etc/lynx.cfg.ja
*w^!\ /etc/lynx.cfg.sk
1/ j>| /usr/bin/lynx
@m%B>X28F /usr/share/doc/lynx-2.8.5
!UPB4I /usr/share/doc/lynx-2.8.5/INSTALLATION
WnOYU9;% /usr/share/doc/lynx-2.8.5/README
'ta&qp /usr/share/doc/lynx-2.8.5/docs
AEWrrE /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
N`H`\+ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
{hf_Xro& /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
p^w)@^f /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
rbv /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
J~`!@! /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
jJvd!,=) /usr/share/doc/lynx-2.8.5/docs/CMU.announce
D_ej%QtB@ /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
!U2<\!_ /usr/share/doc/lynx-2.8.5/docs/FM.announce
HL$7Ou /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
`\ IaeMvo /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
`<T4En /usr/share/doc/lynx-2.8.5/docs/README.TRST
Vx5fQ mx /usr/share/doc/lynx-2.8.5/docs/README.chartrans
dikX_ Q>D "mU2^4q --------------------------------------------------------------------------------
LB$0'dZU yD!GgnW qJl DQc- 列出包所提供的实际能力:
J%q)6& "9Q_lVI|Q --provides选项的作用是列出这个包所提供的实际能力。
0%HAa|L,, KC9VQeSc 示例:
f0%'4t YaQ5Z-c
[root@localhost ~]# rpm -q --provides lynx
8~.8"gQ config(lynx) = 2.8.5-18
M1 o@v 0 webclient
DW7Jk"\GH lynx = 2.8.5-18
&F[N$6:v --------------------------------------------------------------------------------
N(J#<;!yb '?NMQ >XuPg(Ow 列出这个包所倚赖的任何包:
}9z$72;Qdq u9c^YC BM -R,--requires选项的作用是列出这个包所依赖的任何包。
Q=[ IO,f HKOSS-`5 示例:
AhjCRYk+ g.8^ )u [root@localhost ~]# rpm -qR lynx
=)iAU/*N /bin/sh
*YQXxIIq config(lynx) = 2.8.5-18
;8e}X6YU indexhtml
%g>k0~TRf# libc.so.6
vs$.i libc.so.6(GLIBC_2.0)
/9D
mK%d libc.so.6(GLIBC_2.1)
(&V*~OR libc.so.6(GLIBC_2.2)
l;aO"_E1m libc.so.6(GLIBC_2.3)
)N3/;U; libcrypto.so.4
^K~=2^sh libncursesw.so.5
]*)l_mut7 libssl.so.4
i"DyXIrk2 libz.so.1
ZN'B@E=p rpmlib(CompressedFileNames) <= 3.0.4-1
# M3d = rpmlib(PayloadFilesHavePrefix) <= 4.0-1
#X{lV]Z --------------------------------------------------------------------------------
[(8s\>T <5FGL96 { VM^K1 列出包中的配置文件
C\bJ_vl;' ao(Lv+
-c,--configfiles选项的作用是列出包中的配置文件
N0K <zxR _]3#C[1L 示例:
nS.qK/.s s{Y-Vdx [root@localhost ~]# rpm -qc lynx
DmB?.l- /etc/lynx-site.cfg
p>T /etc/lynx.cfg
|x _jpR /etc/lynx.cfg.cs
dIQ3snG /etc/lynx.cfg.ja
bG.`> /etc/lynx.cfg.sk
K^b'<} $|p --------------------------------------------------------------------------------
{Rxb_9 7fT_]H8 8 r0;054 显示有关于包的改变信息的日志:
{=3'H?$ !{g>g%2! --changllog选项的作用是显示有关于包的改变信息的日志。
H2+Ijn19E ?AI`,*^ 示例:
brqmi<*9"[ 6HVX4Z#VH 此为部分显示结果
/;}o0
DYeW [root@localhost ~]# rpm -q --changelog lynx
gKWUHlQY * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
=|^R<#%/ - Removed perl dependencies (bug #127423).
~Hx>yn94e * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
KYg'=({x - rebuilt
Kj4L PG * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
Yfz`or\@= - No longer need lynx-284-ipv6-salen.patch.
i~4$V - No longer need lynx2-8-2-telnet.patch.
(ze9-!% * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
K)n058PO - rebuilt
Ogh, * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
\K
Kt&bKL - Updated to dev16, fixing bug #110196.
BGu<1$G - No longer need crlf patch.
g+4x - Use shipped ja translations.
wo86C[ - Use %find_lang.
~sWXd~\ - Default config file now sets UTF-8 (bug #110986).
IFF1wfC
--------------------------------------------------------------------------------
$TAsb>W!( /|v
b)J a72L%oJ 包选择选项
m'ZxmsFo ehMpo BL package_name
b0N7[M1Xl 查询已安装包的package_name。
h?->A# G*zhy!P -a,--all
2jP(D%n 查询所有已安装拨。
j4#S/:Q<7 9m%+ 6#| -f file,--file file
"1Y DT-I" 找出什么包拥有文件file。
og*ti!Z p%\&M bA -g group,--group group
eFQz G+/ 找出什么包拥有组group。
H]{`q Vg"v C -p package_file
OeQ~g-n 查询未安装包package_file
j#H&~f S09Xe_q --querybynumber num
"Z-YZ>2 查询第num个数据库条目。主要用于调试。
]99;7 --7@rxv -qf,--queryformat num
P@Pe5H"o 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
M^/ZpKeT" 5^2P\y(? --specfile specfile
H"pwIiC 查询specfile,就好象它是个包
e~6>8YO+7j S<w?,Z --triggeredby pkg
Z,,q mwd 列出触发安装pkg包的包。
u6*0%
Km rGQ([e --whatrequires capability
GM0pHmC 列出要求特定能力来行使职责的包。
t RTJ Q
;,@Fz --whatprovides capability
YJZ`Clp? 列出提供特定能力的包。
AnBD~h h --------------------------------------------------------------------------------
+3R/g@n _U~~[I u&o<>d;) 信息选择选项:
bI)%g lygv#s-T -c,--configfiles
q9$K.=_5 列出包中的配置文件。
(^)(#CxO };>~P%u32 --changelog
<EuS6Pg 显示有关于包的改变信息的日志。
mbIHzzW> (+bt{Ma -d,--docfiles
hx}X=7w 列出包中的文档文件。
,#(k|Zztc Tnnj8I1v --dump
{_jbFJ 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
s`dUie}y< 以下列顺序输出信息:
l+^4y_ path size mtime md5sum mode owner group isconfig isdoc rdev symlink
Qf@ha !<0 `c --filebypkg
,GF(pCZzG 列出每个包中的所有文件。
)JR& =$<