什么才是Linux系统管理中最重要的?(一)

日期: 2008-04-07 作者:韩玄科 来源:TechTarget中国

  在系统管理中,软件包的管理是最重要的,是系统管理的基础的基础。只有我们学会软件包的管理才能谈得上其它的应用。本文主要为Linux初学者提供在软件包的安装、更新、查询等方面的参考。


  Turbolinux系统中的所有软件均以RPM包的形式存在,用户可以通过命令行或者图形化工具对系统中的软件包进行查询、安装、删除和升级等操作。在Turbolinux中有两个软件包管理工具,一个RPM,另一个是YUM。下面我们来分别详细介绍这两个软件包管理工具。


  一、 RPM


  1、 RPM介绍


  RPM(RedHat Package Management)是一个开源的软件包管理工具,包括Turbolinux在内的大多数Linux发行平台上都使用它来管理软件包。对最终用户来说,软件包的安装、删除和升级都可通过简短的命令完成。RPM维护系统中所安装软件包的所有信息,因此,用户可通过RPM强大的查询选项对系统安装软件包进行查询或校验。软件包升级时,RPM会仔细处理用户的配置文件,因此不会出现由于软件升级而导致配置丢失的情况。对开发者来说,可以通过RPM将软件源代码打成包,并以源码包或二进制包的形式提供给最终用户。这些过程由一个包SPEC描述文件驱动,SPEC文件包含了编译该软件包所需的所有信息,如:源代码,补丁以及编译指令等等,当软件有新版本发布时,就能够极大地提高软件包的可维护性。由于RPM将改写系统文件,因此,必须是root用户才能进行软件包的安装、删除或升级。


  理解RPM的设计目标对于更好的使用RPM包管理工具是有益的,具体来说,RPM的设计目标包括如下几个方面:


  可升级性


  使用RPM可以升级单个软件包而不需要重新安装整个系统。当基于RPM的Linux系统发行新版本时,RPM可以智能化、自动地升级现有的系统。软件包中的配置文件在升级时被保留,因此用户定制的配置信息不会丢失。


  强大的查询功能


  RPM设计时提供了强大的查询功能。你可以在整个包管理数据库中搜索指定的软件包或文件。你还可以轻易地知道哪个文件属于哪个软件包,软件包来自哪里。每个RPM包有一个二进制头,其中包含软件包本身及其内容的信息,包中的文件被压缩存储,这样就允许快速简捷地查询软件包。


  系统校验


  RPM另一项强大的功能是软件包校验。如果担心可能删除了某软件包中的一个重要文件,只需校验该软件包即可知道是否有这种情况。必要时,可以重装该软件包,修改过的配置文件在重装时会被RPM保留。


  纯净源码


  一个重要的设计目标是允许使用所谓”纯净”软件源码,即由软件作者发布的没有打过任何补丁的源码。RPM将”纯净”源码、所用的补丁、以及完整的编译指令放在一个描述文件中,用来驱动将来的包管理过程。这是一个重要的优点,理由有几个,例如,如果软件有新版本推出,你不必从头开始整个编译过程,因为所有缺省的编译选项,补丁信息,要生成的二进制包中文件的列表等等都包含在描述文件了。


  保持源码”纯净”不仅对开发者重要,它也保证了给最终用户提供的软件的质量。


  2、 RPM用法


  RPM有五种最基本的操作:安装、删除、升级、查询和校验。下面将介绍这些操作的一般用法,详细情况可参考RPM的 man page。


  1) 安装


  假设要安装的软件包名为:foo-1.0-1.i386.rpm,用root用户登录到系统,运行以下命令:


rpm -ivh foo-1.0-1.i386.rpm


如果安装成功,将显示如下信息:


Preparing…                ########################################### [100%]
   1:foo                  ########################################### [100%]


RPM从版本4.1开始,在安装或升级软件包时会检查软件包的签名。如果签名验证失败,将显示如下错误信息:


error: V3 DSA signature: BAD, key ID 0352860f


如果仅是一个新的文件头签名,将显示如下错误信息:


error: Header V3 DSA signature: BAD, key ID 0352860f
如果系统中没有相应的密钥来验证该签名,将显示如下警告信息:
warning: V3 DSA signature: NOKEY, key ID 0352860f


安装过程比较简单,但也可能出现下面错误:



已经安装的包


如果系统中已安装有同样版本的软件包,将显示如下信息:


Preparing…                ########################################### [100%]
package foo-1.0-1 is already installed


这种情况下,如果仍然要强行安装,可以使用-replacepkgs选项,此时,RPM将忽略该错误:


rpm -ivh –replacepkgs foo-1.0-1.i386.rpm


该选项在删除了原来安装的RPM包中的一些文件,或者想恢复初始时配置文件的情况下有用。


冲突的文件


如果要安装的软件包与已安装的软件包包含有相同名字的文件,将显示如下信息:


Preparing…                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20
可以使用-replacefiles选项让RPM忽略此错误:
rpm -ivh –replacefiles foo-1.0-1.i386.rpm


不能解析的依赖


RPM包有时会依赖其它的软件包,只有安装了这些被依赖的包,该软件包才能正常运行,如果依赖关系没有解决,将显示如下类似信息:


error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm


如果仍然要强行安装,可以使用–nodeps选项,这将可能导致该软件包不能正常运行,因此不建议这样做。


2)删除


删除软件包和安装一样简单,在提示符下输入如下命令:


rpm -e foo


如果系统中有其它软件包依赖要删除的软件包,那么将显示如下类似信息:


error: Failed dependencies:
        foo is needed by (installed) bar-2.0.20-3.i386.rpm


