📄 0520rpm_and_srpm.htm
字号:
</div>
<hr><a NAME="rpmmanager"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class=text_h1>RPM 套件管理程式</span>
<div class=block1>
RPM 的使用其实不难,只要使用 rpm 这个指令即可!鸟哥最喜欢的就是
rpm 指令的查询功能了,可以让我很轻易的就知道某个系统有没有安装鸟哥要的套件呢!此外,
我们最好还是得要知道一下,到底
RPM 类型的档案他们是将套件的相关档案放置在哪里呢?还有,我们说的那个 RPM
的资料库又是放置在哪里呢?<br><br>
<hr><a NAME="rpmmanager_dir"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>RPM 预设安装的路径</span>
<div class=block2>
一般来说,RPM 类型的档案在安装的时候,会先去读取档案内记载的设定参数内容,然后将该资料用来比对
Linux 系统的环境( <span class=text_vbird>例如属性相依的套件</span>
),例如目前 <a href="../linux_server/0310telnetssh.php#ssh">SSH</a> 这个远端连线软体(
<span class=text_vbird>请参考伺服器篇</span>
)使用的是 OpenSSL 的加密机制,所以,要安装 SSH 的时候,就得要先安装好 OpenSSL
才行啊,如果没有安装 OpenSSL 的话, SSH 就不让您安装了!这些都是 RPM 环境的要求,
如果环境相符就予以安装,如果不符就会显示出不符合的内容所在!
<span class=text_import2>等到安装完毕之后,
rpm 就会将套件的资讯写入∶<b>/var/lib/rpm</b> 这个目录中去!</span>所以,
往后您在进行查询的时候或者是预计要升级的时候,相关的资讯就会由
<span class=text_import1>/var/lib/rpm</span>
这个目录的内容资料来提供棉!<br><br>
一般来说,由于 RPM 有资料库来纪录套件相关的资讯,所以 RPM
类型的套件所拥有的档案都放置在系统预设放置的目录底下,亦即如同我们在
<a href="0210filepermission.php#Linux_directory">档案属性与目录配置</a>
一文当中提到的∶<br><br>
<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr><td WIDTH="120"><font face="细明体"><font color="#000066">/etc</font></font></td>
<td><font face="细明体"><font color="#000066">一些设定档放置的目录,例如 /etc/crontab</font></font></td></tr>
<tr><td><font face="细明体"><font color="#000066">/usr/bin</font></font></td>
<td><font face="细明体"><font color="#000066">一些可执行档案</font></font></td></tr>
<tr><td><font face="细明体"><font color="#000066">/usr/lib</font></font></td>
<td><font face="细明体"><font color="#000066">一些程式使用的动态函式库</font></font></td></tr>
<tr><td><font face="细明体"><font color="#000066">/usr/share/doc</font></font></td>
<td><font face="细明体"><font color="#000066">一些基本的软体使用手册与说明档</font></font></td></tr>
<tr><td><font face="细明体"><font color="#000066">/usr/share/man</font></font></td>
<td><font face="细明体"><font color="#000066">一些 man page 档案</font></font></td></tr>
</table><br>
好了,底下我们就来针对每个 RPM 的相关指令来进行说明棉!<br><br>
</div>
<hr><a NAME="rpmmanager_install"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>RPM 安装( install )</span>
<div class=block2>
安装就是 install 嘛!所以棉,使用 rpm 来安装就很简单啦!假设我要安装一个档名为
rp-pppoe-3.1-5.i386.rpm 的档案,那么我可以这样(
<span class=text_vbird>记得某些套件可能需要以系统管理员的身份来安装</span> )∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>rpm -i rp-pppoe-3.1-5.i386.rpm</span>
</pre></td></tr></table>
不过,这样的参数其实无法显示安装的进度,所以,通常我们会这样下达安装指令∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>rpm -ivh package_name</span>
<span class=term_say>参数∶
-i ∶install 的意思
-v ∶察看更细部的安装资讯画面
-h ∶以安装资讯列显示安装进度
范例∶</span>
<span class=term_hd>范例一∶安装 rp-pppoe-3.1-5.i386.rpm</span>
[root@linux ~]# <span class=term_command>rpm -ivh rp-pppoe-3.1-5.i386.rpm</span>
Preparing... ####################################### [100%]
1:rp-pppoe ####################################### [100%]
<span class=term_hd>范例二、一口气安装两个以上的套件时∶</span>
[root@linux ~]# <span class=term_command>rpm -ivh a.i386.rpm b.i386.rpm *.rpm</span>
<span class=term_say># 后面直接接上许多的套件档案!</span>
<span class=term_hd>范例三、直接由网路上面的某个档案安装,以网址来安装∶</span>
[root@linux ~]# <span class=term_command>rpm -ivh http://website.name/path/pkgname.rpm</span>
</pre></td></tr></table>
另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的问题,
而还是『执意』要安装这个套件时,可以使用如下的参数『强制』安装上去∶<br><br>
<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr bgcolor=lightblue align=center><td width=130>可下达的参数</td><td>代表意义</td></tr>
<tr><td><span class=text_import2><font face="细明体">--nodeps</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
如果您在安装某个套件时,老是发现 rpm 告诉你『有属性相依的套件尚未安装』,
而您又想要直接强制安装这个套件时,可以加上 --nodeps 告知 RPM 不要去检查套件的相依性。<br>
<span class=text_import2><font face="细明体">危险性∶</font></span>
套件会有相依性的原因是因为彼此会使用到对方的机制或功能,如果强制安装而不考虑套件的属性相依,
则可能会造成该套件的无法正常使用!</td></tr>
<tr><td><span class=text_import2><font face="细明体">--nomd5</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
不想检查 RPM 档案所含的 MD5 资讯时。<br>
<span class=text_import2><font face="细明体">说明∶</font></span>
还记得我们在前一章有提到的 MD5 这个指纹辨识吧?!没错,这里指的就是不要检查 RPM 套件的 MD5
资讯。但除非您很清楚这个套件的来源,否则不建议使用这个参数。</td></tr>
<tr><td><span class=text_import2><font face="细明体">--noscripts</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
不想让该套件自行启用或者自行执行某些系统指令。<br>
<span class=text_import2><font face="细明体">说明∶</font></span>
RPM 的优点除了可以将档案放置到定位之外,还可以自动执行一些前置作业的指令,例如资料库的初始化。
如果您不想要让 RPM 帮您自动执行这一类型的指令,就加上他吧!</td></tr>
<tr><td><span class=text_import2><font face="细明体">--replacefiles</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
如果在安装的过程当中出现了『<span class=text_import2>某个档案已经被安装在您的系统上面</span>』的资讯,
又或许出现版本不合的讯息( confilcting files )时,可以使用这个参数来直接覆盖档案。<br>
<span class=text_import2><font face="细明体">危险性∶</font></span>
覆盖的动作是无法复原的!所以,您必须要很清楚的知道被覆盖的档案是真的不重要喔!否则会欲哭无泪!</td></tr>
<tr><td><span class=text_import2><font face="细明体">--replacepkgs</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
重新安装某个已经安装过的套件!</td></tr>
<tr><td><span class=text_import2><font face="细明体">--force</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
这个参数其实就是 --replacefiles 与 --replacepkgs 的综合体!</td></tr>
<tr><td><span class=text_import2><font face="细明体">--test</font></span></td>
<td><span class=text_import2><font face="细明体">使用时机∶</font></span>
想要测试一下该套件是否可以被安装到使用者的 Linux 环境当中。范例为∶<br>
<span class=text_import2><font face="细明体">rpm -ivh pkgname.i386.rpm --test</font></span></td></tr>
</table><br>
一般来说,安装的指令大约就是这些了。通常鸟哥建议直接使用 -ivh 就好了,
如果安装的过程中发现问题,一个一个去将问题找出来,尽量不要使用『
<span class=text_import2>暴力安装法</span> 』,因为可能会发生很多不可预期的问题呢!
除非您很清楚的知道使用上面的参数后,安装的结果是您预期的!<br><br>
</div>
<hr><a NAME="rpmmanager_update"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>RPM 升级与更新</span>
<div class=block2>
使用 RPM 来升级真是太简单了!就以 -Uvh 或 -Fvh 来升级即可(
<span class=text_vbird>注∶vh 的功能仍是在于显示细部资讯与安装进度而已</span>
)!不过,这两种升级方式是不太一样的∶<br><br>
<table width=95% border=1 cellspacing=0 cellpadding=3 bgcolor=lightyellow>
<tr><td WIDTH="50"><font face="细明体"><font color="#000066">-Uvh</font></font></td>
<td><font face="细明体">后面接的套件即使没有安装过,则系统将予以直接安装;
若后面接的套件有安装过旧版,则系统自动更新至新版;</font></font></td></tr>
<tr><td><font face="细明体"><font color="#000066">-Fvh</font></font></td>
<td><font face="细明体">如果后面接的套件并未安装到您的 Linux 系统上,则该套件不会被安装;亦即只有安装至您
Linux 系统内的套件会被『升级』!</font></td></tr>
</table><br>
由上面的说明来看,如果您想要大量的升级系统旧版本的套件时(
<span class=text_vbird>例如刚安装完作业系统,而想要更新套件至最新</span>
),使用 -Fvh 则是比较好的作法。但是需要注意的是,如果您使用的是 Fvh
,偏偏您的机器上尚无这一个套件,那么很抱歉,该套件并不会被安装在您的
Linux 主机上面,所以请重新以 ivh 来安装吧!<br><br>
通常有的朋友在进行整个作业系统的旧版套件修补时,喜欢这么进行∶
<ol><span class=text_import2>
<li>先到各发展商的 errata 网站或者是国内的 FTP 映像站捉下来最新的 RPM 档案;
<li>使用 -Fvh 来将您的系统内曾安装过的套件进行修补与升级!(真是方便呀!)
</ol></span>
当然棉,升级也是可以利用 <span class=text_import2>--nodeps/--force</span> 等等的参数啦!<br><br>
</div>
<hr><a NAME="rpmmanager_query"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>RPM 查询</span>
<div class=block2>
RPM 在查询的时候,其实查询的地方是在 <span class=text_import1>/var/lib/rpm</span>
这个目录下的资料库档案啦!另外, RPM 也可以查询档案内的资讯喔!那如何去查询呢?我们底下以
简单的范例来说明∶<br>
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>rpm -qa</span>
[root@linux ~]# <span class=term_command>rpm -q[licdR] 已安装的套件名称</span>
[root@linux ~]# <span class=term_command>rpm -qf 存在于系统上面的某个档案</span>
[root@linux ~]# <span class=term_command>rpm -qp[licdR] 未安装的某个档案名称</span>
<span class=term_say>参数∶
在查询的部分,所有的参数之前都需要加上 -q 才是所谓的查询!
查询主要分为两部分,一个是查已安装,另一个则是查某个 rpm 档案内容。
查询已安装套件的资讯∶
-q ∶仅查询,后面接的套件名称是否有安装;
-qa ∶列出所有的,已经安装在本机 Linux 系统上面的所有套件名称;
-qi ∶列出该套件的详细资讯 (information),包含开发商、版本与说明等;
-ql ∶列出该套件所有的档案与目录所在完整档名 (list);
-qc ∶列出该套件的所有设定档 (找出在 /etc/ 底下的档名而已)
-qd ∶列出该套件的所有说明档 (找出与 man 有关的档案而已)
-qR ∶列出与该套件有关的相依套件所含的档案 (Required 的意思)
-qf ∶由后面接的档案名称,找出该档案属于哪一个已安装的套件;
查询某个 RPM 档案内含有的资讯∶
-qp[icdlR]∶注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出
某个 RPM 档案内的资讯,而非已安装的套件资讯!注意!
范例∶</span>
<span class=term_hd>范例一∶找出你的 Linux 是否有安装 logrotate 这个套件?</span>
[root@linux ~]# <span class=term_command>rpm -q logrotate</span>
logrotate-3.7.1-10
[root@linux ~]# <span class=term_command>rpm -q logrotating</span>
package logrotating is not installed
<span class=term_say># 注意到,系统会去找是否有安装后面接的套件名称。注意,
# 不必要加上版本喔!至于显示的结果,一看就知道有没有安装啦!</span>
<span class=term_hd>范例二∶列出上题当中,该套件的所有目录与档案∶</span>
[root@linux ~]# <span class=term_command>rpm -ql logrotate</span>
/etc/cron.daily/logrotate
/etc/logrotate.conf
<span class=term_say>......以下省略......</span>
<span class=term_say># 可以看出该套件到底提供了多少的档案与目录。</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -