很多朋友对于Linux系统软件包管理攻略和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
如何使用RPM命令参数
上述一些参数需要组合使用。例如rpm -h package.rpm 无意义,而rpm -ih package.rpm 表示安装软件包,并使用#符号显示安装进度。
安装RPM包
rpm -ivh package.rpm
升级RPM包命令
rpm -Uvh package.rpm
卸载RPM 包命令
rpm -ev package
查询rpm包命令包含的文件列表
rpm -qlp package
查询rpm包命令包含的文件列表
rpm -qlp package
查询RPM包命令包含的内容信息
rpm -qip package
查询系统中所有已安装的RPM包
rpm -qa
RPM包管理示例
以下步骤介绍了普通用户安装IBM Lotus Notes V85(以下简称Notes)的典型操作流程。 Notes 的RPM 软件包名称为ibm_lotus_notes-8.5.i586.rpm。
首先检查系统中是否已经存在该软件# rpm -qa | grep ibm_lotus_notes
如果返回信息为空,则说明该软件尚未安装。
查询Notes 软件包的内容: # rpm -qip ibm_lotus_notes-8.5.i586.rpm Name : ibm_lotus_notes Relocations: /opt/ibm/lotus/notes Version : 8.5 Vendor: IBM Release : 20081211.1925 Build Date: Sat 13 2008 09:38:55 AM CST 安装日期: (未安装) Build Host: dithers.notesdev.ibm.com 组: 应用程序/Office 源RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm 大小: 603779427 License: 商业签名: DSA/SHA1,200 年12 月13 日星期六0 9:43:02 AM CST,钥匙ID 314c8c6534f9ae75 摘要: IBM Lotus Notes 描述: IBM Lotus Notes 软件提供了强大的.
安装Notes:# rpm -ivh ibm_lotus_notes-8.5.i586.rpm
返回信息:
正在准备. ########################################### [100% ] 1:ibm_lotus_notes ########################################[100%]
升级注意事项:如果以后需要升级到基于此版本的更高版本的Notes(slit.0 - ibm_lotus_notes-9.0.i586.rpm),请使用-U 参数:
rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
如果这一步使用-i,系统通常会报文件冲突错误,无法正常安装。
卸载注意事项请注意,卸载软件时,请使用软件名称,而不是软件包文件名:
rpm -ev ibm_lotus_notes
返回顶部
DEB包安装/升级/查询/卸载
DEB 包包含一组压缩的软件文件和有关软件内容的信息(保存在头文件中),通常由以.deb 扩展名结尾的文件表示,例如package.deb。要对其进行操作,需要使用dpkg命令。下面介绍dpkg工具的参数和使用方法,并以在UBUNTU 904上安装IBM Lotus Notes为例进行详细说明。
DPKG命令常用参数
DPKG的一般用法是dpkg -?软件包(.rpm),在哪里-?是安装参数(更多信息请查阅帮助$man rpm):
-l 查询系统中软件内容信息
--info 查询系统中的软件或查询指定rpm包的内容信息
-i 在系统上安装/升级软件
-r 从系统中卸载软件而不删除配置文件
-P 从系统中卸载软件及其配置文件
如何使用DPKG命令参数
安装DEB包命令
$ sudo dpkg -i package.deb
升级DEB包命令
$ sudo dpkg -i package.deb (与安装命令相同)
卸载DEB包命令
$ sudo dpkg -r package.deb # 不卸载配置文件或$ sudo dpkg -P package.deb # 卸载配置文件
查询DEB包命令包含的文件列表
$ sudo dpkg-deb -c package.deb
查询DEB包命令包含的内容信息
$ dpkg --info package.deb
查询系统中所有已安装的DEB包
$dpkg -l 软件包
DEB包管理示例
以下步骤介绍了普通用户安装IBM Lotus Notes V85(以下简称Notes)的典型操作流程。 Notes 的DEB 软件包名称为ibm_lotus_notes-8.5.i586.deb。
首先检查系统中是否已经存在该软件$ dpkg -l ibm-lotus-*
如果系统上从未安装过Lotus 产品,则返回消息为:
未找到与ibm-lotus-* 匹配的pakcages
如果系统上已安装Lotus产品但已被删除,则返回信息为:
pn ibm-lotus-notes 无(无可用描述)
查询Notes包的内容: $ dpkg --info ibm_lotus_notes-8.5-i586.deb
返回信息:
新的Debian 软件包,版本2.0。大小335012296 字节: 控制归档=231821 字节。 Package: ibm-lotus-notes Version: 8.5-20081211.1925 Section: IBM Priority: extra Architecture: i386 Installed-Size: 6194 44 Maintenanceer: IBM Lotus 产品描述: IBM Lotus Notes IBM Lotus Notes 软件提供了强大的.
安装Notes:$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息:
(正在读取数据库.当前安装的151150 个文件和目录。)准备替换ibm-lotus-notes 8.5-20081211.1925(使用ibm-lotus-notes-higher-version.i586.deb).拆包替换ibm-lotus- Notes .设置ibm-lotus-notes(更高版本).
升级说明: $ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
返回信息:
(正在读取数据库.当前安装的151150 个文件和目录。)准备替换ibm-lotus-notes 8.5-20081211.1925(使用ibm-lotus-notes-higher-version.i586.deb).拆包替换ibm-lotus- Notes .设置ibm-lotus-notes(更高版本).
卸载注意事项请注意,卸载软件时,请使用软件名称,而不是软件包文件名:
$ sudo dpkg -P ibm-lotus-notes
返回顶部
包依赖项
由于开源的多态性,处理Linux操作系统中软件之间的依赖关系一直是令用户头疼的问题。如果package_a依赖于package_b,那么在没有安装package_b的系统中,不建议系统安装package_a。强制安装很可能会导致软件无法正常使用。基于上述package_a和package_b之间的关系,在干净的系统中(未安装package_a或package_b),当尝试安装package_a时,错误通常会出现为:
RHEL 5.2
rpm -ivh package_a.rpm error: Failed dependencies: pacakge_b = version info is needed by package_a
Ubuntu 904
$ sudo dpkg -i package_a.deb dpkg: 关于包含包的package_a.deb,预依赖问题lm: package_a 预依赖于package_b (版本信息) dpkg: 处理package_a.deb 时出错(--install): 预依赖问题- 未安装package_a处理: package_a.deb时遇到错误
查询软件包依赖关系
查询rpm包的依赖关系,使用rpm -qRp:
rpm -qRp package_a.rpm package_b = version_info 或 package_b = version_info 或 package_b= version_info
表示package_a.rpm 依赖于package_b 的version_info,或以上任何版本的package_b(包括version_info),或以下任何版本的package_b(包括version_info)。所以package_b.rpm必须在package_a之前安装在系统中。
要查询DEB包的依赖关系,可以解释dpkg --info结果中的Pre-Depends字段:
$ dpkg --info package_a.deb Pre-depends: package_b (=version_info) Depends: package_b (=version_info) 或Pre-depends: package_b (=version_info) Depends: package_b (=version_info) 或Pre-depends: package_b (=version_info) Depends: package_b (=版本信息)
指示package_a.deb 依赖于package_b 的version_info 版本,或者package_b 高于且包含package_b 的version_info 或低于或包含package_b 的version_info 的任何版本。因此package_b.deb 必须在package_a 之前安装在系统上。
所以正确的安装方法如下一节所示。
安装方法
对于package_a,正确的安装方法应该是:
RPM # rpm -ivh package_b.rpm # rpm -ivh package_a.rpm ##DEB $ sudo dpkg -i package_b.deb $ sudo dpkg -i package_a.deb
嵌套依赖项
上面的例子是最理想的依赖关系。实际应用中,用户最麻烦的就是package_a依赖于package_b/c/d/e/f等多个包,而package_b/c/d/e/f等包又依赖于package_b1,b2,b3 /c1、c2/d1、d2/e1、e2/f1、f2等.为了保证软件的正常使用,必须找到并安装所有依赖包和子依赖包。太多的依赖项大大降低了Linux软件安装的用户友好性。因此,为了解决此类问题,采用了更先进的包管理策略——Yum/APT。
更友好的包管理软件——YUM
百胜餐饮集团
YUM 是基于RPM 的包管理工具。它可以自动从指定的源空间(服务器、本地目录等)下载并安装目标RPM包。它可以自动处理依赖关系并下载和安装。无需每次需要都手动下载并安装。依赖包。另外,YUM的另一个功能是升级系统中的所有软件。上面提到,YUM 的RPM 包来自源码空间,在RHEL 中通过/etc/yum.repos.d/目录下的.repo 文件配置来指定,如rhel-debuginfo.repo 的内容:
rhel-debuginfo.repo
[rhel-debuginfo] name=Red Hat Enterprise Linux 5Client - i386 - 调试baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/enabled=0 gpgcheck=1 gpgkey=file: ///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
YUM的系统配置文件位于/etc/yum.conf,内容如下:
[主要]cachedir=/var/cache/yum keepcache=1 debuglevel=2 pkgpolicy=最新日志文件=/var/log/yum.log distroverpkg=redhat-release 宽容=1 exactarch=1 obsoletes=1 gpgcheck=1 plugins=1排除=火狐gftp
配置文件用于定义用户期望的yum 行为。例如gpgcheck表示安装时不进行gpg验证,exclusion=firefox gftp表示全系统软件升级时不升级firefox和gftp。
YUM常用命令
安装指定软件:
yum -y install package-name
列出系统中已安装的软件
yum list
列出系统中所有可以升级的软件
yum check-update
升级系统中所有可升级的软件
yum update
升级指定软件
yum update package-name
接收升级过程中的所有互动问答
yum -y update
卸载指定软件
yum remove package-name
有关YUM 的更多信息,请参阅http://fedoraproject.org/wiki/Tools/yum。
更友好的包管理软件——APT
易于
APT的全称是Advanced Packaging Tools。对应YUM,最初被设计为DPKG的前端软件,现在也支持通过apt-rpm进行rpm管理。本节我们将介绍使用APT作为DPKG的前端。 APT的主要包管理工具是APT-GET,它可以满足类似于上述YUM的功能需求。
APT的软件源定义来自于/etc/apt/sources.list文件:
Seehttp://help.ubuntu.com/community/UpgradeNotesfor how to upgrade to # newer versions of the distribution. debhttp://cn.archive.ubuntu.com/ubuntu/hardy main restricted deb-srchttp://cn.archive.ubuntu.com/ubuntu/hardy main restricted
注意,每次手动修改上述文件时,都需要使用sudo apt-get update 来更新系统的源,以便新的源数据能够被当前系统识别。
UBUNTU中APT的配置文件位于/etc/apt/apt.conf.d,多个配置文件按功能分类。
APT常用命令
更新源索引
$ sudo apt-get 更新
安装指定软件
$ sudo apt-get install 软件包名称
下载指定软件的源文件
$ sudo apt-get 源包名称
将系统中所有软件升级到最新版本
$ sudo apt-get 升级
将操作系统以及所有软件升级到最新版本
$ sudo apt-get dist-upgrade
卸载指定软件
$ sudo apt-get 删除包名
有关APT 的更多信息,请参阅http://www.debian.org/doc/manuals/apt-howto/index.en.html。
返回顶部
RPM 和DEB 兼容性- Alien
Alien 工具可以将RPM 包转换为DEB 包,或将DEB 包转换为RPM 包,以满足兼容性需求。注意,请先在系统中安装alien。
在UBUNTU中使用alien将rpm转换为deb并安装:
$ sudo Alien -d package.rpm $ sudo dpkg -i package.deb
在RHEL中使用alien将deb转换为rpm并安装:
alien -r package.deb # rpm -ivh package.rpm
更多关于alien的信息请参考http://linux.die.net/man/1/alien
返回顶部
总结
本文以RHEL 5.2和Ubuntu 904为例,基于命令行操作,介绍Linux系统中两种常用的软件包管理工具——RPM和DPKG。首先从最底层的rpm/dpkg命令操作开始,列出了它们的基本使用方法,然后指出了软件的依赖关系以及由此带来的问题,而这个问题的解决方案也是前面最流行的YUM和APT结束。介绍了软件管理系统的操作。最后,本文简要介绍了当前RPM/DEB 兼容性问题的常见解决方案。
返回顶部
常见问题列表
是否可以手动强制RPM/DEB 不进行依赖项检查?
转速确实如此。使用--nodeps辅助参数,安装过程会忽略依赖限制,强制安装目标包,如:
rpm -i --nodeps package_a.rpm
DEB 好的。使用--force-depends辅助参数,如:
$ sudo dpkg -i --force-depends package_a.deb
RPM 中的--force 有何用途?
RPM 中的默认安装规则不允许多次安装同一软件包,也不允许降级安装。使用--force辅助参数将强制安装RPM包,而不管上述因素。但是,--force 无法强制安装不满足系统依赖关系的包(在这种情况下,需要使用--nodeps 参数)。使用方法:
rpm -i --force package_a.rpm
RPM/DPKG 是否支持远程安装?
转速是。 RPM 支持HTTP 和FTP 协议,例如:
rpm -Uvhftp://user:pass@ftpserver/package.rpm
DPKG 在基于DEB软件包的最新系统中,远程安装通常被更高级的APT所取代。
可以从RPM/DPKG 中提取单个文件吗?
转速是。可以使用rpm2cpio 工具提取该文件:http://www.rpm.org/max-rpm/s1-rpm-miscellania-rpm2cpio.html
DPKG 是。可以使用dpkg-deb 工具提取文件:
$ dpkg-deb --extract ibm_lotus_notes-8.5.i586.deb $dir(目标目录)
RPM/DPKG 是否提供了成功安装包的验证机制?
转速是。这可以使用-V 参数进行验证。
DPKGDebian 系统通常使用debsums 工具参数进行验证。
RPM/DPKG 是否提供包安全签名?
转速是。可以使用--import导入与软件同时发布的GPG KEY,然后使用-K命令验证包的安全性,如:
rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 返回信息 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK
DPKGDPKG 不提供本机密钥验证机制。您可以使用debsigs 和debsigs-verify。详情参见:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html
如果RPM 的底层数据库损坏了,还可以使用吗?
如果底层数据库损坏,RPM 将无法正常运行。此时最常见的解决方案就是重建数据库:
rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb
RPMDPKG 本身不提供底层数据库恢复机制。其数据库保存为/var/lib/dpkg 目录中的文件。及时备份该目录是防止数据库损坏的最佳方法。
能否查询系统已安装的文件属于哪个RPM包?
转速确实如此。使用-qf参数,比如在安装了Notes8.5的系统中:
rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920
DPKG 好的。使用--search参数,比如在安装了Notes8.5的系统中:
$ dpkg --search /opt/ibm/lotus/notes/notes 返回信息: ibm-lotus-notes: /opt/ibm/lotus/notes/notes
我可以查看RPM包的安装时间吗?
转速确实如此。可以使用--last进行查询。喜欢:
rpm -qa --last 返回信息: 系统中所有软件的安装时间。
【Linux系统软件包管理攻略】相关文章:
用户评论
linux 用的软件怎么安装啊?
有10位网友表示赞同!
学习软件包管理能提高效率挺厉害的
有14位网友表示赞同!
不同发行版的包管理器好像不太一样啊,难上手捏!
有15位网友表示赞同!
dpkg, yum, pacman 听说都是很常用的吗?
有11位网友表示赞同!
使用 apt 快捷安装软件真方便,比其他方式省时多了。
有10位网友表示赞同!
搞清楚软件包管理对新手来说确实挺重要的,可以省很多时间呀!
有17位网友表示赞同!
最近想学习下 Debian 的系统,听说它有个叫 APT 的包管理器吧?
有19位网友表示赞同!
玩服务器的时候用到 Red Hat 的 yum,感觉蛮顺手的。
有8位网友表示赞同!
我想试一下 Arch Linux ,听说它的 pacman 包管理工具很强大啊!
有20位网友表示赞同!
软件包管理这个东西挺重要的,能让人更轻松地维护系统。
有9位网友表示赞同!
如果对软件包管理一无所知,那Linux使用起来一定会很吃力吧!
有12位网友表示赞同!
听说有些软件包管理器可以自动更新,是不是很棒呀?
有6位网友表示赞同!
有时候想升级某个软件,就需要用到 软件包管理工具才能搞定吗?
有20位网友表示赞同!
学习 Linux, 必须先学好软件包管理!
有13位网友表示赞同!
感觉不同的包管理器使用习惯也不太一样。
有5位网友表示赞同!
linux 的包管理方法很多样,还挺有学习价值的。
有18位网友表示赞同!
Linux 上软件包管理工具挺方便的,比手动下载安装要高效多了。
有18位网友表示赞同!
想用 Linux 做开发,应该提前了解一下主流的软件包管理器吧?
有17位网友表示赞同!
软件包管理这个东西,是不是越来越重要了呢?
有20位网友表示赞同!
linux 的生态系统很完善,有专门的包管理器是优势之一!
有12位网友表示赞同!