Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
#PVgx9T=_ I/|)? 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
HO41)m+& p"Oi83w;9 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
"@
Zy+zLU }pu2/44=W 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
4Yt:PN2 --------------------------------------------------------------------------------
',z'.t &~6Z)} 1e'-rm
F 以下简要介绍RPM包的安装,删除和查询
xh#ef=Bw JZD27[b RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
uDafPTF /cJ$`
pN rpm命令的格式为:
Fr,>| NJz8ANpro$ rpm [options] [packages]
jsf=S{^2 Z]1~9:7ap 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
rMTtPuc2 ZJP.-` U 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
A_{QY&%m --------------------------------------------------------------------------------
b?CmKiM% W+H27qsv j Z3N+_J1 RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
@H@&B`K d #8R\J[9 以下为rpm --showrc命令显示的节选:
n~8-+$6OR 'ujtw:Z: 示例:
udqGa)&0 I>=7|G 此为部分显示结果
d{9rEB? [root@localhost ~]# rpm --showrc
PP[{c ARCHITECTURE AND OS:
"h_n/}r= build arch : i386
4eU};Pv compatible build archs: athlon i686 i586 i486 i386 noarch
'@AK0No\W build os : Linux
3iV/7~
O compatible build os's : linux
_&XT
=SW} install arch : athlon
{tu* ="d= install os : Linux
%ia/i : compatible archs : athlon i686 i586 i486 i386 noarch
Mn7 y@/1 compatible os's : linux
wI
#_r_ RPMRC VALUES:
}qc[ysDK] 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
H }uT' optflags : %{__global_cflags} -m32 -march=athlon
w<J$12
"p+ Features supported by rpmlib:
2(5wFc rpmlib(VersionedDependencies) = 3.0.3-1
`2J6Dz"W PreReq:, Provides:, and Obsoletes: dependencies support versions.
`;hsOfo rpmlib(CompressedFileNames) = 3.0.4-1
3i?{E^ file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
&hB~Z(zS! rpmlib(PayloadIsBzip2) = 3.0.5-1
Z!G;q}zZ! package payload can be compressed using bzip2.
S%Pk@n`z] --------------------------------------------------------------------------------
6%U1%; w{F8]N>0< cGsP0LkHC rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
{h&*H[Z z yIXM}i: 示例:
fyYv}z .2.$Rq [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
feIAgd}, Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
wx}\0(]Gl Preparing... ########################################### [100%]
=(Mv@eA" 1:lynx ########################################### [100%]
f|Z3VS0x --------------------------------------------------------------------------------
iWCN2om H3QAIsGS .Ky<9h.K 以下列出一些通用选项(可以用于所有模式):
fT[6Cw5w` gO*cX& --dbpath path
'RQZU*8 用path作为RPM数据库的路径。
&I:X[=;g Gd%6lab --ftpport prot
8BE OE< 用port作为FTP端口。
RW,ew!Z
z\_q`43U7 --ftpproxy host
15iCJ p 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
}s}b]v 6xk"bIp --help
9{70l539 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
YDi_Gl$ oxPOfI1%] --justdb
U[U$1LSS 只更新数据库;不改变任何文件。
.{5)$w> wCMsaW --pipe command
Z)P x6\?+ 用管道把rpm输出到commond。
L(`^T` '[qG ,^f --quiet
'bY^=9&| 仅显示错误信息。
;l4rg!r(S p|(910OEQ --rcfile filename
E2X
K hW 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
7R7g$ H",yVD --root dir
lH:TE=|4 在dir目录内执行所有操作。
?7^(' .N_0rPO,Kw --version
*S~. KW [ 输出rpm版本号。
jtQ2vJ- |A'8 'z&q -vv
R!*UU'se 输出调试信息。
t
Z\ f:Nfw+/q --------------------------------------------------------------------------------
Ip.5I!h[Xb Q`5jEtu#, *:
e^yi 安装升级和刷新
|oSyyDYWP
eK/[jxNO 安装或升级一个RPM包,install命令的语法为:
U QXT&w JP!$uK{u rpm -i [install-options] package_file
7<IrN\@U rpm --install [install-options] package_file
y"e'Gg2 1'c!9 示例:
{(D$Xb X]C-y,r[M [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
kul&m| package lynx-2.8.5-18 is already installed
~;UK/OZ [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
lCWk)m8 --------------------------------------------------------------------------------
w gATfygr dMeDQ`c`W */nb%QV 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
hrU.QF8 ;fee<7Ty rpm -U [install-options] package_file
Xa[gDdbL rpm --upgrade [install-options] package_file
&1]}^/u2 e`k
2g^ 示例:
!uO|1b Ywr^uy1V,/ 先安装旧版
+Y)rv6}m [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
J24UUZ9&$ H&mw!=FV0 再安装新版
%pL
,A5M [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
J^n(WnM*F 3z\:{yl 显示出新版本信息
,_u8y&<|I [root@localhost ~]# rpm -q lynx
VH#]67 lynx-2.8.5-18
rm2{PV<+d OPwp(b 说明:
lsJ'dS -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
1@CI7j ?Q9/C| 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
:'1ePq --------------------------------------------------------------------------------
kSB)}q6a L)8;96 ?*[t'D9f- 刷新的语法是:
iknB c-TLD )3h=V^rm rpm -F [install-options] package_file
Q&`$:h.~ qIA!m
.GC rpm --freshen [install-options] package_file
f
IQ$a> p8Lb*7W 示例:
_)2NFq wC@4`h\U 从未安装过lynx包,使用-F选项,将无法升级。
uZm<:d2%) <gf:QX! [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
?v8RY,Q30 [root@localhost ~]# rpm -q lynx
~}83\LI} package lynx is not installed
9zi/z_G --------------------------------------------------------------------------------
RX?Nv4- Zp-
Av8 9e=F 安装和更新选项为:
$qg5m,1? Gp;[WY\ --allfiles
il5WLi;{ 安装或更新所有文件。
3_^w/-7`B 5T8X2fS: --badreloc
*=@Z\]"? 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
=J0FT2 d `j_R ?mY --excludedocs
<|
Xf4. 不安装任何文档文件。
<JF78MD\ |],{kUIXO --excludepath path
""CJlqU 不安装文件名以path开始的任何文件。
I*6L`#j[ fm&l0 --force
[#3:CDT 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
2ZIf@C{P. .Zf#L'Rf -h,--hash
6S"bW)O 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
=*"Amd, uW Q` --ignorearch
ik7#Og~3 即使二进制包用于不同的体系结果也进行安装。
L_)?5IOJ$ 5!tmG- 'b --ignoreos
;)"r^M)): 即使操作系统不匹配也安装二进制包。
MSRIG- 5A~w_p*} --ignoresize
3w!oJB 安装前不检查磁盘的可用空间。
wpx,~`& \&ERSk2 --includedocs
GlQ=M )E 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
aH'^`]'_= /\
~{ --nodeps
V%Y.N4H 不检查这个包是否依赖于其他包的存在。
zrnc~I+
ax>en]rNP --noorder
4sNM#]%| 安装之前,不为了满足依赖关系而对包进行重新排序。
4J94iI>S.l jDH)S{k --noscripts
Dih~5 不执行任何预安装或后安装脚本。
RM%lhDFY 97F$$d54T --notriggers
iO<O2A.F 不执行任何由包安装触发的脚本。
^h^j:!76j eA{,=,v) --oldpackage
t
m5>J)C 允许升级以用旧包替换新包。
9L!Vj J zx#d_SVi --percent
<XCH{Te1 当文件被解压时输出完成百分比的信息。
5'+g'9 ]vKxgfF --prefix path
.u
W_(Rqg 把可重定位包的安装前缀设置为path。
gj6"U{D ` Bkba: --replacefiles
%4n=qK9T5 即使包替换了来自其他安装包的文件,也安装这些包。
ZPZ1
7- [r^f5;Z --replacepkgs
#?}Y~Oe 即使某些包已经被安装,也安装他们。
Y$oBsg\v G!0|ocE} --test
O}#*U+j 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
#'$CC<*vy Pvbw>k; --------------------------------------------------------------------------------
RoJ&dK ;#rtV; nU`vj`K
查询
"thfd"- ^B1vvb query命令的语法为:
{nj\dU kIXLB!L2b^ rpm -q[information-options] [package-options]
;qG a|`#j rpm --query[information-options] [package-options]
LoBKR
c2t 3'1O}xO 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
MKoN^(7 --------------------------------------------------------------------------------
]6=cSs! b-~`A;pr :4(7W[r6 以下简单示演示一下包查询:
mUnnk`v yKDg
~zsh 简单查询:
Ix1ec^?f Zh3]bg5 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
3bE^[V8/ } c&Zv#iO6 示例:
$5il]D` [0)iY%^ [root@localhost ~]# rpm -q lynx
eYsO%y\I lynx-2.8.5-18
>OiC].1
--------------------------------------------------------------------------------
?;^_%XSQ* Hej0l^ 4:6@9.VVT 信息查询:
+k8><_vr} 9;h1;9sC| rpm -qi packagename命令可以得到安装包的汇总信息。
^z0[{1 [gQ~B1O 示例:
xvpS%MS [root@localhost ~]# rpm -qi lynx
G
V0q? Name : lynx Relocations: (not relocatable)
n6|}^O7 Version : 2.8.5 Vendor: Red Hat, Inc.
Kpj0IfC,10 Release : 18 Build Date: 2004年07月08日 星期四 18时52分16秒
d*q_DV Install Date: 2006年05月30日 星期二 13时27分21秒 Build Host: tweety.build.redhat.com
y}#bCRy~.A Group : 应用程序/互联网 Source RPM: lynx-2.8.5-18.src.rpm
D}b+#G(m[ Size : 4837340 License: GPL
HQf[T@ Signature : DSA/SHA1, 2004年10月21日 星期四 01时14分03秒, Key ID b44269d04f2a6fd2
kQX,MP( Packager : Red Hat, Inc. <
http://bugzilla.redhat.com/bugzilla> G=~T)e URL :
http://lynx.isc.org/ U%w-/!p Summary : 一个基于文本的网页浏览器。
`33h4G Description :
%o^'(L@z Lynx 是一个基于文本的 万维网 浏览器。Lynx不显示任何
6pr}A 图像,但是它支持框架、表格、以及多数其它 HTML
-R6z/P(} 标签。Lynx 优于图形化浏览器的地方是它的速度――
?*}V>h 8m) Links 能够快速启动、退出、及显示网页。
Z(Q?epyT 标识拥有者
J5|Dduv
--------------------------------------------------------------------------------
o^DiIoor T*A_F
[ wW!*"z 找出什么包拥有文件file:
0 w@~ynW[ QM;L>e-ZY 示例:
yVh]hL#4+w 173/A=] [root@localhost ~]# rpm -qf /etc/lynx-site.cfg
m[Zz(tL lynx-2.8.5-18
siyJjE)}w --------------------------------------------------------------------------------
'<1T>|`/t >@ge[MuS 1j0yON 列表包中的文件:
yKfRwO[j ;=UrIA@y;= 如果对一个包不够了解,则可以用rpm -ql packagename命令列出包中的文件。这个表中确认某个配置文件或命令是否在这个包中。如果要升级,这个信息有助于了解升级有什么风险。
O- r"G [@>Kd`!' 示例:
: 2?i9F0_ /6L\`\g 此为部分显示结果
;O{AYF?,N [root@localhost ~]# rpm -ql lynx
.bnoK /etc/lynx-site.cfg
W.0dGUi* /etc/lynx.cfg
VQqEsnkz /etc/lynx.cfg.cs
Gi;eDrgj~ /etc/lynx.cfg.ja
}Qg9l| /etc/lynx.cfg.sk
4P2)fLmc /usr/bin/lynx
$:mCyP<y /usr/share/doc/lynx-2.8.5
}.`ycLW' /usr/share/doc/lynx-2.8.5/INSTALLATION
. 1?AU6\ /usr/share/doc/lynx-2.8.5/README
lza'l /usr/share/doc/lynx-2.8.5/docs
j##IJm /usr/share/doc/lynx-2.8.5/docs/CHANGES2.3
]9A9q<lZ /usr/share/doc/lynx-2.8.5/docs/CHANGES2.4
hiP^*5h /usr/share/doc/lynx-2.8.5/docs/CHANGES2.5
N],A&}30 /usr/share/doc/lynx-2.8.5/docs/CHANGES2.6
O \lt!p3F /usr/share/doc/lynx-2.8.5/docs/CHANGES2.7
K mL
PWj /usr/share/doc/lynx-2.8.5/docs/CHANGES2.8
5^P)='0* /usr/share/doc/lynx-2.8.5/docs/CMU.announce
]
J:^$] /usr/share/doc/lynx-2.8.5/docs/CRAWL.announce
hnG'L*HooE /usr/share/doc/lynx-2.8.5/docs/FM.announce
Z;??j+`Eo /usr/share/doc/lynx-2.8.5/docs/IBMPC-charsets.announce
9>%f99n /usr/share/doc/lynx-2.8.5/docs/OS-390.announce
v*3ezf\ /usr/share/doc/lynx-2.8.5/docs/README.TRST
'SOp!h$ /usr/share/doc/lynx-2.8.5/docs/README.chartrans
ULQ*cW&;? 2}509X(* --------------------------------------------------------------------------------
P8;|>OLZ) )+cP8$n6L 2/>AmVM 列出包所提供的实际能力:
,v)@&1Wh: .sjM$#V= --provides选项的作用是列出这个包所提供的实际能力。
{\lu; b! O`|'2x{[O 示例:
-?'u"*#1, m=j7 vb [root@localhost ~]# rpm -q --provides lynx
ds7I .Q' config(lynx) = 2.8.5-18
uCUQxFp webclient
?~u"w OH' lynx = 2.8.5-18
{!6!z, --------------------------------------------------------------------------------
s*(Y<Ap7d 4MIL#1s SV8rZWJ 列出这个包所倚赖的任何包:
M}M. PTL52+}/ -R,--requires选项的作用是列出这个包所依赖的任何包。
X3RpJ#m"' D!)'c(b 示例:
FV:{lC{h~ HOu<,9?>Q [root@localhost ~]# rpm -qR lynx
Pme`UcE3H /bin/sh
_=4Dh/Dv config(lynx) = 2.8.5-18
yfuvU2nVH indexhtml
o.Q|%&1 libc.so.6
E: XzX Fxx libc.so.6(GLIBC_2.0)
- +
$u libc.so.6(GLIBC_2.1)
w 7=Y_ libc.so.6(GLIBC_2.2)
37M7bB0 libc.so.6(GLIBC_2.3)
JJ7-$h'0q libcrypto.so.4
QD /| zi libncursesw.so.5
\?
MuORg libssl.so.4
eFZ`0V0 libz.so.1
!|Vjv}UO rpmlib(CompressedFileNames) <= 3.0.4-1
u%h]k ,(E rpmlib(PayloadFilesHavePrefix) <= 4.0-1
|h6)p;`gc --------------------------------------------------------------------------------
"kf7??Z m,*t}j0 7 AO/J:` 列出包中的配置文件
i3#]_ p{ yUNl)E -c,--configfiles选项的作用是列出包中的配置文件
vxbO>c Ct
#hl8b: 示例:
#T
!YFMh; %&e5i [root@localhost ~]# rpm -qc lynx
/Q{Jf+>R> /etc/lynx-site.cfg
0jj
}jw /etc/lynx.cfg
Hhfqb"2on /etc/lynx.cfg.cs
80:na7$)# /etc/lynx.cfg.ja
Q"QrbU /etc/lynx.cfg.sk
5#WZXhlc} --------------------------------------------------------------------------------
=EV8~hMyqh I9tdr< qYbod+UX 显示有关于包的改变信息的日志:
L`];i8=I c5O1h8 --changllog选项的作用是显示有关于包的改变信息的日志。
NIV&)`w 4my8 p Fk
示例:
KDHR}` Ur5X~a\y 此为部分显示结果
J,P7k$t2vv [root@localhost ~]# rpm -q --changelog lynx
pMs%`j#T * 五 7月 09 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-18
:/
"qNPJ - Removed perl dependencies (bug #127423).
: @YZ6?hf * 三 6月 16 2004 Elliot Lee <
sopwith@redhat.com>
?WUu@Z - rebuilt
]lm9D@HMC * 三 5月 26 2004 Tim Waugh <
twaugh@redhat.com> 2.8.5-16
?i9LqHL - No longer need lynx-284-ipv6-salen.patch.
zb:p,T@5 - No longer need lynx2-8-2-telnet.patch.
g($ y4~# * 六 2月 14 2004 Elliot Lee <
sopwith@redhat.com> 2.8.5-15
N2q'$o - rebuilt
~-'nEA TE * 二 12月 02 2003 Tim Waugh <
twaugh@redhat.com> 2.8.5-14
aD%")eP%& - Updated to dev16, fixing bug #110196.
~#(bX]+A - No longer need crlf patch.
5n?fZ?6( - Use shipped ja translations.
Lo9+#ITyx - Use %find_lang.
^Z\1z!{R - Default config file now sets UTF-8 (bug #110986).
IjNE1b$ --------------------------------------------------------------------------------
Av+R~&h Pu}r`
E_ ~e'FPVDn 包选择选项
<3ovCqa YzEa?F*$ package_name
0 ,Bd,<3 查询已安装包的package_name。
& ({X9 ihs@
'jh -a,--all
6VCw>x 查询所有已安装拨。
vgsu~(L; IvH0sS`F -f file,--file file
]]9eUw= 找出什么包拥有文件file。
"4Anh1,js iOzw)<