Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
gd6Dm4q( `^UK 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
/2NSZO s.jO<{ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
,7d|O}B o`r(`6@ 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
YTyX`Y# --------------------------------------------------------------------------------
+iF
1sC_ #^mqQRpgq ^~L}<] 以下简要介绍RPM包的安装,删除和查询
?Hy+'sq[ rlznwfr7+ RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
CHaE;olo RB3 zHk% rpm命令的格式为:
yi!`V. keqcV23k rpm [options] [packages]
p/]s)uYp$ %"Db? 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
2'{}<9 </E>tMW 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
^abD!8 --------------------------------------------------------------------------------
i</J @0}y 'dt\db5p 4Nmea-!* RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
(v#pj8aE Rs$5PdH 以下为rpm --showrc命令显示的节选:
(a{ZJI8_ !E&MBAKy 示例:
=l`OHTg W8aU"_
此为部分显示结果
xRX>|S [root@localhost ~]# rpm --showrc
.gT4_ ARCHITECTURE AND OS:
YL^Z4: p build arch : i386
XizPM N5a compatible build archs: athlon i686 i586 i486 i386 noarch
LD55n%|0`H build os : Linux
FrZ]=: compatible build os's : linux
d(L{!mm install arch : athlon
v$$]Gv( install os : Linux
m@oUvxcd compatible archs : athlon i686 i586 i486 i386 noarch
d5U; $q{o compatible os's : linux
93w~.p RPMRC VALUES:
)mkS5j`5\ 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
MD'>jO;n optflags : %{__global_cflags} -m32 -march=athlon
YU\Gj S~>& Features supported by rpmlib:
&:!ij rpmlib(VersionedDependencies) = 3.0.3-1
+Z+ExS<#z PreReq:, Provides:, and Obsoletes: dependencies support versions.
V-vlTgemwc rpmlib(CompressedFileNames) = 3.0.4-1
<TjBd1 file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
zk>h u<_ rpmlib(PayloadIsBzip2) = 3.0.5-1
|< N frz package payload can be compressed using bzip2.
NfF~dK| --------------------------------------------------------------------------------
koH4~m{ d=e{]MG( .C5@QKU rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
T"W9YpZ %ejeyc 示例:
3Xdn62[& ="B
n=> [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
.5g}rxO8 Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
7c::Qf[| Preparing... ########################################### [100%]
QHQj/)J8 1:lynx ########################################### [100%]
%3,xaVN --------------------------------------------------------------------------------
?~)Ak`= 0>Fqx{!heq Vj!WaN_ 以下列出一些通用选项(可以用于所有模式):
0$2={s4ze K/Jk[29"\ --dbpath path
.Z5[_'T 用path作为RPM数据库的路径。
$Sb@zLi) ;c)! @GoA --ftpport prot
@+dHF0aXd 用port作为FTP端口。
oEAfowXSqk uL>:tb --ftpproxy host
eycV@|6u* 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
jYdV?B ;](h2Z`3s --help
m"-G6BKS 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
:r39wFi I*c;hfu --justdb
}jcIDiSu 只更新数据库;不改变任何文件。
Opry`}5h CZfE
|T~ --pipe command
b"P&+c 用管道把rpm输出到commond。
a4u ^f5)@ s]bPV,"p --quiet
AP
;*iyQ[ 仅显示错误信息。
~R{8.!: > T?e9eYwS --rcfile filename
k5s ?lWH 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
Nu+wL>t qT0_L --root dir
YZ*{^' 在dir目录内执行所有操作。
xA9V$# d| lWlUWhLnP --version
jZ/+~{< 输出rpm版本号。
0s!N@ ,T ux&:Rw\ -vv
) MBS 输出调试信息。
"VQ|Ed MHNe>C-!q --------------------------------------------------------------------------------
gA:[3J,[; CK Mv7 Z^+a*^w~{ 安装升级和刷新
D1!
{S7 K#;txzi 安装或升级一个RPM包,install命令的语法为:
)"-fHW+fy `uhL61cMp rpm -i [install-options] package_file
.$^wy3:F" rpm --install [install-options] package_file
CLktNR(45 ?w8pLE~E 示例:
r_=p,#}# Fd}<Uote3 [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
UU"d_~pp package lynx-2.8.5-18 is already installed
=N;$0Y(g [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
neIy~H_#! --------------------------------------------------------------------------------
rr)9Y][l} hy=u}^F.C 8L{$v~ + 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
b_l.QKk cUNGo%Y rpm -U [install-options] package_file
{a@hRY_ rpm --upgrade [install-options] package_file
$~TfL{$ `~|DoSi^d 示例:
`%%?zgY -7,vtd[h 先安装旧版
B%y! aQep [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
>eu
`!8 8k%H[Smn: 再安装新版
Yd.02 7 [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
.&L^J&V ^^'[%ok 显示出新版本信息
9Yd-m [root@localhost ~]# rpm -q lynx
UXQb={ lynx-2.8.5-18
}`4K)(>4nG ,NDxFy;d 说明:
!rz)bd3$ -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
j]#wrm pNBa.4z: 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
dJaEoF --------------------------------------------------------------------------------
=;g= GcVK L[1d&d!p OAY8,C=M 刷新的语法是:
oAC^4-Ld i@Vs4E[b rpm -F [install-options] package_file
v=j>^FZ G u6[{u rpm --freshen [install-options] package_file
>]^>gUmq Io09W ^ 示例:
98jD"*W5 E+:.IuXW$ 从未安装过lynx包,使用-F选项,将无法升级。
G~O" / WM
2[XltjO [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
0&f\7z [root@localhost ~]# rpm -q lynx
~DK F%}E package lynx is not installed
}]tFz}E\ --------------------------------------------------------------------------------
l~4_s/ |z ]aa |}%(6< 安装和更新选项为:
v?FhG
b~1 m&,bC)} --allfiles
#!wsD7; 安装或更新所有文件。
9N<*S'Z zLo;.X[Y --badreloc
KxGKA 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
m\/>C|f\ R9bhC9NP --excludedocs
<r0.ppgY 不安装任何文档文件。
TLXhE(o|o uSH>$;a --excludepath path
R&]c"cO L8 不安装文件名以path开始的任何文件。
5FZ47m ~{Z i1tVdbC] --force
2\DTJ`Y, 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
(y%%6#bd `:V}1ioX5 -h,--hash
r(pwOOx 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
IU7$%6<Y e21E_exM0 --ignorearch
U8EJC
.e&O 即使二进制包用于不同的体系结果也进行安装。
;5-R=e(KA !-F ^VGD(8 --ignoreos
4 0p3Rv 即使操作系统不匹配也安装二进制包。
r[6#G2 U.HoFf+HN --ignoresize
.MzOLv 安装前不检查磁盘的可用空间。
|*Of^IkG0 -mE --includedocs
{VS''Lv 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
mx:J>SPA8 ,LoMt ]H --nodeps
E"G:K`Q 不检查这个包是否依赖于其他包的存在。
Y]hV-_2+Do bl$+8!~ --noorder
1 ,#{X3 安装之前,不为了满足依赖关系而对包进行重新排序。
jB5>y&+ I93 ~8wQ --noscripts
W^5<XX,ON 不执行任何预安装或后安装脚本。
X\o/i\ C} -J-3_9I --notriggers
}DJ|9D^yf 不执行任何由包安装触发的脚本。
0m]~J_ hTlnw[I --oldpackage
%~][?Y >< 允许升级以用旧包替换新包。
3Gc ,I:\ $o/0A --percent
W`w5jk'0^= 当文件被解压时输出完成百分比的信息。
|\i:LG1 _!CK --prefix path
|De!ti 把可重定位包的安装前缀设置为path。
}pbBo2 ^2C0oX --replacefiles
IXbdS9,>F 即使包替换了来自其他安装包的文件,也安装这些包。
IlcNT_
5a8 Pd)K^;em --replacepkgs
M(_^'3u 即使某些包已经被安装,也安装他们。
BM|-GErE %'RI3gy --test
fO[Rf_ 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
HiQoRk l*F!~J3 --------------------------------------------------------------------------------
HXD*zv@ *6 #citwMW $
/}: P 查询
(eCF>Wh^m 9
Q0#We* query命令的语法为:
Y&oP>n! ei d9`3EP)n rpm -q[information-options] [package-options]
1mT|o_K{ T rpm --query[information-options] [package-options]
~C}(\8g ?2JS&i 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
3g?MEM~ --------------------------------------------------------------------------------
${jA+L<J Kj~>&WU XR{5]lKt_ 以下简单示演示一下包查询:
yq/[ /*7^ NmH}"ndv+ 简单查询:
2E@C0Ha L A6@+gP< 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
p_rN1W
Dd'
7yMieUF 示例:
%Nwyx;>9^K )![f\!'PI [root@localhost ~]# rpm -q lynx
o 8~f lynx-2.8.5-18
I
ybl;u --------------------------------------------------------------------------------
&