LinuxRPM和YUM包管理完全指南

上传人:文*** 文档编号:68531568 上传时间:2022-04-02 格式:DOCX 页数:37 大小:96.11KB
返回 下载 相关 举报
LinuxRPM和YUM包管理完全指南_第1页
第1页 / 共37页
LinuxRPM和YUM包管理完全指南_第2页
第2页 / 共37页
LinuxRPM和YUM包管理完全指南_第3页
第3页 / 共37页
点击查看更多>>
资源描述
在本文中,学习如何在 Linux 系统上使用 RPM 和 YUM 包管理工具管理包。学习:1. 使用 RPM 和 YUM 安装、卸载、升级和删除包2. 获取版本、状态、依赖关系、完整性和签名等 RPM 包相关信息3. 判断一个包提供哪些文件,查明某个文件来自哪个包先决条件为了最有效地利用本系列中的文章,您应该具有基本的 Linux 知识,并需要准备一个 Linux 系统用于练习本文介绍的命令。有时候不同版本的程序输出格式不同,因此您所得到的结果未必总是与这里所示的清单和图相同,特别是许多输出高度依赖于系统上已经安装的包。您自己的输出可能很不一样,但是应该能够看出重要的共同点。包管理简介过去,许多 Linux 程序以源代码的形式发行,用户把源代码构建为所需的程序或程序集;源代码还附带必需的手册页、配置文件等等。现在,大多数 Linux 发行商使用称为包 的预构建的程序或程序集,包便于在发行版上安装。在本文中,学习帮助安装、更新和删除包的包管理 工具。本文主要关注 Red Hat 开发的 Red Hat Package Manager (RPM),以及 Duke University 物理系最初为管理 Red Hat Linux 系统开发的 Yellowdog Updater Modified (YUM)。从用户的角度来说,基本的包管理功能由命令提供。Linux 开发人员一直致力于让 Linux 更容易使用,他们开发了其他工具(包括 GUI 工具)来补充基本工具,这对最终用户隐藏了基本工具的一部分复杂性。在本文和 学习 Linux,101:Debian 包管理 中,我们主要讨论基本工具,但是也会提到一些其他工具,让您能够继续研究它们。RPM、YUM 和 APT(适用于 Debian 系统)有许多相似之处。它们都可以安装和删除包。关于安装的包的信息保存在数据库中。它们都有基本的命令行功能,同时通过其他工具提供对用户更友好的界面。它们都可以从 Internet 获取包。在安装 Linux 系统时,通常会安装许多包。这个集合可能是根据系统的用途定制的,比如服务器、桌面或开发工作站。有时候,可能需要安装新的包以添加新功能,更新现有的包,甚至删除不再需要或已经被新的包取代的包。我们来看看如何完成这些任务以及如何解决一些相关的难题,比如寻找包含某一命令的包。RPMRed Hat 于 1995 年引入了 RPM。RPM 现在是 Linux Standard Base (LSB) 中采用的包管理系统。rpm 命令选项分为三组:1. 用于查询和检查包2. 用于安装、升级和删除包3. 用于执行其他功能在本文中,我们主要关注前两组命令选项。在 RPM 的手册页中可以找到其他功能的相关信息。还应该注意 rpm 是操作 RPM 的主要命令,而 .rpm 是 RPM 文件使用的扩展名。所以 “一个 rpm” 或 “某某 rpm” 一般是指 RPM 文件,而 rpm 通常指命令。YUMYUM 在 RPM 系统中增加了自动更新和包管理,包括依赖关系管理。与 Debian Advanced Packaging Tool (APT) 一样,除了了解系统上安装的包之外,YUM 还使用存储库。存储库是包的集合,通常可以通过网络连接访问它们。安装 RPM 包假设您想学 Lisp,一位同事让您使用 gcl 命令。您试着输入 gcl-help、whichgcl 或 typegcl。但是,如果系统无法找到 gcl,您可能会看到与清单 1 相似的输出。清单 1. 没有找到 gcl 命令ianechidna $ gcl -helpbash: gcl: command not foundianechidna $ which gcl/usr/bin/which: no gcl in (/usr/lib64/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/ian/bin)ianechidna $ type gclbash: type: gcl: not found您可能会问同事要安装哪个包,也可能猜想 gcl 命令应该在 gcl 包中。这种猜测常常是对的,但是也不总是。我们稍后会看到如何寻找正确的包。在这里,需要 gcl 包。假设您已经下载或以其他方式获得了这个包的拷贝,可以使用带 -i(代表安装)选项的 rpm 命令安装它,见清单 2。清单 2. 用 rpm 安装 gcl 第一次尝试rootechidna # rpm -i gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpmerror: Failed dependencies:gcl-selinux is needed by gcl-2.6.8-0.6.20090701cvs.fc12.x86_64rpm 命令知道这个包有一个依赖包,但是它并不帮助您解决依赖问题。您需要自己获取依赖包,然后再次尝试,看看是否还有其他依赖包 重复这个过程,直到满足所有依赖关系为止。好消息是,可以向 rpm 命令提供要安装的包的列表,如果满足所有依赖关系,它会以正确的次序安装所有包。因此,您至少不必以正确的次序手工安装每个包。如果您使用过 Debian 的 APT,可能希望有像 apt-get 命令一样的功能,apt-get 命令会寻找需要的东西(包括依赖包)并安装它们。对于基于 RPM 的系统,YUM (Yellowdog Updater Modified) 提供这种功能。清单 3 说明如何使用带 install 选项的 yum 命令安装 gcl 和必需的 gcl-selinux 包。清单 3. 使用 yum 安装 gclrootechidna # yum install gclLoaded plugins: presto, refresh-packagekitSetting up Install ProcessResolving Dependencies- Running transaction check- Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated- Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64- Running transaction check- Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be updated- Finished Dependency ResolutionDependencies Resolved= Package Arch Version Repository Size=Installing: gcl x86_64 2.6.8-0.7.20100201cvs.fc12 updates 6.3 MInstalling for dependencies: gcl-selinux x86_64 2.6.8-0.7.20100201cvs.fc12 updates 17 kTransaction Summary=Install 2 Package(s)Upgrade 0 Package(s)Total download size: 6.4 MInstalled size: 40 MIs this ok y/N: yDownloading Packages:Setting up and reading Presto delta metadataupdates/prestodelta | 964 kB 00:01 Processing delta metadataPackage(s) data still to download: 6.4 M(1/2): gcl-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm | 6.3 MB 00:12 (2/2): gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64.rpm | 17 kB 00:00 -Total 398 kB/s | 6.4 MB 00:16 Running rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning Transaction Installing : gcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64 1/2 Installing : gcl-2.6.8-0.7.20100201cvs.fc12.x86_64 2/2 Installed: gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 Dependency Installed: gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 Complete!清单 3 中的输出表明,YUM 在名为 “updates” 的存储库中找到了 gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 和 gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12(稍后详细讨论),并判断出总下载大小。按 “y” 同意之后,它下载这两个包,然后安装依赖包,最后安装 gcl。在本文后面会进一步讨论依赖关系。包的位置在前一节中,学习了如何安装 RPM 包。但是,包来自什么地方呢?yum 如何知道从哪里下载包?起点是 /etc/yum.repos.d/ 目录,这个目录常常包含几个 repo 文件。这是 repo 的默认位置,但是可以在 YUM 配置文件(通常是 /etc/yum.conf)中指定其他位置。清单 4 给出 fedora-updates.repo,我们从它所对应的位置获取 gcl 并安装在我的 Fedora 12 系统上。典型的 repo 文件分为三个部分,一个用于一般的包,一个用于调试包,最后一个用于源代码包。常常可以从不同的位置(即镜像)获取发行版的包拷贝。所以 repo 文件告诉 yum 在哪里可以找到每个部分的最新镜像列表。注意,发行版的发布级别和机器架构表示为参数,所以对于我的 x86_64 Fedora 12 系统,yum 会从 https:/mirrors.fedoraproject.org/metalink?repo=updates-released-f12&arch=x86_64 下载列表。除了存储库位置之外,repo 文件还指出某个存储库是否启用了,以及是否应该使用 GPG 签名检查下载的包。清单 4. fedora-updates.repoianechidna $ cat /etc/yum.repos.d/fedora-updates.repoupdatesname=Fedora $releasever - $basearch - Updatesfailovermethod=priority#baseurl=http:/download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/mirrorlist=https:/mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearchenabled=1gpgcheck=1gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearchupdates-debuginfoname=Fedora $releasever - $basearch - Updates - Debugfailovermethod=priority#baseurl=http:/download.fedoraproject.org/pub/fedora/linux/updates/$releasever/$basearch/debug/mirrorlist=https:/mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&arch=$basearchenabled=0gpgcheck=1gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearchupdates-sourcename=Fedora $releasever - Updates Sourcefailovermethod=priority#baseurl=http:/download.fedoraproject.org/pub/fedora/linux/updates/$releasever/SRPMS/mirrorlist=https:/mirrors.fedoraproject.org/metalink?repo=updates-released-source-f$releasever&arch=$basearchenabled=0gpgcheck=1gpgkey=file:/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearchYUM 和 RPM 使用本地数据库判断安装的包。本地数据库中存储的包元数据是从启用的存储库获取的。尽管很少需要为本地数据库操心,但是可以使用 yumclean 命令清除本地存储的信息的不同部分,使用 yummakecache 在本地数据库中为启用的 repo 创建信息。例如,如果修改了 repo 配置,就可能需要这么做。删除 RPM 包如果要删除包,可以使用 yum 的 remove 选项或 rpm 的 -e 选项。使用 rpm-e 删除 gcl 的试运行见清单 5。如果可以删除这个包,就不会有输出。清单 5. 试删除 gclrootechidna # rpm -e -test gcl与使用 apt-get 模拟删除 Debian 包不同,RPM 系统并不维护自动安装的包的相关信息,所以无法通过试删除查明哪些依赖包也可以删除。但是,如果在单一命令中指定多个要删除的包,那么没有依赖关系的包会先于有依赖关系的包删除。与安装包不同,当使用 rpm 删除包时,在删除包之前没有提示。但是,如果试图删除其他包需要的包,它不会执行删除操作,您会看到清单 6 所示的错误消息。清单 6. 用 rpm 删除依赖包rootechidna # rpm -e gcl-selinuxerror: Failed dependencies:gcl-selinux is needed by (installed) gcl-2.6.8-0.7.20100201cvs.fc12.x86_64如果使用 yumremove,在执行事务测试之后会显示提示。如果试图删除的包是其他已安装包的依赖包,YUM 会提议删除这些包和依赖包,见清单 7。清单 7. 用 yum 删除依赖包rootechidna # yum remove gcl-selinuxLoaded plugins: presto, refresh-packagekitSetting up Remove ProcessResolving Dependencies- Running transaction check- Package gcl-selinux.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased- Processing Dependency: gcl-selinux for package: gcl-2.6.8-0.7.20100201cvs.fc12.x86_64- Running transaction check- Package gcl.x86_64 0:2.6.8-0.7.20100201cvs.fc12 set to be erased- Finished Dependency ResolutionDependencies Resolved= Package Arch Version Repository Size=Removing: gcl-selinux x86_64 2.6.8-0.7.20100201cvs.fc12 updates 90 kRemoving for dependencies: gcl x86_64 2.6.8-0.7.20100201cvs.fc12 updates 40 MTransaction Summary=Remove 2 Package(s)Reinstall 0 Package(s)Downgrade 0 Package(s)Is this ok y/N: nExiting on user CommandComplete!升级 RPM 包既然已经了解了如何安装和删除 RPM,我们来看看如何把 RPM 包升级到更高级别。可以使用 yumupdate 更新整个系统,还可以指定单一包或通配符。清单 8 说明如何更新所有名称以 “gr” 开头的包。注意,这里使用撇号防止 shell 展开 “*”。清单 8. 使用 yum update 执行更新rootechidna # yum update gr*Loaded plugins: presto, refresh-packagekitSetting up Update ProcessResolving Dependencies- Running transaction check- Package grep.x86_64 0:2.6.3-1.fc12 set to be updated- Package groff.x86_64 0:1.18.1.4-20.fc12 set to be updated- Finished Dependency ResolutionDependencies Resolved= Package Arch Version Repository Size=Updating: grep x86_64 2.6.3-1.fc12 updates 228 k groff x86_64 1.18.1.4-20.fc12 updates 1.5 MTransaction Summary=Install 0 Package(s)Upgrade 2 Package(s)Total download size: 1.7 MIs this ok y/N: yDownloading Packages:Setting up and reading Presto delta metadataProcessing delta metadataDownload delta size: 854 k6.fc12_2.6.3-1.fc12.x86_64.drpm: Errno 14 HTTP Error 404 : http:/fedora.fastsoft.net/pub/linux/fedora/linux/updates/12/x86_64/drpms/grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm Trying other mirror.(1/2): grep-2.5.3-6.fc12_2.6.3-1.fc12.x86_64.drpm | 214 kB 00:00 (2/2): groff-1.18.1.4-18.fc12_1.18.1.4-20.fc12.x86_64.drpm | 640 kB 00:00 Finishing rebuild of rpms, from deltarpms | 1.7 MB 00:02 Presto reduced the update size by 52% (from 1.7 M to 854 k).Running rpm_check_debugRunning Transaction TestTransaction Test SucceededRunning Transaction Updating : grep-2.6.3-1.fc12.x86_64 1/4 Updating : groff-1.18.1.4-20.fc12.x86_64 2/4 Cleanup : grep-2.5.3-6.fc12.x86_64 3/4 Cleanup : groff-1.18.1.4-18.fc12.x86_64 4/4 Updated: grep.x86_64 0:2.6.3-1.fc12 groff.x86_64 0:1.18.1.4-20.fc12 Complete!如果知道 RPM 文件的位置,或者已经下载了它们,那么也可以使用 rpm 命令执行更新。这与安装相似,只是要使用 -U 或 -F 选项而不是 -i 选项。这两个选项的差异是, -U 选项更新现有的包,如果这个包还没有安装,就安装它;而 -F 选项只升级或刷新 已经安装的包。因此,经常使用 -U 选项,尤其是在命令行包含 RPM 列表的情况下。这样的话,就会安装未安装的包,升级已经安装的包。常常使用另外两个选项 -v(详细)和 -h(# 标志)提供进度显示。清单 9 说明如何使用 rpm 命令更新 vim-common、vim-enhanced 和 vim-minimal 包。我们已经把 vim-common 和 vim-enhanced 包下载到根用户的主目录中,而 vim-minimal 包要从一个更新镜像获取。清单 9. 用 rpm 更新包rootechidna # ls *.rpmvim-common-7.2.411-1.fc12.x86_64.rpm vim-enhanced-7.2.411-1.fc12.x86_64.rpmrootechidna # rpm -Uvh *.rpm http:/mirrors.usc.edu/pub/linux/distributions /fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpmRetrieving http:/mirrors.usc.edu/pub/linux/distributions/fedora/linux/updates/12/x86_64/vim-minimal-7.2.411-1.fc12.x86_64.rpmPreparing. # 100% 1:vim-common # 33% 2:vim-enhanced # 67% 3:vim-minimal # 100%查询 RPM 包您在前面的示例中看到,用 rpm 命令安装 rpm 需要包文件的完整名称(或 URL),比如 gcl-2.6.8-0.6.20090701cvs.fc12.x86_64.rpm。另一方面,用 yum 安装或用这两个命令删除 rpm 只需要包名,比如 gcl。与 APT 一样,RPM 在内部数据库中维护安装的包的信息,因此允许使用包名操作安装的包。在本节中,看看可以使用 rpm 的 -q(代表查询)选项或相关联的 yum 查询从数据库获取的一些信息。基本查询只检查包是否已经安装了,如果安装了,就查询版本。增加 -i 选项会得到包的相关信息。注意,安装、升级或删除包需要根权力,但是非根用户也可以查询 rpm 数据库。清单 10. 显示 gcl 的相关信息ianechidna $ yum list gclLoaded plugins: presto, refresh-packagekitInstalled Packagesgcl.x86_64 2.6.8-0.7.20100201cvs.fc12 updatesianechidna $ rpm -q gclgcl-2.6.8-0.7.20100201cvs.fc12.x86_64ianechidna $ yum info gclLoaded plugins: presto, refresh-packagekitInstalled PackagesName : gclArch : x86_64Version : 2.6.8Release : 0.7.20100201cvs.fc12Size : 40 MRepo : installedFrom repo : updatesSummary : GNU Common LispURL : http:/www.gnu.org/software/gcl/License : GPL+ and LGPLv2+Description: GCL is a Common Lisp currently compliant with the ANSI standard. : Lisp compilation produces native code through the intermediary of : the systems C compiler, from which GCL derives efficient : performance and facile portability. Currently uses TCL/Tk as GUI.ianechidna $ rpm -qi gclName : gcl Relocations: (not relocatable)Version : 2.6.8 Vendor: Fedora ProjectRelease : 0.7.20100201cvs.fc12 Build Date: Tue 23 Mar 2010 03:20:36 PM EDTInstall Date: Wed 05 May 2010 01:01:34 PM EDT Build Host: x86-02.phx2.fedoraproject.orgGroup : Development/Languages Source RPM: gcl-2.6.8-0.7.20100201cvs.fc12.src.rpmSize : 41667750 License: GPL+ and LGPLv2+Signature : RSA/8, Tue 23 Mar 2010 04:14:06 PM EDT, Key ID 9d1cc34857bbccbaPackager : Fedora ProjectURL : http:/www.gnu.org/software/gcl/Summary : GNU Common LispDescription :GCL is a Common Lisp currently compliant with the ANSI standard. Lispcompilation produces native code through the intermediary of thesystems C compiler, from which GCL derives efficient performance andfacile portability. Currently uses TCL/Tk as GUI.详细的清单显示与 RPM 包相关联的一些标记。注意,rpm 和 yum 以不同的格式显示不同的信息。在本文中,我们都使用标准命令选项提供的基本输出。如果希望使用 rpm-queryformat 选项定制查询输出,请参考手册页。如果希望了解您的 rpm 版本支持的所有标记,应该运行 rpm-querytags。如清单 10 所示,可以使用 yum 列出安装的包。还可以用它列出有更新可用的包、可以安装的包以及具有其他性质的包,比如废弃的包或存储库中最近添加的包。甚至可以使用 yum 搜索包。在清单 11 中可以看到,texmacs 包还没有安装,但是可以从 fedora 存储库获取它。如果搜索 “texmacs”,会看到提到它的四个包。很容易看出为什么会找到 TeXmacs* 包。使用 yuminfopydot 查明为什么也会找到 pydot 包。清单 11. 搜索 texmacsianechidna $ yum list texmacsLoaded plugins: presto, refresh-packagekitAvailable PackagesTeXmacs.x86_64 1.0.7.2-2.fc12 fedoraianechidna $ yum search texmacsLoaded plugins: presto, refresh-packagekit= Matched: texmacs =TeXmacs-devel.i686 : Development files for TeXmacsTeXmacs-devel.x86_64 : Development files for TeXmacsTeXmacs.x86_64 : Structured wysiwyg scientific text editorpydot.noarch : Python interface to Graphvizs Dot language对于后面的查询示例,我们主要使用 rpm,因为它的选项更丰富。许多示例也可以使用 yum 完成,yum 有一些基本 rpm 选项不具备的功能。RPM 包和其中的文件用户常常希望知道一个包中有哪些文件,或者某个文件来自哪个包。使用 -ql 选项列出 gcl 包中的文件,见清单 12。这个包中有许多文件,所以这里只给出部分输出。清单 12. 显示 gcl 包中的文件ianechidna $ rpm -ql gcl/usr/bin/gcl/usr/lib/gcl-2.6.8/usr/lib/gcl-2.6.8/clcs/usr/lib/gcl-2.6.8/clcs/sys-proclaim.lisp/usr/lib/gcl-2.6.8/cmpnew/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpmain.lsp/usr/lib/gcl-2.6.8/cmpnew/gcl_cmpopt.lsp/usr/lib/gcl-2.6.8/cmpnew/gcl_collectfn.lsp./usr/share/info/gcl-tk.info.gz/usr/share/info/gcl.info-1.gz/usr/share/info/gcl.info-2.gz/usr/share/info/gcl.info-3.gz/usr/share/info/gcl.info-4.gz/usr/share/info/gcl.info-5.gz/usr/share/info/gcl.info-6.gz/usr/share/info/gcl.info-7.gz/usr/share/info/gcl.info-8.gz/usr/share/info/gcl.info-9.gz/usr/share/info/gcl.info.gz/usr/share/man/man1/gcl.1.gz通过在查询中添加 -c 选项,可以把列出的文件限制为配置文件。-d 选项把输出限制为文档文件。查询包文件上面的包查询命令在 RPM 数据库中查询已经安装的包。如果刚下载了一个包,想获取同类信息,可以在查询中使用 -p(代表包文件)选项并指定包的文件 名(与安装包时一样)。清单 13 显示前面下载的两个 vim 包的信息。我们只作为根用户运行它,因为文件在根用户的主目录中。可以添加其他查询选项,比如用 -l 列出文件,用 -i 列出信息。清单 13. 显示两个 vim 包的包文件信息rootechidna # rpm -qp *.rpmvim-common-7.2.411-1.fc12.x86_64vim-enhanced-7.2.411-1.fc12.x86_64查询安装的所有包-a 选项把查询应用于安装的所有包。这会生成许多输出,所以通常同时使用一个或多个筛选器,比如用 sort 进行排序,用 more 或 less 进行分页输出,用 wc 获取包或文件内容,用 grep 搜索您不确定名称的包。清单 14 给出以下查询:1. 系统上所有包的排序列表2. 系统上所有包的数量3. 系统上所有包中的所有文件的数量4. 用 RPM 安装的所有文档文件的数量5. 搜索名称中包含 “gcl” 的所有包(区分大小写)清单 14. 对所有包执行查询ianechidna $ rpm -qa | sort | moreaalib-libs-1.4.0-0.18.rc5.fc12.x86_64abrt-1.0.8-2.fc12.x86_64abrt-addon-ccpp-1.0.8-2.fc12.x86_64abrt-addon-kerneloops-1.0.8-2.fc12.x86_64abrt-addon-python-1.0.8-2.fc12.x86_64abrt-desktop-1.0.8-2.fc12.x86_64abrt-gui-1.0.8-2.fc12.x86_64abrt-libs-1.0.8-2.fc12.x86_64abrt-plugin-bugzilla-1.0.8-2.fc12.x86_64abrt-plugin-logger-1.0.8-2.fc12.x86_64abrt-plugin-runapp-1.0.8-2.fc12.x86_64abyssinica-fonts-1.0-5.fc12.noarchacl-2.2.49-2.fc12.x86_64.ianechidna $ rpm -qa | wc -l1792ianechidna $ rpm -qal | wc -l281052ianechidna $ rpm -qad | wc -l45686ianechidna $ rpm -qa | grep -i gclgcl-selinux-2.6.8-0.7.20100201cvs.fc12.x86_64gcl-2.6.8-0.7.20100201cvs.fc12.x86_64使用 rpm -qa 可以简化对多个系统的管理。如果把排序的输出重定向到一台机器上的文件,然后在另一台机器上也这么做,就可以使用 diff 程序寻找差异。哪个包包含某一文件?既然可以列出所有包和一个包中的所有文件,现在就掌握了查明哪个包包含某一文件所需的所有信息。但是,rpm 命令的 -f(或 -file)选项可以帮助找到包含某一文件的包。假设您想知道前面看到的哪个 vim 包提供 vim 命令。您需要文件的完整路径。清单 15 说明如何使用 which 命令得到 vim 命令的完整路径,可以使用这个输出作为 rpm -qf 命令的输入。注意,which guile-config 前后的符号是反撇号。在 Bash shell 中,另一种使用方法是 $(which vim)。清单 15. 哪个包提供 vim 可执行文件ianechidna $ which vim/usr/bin/vimianechidna $ rpm -qf which vimvim-enhanced-7.2.411-1.fc12.x86_64ianechidna $ rpm -qf $(which vim)vim-enhanced-7.2.411-1.fc12.x86_64RPM 依赖关系在前面看到删除 gcl-selinux 包的操作失败了,这是因为存在依赖关系。除了文件之外,RPM 包可能包含其他包所依赖的任意功能。如您所见,依赖关系通常会正常发挥作用。如果需要同时安装几个包,其中一些依赖于其他包,那么只需使用 yum,或者向 rpm -Uvh 命令提供完整的列表,它会分析依赖关系并按正确的次序执行安装。除了在安装或删除包时产生的错误消息之外,还可以通过几种方法查明包需要或依赖的文件或功能。rpm 命令提供的一个选项可以查询安装的包或包文件,从而查明它们依赖或需要 什么功能。这个选项是 -requires,它可以简写为 -R。清单 16 显示 gcl 需要的功能。如果要查询包文件而不是 RPM 数据库,那么添加 -p 选项并使用完整的 RPM 文件名。清单 16. gcl 需要什么ianechidna $ rpm -qR gcl/bin/sh /bin/sh /bin/sh /sbin/install-info /sbin/install-info gcl-selinux libX11.so.6()(64bit) libc.so.6()(64bit) libc.so.6(GLIBC_2.11)(64bit) libc.so.6(GLIBC_2.2.5)(64bit) libc.so.6(GLIBC_2.3)(64bit) libc.so.6(GLIBC_2.3.4)(64bit) libc.so.6(GLIBC_2.4)(64bit) libc.so.6(GLIBC_2.7)(64bit) libc.so.6(GLIBC_2.8)(64bit) libdl.so.2()(64bit) libgmp.so.3()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.2.5)(64bit) libreadline.so.6()(64bit) libtcl8.5.so()(64bit) libtk8.5.so()(64bit) libz.so.1()(64bit) rpmlib(CompressedFileNames) = 3.0.4-1rpmlib(FileDigests) = 4.6.0-1rpmlib(PayloadFilesHavePrefix) = 4.0-1rtld(GNU_HASH) rpmlib(PayloadIsXz) = 5.2-1把功能与提供它们的包联系起来不太容易。带 deplist 选项的 yum 命令可以提供帮助。如果只指定包名,没有版本号,可能会得到其他已知版本的列表。清单 17 说明如何获得安装的 gcl 版本的依赖列表。清单 17. 使用 yum deplist 查明 gcl 需要什么ianechidna $ yum deplist $(rpm -q gcl)Loaded plugins: presto, refresh-packagekitFinding dependencies: package: gcl.x86_64 2.6.8-0.7.20100201cvs.fc12 dependency: libc.so.6(GLIBC_2.3.4)(64bit) provider: glibc.x86_64 2.11-
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 销售管理


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!