第十四章 软件包管理

前言

  1. 软件包管理是一种在系统上安装、维护软件的方法。目前,很多人通过安装 Linux 经销商发布的软件包来满足他们所有的软件需求。
  2. 这与早期的 Linux 形成鲜明的对比。因为在 Linux 早期,想要安装软件必须先下载源代码,然后对齐进行编译。这并不是说编译源代码不好,源代码公开恰是 Linux 吸引人的一大亮点。
  3. 编译源代码赋予用户自主检查、提升系统的能力,只是使用预先编译的软件包会更快、更容易些。
  4. 本章会介绍一些用于 Linux 软件包管理的命令行工具。虽然所有主流的 Linux 发行版本都提供了强大而复杂的维持系统运行的图形化界面操作程序,但学习命令行程序同样重要,因为它可以执行许多图形化程序很难甚至无法完成的任务。

软件包系统

  1. 基本介绍
  • 不同的 Linux 发行版用的是不同的软件包系统,并且原则上,适用于一种发行版的软件包与其他版本是不兼容的。多数 Linux 发行版采用的不外乎两种软件包技术阵容,即 Debian 的 .deb 技术和 Red Hat 的 .rpm 技术。当然也有一些特例,比如 Gentoo、Slackware 和 Foresight 等。
  1. 主流软件包系统类
软件包系统 发行版本(只列举了部分)
Debian 类 (.deb 技术) Debian、Ubuntu、Xandros、Linspire
Red Hat 类 (.rpm 技术) Fedora、CentOS、Red Hat Enterprise Linux、OpenSUSE、Mandriva、PCLinuxOS

软件包系统工作方式

  1. 基本介绍
  • 在非开源软件产业中,给系统安装一个新的应用,通常先购买安装光盘之类的安装介质,然后运行安装向导进行安装。
  • Linux 并不是这样。事实上,Linux 系统所有软件均可在网上找到,并且多数以软件包文件的形式由发行商提供,其余则可以手动安装的源代码形式存在。
  1. 软件包文件
  • 包文件是组成软件包系统的基本软件单元,它是由组成软件包的文件压缩而成的文件集。
  • 一个包可能包含大量的程序以及支持这些程序的数据文件,包文件既包含了安装文件,又包含了有关包自身及其内容的文本说明之类的软件包元数据。此外,许多软件包中还包含了安装软件包前后执行配置任务的安装脚本。
  • 包文件通常由软件包维护者创建,该维护者通常 (并不总是) 是发行商的职员。包维护者从上游供应商 (一般是程序的作者) 获得软件源代码,然后进行编译,并创建包的元数据及其他必须的安装脚本。
  • 通常,包维护者会在初始源代码上做了部分修改,从而提高了该软件包与该 Linux 发行版本其他部分的兼容性。
  • 虽然一些软件项目选择自己包装和分销,但如今多数软件包均由发行商或感兴趣的第三方创建。Linux 用户可以从其所使用的 linux 版本的中心库中获得软件包。
  • 所谓的中心库,一般包含了成千上万个软件包,而且每一个都是专门为该发行版本建立和维护的。
  • 在软件开发生命周期的不同阶段,一个发行版本可能会维护多个不同仓库。
  • 例如,通常会有一个测试库,该库里面存放的是刚创建的、用于调试在软件包正式发布前查找漏洞的软件包。
  • 另外,一个发行版通常还会由一个开发库,存放的是下一个公开发行的版本中所包含的开发中软件包。
  • 一个发行版本可能还会有相关的第三方库,这些库通常提供因法律原因,如专享礼或数字版权管理 (DRM) 等反规避问题而不能包括在发行版本中的软件。
  • 第三方库主要用在软件专利和反规避法不适用的国家,这些库通常完全独立于他们所支持的 Linux 版本,用户必须充分了解后手动将其加入到软件包文件管理系统的配置文件中,才能使用他们。
  1. 依赖关系
  • 几乎没有任何一个程序式独立的。与之相反,程序之间相互依赖彼此完成既定工作。
  • 一些共有的操作,比如共有的操作,比如输入/输出操作,就是由多个程序共享的历程执行。这些例程存储在共享库里面,共享库里面的文件为了多个文件程序提供必要的服务。
  • 如果一个软件包需要共享库之类的共享资源,说明其具有依赖性。
  • 现代软件包管理系统都提供依赖性解决策略,从而确保用户安装了软件包的同时也安装了其所有的依赖关系。
  1. 高级和低级软件包工具
  • 软件包管理系统通常包含两类工具-执行如安装、删除软件包文件等任务的低级的低级工具和进行元数据索索及提供依赖性解决的高级工具。
  • 本章将要介绍 Debian 类型的系统 (如 Ubuntu 等类似系统) 所提供的软件包安装工具。
  • 尽管所有 Red-Hat 系列版本都是使用相同的低级工具 (.rpm) ,但使用的高级工具却不尽不同。
  • 下面我们将讨论高级软件包工具 yum 程序,它为高级 Fedora 、Red Hat Enterprise Linux (红帽企业版 Linux) 和 CentOS 等系统所用,而其他 Red Hat 系列的发行版本也提供功能与之相媲美的高级工具。
  1. 软件包系统工具