此时也可以用–nodeps选项强制RPM删除该软件包,但这将导致依赖关系被破坏。


3)升级


与安装类似,升级软件包时输入以下命令:


rpm -Uvh foo-1.0-1.i386.rpm


RPM将自动删除系统中相应的旧包。实际上也可以使用-U命令来安装软件包,而不管系统中有无该软件包的以前版本。如果系统中有软件包升级时需要更新的配置文件,那么将显示如下类似信息:


saving /etc/foo.conf as /etc/foo.conf.rpmsave


该信息意味着新的配置文件不能前向兼容系统中原有配置文件,原有配置文件被更名保存,新的配置文件安装进去。此时应该马上对比一下新老配置文件的不同,确保系统仍能正常运行。如果RPM认为要升级的软件包比系统中原有的旧,则提示如下类似信息:


package foo-2.0-1 (which is newer than foo-1.0-1) is already installed


可以使用–oldpackage选项强制RPM升级。


4)更新


更新与升级类似,命令如下:


rpm -Fvh foo-1.0-1.i386.rpm


与升级不同的是,如果系统中没有相应的旧包,将不执行安装操作。


5)查询


可以用-q命令对安装的软件包执行查询操作。如:rpm -q foo 将显示包的名字、版本号、发行号:foo-2.0-1
除了可以指定包的名称,也可以使用以下选项来配合-q命令执行各项查询操作:


-a 查询所有已安装的软件包


-f <文件名> 查询哪个包包含有指定的文件


-p <包名> 查询指定的软件包


同样,-q命令也有丰富的选项来指明执行查询操作时将显示什么信息:


-i 显示包的名称、描述、版本号、发行号、大小、编译时间、安装时间和提供商等信息


-l 显示包中所有文件的列表


-s 显示包中所有文件的状态


-d 显示包中所有的文档文件


-c 显示包中所有的配置文件


对于显示文件列表的选项,可以附加-v选项来显示详细信息。
6)校验


RPM使用-V命令校验软件包,校验内容包括:大小、MD5校验和、类型以及文件所属的用户和组等。可以与-V命令配合使用的校验选项有:


-f <文件名> 校验指定文件所属的软件包,例如: rpm -Vf /usr/bin/vim


-a 校验所有已安装的软件包,例如:


rpm -Va


-p <包名> 用指定的软件包校验已安装的软件包,例如:


rpm -Vp foo-1.0-1.i386.rpm


如果校验一切正常,将没有输出,反之则输出不一致结果,格式为:


xxxxxxxx  文件名


字段1由八个字符组成,每个字符指明该文件与RPM数据库中一致或不一致的地方,单个点(.)说明没有异常,具体含义如下:


5 – 校验和


S – 文件大小


L – 符合连接


T – 文件修改时间


D – 设备


U – 用户


G – 组


M – 文件模式


? – 文件不可读


如果有任何输出显示,请判断是否真的有问题,然后决定删除或重安装异常的软件包,或者通过其它方式解决。
7)检查包的签名


如果仅想知道RPM包是否已损坏或被恶意篡改,可以用下面命令来验证包的MD5校验和:


rpm -K –nosignature


正常情况下将显示如下信息:


: md5 OK


如要看到更详细的消息,可以加vv选项,如:


rpm -Kvv –nosignature


另一方面,软件包开发者的可信度如何?如果该软件包使用了开发者的 GnuPG密钥签名,你就会知道开发者的身份是否如他们声称的那样。


GnuPG工具用于安全通信,而且完全替代了PGP。你可以用GnuPG来验证文档的有效性以及对要发送(接送)的文档加密(解密),同时,GnPG也能处理PGP 5.x的文件。


缺省时系统中已经安装有GnuPG, 因此,你可以马上用它来验证RPM包。但是,首先必须导入Turbolinux的公开密钥。


8)导入密钥


在可以检查包的签名前,必须用下面命令导入Turbolinux的公开密钥:


rpm -import /usr/share/gpg-pubkey/RPM-GPG-KEY


下面命令可以显示系统中已安装的公开密钥:


rpm -qa gpg-pubkey*


9)验证包的签名


导入密钥后,检查RPM包的GnuPG签名时可运行下面命令:


rpm -K


3、 示例


用户有时候会误删一些文件,但却不知道到底删了哪些文件,这时可以运行下面命令来检查整个系统:


rpm -Va


遇到不认识的文件时,可以这样查看它属于哪个包:


rpm -qf /usr/bin/ggv


把上面两个例子结合起来,下面命令将检查指定文件所属的那个RPM包:


rpm -Vf /usr/bin/paste


要知道一个程序所在RPM包的相关文档在哪儿时可运行:


rpm -qdf /usr/bin/host


查看一个二进制包的详细信息时,执行下面命令:


rpm -qpi gcc-3.4.3-9.4.i386.rpm


输出结果如下:


Name : gcc               Relocations: (not relocatable)
Version : 3.4.3
Vendor: (none)
Release     : 9.4 
Build Date: 2005年04月29日 星期五 14时10分13秒
Install Date: (not installed)             
Build Host: dev3-241.dev.cn.tlan
Group       : Development/Languages        
Source RPM: gcc-3.4.3-9.4.src.rpm
Size        : 13029656                       
License: GPL
Signature   : (none)
URL         : http://gcc.gnu.org
Summary     : Various compilers (C, C++, Objective-C, Java, …)
Description :
The gcc package contains the GNU Compiler Collection version 3.4.
You’ll need this package in order to compile C code.
再有,下面命令可以查看包中所有文件列表:
rpm -qlp crontabs-1.10-5.noarch.rpm

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