Linux软件安装和包管理工具有哪些

这篇文章主要介绍“Linux软件安装和包管理工具有哪些”,在日常操作中,相信很多人在Linux软件安装和包管理工具有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux软件安装和包管理工具有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联建站不只是一家网站建设的网络公司;我们对营销、技术、服务都有自己独特见解,公司采取“创意+综合+营销”一体化的方式为您提供更专业的服务!我们经历的每一步也许不一定是最完美的,但每一步都有值得深思的意义。我们珍视每一份信任,关注我们的成都做网站、成都网站制作质量和服务品质,在得到用户满意的同时,也能得到同行业的专业认可,能够为行业创新发展助力。未来将继续专注于技术创新,服务升级,满足企业一站式全网营销推广需求,让再小的品牌网站设计也能产生价值!

0 前言

一般来说,在Linux系统中有三种安装软件的方式:源码编译安装,可执行文件(软件包)安装 以及 前端工具依赖安装。

0.1 源码编译安装

绝大多数开源软件都是直接以源代码形式发布的,源代码一般会被打成 .tar.gz 的归档压缩文件。对压缩文件进行解压后,获取到的 源代码 需要 编译成 二进制形式之后才能够运行使用。源代码编译基本流程:

  • ./configure 检查、构建编译环境;

  • make 对源代码进行编译,一般是调用 Makefile 文件,从中读取指令,生成可执行文件;

  • make test / make check 对上一步的编译进行检查,确保无错误(有时候没有这一步);

  • make install 将生成的可执行文件安装到本地;

源代码安装操作复杂,编译时间长,极易出现问题,依赖关系复杂且需手动安装依赖。

0.2 软件包安装

由于源代码安装的不便利,软件包平台会将代码基于特定平台系统编译为可执行文件,并保存依赖关系,来简化开源软件的安装管理。针对不同的系统设定不同的包,例如针对Debian和Ubuntu设计了dpkg软件包,针对Red Hat和CentOS设计了RPM软件包等。

软件包安装虽然可以直接对软件包运行命令,但仍然需要下载软件包到本地,且需要手动处理依赖关系,比较不便。

0.3 前端工具安装

为了解决软件包安装的安装包和依赖问题,设计了前端工具,例如 yum 是 rpm的前端工具,apt-get 是 dpkg 的前端工具。前端工具引入了仓库(可以是本地的,也可以是远程的)概念,对软件包进行管理,同时在软件安装过程中自动解决依赖问题。

1 软件包管理 Package Management

软件包管理系统是在电脑中自动安装、配制、卸载和升级软件包的工具组合,在各种系统软件和应用软件的安装管理中均有广泛应用。

在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。常见的有:

  • dpkg: 全称 Debian Package,原先被Debian使用,现在也被Ubuntu使用(注:Ubuntu源于Debian,最早于2004年是作为Debian的一个分支出现)。用来管理 .deb 格式软件包,是第一个拥有广泛知晓的依赖解决方案工具APT的软件包管理工具。aptitude,基于 ncurses 供APT使用的前端,也同样是一个为Debian类系统的软件包管理器。

  • RPM: 全称 Redhat Package Manager,由Red Hat 创建。RPM 是 Linux标准的基础打包格式,并且是一系列其他工具的基础,包括 apt4rpm, 红帽的 up2date, Mageia的urpmi, openSUSE的 ZYpp(zypper), PLD Linux的 poldek, Fedora的DNF 和 YUM (被 Red Hat 企业版Linux 和 Yellow Dog Linux使用)。也就是说,这些都是它的前端。

  • 其他软件包管理系统有ArchLinux中使用的Pacman,Gentoo使用的基于源代码的Portage,FreeBSD下的pkg,Mac系统下的Homebrew等。

使用软件包管理系统将大大简化在Linux发行版中安装软件的过程。

2 dpkg

2.1 dpkg (Debian Package)

