Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
CmPix]YMQ ';?b99 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
^#L?HIM a4M`Bk;mb 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
R!.HS0i. c~UYs\ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
_;+N=/l0 --------------------------------------------------------------------------------
$0K%H 0IEFCDeCO ^R4eW|H 以下简要介绍RPM包的安装,删除和查询
<U$A_]*w ,/g\;#:{@] RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
nNff~u)I K*Tvo` rpm命令的格式为:
v#`Wf}G ;zO(bj> rpm [options] [packages]
>AW=N '2%/h4jY 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
A
fctycQ- KCed!OJ+ 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
hOx">yki --------------------------------------------------------------------------------
3f:I<S7 U;:,$]+ +xlxhF RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
YA>du=6y\ `$\Y,9E}x 以下为rpm --showrc命令显示的节选:
;pNHT*>u, $|YIr7?R 示例:
c#e_Fs Wwf#PcC] 此为部分显示结果
hexq]' R [root@localhost ~]# rpm --showrc
8D:{05 ARCHITECTURE AND OS:
5yQv(<~*G build arch : i386
0ZV)Y<DJ compatible build archs: athlon i686 i586 i486 i386 noarch
2eu`X2IBcT build os : Linux
soZw""|v compatible build os's : linux
QWf)5S install arch : athlon
Rh%/xG#k install os : Linux
bkl'0
p compatible archs : athlon i686 i586 i486 i386 noarch
)8yee~+TN compatible os's : linux
L&'0d$Tg8 RPMRC VALUES:
VmkYl$WZo 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
6mBX{-Z[ optflags : %{__global_cflags} -m32 -march=athlon
WU1o4&OF Features supported by rpmlib:
K0\a+6kh rpmlib(VersionedDependencies) = 3.0.3-1
Wx/!Myu PreReq:, Provides:, and Obsoletes: dependencies support versions.
WJU`
g rpmlib(CompressedFileNames) = 3.0.4-1
\wNn c" file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
t{>66jm\R rpmlib(PayloadIsBzip2) = 3.0.5-1
c+G: bb%p package payload can be compressed using bzip2.
7`tnoTUv --------------------------------------------------------------------------------
_A)<"z0E XI\aZ\v "=<lPi rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
UUY-EC7X k&DHQvfB 示例:
bYdC.AE h{sW$WA [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
2ezuP F Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
WytCc>oL Preparing... ########################################### [100%]
*4qsM,t 1:lynx ########################################### [100%]
-H`G6oMOO --------------------------------------------------------------------------------
R\:C|/6f c)SSi@<
cv :*&wnQMKR 以下列出一些通用选项(可以用于所有模式):
im+2)9f J6 [x(T --dbpath path
u ?g!E."v 用path作为RPM数据库的路径。
H8K<.RY P+3G*M=} --ftpport prot
".xai.trr 用port作为FTP端口。
s80_e /@RnCjc' --ftpproxy host
G-3.- 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
#K!Df%,< pLzsL>6h --help
&,."=G 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
?GFxJ6!%I ].dTEzL9X --justdb
y=vH8D]%X 只更新数据库;不改变任何文件。
e^Xij Id. Hs=!.tZ, --pipe command
7^iF,N 用管道把rpm输出到commond。
qW7"qw= NTL#! --quiet
;$&-c/]F# 仅显示错误信息。
sD{b0mZT L''0`a. +S --rcfile filename
`6mHt6"h 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
faO8
& "}SERC7 --root dir
mZ;yk( 在dir目录内执行所有操作。
y-n\;d>[(
}aNiO85 --version
}7=a,1T 输出rpm版本号。
D hZtiqL#_ Xq>e]#gR -vv
-;P<Q`{I 输出调试信息。
N^
D/}n Rc6
)v --------------------------------------------------------------------------------
BE"nyTQ uaPBM< Msd!4TrBJ 安装升级和刷新
Km <Wh= X^|oY]D 安装或升级一个RPM包,install命令的语法为:
zK-hNDFL{ \aZ(@eF@@Q rpm -i [install-options] package_file
0= 'DDy rpm --install [install-options] package_file
Ab2g),;c CY>NU 示例:
rIb[gm)Rk 5&X [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
Ve8! package lynx-2.8.5-18 is already installed
[QZ~~(R [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
z t,-O7I'1 --------------------------------------------------------------------------------
n~&R_"mv( 9uS7G * owMH 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
rmMO-!s Yip9K[ rpm -U [install-options] package_file
YQ]H3GA rpm --upgrade [install-options] package_file
y{<#pS. xeI ,Kz." 示例:
,K9UT#h 34oLl#q* 先安装旧版
<Y orQ> [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
QhGg^h%6 4o*V12_r'4 再安装新版
pK8nzGQl7 [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
__ mtZ{ 42wcpSp 显示出新版本信息
hL`zV [root@localhost ~]# rpm -q lynx
uf;q/Wr lynx-2.8.5-18
Vd?v"2S(9 m_(hCY=Q$ 说明:
i52R,hz -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
1!f'nS EORRSP,$2 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
vfv5ex( --------------------------------------------------------------------------------
'.K,EM!-~h GBphab| llleo8 刷新的语法是:
k_a'a)`$6 ob00(?;H rpm -F [install-options] package_file
NZTYT\7 ya_'Oz!C rpm --freshen [install-options] package_file
U2AGH2emw `{wku@ 示例:
kW!:bh =P#!>*\ar 从未安装过lynx包,使用-F选项,将无法升级。
\a6)t%u 9/$P_Q:3 [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
zOE6;c81 [root@localhost ~]# rpm -q lynx
{6n \532@ package lynx is not installed
A$F;fCV* --------------------------------------------------------------------------------
^97ZH)Ww _#4,&bh8 - X_w& 安装和更新选项为:
=CVT8(N* hX_p5a1t --allfiles
cLU*Tx\ 安装或更新所有文件。
Q$vr`yV#=6 YxtkI:C? --badreloc
{^f0RGJg9 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
Q*C4
q` zrew:5*uZ --excludedocs
.cF$f4>2 不安装任何文档文件。
Qf|}%}%fp "?{yVu~9 --excludepath path
d8kwW!m+ 不安装文件名以path开始的任何文件。
e1loI8 BP[U`
! --force
.V3Dql@z" 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
l1)pr{A Qyjuzfmz -h,--hash
'U"3'jh 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
:b;1P@W< NACY;XQ% --ignorearch
5dp#\J@ 即使二进制包用于不同的体系结果也进行安装。
"J5Pwvs- Rdg0WT*;j --ignoreos
M0zD)@ 即使操作系统不匹配也安装二进制包。
W`'|&7~ V
3]p3 --ignoresize
WHZng QmY 安装前不检查磁盘的可用空间。
^.C X6% 'r n;|K --includedocs
"|'`'W 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
VQ?H:1R x#0@$ --nodeps
QiweM?- 不检查这个包是否依赖于其他包的存在。
'Xl>,\'6 0:Y`#0qK --noorder
<u?hdwW\ 安装之前,不为了满足依赖关系而对包进行重新排序。
];d:z[\P rgzI --noscripts
NoAb}1uae 不执行任何预安装或后安装脚本。
4<g72| y ^Ai_/! " --notriggers
'<=MhNh\ 不执行任何由包安装触发的脚本。
U9o*6`"o OPY/XKyY, --oldpackage
70
UgK E 允许升级以用旧包替换新包。
2Ml2Ue-9 *@arn Eu --percent
~}0hN]*G 当文件被解压时输出完成百分比的信息。
.&x?`pER -mHhB(Td' --prefix path
[a)~Dui0@\ 把可重定位包的安装前缀设置为path。
/Tf*d>Yh; ptcLJ]+) --replacefiles
:5K~/=6x 即使包替换了来自其他安装包的文件,也安装这些包。
f76| ,L{o,qzC --replacepkgs
\Tf{ui 即使某些包已经被安装,也安装他们。
}Q=se[(( sR>;h / --test
O?,i? 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
?*R^?[ lZA>L,
\d --------------------------------------------------------------------------------
,c7u tbzvO<~ q\b
?o!#_ 查询
,o>pmaoLs VtzmY query命令的语法为:
!+45=d 5 YNJpQAuSn) rpm -q[information-options] [package-options]
~R?dDL rpm --query[information-options] [package-options]
9Oo*8wvGG 8P<UO 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
g.Caapy --------------------------------------------------------------------------------
~2A$R'x b
h[|zs>p gjegzKU 以下简单示演示一下包查询:
(_&V9vat= X|damI% 简单查询:
u};]LX\E $|cp;~ 1 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
!Ir1qt8T enbN0 示例:
(LT\
IJSM 'q};L 6 [root@localhost ~]# rpm -q lynx
>uchF8)e| lynx-2.8.5-18
3n84YX{ --------------------------------------------------------------------------------
zsMw5C Fy_<Ui p[@oF5M 信息查询:
_czbUl O^R:_vb3I rpm -qi packagename命令可以得到安装包的汇总信息。
\;B$hT7z* Zn<(,e 示例:
Gx h~ [root@localhost ~]# rpm -qi lynx
K*_{Rs0P Name : lynx Relocations: (not relocatable)
ySuLt@X Version : 2.8.5 Vendor: Red Hat, Inc.
@1/}-.(n Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
(|36!-(iK Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
Hc&uE3=%sL Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
KXx@
{cv Size : 4837340 License: GPL
dp
UdFuU" Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
DUuC3^R Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> {glqWFT URL :
http://lynx.isc.org/ 2iR:*}5 Summary : 一个基于文本的网页浏览器。
tJh3$K\ Description :
v/aPiFlw Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
T[4[/n>i 图像,但是它支持框架、表格、以及多数其它 HTML
=!g/2;-or 标签。Lynx 优于图形化浏览器的地方是它的速度――
ph8Jn+|E Links 能够快速启动、退出、及显示网页。
|>IUtUg\ 标识拥有者
y=oVUsG --------------------------------------------------------------------------------
l6S19Kv *< $c
= re ]Ste 找出什么包拥有文件file:
PzMlua u8<&F`7j 示例:
^&`sWO@= :_o] F [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
_uO!N(k. lynx-2.8.5-18
B8cBQ v --------------------------------------------------------------------------------
B@"SOX hs!UX=x| I=4Xv<F 列表包中的文件:
,c,Xd
o273|* 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
QD.zU/F~> %k3NT~ 示例:
,>bGbx [)Z'N/;0 此为部分显示结果
cX|[WT0[I [root@localhost ~]# rpm -ql lynx
.%x"t>] /etc/lynx-site.cfg
;NiArcAS! /etc/lynx.cfg
W"b&M%y| /etc/lynx.cfg.cs
QMXD9H0{ /etc/lynx.cfg.ja
*Fa)\.XX /etc/lynx.cfg.sk
)K>Eniou /usr/bin/lynx
QvG56:M3 /usr/share/doc/lynx-2.8.5
"8wf.nZ /usr/share/doc/lynx-2.8.5/INSTALLATION
0On?{Bw /usr/share/doc/lynx-2.8.5/README
rxs~y{Xi /usr/share/doc/lynx-2.8.5/docs
YBYB OH /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
(R4PD /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
LJRg>8 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
Fb<n0[m /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
rao</jN.9 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
pY+.SuM /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
Od0S2hHO /usr/share/doc/lynx-2.8.5/docs/CMU.announce
Q!4i_)rM /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
${A5- /usr/share/doc/lynx-2.8.5/docs/FM.announce
G0_&gx` /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
"rme~w Di /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
g".d"d{ /usr/share/doc/lynx-2.8.5/docs/README.TRST
:V&N\>Wo /usr/share/doc/lynx-2.8.5/docs/README.chartrans
, vY)n6 uL2"StW --------------------------------------------------------------------------------
.ocx(_3G t$U3|r nc3sty1` 列出包所提供的实际能力:
ES^>[2Y L*zbike --provides选项的作用是列出这个包所提供的实际能力。
(NGu9uJs (H&@u9K?a? 示例:
qSFc=Wwc GY oZ$p" C [root@localhost ~]# rpm -q --provides lynx
rPRrx-A config(lynx) = 2.8.5-18
!UBy%DN~k webclient
jP1$qhp lynx = 2.8.5-18
'M~BE\ --------------------------------------------------------------------------------
Ze-MAt NJn&>/vM kP7a:(P_g 列出这个包所倚赖的任何包:
7cIC&(h5 RY9+ 9i -R,--requires选项的作用是列出这个包所依赖的任何包。
o .l;:
Un V -q%r 示例:
3^!Hl8P7 sCVI 2S!L [root@localhost ~]# rpm -qR lynx
Up<~0 /bin/sh
'I&|1I^ config(lynx) = 2.8.5-18
HV ;; indexhtml
CXTt(-FT libc.so.6
Yx6hA#7I libc.so.6(GLIBC_2.0)
-g:lOht libc.so.6(GLIBC_2.1)
3DH.4@7P libc.so.6(GLIBC_2.2)
|</"N-#S libc.so.6(GLIBC_2.3)
Y5HfN[u^7 libcrypto.so.4
Xad*Iulj libncursesw.so.5
Kaf> libssl.so.4
Ejq=*UOP libz.so.1
lj)f4zu rpmlib(CompressedFileNames) <= 3.0.4-1
mV<i JZh rpmlib(PayloadFilesHavePrefix) <= 4.0-1
CoJ55TAW --------------------------------------------------------------------------------
^"1TPd| cFLd)mt/ (B&h;U$HAH 列出包中的配置文件
$'^&\U~? YZibi -c,--configfiles选项的作用是列出包中的配置文件
~uB'3`x DR6]-j!FK 示例:
qh-[L Qu`n& [root@localhost ~]# rpm -qc lynx
Yb}w;F8( /etc/lynx-site.cfg
tev QW /etc/lynx.cfg
`K w7" /etc/lynx.cfg.cs
/KAlK5< /etc/lynx.cfg.ja
^;zWWg/d /etc/lynx.cfg.sk
^|aNG`|O --------------------------------------------------------------------------------
z5 Bi=~=# ob'n{T+lZ PRD_!VOW 显示有关于包的改变信息的日志:
nX._EC 6yI}1g --changllog选项的作用是显示有关于包的改变信息的日志。
k,rWa _9NVE|c; 示例:
{7X#4o0 pW{8R^vKm 此为部分显示结果
|6%.VY2b [root@localhost ~]# rpm -q --changelog lynx
"V3}t4 * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
.B>B`q;B - Removed perl dependencies (bug #127423).
%,|ztH/ Q * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
t^.'>RwW| - rebuilt
)Pli}) * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
M-Y0xWs - No longer need lynx-284-ipv6-salen.patch.
&8sV
o@Pa - No longer need lynx2-8-2-telnet.patch.
k(vPg,X>m * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
Zm(dY*z5:J - rebuilt
&EovZ@u * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
Fd7*]a - Updated to dev16, fixing bug #110196.
=Y9\DeIZ - No longer need crlf patch.
1TjZ#yP%1 - Use shipped ja translations.
<*u C - Use %find_lang.
55-D\n< - Default config file now sets UTF-8 (bug #110986).
9cQ_mgch --------------------------------------------------------------------------------
G;TsMq wVqd$nsY" :
,p||_G& 包选择选项
bC~~5Cm Q2/.6O8 package_name
~Fw<eY 查询已安装包的package_name。
] TSg!H m_*R.a -a,--all
.#fPw_i 查询所有已安装拨。
:[sOKV i =XT)J6z^" -f file,--file file
wGJjA=C 找出什么包拥有文件file。
knT.l" RH(V^09[o -g group,--group group
[;KmT{I9 找出什么包拥有组group。
5j{Np,K NP/>H9Q2% -p package_file
n|i"S` 查询未安装包package_file
xNpg{cQ= (ZP87Gz --querybynumber num
H9`
f0(H 查询第num个数据库条目。主要用于调试。
G#[*|+f8 pm USF #u -qf,--queryformat num
:eOR-}p' 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
+l?; ) ^bUxLa[. --specfile specfile
}Qrab#v 查询specfile,就好象它是个包
9<s4yZF@x [f!O6moR6 --triggeredby pkg
;=jr0\| e 列出触发安装pkg包的包。
[B^ G- 44sy`e --whatrequires capability
#
|^^K!% 列出要求特定能力来行使职责的包。
Cd]/ h qmSE'8 --whatprovides capability
[s`
G^ 列出提供特定能力的包。
?4[H]BK --------------------------------------------------------------------------------
:\yc*OtX 'iUg[{'+ 9"sDm}5% 信息选择选项:
SwH2$:f 61_f3S(u -c,--configfiles
V 0{tap} 列出包中的配置文件。
z.)p
P'CJo *P2[qhP2 --changelog
H?yE3w 显示有关于包的改变信息的日志。
2 x4= lKV"Mh+6 -d,--docfiles
ULBg{e?l8 列出包中的文档文件。
UQT'6* ! 7m1KR#j --dump
2KI!af[I 转储包中每个文件的信息。这个选项必须至少与-l,-c或-d之一共同使用。
>V;,#5F_ 以下列顺序输出信息:
-5>NE35Cto path size mtime md5sum mode owner group isconfig isdoc rdev symlink
5bX6#5uP1 cHD%{xlb --filebypkg
x?r1s#88> 列出每个包中的所有文件。
eN-au/kN y79qwM. -i
Jb(Y,LO^ 显示包的信息,包括名字,版本和描述。
B|o%_:]+E #a9_~\s -l,--list
&