Red Hat包管理器(即RPM:Red Hat Package Manager)是一种打包系统,用于软件的发布和安装。其他Linux发布商,如SuSE等也使用RPM。
($LLl;1 Y}[ c^$S 安装与升级是管理RPM包的根本。安装RPM包时,就是在系统中增加新软件。升级RPM包时,就是在相关软件中更新最新的特性。
<}sq?Sfq! ;>AL`M+ 一个包就是一个文件,其中包含了安装一个应用所需的多个文件。尽管包中包含了安装时所需的文件,但是应用程序为了能运行可能还需要其他文件的存在或其他未包含包的存在,如特定的库。这样的需求就是包的依赖性(dependency)。如,内核源代码RPM包要有GNU C语言编译器。由于内核源代码具有依赖性,因此要先安装GNU C语言编译器,再安装内核源代码。
ONCnVjZ YSj+\Z$( 任何用户都可以列出或查询包。但是,安装,升级或删除包通常需要超级用户的特权。这是因为包通常安装在系统级目录下,该目录只对root(超级用户)是可写的。有时,也可以指定一个目录。把把安装在你的主目录或者你拥有写权限的目录下。
P1NJ^rX --------------------------------------------------------------------------------
.58qL-iC O)Y?=G)
gt/zpiKmV 以下简要介绍RPM包的安装,删除和查询
ZvUCI8 Y&
F=t/U2 RPM包的建立,安装和查询是用rpm命令进行的。RPM包的名字通常以.rpm扩展名结束。rpm有一组模式,每种模式都有自己的选项。
HU9Sl*/ 4[BG# rpm命令的格式为:
QjC22lW- gl]E_%tH rpm [options] [packages]
cetvQAGXY uio@r^Xz 第一个选项指定rpm模式(安装,查询,更新),其他选项影响模式。
m~dC3}e8/? bcAvM; 对包的选项描述中,有时把包指定为package-name,而有时指定为package-file。包的名字是程序名或应用名,如lynx。包文件是RPM文件的名字,如lynx-2.8.5-18.i386.rpm。
!wWJ^Oz= --------------------------------------------------------------------------------
]r-C1bKD` 11,!XD*" UThB7(O, RPM为指定常用的选项提供了配置文件。系统配置文件通常是/etc/rpmrc,而用户可以建立他们自己的$HOME/.rpmrc文件。你可以用--showrc选项为在rpmrc文件中设置的所有选项显示RPM会使用的值。
Nx-uQ^e*1 YG8>czC 以下为rpm --showrc命令显示的节选:
sF7^qrVQP9 %eJGte- 示例:
CT\;xt,S B}eA\O4}I 此为部分显示结果
UK{irU|\ [root@localhost ~]# rpm --showrc
-_<}$9lz ARCHITECTURE AND OS:
|Xw/E)jA build arch : i386
&<+ A((/i compatible build archs: athlon i686 i586 i486 i386 noarch
3mSXWl^? build os : Linux
&EM\CjKv" compatible build os's : linux
(D
9Su^:1 install arch : athlon
@rHK(25+d install os : Linux
#_B-4sm compatible archs : athlon i686 i586 i486 i386 noarch
[y0O{,lI compatible os's : linux
Dk='+\ RPMRC VALUES:
sO5?aB& 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
jn:NYJv optflags : %{__global_cflags} -m32 -march=athlon
@G:V Features supported by rpmlib:
q|%(3,)ig rpmlib(VersionedDependencies) = 3.0.3-1
zz^F
k& PreReq:, Provides:, and Obsoletes: dependencies support versions.
5P .qXA"D rpmlib(CompressedFileNames) = 3.0.4-1
>j{z> file name(s) stored as (dirName,baseName,dirIndex) tuple, not as path.
qiZO _=0 rpmlib(PayloadIsBzip2) = 3.0.5-1
NWd<+-pC6 package payload can be compressed using bzip2.
1lsLJ4P --------------------------------------------------------------------------------
C_ \q?> gaf$uT2
@A+RVg*= rpm命令包括FTP和HTTP客户端,因此可以指定ftp://或
http://URL来通过Internet安装或查询一个包。只要这里给出的命令中指定了package-file,你就可以使用FTP或HTTP URL。
ex<O]kPFE +`sv91c 示例:
gt\MS;jMa )I\=BPo|B [root@localhost ~]# rpm -ivh
ftp://fr.rpmfind.net/linux/fedor ... s/Fedora/RPMS/lynx-*
a,o_`s< Retrieving
ftp://fr.rpmfind.net/linux/fedor ... x-2.8.5-18.i386.rpm
{,cCEXag% Preparing... ########################################### [100%]
>I<r)w] 1:lynx ########################################### [100%]
)?2e --------------------------------------------------------------------------------
#eN{!Niy&U ,KJw|x4}\ @
a4/ELx 以下列出一些通用选项(可以用于所有模式):
e;GU
T: 2..,Sk --dbpath path
~Xlrvb}LP 用path作为RPM数据库的路径。
x'zBK0i )XfzLF7 --ftpport prot
HAYMX:% 用port作为FTP端口。
f""`cdqAOh ms_ VM>l --ftpproxy host
]?h`:,] 用host作为所有传输的代理服务器。如果你通过使用代理的防火墙系统连到FTP,就要指定该选项。
[Px'\nVf 2S8P}$mM --help
O,<IGO 输出一个长的使用信息(如果运行rpm时没有选项,则给出短的使用信息)。
O'GG Ti]e F3oQ^;xB --justdb
+f0~D(d!_ 只更新数据库;不改变任何文件。
hfcIvs/! lc6iKFyG --pipe command
-B$~`2- 用管道把rpm输出到commond。
u4"SH( E`j-6: --quiet
i-U4RZE 仅显示错误信息。
~Z ~v 1 ^g
t1o --rcfile filename
Y:ldR 用filename作为配置文件,而不用系统配置文件/etc/rpmrc或$HOME/.rpmrc。
`imWc"'Ej 0GDvwy D1 --root dir
.P$IJUYO 在dir目录内执行所有操作。
I5AO?BzJ dJ:MjQG`W --version
y[@\j9Hq 输出rpm版本号。
^2odr \ H +bdsk -vv
O g%U 输出调试信息。
fnCItK~y <e%F^#y_
--------------------------------------------------------------------------------
W2;N<[wa<u f&4,?E;6%
LzDI0a. 安装升级和刷新
];+#i"l 65,(4Udz! 安装或升级一个RPM包,install命令的语法为:
^O^:$nXhYy h5kPn~ rpm -i [install-options] package_file
Q{QYBh& rpm --install [install-options] package_file
INSkgOo rg_Q"g 示例:
"Dy'Kd%,%/ OndhLLz [root@localhost ~]# rpm -i lynx-2.8.5-18.i386.rpm
`N/RHb% package lynx-2.8.5-18 is already installed
sP'0Sl~NU [root@localhost ~]# rpm --install lynx-2.8.5-18.i386.rpm
1\L[i];L8 --------------------------------------------------------------------------------
(x;g/!: hIJ)MZU| ~^)^q8 为了安装一个包的新版本,同时删除现有版本,使用upgrade命令:
-V %gVI[ 0(8H;T rpm -U [install-options] package_file
?y XAu0 rpm --upgrade [install-options] package_file
ftk%EYT; Oq(VvS/ 示例:
he+#Q6 (IbW;bV 先安装旧版
[O
", [root@localhost ~]# rpm -i lynx-2.8.5-11.i386.rpm
9^F2$+T[: 8iC:xcN3 再安装新版
D~K;~nI [root@localhost ~]# rpm -U lynx-2.8.5-18.i386.rpm
Ap\AP{S4 s|bM%!$1 显示出新版本信息
~F,
&GH [root@localhost ~]# rpm -q lynx
?v}Bd!'+P lynx-2.8.5-18
'[ P}&<ie, P
,eH5w" 说明:
mT*{-n_Zs -U的一个特点是如果包在系统上不存在,其作用就与-i选项一样,即安装包。
1U\$iy8} G&eP5'B4i 与-U的特点不一样,刷新(freshen)一个包,是指在已经安装了旧有版本时rpm才升级包。
qu6DQ@
~YC --------------------------------------------------------------------------------
$trAC@3O@ 9=dkx^q FZpKFsPx 刷新的语法是:
C.!_]Pxs ALd;$fd qf rpm -F [install-options] package_file
Fs/? oh#N
0
0X rpm --freshen [install-options] package_file
&ogt2<1W ]"fsW 9s 示例:
gd@p|PsS^ |`yZIY_ 从未安装过lynx包,使用-F选项,将无法升级。
|f2A89 YJ7V`Np [root@localhost ~]# rpm -F lynx-2.8.5-18.i386.rpm
Q}2[hB [root@localhost ~]# rpm -q lynx
|I[7,`C~ package lynx is not installed
'3l$al:H^ --------------------------------------------------------------------------------
3mt%!}S 6\dX )E7 FA| 安装和更新选项为:
T9y;OG zjX7C~h^Q --allfiles
^DAa%u 安装或更新所有文件。
u>T76,8|\ jkrx]`A{~ --badreloc
{GqXP0' 与--relocate一起使用,强制重新定位,即使包不是可重定位的。
zz$q5[n &;q<M_< --excludedocs
D>T],3U(H 不安装任何文档文件。
`m%dX'0E GSVdb/+ --excludepath path
\94j rr 不安装文件名以path开始的任何文件。
{M~lbU %.x@gi q --force
9 |:^k. 强制安装。等价于使用--replacepkgs,--replacefiles和--oldpackage。
X.|Ygx v1[_}N9f>H -h,--hash
0^ !Gib 当包档案被解包时打印50个散列标记。使用--version选项以进行更好的显示。
{0jIY nZvU'k: --ignorearch
&y_? rH 即使二进制包用于不同的体系结果也进行安装。
W 5DbFSgB CSn<]%GL --ignoreos
udqge?Tz 即使操作系统不匹配也安装二进制包。
aSnp/g CUmH,`hu --ignoresize
+GNWF%
zN 安装前不检查磁盘的可用空间。
$G?(OWI}l` %|Hp Bs#' --includedocs
,=w!vO5s 安装文档文件。只有在rpmrc文件中指定了excludedocs:1时,才需要这个选项。
jD<pIHau H"YL
k --nodeps
M[Y4_$k<- 不检查这个包是否依赖于其他包的存在。
<4?*$ cz.3|Lby --noorder
5h_5Z~ 安装之前,不为了满足依赖关系而对包进行重新排序。
Uxl(9 6 pVokgUrC --noscripts
Wpm9`K 不执行任何预安装或后安装脚本。
b6W#SpCF 4Z%Y"PL(K --notriggers
{gkwOMW 不执行任何由包安装触发的脚本。
2)LX^?7R z&'f/w8 --oldpackage
f~gSJ<t4 允许升级以用旧包替换新包。
Z$2L~j"=! w6,*9(;$Pk --percent
6&!l'[hU 当文件被解压时输出完成百分比的信息。
*%- ?54B -Ds|qzrN% --prefix path
1i?=JAFfM 把可重定位包的安装前缀设置为path。
1Kc^m\ O2#S: ~h --replacefiles
:I/ 即使包替换了来自其他安装包的文件,也安装这些包。
1$["79k _`aR_%Gx --replacepkgs
5d
5t9+t 即使某些包已经被安装,也安装他们。
=:5<{J OG co]Gmg6p --test
Va9q`XbyO 检查安装过程,看整个过程都做了些什么,但并不真正安装包。
T^)plWw p{H0dj ^| --------------------------------------------------------------------------------
G,DOBA "a(1s}, S %+R#A1 查询
t"YIq/08 %h* 5xB]Tt query命令的语法为:
{!K;`I[]v q) _r3 rpm -q[information-options] [package-options]
ER<eX4oU rpm --query[information-options] [package-options]
]gP8?s| UH40~LxIma 查询选项有两个子集:包选择选项决定查询什么包,信息选择选项决定提供什么信息。
rt.[,m --------------------------------------------------------------------------------
{E~l>Z88 .~<]HAwq y&rY0bm 以下简单示演示一下包查询:
XtW_ 4I ,o&TK 简单查询:
YC)hX'A\ a!u3HS-i 最简单的形式是rpm -q packagename查询。可以用这个命令寻找以安装包的版本。
zz3 r<?#5 [:pl-_.C 示例:
FW^.m?}| n0FYfqH [root@localhost ~]# rpm -q lynx
@.o@-3k lynx-2.8.5-18
+u#Sl)F --------------------------------------------------------------------------------
hO;9Y|y `@\^m_!} cs5ix"1A 信息查询:
8nu> gA hT=f;6$ rpm -qi packagename命令可以得到安装包的汇总信息。
*f*f&l