dpkg本身是一个底层的工具,可以安装,移动和构建软件包,但是不像其他的软件包管理系统,它只能用来安装本地的.deb文件,不能自动地从远程包仓库下载包以及处理包的依赖的关系,且不会关心软件仓库内的软件。以下是使用dpkg来管理本地安装的软件包:

  • 列出在系统软件包数据库中的所有软件,包括所有的软件包,安装的、未安装的,也可用 grep 来指定列出某些包:

dpkg -l | grep packageName
  • 列出被软件安装的文件

dpkg -L keyword
  • 如果你不确定某个文件是被哪个软件包所安装,dpkg -S 会告诉你:

    dpkg -S /etc/host.conf 
    base-files: /etc/host.conf

    上面的例子说明 /etc/host.conf 属于 base-files 软件包。

    注意

    很多文件是在软件包安装过程中自动产生的,尽管它们存在文件系统中,但 dpkg -S 也可能不知道这些文件属于哪个软件包。

  • 安装本地 .deb 文件示例:

sudo dpkg -i zip_3.0-4_amd64.deb
  • 卸载软件包示例:

sudo dpkg -r zip

警告:

使用dpkg去卸载软件包,在大多数情况下,是不推荐使用的。更好的方法,是使用一个软件包管理器去处理依赖问题,确保系统处在一个持续可用的状态。例如,使用 dpkg -r zip 将卸载 zip 软件包,但是其他已安装的依赖于这个软件包的软件就可能用不了了。

使用 man dpkg命令查看更多。

2.2 apt (Advanced Packaging Tool)

apt命令是一个强大的命令行工具,执行 安装新的软件包,更新已有的软件包,更新软件包列表索引 甚至 更新整个Ubuntu系统等操作。apt-get会解决和安装模块的依赖问题,并会查询软件仓库,但不会安装本地的deb文件。apt是建立在dpkg之上的软件管理工具。以下是一些常用方法

2.2.1 apt-get命令
# 更新
sudo apt-get update     更新源
sudo apt-get dist-upgrade  升级系统到相应的发行版(根据 source.list 的配置)
sudo apt-get upgrade    更新已安装的包

# 安装
sudo apt-get install packageName1 [packageName2]   安装包
sudo apt-get install packageName --reinstall   重新安装包
sudo apt-get -f install packageName    修复安装
sudo apt-get build-dep packageName     安装相关的编译环境

# 删除
sudo apt-get remove packageName   删除包
sudo apt-get --purge  remove packageName   删除包,包括配置文件等

# 其他
apt-get check  检查是否有损坏的依赖
sudo apt-get source packageName  下载该包的源代码 
apt-get autoclean  删除你已经删掉的软件的 deb 包
apt-get clean  删除所有的 deb 包,包括已经安装的软件包
2.2.2 apt-cache命令
sudo apt-cache search packageName     搜索软件包
sudo apt-cache show packageName       获取包的相关信息,如说明、大小、版本等。
sudo apt-cache showpkg packageName    显示软件包的大致信息
sudo apt-cache depends packageName    了解该包依赖哪些包
sudo apt-cache rdepends packageName   查看该包被哪些包依赖
2.2.3 apt文件
/var/lib/dpkg/available  软件包的描述信息, 其中包括当前系统中已安装的和未安装的软件包.
/etc/apt/sources.list    记录软件源的地址,修改此文件可配置软件源
/var/cache/apt/archives  已经下载到的软件包都放在这里( apt-get install 安装软件时,软件包临时存放路径)
/var/lib/apt/lists       使用 apt-get update 命令会从/etc/apt/sources.list中下载软件列表,并保存到该目录
/var/log/dpkg.log        所有apt操作的日志将保存至该文件
2.2.4 apt-get update 执行过程
  • 执行 apt-get update

  • 程序分析 /etc/apt/sources.list 和 /etc/apt/sources.list.d

  • 自动连网寻找 list 中对应的 Packages/Sources/Release 列表文件,如果有更新则下载之,存入 /var/lib/apt/lists/ 目录

  • apt-get install 相应的包 ,下载并安装。

2.2.5 apt-get intsall 执行过程
  • 扫描本地的软件更新列表,也就是 apt-get update 时保存的 /var/lib/apt/lists 文件

  • 软件包依赖检查,找到需要安装的软件包所依赖的所有包

  • 从软件源中的镜像站中下载 deb 包

  • 解压软件包,并自动完成软件的安装和配置