发行版本 低级工具 高级工具
Debian 类 dpkg apt-get、aptitude
Fedora、Red Hat Enterprise、CentOS rpm yum

常见软件包管理任务

基本介绍

  1. 命令行软件包管理工具可以完成许多操作,下面我们介绍一些较常见的。
  2. 有一点要说明,低级工具也支持软件包文件的创建,但不在本书讨论范围内。

在库里面查找软件包

  1. 基本介绍
  • 通过使用高级工具来搜索库元数据时,我们可以根据包文件名或其描述来查看该包。
  1. 包搜索命令
系统类型 命令
Debian 系统 apt-get update
apt-cache search search_string
Red Hat 系统 yum search search_string
  1. 案例
  • 例如,在 Red Hat 系统的 yum 库中搜索 emac 文本编辑器的代码如下:
    1
    yum search emacs

安装库中的软件包

  1. 软件包安装命令
系统类型 命令行
Debian 系统 apt-get update
apt_get install package_name
Red Hat 系统 yum install package_name
  1. 案例
  • 例如,在 Debian 系统上安装 apt 元数据库中的 emacs 文本编辑器的代码如下:
    1
    apt-get update;apt-get install emacs

安装软件包文件中的软件包

  1. 低级软件包安装命令
系统类型 命令
Debian 系统 dpkg –install package_file
Red Hat 系统 rpm -i package_file
  1. 案例
  • 例如,当 emacs-22.1-7.fc7-i386.rpm 软件包文件从非库资源网站下载时,可采用如下方式安装于 Red Hat 系统中:
    1
    rpm -i emacs-22.1-7.fc7-i386.rpm
  1. 补充说明
  • 由于该方法采用低级 rpm 工具安装,所以并不会解决依赖性关系。一旦 rpm 在安装过程中发现缺少依赖包,rpm 就会跳出错误后退出。

删除软件包

  1. 软件包移除命令
系统类型 命令
Debian 系统 apt-get remove package
Red Hat 系统 yum erase package_name
  1. 案例
  • 例如,从 Debian 系统中卸载 emacs 软件包的代码如下:
    1
    apt-get remove emacs

更新库中的软件包

  1. 软件包更新命令
系统类型 命令
Debian 系统 apt-get update;apt-get upgrade
Red Hat 系统 yum update
  1. 案例
  • 例如,更新所有已安装于 Debian 系统中的可更新软件包的代码如下:
    1
    apt-get update; apt-get upgrade

更新软件包文件中的软件包

  1. 低级软件包更新命令
系统类型 命令
Debian 系统 dpkg –install package_file
Red Hat 系统 rpm -U package_file
  1. 案例
  • 例如,将 Red Hat 上已经安装好的 emacs 程序更新为 emacs-22.1-7.fc7-i386.rpm 软件包文件中的版本的代码如下:
    1
    rpm -U emacs-22.1-7.fc7-i386.rpm
  1. 补充说明
  • 与 rpm 命令不同,dpkg 命令在更新软件包时并没有指定的参数选项,只有在安装软件包时才有。

列出已安装的软件包列表

  1. 软件包列表命令
系统类型 命令
Debian 系统 dpkg –list
Red Hat 系统 rpm -qa

判断软件包是否安装

  1. 软件包状态命令
系统类型 命令
Debian 系统 dpkg –status package_name
Red Hat 系统 rpm -q package_name
  1. 案例
  • 例如,判断 emacs 程序包在 Debian 系统中是否安装的代码如下:
    1
    dpkg --status emacs

查看某具体文件由哪个软件包安装得到

  1. 查询文件所属命令
系统类型 命令
Debian 系统 dpkg –search file_name
Red Hat 系统 rpm -qf file_name
  1. 案例
  • 例如,查看 Red Hat 系统中哪个软件包安装了 /usr/bin/vim 目录下的文件的代码如下:
    1
    rpm -qf /sur/bin/vim

参考文章

  • 转载:Linux 命令行大全