Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
Uk02IOXQ \[T{M!s 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
b8HE."*t tzNaw %\ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
t {=i=K3 M@~o6 ^ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
7O461$4v --------------------------------------------------------------------------------
4OEKx|:5n
0dh#/ A|C_np^z2 以下简要介绍RPM包的安装,删除和查询
M*H<
n* E&9!1!B RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
/=trj5h 1uC;$Aj6: rpm命令的格式为:
^5>du~d jIZ+d;1 rpm [options] [packages]
bx7\QU+ WQ.i$ID/ 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
9ET/I$n G)~MbesJ 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
:;_#5 --------------------------------------------------------------------------------
;ct)H*
y QmHwn)Ly 3]_qj*V RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
'f6PjI /B=l,:TnJ 以下为rpm --showrc命令显示的节选:
`#=fA (s Jq;Z 示例:
k)i"tpw R|H[lbw 此为部分显示结果
lY->ucS %P [root@localhost ~]# rpm --showrc
[%t3[p<)O ARCHITECTURE AND OS:
3!bK d2" build arch : i386
u&tFb]1@) compatible build archs: athlon i686 i586 i486 i386 noarch
+:!ScG* build os : Linux
wH#-mu#Yl< compatible build os's : linux
Tr$i=
M install arch : athlon
e^Aa! install os : Linux
jPpRsw> compatible archs : athlon i686 i586 i486 i386 noarch
eB7>t@ED compatible os's : linux
&
L3UlL RPMRC VALUES:
t5n2eOy~T 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
[5!'ykZ optflags : %{__global_cflags} -m32 -march=athlon
Kny%QBoiw Features supported by rpmlib:
fZ{&dslg rpmlib(VersionedDependencies) = 3.0.3-1
Y!;gQeC PreReq:, Provides:, and Obsoletes: dependencies support versions.
4XD)E& rpmlib(CompressedFileNames) = 3.0.4-1
.`mtA`N file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
h*G#<M rpmlib(PayloadIsBzip2) = 3.0.5-1
Gj5>Y!9 package payload can be compressed using bzip2.
}ymc5- --------------------------------------------------------------------------------
;fj9n- IJldN6&\q 2mSD"[% rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
>"O1`xdG |&Au6 3 示例:
^IYJEqK bSY;[{Kl [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
*[VEF Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
[qW<D/@ Preparing... ########################################### [100%]
}}s8D>;G~ 1:lynx ########################################### [100%]
{f&NStiB --------------------------------------------------------------------------------
0Ux<16# 4uX,uEa 6mi$.'
qP 以下列出一些通用选项(可以用于所有模式):
rv`2*B z^gi[
mi --dbpath path
yS+(< 用path作为RPM数据库的路径。
,7t3>9-M" ;FcExg|k --ftpport prot
U%h7h`=F? 用port作为FTP端口。
Z6NJ)XQy6F K q/~T7Ru --ftpproxy host
Oq[i & 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
\Oz,Qzr| m';#R9\Fz --help
!8we8)7 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
L#`7 FaM? C?{D"f`[] --justdb
<sO?ev[ 只更新数据库;不改变任何文件。
>6XDX=JVI )-)ss"\+Ju --pipe command
Fgskb"k/ 用管道把rpm输出到commond。
g&q]@m {3.*7gnY\L --quiet
|OOXh[y 仅显示错误信息。
tSI& "- v'h3CaA9j --rcfile filename
W^003*m~~K 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
Q^[e/U, p}96uaC1 --root dir
1!X1wCT 在dir目录内执行所有操作。
wH+FFXGJs W)|c[Q\ --version
)\0Ug7]? 输出rpm版本号。
^WmGo]<B_ \5t`p67Ve_ -vv
ESn6D@" 输出调试信息。
p(~Y"
H D~5yj&&T; --------------------------------------------------------------------------------
4[2=L9MIo~ mXQl; w'!ECm>*` 安装升级和刷新
G(:s-x ig6 -l\~p4U 安装或升级一个RPM包,install命令的语法为:
txj wZ_p o<Xc,mP rpm -i [install-options] package_file
z Z@L4ZT rpm --install [install-options] package_file
:!(YEF#} wTB)v ! 示例:
N$C{f;xV C usVW [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
SAd97A: package lynx-2.8.5-18 is already installed
:0WkxEY9 [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
i/5y^
--------------------------------------------------------------------------------
kw6cFz j#7wyi5q rn5"o8| 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
#.<*; rB FYp|oD2=1 rpm -U [install-options] package_file
gsLr= rpm --upgrade [install-options] package_file
jK\V|5k "}0)YRz% 示例:
>]:N?[Y_~} \Y51KB\ 先安装旧版
ls [Ls [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
yB0jL:|a X!,#'&p& 再安装新版
x1 .3W j [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
nw~/~eM5= ;%BhhmR)[ 显示出新版本信息
~!8%_J _ [root@localhost ~]# rpm -q lynx
_L?v6MTj lynx-2.8.5-18
b ^uP^](J >r;ABz/ 说明:
I++W0wa.n -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
xIS\4]F?r z0T`5NG@ 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
@PT`CK} --------------------------------------------------------------------------------
V<7R_}^_7 zj~8>QnKk Zx}NFcn 刷新的语法是:
^zvA?'s JN{<oxI rpm -F [install-options] package_file
:hC
{5!| jHs<s`#h rpm --freshen [install-options] package_file
3C>2x(]M HF*j`} 示例:
Xy[4f=X}z {D;Xa`:O 从未安装过lynx包,使用-F选项,将无法升级。
>v^2^$^u Am>_4 [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
o,*folL [root@localhost ~]# rpm -q lynx
4y|xUO: package lynx is not installed
4(` 2# --------------------------------------------------------------------------------
9X
5*{f Y a/`c ef T)b3N|ONB 安装和更新选项为:
6'RZ Z-N-9E --allfiles
* \=2KIF' 安装或更新所有文件。
mtSNl|O&{ Y&?|k'7 --badreloc
N,WI{* 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
D< nlb- DZHrR:q?e --excludedocs
^m6k@VM 不安装任何文档文件。
y+K7WUwhq pieU|?fQ --excludepath path
el <<D 不安装文件名以path开始的任何文件。
91-P)%? IUh5r(d 68 --force
(t]lP/
强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
L eG7x7n r[.zLXgK -h,--hash
^ 4u3Q 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
m&Y;/kr 8CHb~m@^$ --ignorearch
B(4:_j\2 即使二进制包用于不同的体系结果也进行安装。
Z]mM /E`l:&89) --ignoreos
3e!3.$4M 即使操作系统不匹配也安装二进制包。
Nw9-pQ ,omp F$% --ignoresize
6Nfof 安装前不检查磁盘的可用空间。
rK(x4]I
l" 8w{#R{w --includedocs
d8Q_6(Ar| 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
XBfia j ,W)IVc
--nodeps
K#9(|2J% 不检查这个包是否依赖于其他包的存在。
xG *lV|<7> H j5WJ{p. --noorder
4
|:Q1 安装之前,不为了满足依赖关系而对包进行重新排序。
E1Ru)k{B uPv;y!Lsa@ --noscripts
>wg9YZ~8 不执行任何预安装或后安装脚本。
aBqe+FXp4 s
T
:tFK\ --notriggers
!wLH&X$XT 不执行任何由包安装触发的脚本。
'(3Nopl ch5`fm --oldpackage
H6%!v1 u 允许升级以用旧包替换新包。
<F#*:Re_y .oi}SG --percent
AiyvHt 当文件被解压时输出完成百分比的信息。
Vq\..!y U}RS*7` --prefix path
VgFF+Eg 把可重定位包的安装前缀设置为path。
b*'=W"%\ !LHzY( --replacefiles
zCBtD_@ 即使包替换了来自其他安装包的文件,也安装这些包。
V7B=+(xK fG8}= xH_& --replacepkgs
#.\,y>` 即使某些包已经被安装,也安装他们。
WTV3p,;6a c-s`>m --test
X%4uShM 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
`5k6s, o@<6TlZM --------------------------------------------------------------------------------
s3MMICRT. O?j98H
Sya gCk y(4 查询
eB<V%,%N# !OuTXa,IH query命令的语法为:
s%L"
c (l3UNP rpm -q[information-options] [package-options]
n3l"L|W^(< rpm --query[information-options] [package-options]
s{"`=dKT >?G|Yz*kEJ 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
F653[[eQ --------------------------------------------------------------------------------
N#pl mPrZ we:5gK& ? !oVf> 以下简单示演示一下包查询:
yv!''F:9F TzevC$m;z 简单查询:
X5L(_0?F1 hdsgOu 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
8zCGMhd @Q$/eL 示例:
r3c\;Ra7 uJIRk$ [root@localhost ~]# rpm -q lynx
@ V7ooo! lynx-2.8.5-18
-KIVnV=&m --------------------------------------------------------------------------------
A<YZBR_ U2[3S\@ (jo(bbpj 信息查询:
48~m=mI l# !@{ < rpm -qi packagename命令可以得到安装包的汇总信息。
'&pf ld!6|~0U 示例:
O)U$Ef [root@localhost ~]# rpm -qi lynx
~7ATt8T Name : lynx Relocations: (not relocatable)
VHgF#6' Version : 2.8.5 Vendor: Red Hat, Inc.
EMW4<