??xml version="1.0" encoding="utf-8" standalone="yes"?>
一、RPM介绍
1.什么是rpm Q?
rpm 即RedHat Package ManagementQ是RedHat的发明之一
2.Z么需要rpm Q?
在一个操作系l下Q需要安装实现各U功能的软g包。这些Y件包一般都有各自的E序Q?/pre>但是同时也有错综复杂的依赖关pR同时还需?解决软g包的版本Q以及安装,配置Q?/pre>卸蝲的自动化问题。ؓ了解?q些问题QRedHat针对自己的系l提Z一个较好的办法来管理成?上百的Y件。这是RPM理pȝ。在pȝ中安装了rpm理pȝ以后Q?只要是符合rpm文g标准的打包程序都可以方便地安装、升U、卸载?/pre>
3.是不是所有的linux都用rpm Q?
Mpȝ都需要包理pȝQ因此很多linux都用rpmpȝ?rpmpȝ是Redhat Linux?/pre>Fedora Core的Y件包理器,但是Mandriva、SuSE{Linux发行版也都用rpm。由于rpm的源E序可以在别的系l上q行~译Q所以有可能在别的系l上也用rpm。除了rpmQ?/pre>其他一些系l也有自q软g包管理程序, 例如 debian的deb包?
4.rpm包的文g名ؓ什么那么长 Q?
rpm包的文g名中包含了这个Y件包的版本信息,操作pȝ信息Q硬件要求等{?/pre>比如mypackage-1.1-2RH.i386.rpmQ其中mypackage是在pȝ中登记的软g包的名字1.1是Y件的版本P2是发行号QRH表示用于RH操作pȝ。i386表示用于intel x86q_?
5.软g包文件名中的i386,i686是什么意?
rpm软g包的文g名中Q不仅包含了软g名称Q版本信息,q包括了适用的硬件架构的信息?
i386指这个Y件包适用于intel 80386以上的x86架构的计机(AI32)
i686指这个Y件包适用于intel 80686以上(奔腾pro以上)的x86架构的计机(IA32)
noarch指这个Y件包与硬件架构无养I可以通用?
i686软g包通常针对CPUq行了优化,现在通常配置的机器都可以使用i686软g包?
6.不同操作pȝ发行的rpm包可否用?
对于已经~译成二q制的rpm包,׃操作pȝ环境不同Q一般不能用?
对于以src.rpm发行的Y件包Q由于需要安装时q行本地~译Q所以通常可以在不同系l下安装?
二、RPM包管理的用?/strong>
1、可以安装、删除、升U和理以rpm包Ş式发布的软gQ?/pre>2、可以查询某个rpm包中包含哪些文gQ以及某个指定文件属于哪个rpm包;3、可以在查询pȝ中的某个rpm包是否已安装以及其版本;4、作为开发者可以把自己开发的软g打成rpm包发布;5、依赖性的查,查询安装某个rpm包时Q需要哪些其它的rpm包?注:RPM软g的安装、删除、更新只有root权限才能使用Q?/pre>对于查询功能M用户都可以操作?/pre>
三、rpm 的一点简单用?
rpm的一般格式:
rpm [选项] [rpm软g包]
1、初始化rpm 数据库(可以省略Q?
rpm --initdb
rpm --rebuilddb % 注:q个要花好长旉
%注:有时rpm pȝZ问题Q不能安装和查询Q大多是q里Z问题?/pre>
2、RPM软g包管理的查询功能Q?
rpm -q [select-options] [query-options]
RPM的查询功能是极ؓ强大Q是极ؓ重要的功能之一Q这里D几个常用的例子,更ؓ详细的具体的Q请参?man rpm
对系l中已安装Y件的查询
1Q查询系l已安装的Y?/pre>语法Qrpm -q 软g?/pre>例:rpm -q mplayer% -q是 --queryQ此选项表示询问pȝ是不是安装了gaim软g包;% 如果已安装会有信息输出;如果没有安装Q会输出gaim 没有安装的信息;%查看pȝ中所有已l安装的包,要加 -a 参数rpm -qa% 如果分页查看Q再加一个管?|和more命orpm -qa |more% 如果要查找某个Y件包Q可以用 grep 抽取出来rpm -qa |grep mplayer2Q查询一个已l安装的文g属于哪个软g包;语法: rpm -qf 文g?/pre>注:文g名所在的l对路径要指?/pre>例:rpm -qf /usr/lib/libacl.la3Q查询已安装软g包都安装C处;语法Qrpm -ql 软g包名例:rpm -ql mplayer4Q查询一个已安装软g包的信息语法Q?rpm -qi 软g包名例:rpm -qi mplayer5Q查看一下已安装软g的配|文Ӟ语法格式Qrpm -qc 软g?/pre>例:rpm -qc mplayer6Q查看一个已l安装Y件的文档安装位置Q?/pre>语法格式Q?rpm -qd 软g?/pre>例:rpm -qd mplayer7Q查看一下已安装软g所依赖的Y件包及文Ӟ语法格式Q?rpm -qR 软g?/pre>例:rpm -qR mplayer?/strong>Q可以把几个参数l合h用,?rpm -qil mplayer
对于未安装的软g包的查看 :查看的前提是当前目录下已存在一?rpm文g?
1Q查看一个Y件包的用途、版本等信息Q?/pre>语法Q?rpm -qpi file.rpm例:rpm -qpi mplayer-1.0pre7try2-2.i386.rpm2Q查看一件Y件包所包含的文Ӟ语法Q?rpm -qpl file.rpm例:rpm -qpl mplayer-1.0pre7try2-2.i386.rpm3Q查看Y件包的文档所在的位置Q?/pre>语法Q?rpm -qpd file.rpm例:rpm -qpd mplayer-1.0pre7try2-2.i386.rpm4Q查看一个Y件包的配|文Ӟ语法Q?rpm -qpc file.rpm例:rpm -qpc mplayer-1.0pre7try2-2.i386.rpm5Q查看一个Y件包的依赖关p?/pre>语法Q?rpm -qpR file.rpm例:rpm -qpR mplayer-1.0pre7try2-2.i386.rpm
3、Y件包的安装、升U、删除等Q?安装和升U一个rpm ?/em>
语法Q?
rpm -ivh file.rpm % q个是用来安装一个新的rpm ?/pre>rpm -Uvh file.rpm % q是用来升一个rpm ?/pre>% 如果有依赖关pȝQ需解决依赖关系?/pre>% 如果找不C赖关pȝ包,可以用下面的命o强制安装Q?/pre>rpm -ivh --nodeps --force file.rpmrpm -Uvh --nodeps --force file.rpm例:rpm -ivh --test mplayer-1.0pre7try2-2.i386.rpm% --test表示试Qƈ不真正安装?/pre>rpm -ivh --relocate /=/usr/local/mplayer mplayer-1.0pre7try2-2.i386.rpm% Y件包指定安装目录Q要?--relocate 参数% 安装在指定目录中的程序如何调用呢Q?/pre>% 通常可执行程序都攑֜安装目录下的bin或者sbin目录中?/pre>
删除一个rpm ?/em>
首先查出需要删除的rpm包,然后用下面的命o来卸载:
rpm -e 软g包名
例:rpm -e mplayer % 卸蝲mplayer
% 如果有其它的rpm依赖于该rpm包,pȝ会出现警告?/pre>% 如果一定要卸蝲Q可以用选项 --nodeps 忽略依赖关系。但最好不要这么做?/pre>
四、RPM理包管理器支持|络安装和查?/strong>
rpm [选项] rpm包的http或者ftp的地址
比如我们想通过 Fedora Core 4.0 的一个镜像查询、安装Y件包?/pre>rpm -qpi http://mirrors.kernel.org/.../RPMS/rsh-0.17-29.rpm% 查询rpm -ivh http://mirrors.kernel.org/.../RPMS/rsh-0.17-29.rpm% 安装
五、对已安装rpm包查询的一点补?/strong>
可以?locate来查询一些Y件的安装位置Q可能需要先q行updatedb来更新已安装软g?
六、从rpm软g包抽取文?/strong>
rpm2cpio xxx.rpm | cpio -idmv
% i 表示提取文gQv 表示指示执行q程
% d 表示Ҏ包中文g原来的\径徏立目?
% m 表示保持文g的更新时?/pre>
在目录结构中搜烦文gQƈ执行指定的操作。此命o提供了相当多的查找条Ӟ功能很强大?
语法Qfind [起始目录] L条g 操作
说明Qfind命o从指定的起始目录开始,递归地搜索其各个子目录,查找满L条g 的文件ƈ对之采取相关的操作。该命o提供的寻找条件可以是一个用逻辑q算W?not、and、or l成的复合条件。逻辑q?符 and、or、not 的含义ؓQ?
(1) andQ逻辑与,在命令中?-a 表示Q是pȝ~省的选项Q表C只有当所l的条g都满xQ寻找条件才满뀂例如:
find -name 'tmp' -xtype c -user 'inin'
% 该命令寻找三个给定条仉满的所有文?/pre>
(2) orQ逻辑或,在命令中?-o 表示。该q算W表C只要所l的条g中有一个满xQ寻找条件就满뀂例如:
find -name 'tmp' -o -name 'mina*'
% 该命令查询文件名?tmp 或是匚w mina* 的所有文件?/pre>
(3) notQ逻辑非,在命令中?! 表示。该q算W表C查找不满所l条件的文g。例如:
find ! -name 'tmp'
% 该命令查询文件名不是 tmp 的所有文件?/pre>
需要说明的是:当用很多的逻辑选项Ӟ可以用括hq些选项括v来。ؓ了避?Shell本nҎ号引赯解,在话号前需要加转义字符 " 来去除括L意义。例Q?
find "( -name 'tmp' -xtype c -user 'inin' ")
该命令的各选项含义如下Q?/strong>
首先,下列各个选项中的 n 值可以有三种输入方式Q假?n ?0Q则Q?/pre>+20 表示20以后Q?1Q?2Q?3{)-20 表示20以前Q?9Q?8Q?7{)20 表示正好?0以名U和文g属性查找?/pre>-name '字串' 查找文g名匹配所l字串的所有文Ӟ字串内可用通配W?*?、[ ]?/pre>-lname '字串' 查找文g名匹配所l字串的所有符号链接文Ӟ字串内可用通配W?*?、[ ]?/pre>-gid n 查找属于ID号ؓ n 的用L的所有文件?/pre>-uid n 查找属于ID号ؓ n 的用L所有文件?/pre>-group '字串' 查找属于用户l名为所l字串的所有的文g?/pre>-user '字串' 查找属于用户名ؓ所l字串的所有的文g?/pre>-empty 查找大小?0的目录或文g?/pre>-path '字串' 查找路径名匹配所l字串的所有文Ӟ字串内可用通配W??、[ ]?/pre>-perm 权限 查找h指定权限的文件和目录Q权限的表示可以?11Q?44?/pre>-size n[bckw] 查找指定文g大小的文Ӟn 后面的字W表C单位,~省?bQ代?12字节的块?/pre>-type x 查找cd?x 的文Ӟx Z列字W之一Q?/pre>b 块设备文?/pre>c 字符讑֤文gd 目录文gp 命名道QFIFOQ?/pre>f 普通文?/pre>l W号链接文gQsymbolic linksQ?/pre>s socket文g-xtype x ?-type 基本相同Q但只查扄号链接文件?/pre>以时间ؓ条g查找-amin n 查找n分钟以前被访问过的所有文件?/pre>-atime n 查找n天以前被讉Kq的所有文件?/pre>-cmin n 查找n分钟以前文g状态被修改q的所有文件?/pre>-ctime n 查找n天以前文件状态被修改q的所有文件?/pre>-mmin n 查找n分钟以前文g内容被修改过的所有文件?/pre>-mtime n 查找n天以前文件内容被修改q的所有文件?/pre>可执行的操作-exec 命o名称 {} 对符合条件的文g执行所l的Linux 命oQ而不询问用户是否需要执行该命o?/pre>{}表示命o的参数即为所扑ֈ的文Ӟ命o的末ֿM“ "Q?#8221;l束?/pre>-ok 命o名称 {} 对符合条件的文g执行所l的Linux 命oQ与exec不同的是Q?/pre>它会询问用户是否需要执行该命o?/pre>-ls 详细列出所扑ֈ的所有文件?/pre>-fprintf 文g?找到的文g名写入指定文件?/pre>-print 在标准输备上昄查找出的文g名?/pre>-printf 格式 格式的写法请参考有关C语言的书?/pre>
指o实例Q?/strong>
find . -name ‘main*' -exec more {} ";
% 查找当前目录中所有以main开头的文gQƈ昄q些文g的内宏V?/pre>find . "( -name a.out -o -name ‘*.o'") -atime +7 -exec rm {} ";% 删除当前目录下所有一周之内没有被讉Kq的 a .out ?*.o 文g?/pre>% 命o中的“.”表示当前目录Q此?find 从当前目录开始,逐个在其子目录中查找满后面指定条g的文件?/pre>% “"(” ?“")” 表示括号Q)Q其中的 “"” UCؓ转义W。之所以这样写是由?nbsp;?Shell 而言Q(和)另有不同的含义,而不是这里的用于l合条g的用途?/pre>% “-name a.out” 是指要查扑为a.out的文Ӟ% “-name ‘*.o'” 是指要查找所有名字以 .o l尾的文件?/pre>q两?-name 之间?-o 表示逻辑或(orQ,x扑字ؓa.out或名字以 .ol尾的文件?/pre>% find在当前目录及其子目录下找到这佯的文g之后Q再q行判断Q看其最后访问时?nbsp;是否?天以前(条g -atime +7Q,若是Q则对该文g执行删除命oQ?exec rm {} ";Q?/pre>其中 {} 代表当前查到的符合条件的文g名,"Q则是语法所要求的?/pre>