Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
oA4D\rn8" f^W[;w 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
7FmbV/&c qwq/Xcv 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
.i {>Z AbUDn\0$ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
)7&42>t --------------------------------------------------------------------------------
~ X-)_zH p?+lAbe6H uiktdZ/f 以下简要介绍RPM包的安装,删除和查询
vk
@%R u0m5JD0/ RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
$%7I: j5L)N rpm命令的格式为:
KX?o
n sZ T-4/d5D[ rpm [options] [packages]
%55@3)V8Rf <eB<^ &nd 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
_W)`cr 4$yV%[j 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
TZ?Os4+ --------------------------------------------------------------------------------
g%`i=s&N% hi!L\yi Y,k(#=wg RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
A2m_q>>
! ^"3\iA: 以下为rpm --showrc命令显示的节选:
.z=U= _e 2R^O,Vu*W 示例:
s%eyW _ wgCvD 此为部分显示结果
w3^NL(> [root@localhost ~]# rpm --showrc
9YR]+* ARCHITECTURE AND OS:
=%!e(N'p build arch : i386
ePf+[pV3 compatible build archs: athlon i686 i586 i486 i386 noarch
S8
:"<B) build os : Linux
&J8Z@^ compatible build os's : linux
hf;S]8|F install arch : athlon
Q*]$)D3n install os : Linux
6}ce1|mkg/ compatible archs : athlon i686 i586 i486 i386 noarch
}$o* compatible os's : linux
IUOxGJ|rO RPMRC VALUES:
B\\6# 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
Lp_$?MCD. optflags : %{__global_cflags} -m32 -march=athlon
`/z_rqJ0CL Features supported by rpmlib:
k@#5$Ejc2 rpmlib(VersionedDependencies) = 3.0.3-1
EE+`i% PreReq:, Provides:, and Obsoletes: dependencies support versions.
UQ/qBbn rpmlib(CompressedFileNames) = 3.0.4-1
6SE6AL<b file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
$:Rn; rpmlib(PayloadIsBzip2) = 3.0.5-1
FY$fV"s package payload can be compressed using bzip2.
gX[|;IZ0o --------------------------------------------------------------------------------
4|`Yz%' )h#]iGVN} h@=7R rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
wZ#Rlv,3Wa K*~]fy 示例:
_@Y"$V]=Vt n5|l|#c$N [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
COR;e`%, Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
Jlp<koy Preparing... ########################################### [100%]
mw_ E&v 1:lynx ########################################### [100%]
VZ$=6CavH --------------------------------------------------------------------------------
F8H'^3`b`U WvujcmOf %m9CdWb=w 以下列出一些通用选项(可以用于所有模式):
#O" ["}A
S: --dbpath path
eqq`TT#Z 用path作为RPM数据库的路径。
*l{yW"Su g?B3!,!9 --ftpport prot
BPqk"HG]T 用port作为FTP端口。
cB#nsu> 'Y.Vn P&H --ftpproxy host
%%>_B2vc 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
D3`}4 A ;6ky5}z --help
({4] 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
9:5:`'b f;gZ|a --justdb
h4/X
0@l` 只更新数据库;不改变任何文件。
tAjx\7IX 4[TR0bM% --pipe command
9Y/L?km_( 用管道把rpm输出到commond。
[*)Z!) ZPHXzi3j --quiet
btH _HE 仅显示错误信息。
5o#Yt FW8-'~ --rcfile filename
h>alGLN> 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
1G;8MPU JWROYED --root dir
1j0 -9Kg' 在dir目录内执行所有操作。
z>;$im JQ@fuo % --version
Gih[i\%Q 输出rpm版本号。
q]\X~
9# SHD^}?-| -vv
,m^;&& 输出调试信息。
a8$kNtA =oX>Ph+ P --------------------------------------------------------------------------------
1DE@N1l eWvo,4 MAqLIf<G 安装升级和刷新
QV qK QK; T~
_k 安装或升级一个RPM包,install命令的语法为:
0)|Q6*E> fj>C@p rpm -i [install-options] package_file
09S6#; N& rpm --install [install-options] package_file
;;Ds {fV}gR2 示例:
xY\0zQ auHFir8f [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
/\Z J
package lynx-2.8.5-18 is already installed
e8}Ezy"^ [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
Wkzs<y" --------------------------------------------------------------------------------
BI2; ex ~>5#5!}@* at|g%$% 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
]3B %8 <?h%k"5 rpm -U [install-options] package_file
Lq (ZcEKo rpm --upgrade [install-options] package_file
LZ U$ 9b;A1gu 示例:
QvLZg -"Q-H/qh 先安装旧版
9 [jTs3l: [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
\*0yaSQF 'Z&;uv,l 再安装新版
iWLa> z|, [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
nmFC%p)4 ,FZT~? 显示出新版本信息
W`z 0" [root@localhost ~]# rpm -q lynx
:q#K} / lynx-2.8.5-18
xd-XWXc 9}29&O 说明:
)US:.7A[. -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
2+o|A &|Pu-A"5~ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
|J0Q,F]T --------------------------------------------------------------------------------
k(%QIJH q
o 1lj"P l4y{m#/ 刷新的语法是:
pS[KBQ"F |o<8}Nja6 rpm -F [install-options] package_file
tMp=-" %Sk@GNI_ rpm --freshen [install-options] package_file
v4Ga0]VN$8 RthT\%R 示例:
awewYf$li /`npQg- 从未安装过lynx包,使用-F选项,将无法升级。
8|Y.|\ "YU{Fkl#j [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
m~#%Q?_ % [root@localhost ~]# rpm -q lynx
&o3K%M;C? package lynx is not installed
BxK^?b[E8 --------------------------------------------------------------------------------
lb*8G ww k
P F _-~`03 `! 安装和更新选项为:
Zm
ogM7B sJ
z@7. --allfiles
wJ<Oo@snm 安装或更新所有文件。
h*B|fy4K9U l8h&|RY[ --badreloc
sZ<9A Xk-E 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
,Gk}"w mTNVU@TY= --excludedocs
2[fN\e{ 不安装任何文档文件。
MZJ]Dwt] HO)/dZNU --excludepath path
p&-'|'![l 不安装文件名以path开始的任何文件。
WQNE2Q f:B>zp;N --force
B[4pX
+f 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
fq[;%cr4 WY:&ugGx -h,--hash
llV3ka^! 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
&sXRN&Fp <#GB[kQa --ignorearch
gb=/#G0R 即使二进制包用于不同的体系结果也进行安装。
6 15s5ZA F0vM0e- --ignoreos
?ULo&P[ 即使操作系统不匹配也安装二进制包。
:!a2]-D} '})0!g<Y --ignoresize
P|tNL}2`; 安装前不检查磁盘的可用空间。
`+:.L>5([ ENF"c$R --includedocs
G`fC/Le 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
:u8(^]N 7!y5
SX8C --nodeps
dC\ZjZZ 不检查这个包是否依赖于其他包的存在。
z7M_1%DEx 7pA/ --noorder
I\~G|B 安装之前,不为了满足依赖关系而对包进行重新排序。
E{^ XlY Rm1A>1a: --noscripts
h:zK(; 不执行任何预安装或后安装脚本。
NLPkh,T: bwM@/g%DL --notriggers
!o=U19) 不执行任何由包安装触发的脚本。
<s5qy- @yXfBML?] --oldpackage
ofYlR| 允许升级以用旧包替换新包。
p
Dx-2:} ZQ^r`W9_+ --percent
C98]9 当文件被解压时输出完成百分比的信息。
7@lS.w\#- 3kcTE&1^ --prefix path
/&F,V+x 把可重定位包的安装前缀设置为path。
W>VP'vn} :1XtvH --replacefiles
/xGmg`g<# 即使包替换了来自其他安装包的文件,也安装这些包。
~c)~015` ^<e@uNGg --replacepkgs
~_s?k3cd 即使某些包已经被安装,也安装他们。
'TH15r@ 6hZ@;Q=b --test
[gy*`@w 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
T,xPSN2A* -/{4Jf Wf --------------------------------------------------------------------------------
x3qW0K8 pj4!:{.; -C(b,F%% 查询
9% l% #ET/ = query命令的语法为:
8]4U`\k4 A;\7|'4 rpm -q[information-options] [package-options]
Q#h
9n] 5 rpm --query[information-options] [package-options]
%AOja+ I$E.s*B9 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
322jR4QGr --------------------------------------------------------------------------------
]EwVpvTw r]3'74j: JpsPNa 以下简单示演示一下包查询:
O+}qQNe< H$G0`LP0/a 简单查询:
Mu'8;9_6 pdJ/&ufh 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
iyj+:t/ ?4H i- 示例:
$zB[B;-!$ MlLb|!,)T [root@localhost ~]# rpm -q lynx
D]c`B lynx-2.8.5-18
/Q~gU< --------------------------------------------------------------------------------
A,r*%&4~ ={LMdC~5X moP,B~ 信息查询:
L?5Ck<!xG hx/N1x rpm -qi packagename命令可以得到安装包的汇总信息。
meN2ZB?Y Z|%_oR~b| 示例:
;<G=M2 [root@localhost ~]# rpm -qi lynx
|t; ~:A Name : lynx Relocations: (not relocatable)
G8Nt
8U~ Version : 2.8.5 Vendor: Red Hat, Inc.
nqwAQhzy( Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
6s0_#wZC Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
~"UV]Udn Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
(JM4R8fR& Size : 4837340 License: GPL
%tG*C,l] Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
It2" x; Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> )M__
t5L URL :
http://lynx.isc.org/ V& C/Z}\ Summary : 一个基于文本的网页浏览器。
u%~igt@x Description :
K&8dA0i2u2 Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
kcb.Wz~= 图像,但是它支持框架、表格、以及多数其它 HTML
JyR/1 W 标签。Lynx 优于图形化浏览器的地方是它的速度――
}Tf9S<xpq3 Links 能够快速启动、退出、及显示网页。
wdUBg*X8 标识拥有者
,t\* ZTt$ --------------------------------------------------------------------------------
5)
-~mWy pp7$J2s+j ^pJ!isuqu 找出什么包拥有文件file:
`7/Y@}n 5|jw^s7 示例:
35tu>^_#V MwmUgN"g [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
&QhX1dT+ lynx-2.8.5-18
Qg6W5Hc --------------------------------------------------------------------------------
~I{n^Q/a +-E~6^> $H+VA@_ 列表包中的文件:
e["2QIOe ;j4?>3 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
r\AyN=
y ID#I`}h.k 示例:
765p/** Mi]L]-L 此为部分显示结果
1KjU ]
r2 [root@localhost ~]# rpm -ql lynx
)T k1 QHU /etc/lynx-site.cfg
hAHq\ /etc/lynx.cfg
97ql5 /etc/lynx.cfg.cs
Z!U)I-x& /etc/lynx.cfg.ja
C+|b1/N- /etc/lynx.cfg.sk
T0&f8 /usr/bin/lynx
@xB*KyUW /usr/share/doc/lynx-2.8.5
}#X8@ /usr/share/doc/lynx-2.8.5/INSTALLATION
It{ ;SKeo /usr/share/doc/lynx-2.8.5/README
A^p[52` /usr/share/doc/lynx-2.8.5/docs
|g==" /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
}d<}FJ-, /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
wC5ee:u C% /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
1UKg=A-q /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
CZ nOui /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
$z+8<?YD /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
~i `>adJ: /usr/share/doc/lynx-2.8.5/docs/CMU.announce
yz0zFfiX /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
}!6\|;Qsz, /usr/share/doc/lynx-2.8.5/docs/FM.announce
?wO-cnl /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
6 ~>FYX /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
e^O(e /usr/share/doc/lynx-2.8.5/docs/README.TRST
kYLM&&h /usr/share/doc/lynx-2.8.5/docs/README.chartrans
.|/~op4; "_`F\DGAZu --------------------------------------------------------------------------------
$^@ ) y~75r\"R ^$t7+g 列出包所提供的实际能力:
s+Q~~]HJM >Jp:O
7 --provides选项的作用是列出这个包所提供的实际能力。
r3>i+i42 |^A ;&// 示例:
.jj$ Kh q] P{u0ftyX} [root@localhost ~]# rpm -q --provides lynx
'3?\K3S4i config(lynx) = 2.8.5-18
#vry0i webclient
gCxAG lynx = 2.8.5-18
EOm:!D\ --------------------------------------------------------------------------------
h(5P(` M 8O Soel *V+j%^91} 列出这个包所倚赖的任何包:
mW:!M!kk X=>=5' -R,--requires选项的作用是列出这个包所依赖的任何包。
%*\es7m} &B|D;|7H 示例:
zD<or&6 $]8h $ [root@localhost ~]# rpm -qR lynx
$jg*pmR- /bin/sh
;INW`b~ config(lynx) = 2.8.5-18
|_yYLYH'
indexhtml
O9r>E3-q libc.so.6
-N"&/) libc.so.6(GLIBC_2.0)
1|ra&(=) libc.so.6(GLIBC_2.1)
mdw7}%5V libc.so.6(GLIBC_2.2)
lv]hTH 4T libc.so.6(GLIBC_2.3)
^.>jGI%rB libcrypto.so.4
i@4~.iZ8 libncursesw.so.5
?2oHZ%G libssl.so.4
?]x|Zy libz.so.1
k2AJXw rpmlib(CompressedFileNames) <= 3.0.4-1
L =8rH5 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
e/^=U7:io --------------------------------------------------------------------------------
AhNq/?Q Q~ ak;*W $_x^lr 列出包中的配置文件
HvVts\f >ss/D^YS -c,--configfiles选项的作用是列出包中的配置文件
Lliqj1& N"3b{Qio 示例:
B`
k\ EL' HB7;0yt`: [root@localhost ~]# rpm -qc lynx
1n@8Kv /etc/lynx-site.cfg
3}/&w\$ /etc/lynx.cfg
D#o}cC. /etc/lynx.cfg.cs
2/0v B> /etc/lynx.cfg.ja
n-%s8aaVf /etc/lynx.cfg.sk
APO>y --------------------------------------------------------------------------------
&0`)
Q h}xeChw] %%4t~XC# 显示有关于包的改变信息的日志:
%wSj%>&-R cra+T+|>Kc --changllog选项的作用是显示有关于包的改变信息的日志。
U\R}`l K=,F#kn 示例:
3#TV5+x*"` GxKqD;;u?= 此为部分显示结果
M6}3wM*4 [root@localhost ~]# rpm -q --changelog lynx
'60 L~`K * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
K5XK%Gl" - Removed perl dependencies (bug #127423).
IhA* " * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
QPfc(Z - rebuilt
^6_Cc * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
dX)GPC-D7 - No longer need lynx-284-ipv6-salen.patch.
PZ*pQ=` - No longer need lynx2-8-2-telnet.patch.
%Jrt4sg[j- * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
Mv6-|O - rebuilt
di>cMS 4 c * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
L*~J%7 - Updated to dev16, fixing bug #110196.
GO^_=EMR[ - No longer need crlf patch.
_C`K*u
6Z< - Use shipped ja translations.
sUU{fNC6| - Use %find_lang.
zNIsf" - Default config file now sets UTF-8 (bug #110986).
1SR+m>pL --------------------------------------------------------------------------------
r}jGUe}d .;*s`t -
h9?1vc7 包选择选项
wy}k1E'M %!PM&zV package_name
J;f!!<l\ 查询已安装包的package_name。
,Bal 3fh8$A -a,--all
&w1P\4?G 查询所有已安装拨。
mljh|[ %,k][V -f file,--file file
^)W[l!!<) 找出什么包拥有文件file。
()3O=! iX4Iu3 -g group,--group group
z~>pVs 找出什么包拥有组group。
INyk3`FT sn?]n~z -p package_file
_`pD`7:aI^ 查询未安装包package_file
H[='~%D [mPjP%{=@ --querybynumber num
@!8ZPiW< 查询第num个数据库条目。主要用于调试。
d:i;z9b@to MKWyP+6` -qf,--queryformat num
[/BE8]M~ 指定显示查询结果时所采用的格式,使用标记来表示不同的数据类型(NAME,FILENAME,DISTRIBUTION)。格式说明是标准printf格式化的一个变体。
6KOlY>m] 1"e)5xI --specfile specfile
.fdL&z 查询specfile,就好象它是个包
_X'"w|0 PfZ+PqS --triggeredby pkg
[Ts"OPb%~ 列出触发安装pkg包的包。
hjQ~uqbg I*`* Q$ --whatrequires capability
8{Fsm;UsY 列出要求特定能力来行使职责的包。
dH^ <t,v ,-OCc!7K --whatprovides capability
;ji pe3LU 列出提供特定能力的包。
xQ'2BAEa --------------------------------------------------------------------------------
4sP2g&