2.2.6 修改软件源 /etc/apt/sources.list
  • 备份原先的 source.list 文件,方便回滚

  • 修改 sources.list 文件

  • sudo apt-get update 更新源

2.2.7 apt-get update 和 apt-get upgrade 的区别

应该先执行 apt-get update 再执行 apt-get upgrade。它们中的任何一个都不会自动地执行另一个。

  • apt-get update 更新可用的软件包列表以及版本。但不对软件包进行安装或升级。

  • apt-get upgrade 将实际地安装你所拥有的软件包的更新版本。当你更新完软件清单后,软件包管理器就知道你已安装的软件中哪些有可用的更新,这就是为什么一开始要执行update的原因。

  • 可以联合执行 apt-get update && apt-get upgrade 

2.3 aptitude

2.3.1 菜单结构

不用命令行选项启动 Aptitude 将会展示一个菜单结构,基于文本的前端 APT系统。很多共同的软件包管理方法,例如安装,卸载和升级,都可以以 Aptitude 加一个一般是小写字母的单词命令进行执行。

与 apt-get 不同的是,aptitude在处理依赖问题上更佳一些。举例来说,aptitude在删除一个包时,会同时删除本身所依赖的包。这样,系统中不会残留无用的包,整个系统更为干净。

Aptitude 最适合于在非图像界面终端环境中使用,可在终端中输入:

sudo aptitude

当 Aptitude 启动时,你将在屏幕顶部看到一个菜单栏,下面有两个窗口。上面的窗口包括软件包目录,例如 新的软件包 和 未安装的软件包。底下的窗口包含软件包和软件包路面的相关信息。

使用 Aptitude用户界面 来做软件包管理非常简单:

  • 安装软件: 使用 键盘方向键 + ENTER 按键,在 未安装软件包 目录中定位到你想要安装的软件。当软件包高亮时,按 + 键。此时,软件包将变成 绿色 ,意味着它已被标记成要安装了。此时按下 g键,将展示一段软件包动作的小结。再按 g键,此时将开始软件包的下载和安装。当完成后,按 ENTER键 返回菜单。

  • 卸载软件: 使用 键盘方向键 + ENTER 按键,在 已安装软件包 目录中定位到你想要卸载的软件。当软件包高亮时,按 - 键。此时,软件包将变成 粉红色 ,意味着它已被标记成要被卸载了。此时按下 g键,将展示一段软件包动作的小结。再按 g键,此时将开始软件包的卸载。当完成后,按 ENTER键 返回菜单。

  • 更新软件包索引: 按 u键 即可。

  • 更新软件包: 先执行以上更新软件包索引的操作,再按 U键 去标记所有你想更新的软件包。此时按下 g键,将展示一段软件包动作的小结。再按 g键,此时将开始软件包的下载和安装。当完成后,按 ENTER键 返回菜单。

展示在顶部窗口的软件包信息的第一列,当在查看当前软件包状态时,可使用以下快捷键:

i: 已安装软件
c: 软件包未安装,但包配置文件仍存在系统中
p: 已从系统中清除
v: 虚拟软件包
B: 已破损软件包
u: 解压出来的文件,但安装包仍未配置
C: 半配置的:配置失败需要解决
H: 半安装的:卸载失败需要解决

为了退出 Aptitude,按 q键 并确认即可。按 F10键 查看 Aptitude 菜单的详情。

2.3.2 命令行

你也可以 Aptitude 作为命令行工具,和 apt类似。

安装

sudo aptitude install packageName

卸载

sudo aptitude remove packageName

2.4 dpkg 和 apt 的关系

  • 两者都是对.deb文件进行安装、卸载等操作。

  • dpkg需手动下载.deb文件到本地进行操作,而apt作为前端工具,会直接从远程仓库中获取下载。

  • dpkg不能处理依赖问题,需要手动一个个安装好,而apt会自动处理,并一次性安装好。

3 RPM (Red Hat Package Manager)

Linux发行版经常使用不通的软件包管理工具,而 基于 Red Hat的发行版使用  RPM (Red Hat Package Manager) 和YUM/DNF (Yellow Dog Updater, Modified/Dandified YUM).

3.1 RMP (Red Hat Package Manager)

RPM 是在 Red Hat企业版Linux基础的发行版中的一个流行的软件包管理工具。你可以使用 RPM安装、卸载和查询软件安装包。虽然RPM 不能像 YUM一样进行软件包依赖管理,但仍会提示安装所需要的软件包清单。 一个 RPM 软件包由 文件 和 元数据存档 组成,其中元数据包括帮助脚本,文件属性 和 软件包信息。

RPM 维护了一个已安装软件包的数据库,这提供了强大而快速的查询功能。RPM 数据库在 /var/lib目录里,文件以 __db*命名。

RPM 有很多基本模式:查询、验证、安装、升级、清除、展示查询标签、展示配置等,要执行软件包管理任务,必须选择其中之一。每个模式都有自己的一套选项。可通过命令 man rpm进行查看。以下是一些常用的模式

模式描述
-i安装软件包
-U升级软件包
-e清除软件包
-V验证软件包
-q查询软件包

这是一些常用选项:

选项目的
-? | --help输出帮助信息
--version输出版本信息
-v输出冗余信息

命令示例

# 安装
rpm -i package-file
# 升级
rpm -U package-file
# 安装,输出冗余信息,并用#符号(hash)展示进度,见图一
rpm -ivh package-file
# 查询,选项a表示查询所有的(all)已安装软件包,见图二
rpm -qa vim-enhanced
# 移除,见图三
rpm -evh vim-enhanced

Linux软件安装和包管理工具有哪些

图一

Linux软件安装和包管理工具有哪些

图二

Linux软件安装和包管理工具有哪些

图三

3.2 Yellow Dog Updater, Modified (YUM) / Dandified yum (DNF)

[ 编者注: DNF 或 Dandified YUM 是Red Hat 企业版Linux 8, CentOS 8, Fedora 22(以及它们为基础的发行版)更新后默认的软件包管理器。 一般来说,命令选项是一样的。这里着重介绍YUM ]

YUM 是在Red Hat 企业版Linux中 首要的 软件包管理工具,用来对软件包进行安装、更新、卸载和管理。 YUM 会在安装、更新、卸载软件包时处理软件依赖问题。YUM 可以从系统中 已安装的仓库 以及 .rpm 软件包中安装。YUM 的主要配置文件在 /etc/yum.conf文件中,所有的仓库在 /etc/yum.repos.d目录中。

命令格式

yum -选项     命令
yum -option command

以下是常用的命令:

命令功能
yum install安装指明的软件包
remove移除指明的软件包
search用关键词搜索软件包元数据
info列举描述信息
update更新每个软件包到最新版本
repolist列出仓库列表
history展示过去的操作,会提供这些操作在哪天执行了哪些命令

以下是常用的选项:

选项功能
-C从系统缓存中运行
--security包括给安全问题提供了解决方案的软件包
-y对所有Yes/No问题回答Yes
--skip-broken跳过软件包引起的问题
-v展示冗余信息

Linux软件安装和包管理工具有哪些

你可以通过使用 history 命令来取消、回滚某些操作。格式如下:

yum history undo 

YUM 提供了很多软件包管理选项,可以通过man yum and yum –help来查看。另外可参考文档。

3.3 RPM 和 YUM的关系

  • RPM 和 YUM 都可以对 .rpm 软件包进行管理。

  • RPM需要将 .rpm安装包 下载到本地之后才可以进行安装,而YUM只需要指明要安装的软件名称,就会自动地从指定的服务器自动下载并进行安装。

  • 当遇到依赖问题时,RPM需要自己手动地一个个下载安装,而YUM会自动处理依赖性关系,并且一次安装所有依赖的软体包。

到此,关于“Linux软件安装和包管理工具有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网站名称:Linux软件安装和包管理工具有哪些
网页地址:http://myzitong.com/article/iiispi.html