赞
踩
目录
【学习目标】
• 了解Linux软件包管理的发展过程。
• 掌握Deb软件包的安装方法。
• 掌握高级软件包管理工具的使用。
• 掌握Snap包的安装方法。
在系统的使用和维护过程中,安装和卸载软件是必须掌握的技能。
Linux软件的安装需要考虑软件的依赖性问题,目前在Linux系统上安装软件已经变得与Windows系统上一样便捷。
可供Linux安装的开源软件非常丰富,Linux提供了多种软件安装方式,从最原始的源码编译到最高级的在线自动安装和更新。
本章在简单介绍Linux软件包管理知识的基础上,重点讲解Ubuntu系统的软件安装方式和方法,除了传统的Deb软件包安装,还讲解APT高级软件包工具以及Snap软件包安装,这种方式提供了更好的隔离性和安全性,是未来软件包安装的发展方向。
因此,作为Linux操作系统的管理员,必须学会软件的安装、升级、卸载和查询的方法,以维护系统的管理与使用。
Linux软件开发完成之后,如果仅限于小范围使用,可以直接使用二进制文件分发。如果要对外发布兼顾到用户不同的软件硬环境,这就需要制作成软件包分发给用户。
使用软件包管理器可以方便地安装卸载和升级软件包。
Linux软件安装从最初的源代码编译安装发展到了现在的高级软件包管理。
早期linux操作系统软件安装方式,将源代码编译成二进制文件,并对系统进行相关配置,有时甚至需要修改源代码。
优点:有较大自由度,用户可自行设置编译选项,选择所需要的功能和组件,或者针对硬件平台进行优化。
缺点:安装耗时,对大部分用户来说难度太大。
软件包将应用程序的二进制文件、配置文档和帮助文档等合并打包在一个文件中,用户只需要使用相应的软件包管理器执行软件的安装、卸载、升级和查询等操作即可。
软件包重在考虑适用性,通常不会针对某种硬件平台进行优化,所包含的功能和组件也是通用的。
目前主流的软件包格式有两种:RPM和Deb。
(1)RPM软件包
红帽管理器(RPM)是由Red Hat公司开发的软件包安装和管理程序,使用RPM的用户可以自行安装和管理Linux中的应用程序和系统工具。其文件扩展名为 .rpm。
RPM是以数据库记录的方式来将需要的软件安装到Linux操作系统中的一套管理机制。RPM最大的特点是将要安装的软件编译好,并打包成RPM机制的安装包,通过软件默认的数据库记录这个软件安装时必须具备的依赖属性软件。
在安装时, RPM会先检查是否满足安装所需的依赖属性软件,满足则安装,反之则拒绝安装。
RPM软件包中包含什么呢?其中包含可执行的二进制程序,这个程序和Windows的软件包中的EXE文件类似,是可执行的;RPM软件包中还包含程序运行时所需要的文件,这也和Windows的软件包类似, Windows程序的运行,除了需要EXE文件外,还需要其他的文件。
对于一个RPM软件包中的应用程序而言,除了自身所带的附加文件保证其正常运行外,有时还需要其他特定版本的文件,这就是软件包的依赖关系。
依赖关系并不是Linux软件特有的,Windows软件之间也存在依赖关系。例如,若要在Windows操作系统中运行3D游戏,则在安装的时候,系统可能会提示要安装Direct X9。 Linux和Windows的原理是差不多的。所以,被打包的二进制应用程序除了包括二进制文件外,还包括库文件、配置文件(可以实现软件的一些设置)、帮助文件。
RPM保留了一个数据库,这个数据库包含了所有软件包的资料。通过这个数据库,用户可以进行软件包的查询,卸载时也可以将软件安装在多处目录下的文件删除,因此初学者应尽可能使用RPM形式的软件包。
RPM 可以让用户直接以二进制方式安装软件包,并可帮助用户查询是否已经安装了有关的库文件,在使用RPM删除程序时,它会询问用户是否要删除有关程序;如果使用RPM来升级软件,则RPM会保留原先的配置文件,这样用户无须重新配置新的软件。
(2)Deb软件包
apt install vim
Deb软件包采用 .deb作为文件扩展名。配合高级软件包工具(APT)软件管理系统,成为当前在Linux中非常流行的一种安装包。
获得Deb安装包后,可以直接使用dpkg工具进行离线安装,无需联网,这是Ubuntu传统的软件安装方式,也是安装软件的一种简易方式,其不足之处是要自行处理软件依赖性问题。
Deb软件包需要使用dpkg工具进行管理,该工具功能非常丰富,可以用于安装、更新、卸载Deb软件包,以及提供与Deb软件相关的信息。
现在的软件依赖性越来越强,使用这种软件包进行安装,不但安装效率很低,而且难度不小,为此推出了高级软件包管理工具。
注意:Ubuntu的软件包格式是Deb,不能直接安装RPM软件包。如果要安装RPM软件包,则需要先用alien工具将RPM格式转换成Deb格式。
Deb软件包的命名格式如下:
软件包名称_软件版本-修订版本_体系架构.deb
高级软件包管理工具能够通过Internet主动获取软件包,自动检查和修复软件包之间的依赖关系,实现软件的自动安装和更新升级,大大简化了Linux系统上安装、管理软件的过程。
这种工具需要通过Internet从后端的软件库下载软件,适合在线使用。目前主要的高级软件包管理工具有YUM和APT两种,还有一些商业版工具由Linux发行商提供。
YUM (Yellowdog Updater Modified) 是 Red Hat、 CentOS、Fedora和SUSE中的Shell前端软件包管理器。
基于RPM包管理,能够从指定的服务器中自动下载并安装RPM软件包,可以处理依赖关系,并可以一次安装所有依赖的软件包,而无需一次次下载、安装软件包。
YUM能够更加方便的添加、删除、更新RPM软件包,自动解决软件包之间的依赖问题,方便系统更新及软件管理。
YUM通过资源库进行软件的下载、安装等,资源库可以是一个HTTP或FTP站点,也可以是一个本地软件池。
资源库可以有多个,在/etc/yum.conf文件中进行相关配置即可。
YUM的资源库包含RPM的头文件,头文件中包含软件的功能描述、依赖关系等。通过分析这些信息,YUM可获取依赖关系并进行相关的升级、安装、删除等操作。
Debian Linux首先提出软件包的管理机制--Deb软件包,它将应用程序的二进制文件、配置文档、man/info帮助页面等合并打包在一个文件中,用户使用软件包管理器可以直接操作软件包,完成获取、安装、卸载、查询等操作, Red Hat Linux基于这个理念推出了自己的软件包管理机制一RPM软件包。
随着Linux操作系统规模的不断扩大,系统中软件包间复杂的依赖关系导致Linux用户麻烦不断。因此Debian Linux开发了APT,用于检查和修复软件包的依赖关系,利用Internet帮助用户主动获取软件包。
APT再次促进了Deb软件包的广泛使用,成为Debian Linux的一个无法替代的亮点。
APT可以自动下载、配置、安装二进制或源代码格式的软件包,甚至只需要一条命令就能更新整个系统的所有软件。
APT最早被设计成dpkg工具的前端,用来处理Deb软件包。现在经过APT-RPM组织修改, RPM版本的APT已经可以安装在使用RPM的Linux发行版上。
Ubuntu 软件安装首选 APT,dpkg 本身是一个底层的工具,而 APT 则是位于其上层的工具用于从远程获取软件包以及处理复杂的软件包关系。使用APT安装、卸载、更新升级软件,实际上是通过调用底层的 dpkg 来完成的。
(1)基本功能
从Internet上的软件源下载最新的软件包元数据、二进制包或源代码包。软件包元数据就是软件包的索引和摘要信息文件。
利用下载到本地的软件包元数据,完成软件包的搜索和系统的更新。
安装和卸载软件包时自动寻找最新版本,并自动解决软件的依赖问题。
(2)软件源
APT 软件源在 Ubuntu 安装时已经进行过初始设置,提供了 Ubuntu 官方的网络安装来源。
Ubuntu的/var/lib/apt/lists目录存放的是已经下载的各软件包元数据。这些数据是系统更新和软件包查找工具的基础。
vim /var/lib/dpkg/status #是软件中心与APT安装和卸载的信息来
- cd /var/lib/apt/lists 查询软件的来源
- ls
两者相比较,以判断是否更新,然后将所有需要更新的软件在窗口中列出。
(3)解决依赖问题
APT会从每一个软件源下载一个软件包的列表到本地,列表中提供软件源所包含的可用软件包的信息。 多数情况下,APT会安装最新的软件包,被安装的软件包所依赖的其他软件包也会安装,建议安装的软件包则会给出提示信息但不会安装。
也有APT因为依赖关系不能安装软件包的情况。例如,某软件包和系统中的其他软件包冲突,或者该软件包依赖的软件包在任何源中均不存在或者没有符合的版本。
遇到这种情况,APT会返回错误信息并终止软件安装,用户需要自行解决软件依赖问题。
(4)软件包更新
APT可以智能的从软件源下载最新版本的软件包并安装,无需重新启动系统,除非在更新Linux系统内核。所有的配置可以得到保留,升级软件非常便捷。
(5)APT目录源
Ubuntu使用文本文件/etc/apt/sources.list来保存软件包和软件源的地址。 另外,与该文件功 能相同的是/etc/apt/sources.list.d目录下的. list文件,其为在单独文件中写入软件源的地址提供了 一种方式,通常用来安装第三方软件。
使用 apt update命令就是同步(更新)/etc/apt/sources. list 和/etc/apt/sources.list. d 目录下的.list文件的软件源的索引,以获得最新的软件包。
/etc/apt/ sources.list是一个可编辑的普通文本文件。 执行如下命令,查看相关信息。
cat /etc/apt/sources.list
Snap包是用于Linux发行版的软件包,被设计为用来隔离并封装整个应用程序。
概念使得Snapcraft提高软件安全性、稳定性和可移植性的目标得以实现,其中可移植性允许单个Snap包不但可以在Ubuntu的多个版本中安装,而且可以在Debian、 Fedora和Arch等发行版中安装。
Snapcraft网站对其的描述如下::
为每个Linux桌面、服务器、云端或设备打包任何应用程序,并且直接交付更新。
Snap 是 Ubuntu母公司Canonical 于2016年4月发布Ubuntu16.04的时候引入的一种安 全的、易于管理的、沙盒化的软件包格式,与传统的dpkg、APT有着很大的区别。
Snap是一种全新的软件包管理方式,它类似于一个容器,拥有一个应用程序需要用到的所有文件和库,各个应用程序完全独立。所以使用Snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理,但是由此带来的问题就是它占用了更多的磁盘空间。
Snap可以让开发者将软件更新包随时发布给用户,而不必等待发行版的更新;Snap可以同时安装多个版本的软件,例如,安装Python 2.7和 Python 3.3。
可以使用dpkg命令对Deb软件包进行安装、创建和管理。
dpkg命令格式如下:
dpkg [选项] <软件包名>
dpkg命令各选项及其功能说明
选项 | 功能说明 |
---|---|
-i | 安装软件包 |
-r | 删除软件包,但保留软件包的配置信息 |
-P | 删除软件包,同时删除软件包的配置信息 |
-l | 显示已经安装的软件包列表 |
-L | 显示与软件包关联的文件 |
-c | 显示软件包内文件列表 |
-s | 显示软件包的详细信息 |
-S | 显示软件包拥有哪些文件 |
使用选项 -l 可以显示已安装软件包列表
dpkg -l
使用选项 -l 可以查看具体软件包的简要信息,包括状态。名称、版本、架构和简要描述,
dpkg -l apt
使用选项- s 查看具体软件包的详细信息
dpkg -s apt
使用选项- S 查看具体软件包拥有哪些文件
dpkg -S apt
安装Deb软件包时,首先需要获取安装包,再使用选项 -i 安装Deb软件包。(注意:只能做一次,后续再做会被加锁)
- find / -name *.deb #先获取最新的软件包情况
- pwd #查看当前文件路径
- cp /var/cache/apt/archives/manpages-zh_1.6.3.3-2_all.deb /root/ #把要安装的软件拷贝到用户跟路径下
- ls -l #查看是否拷贝成功
- dpkg -i mythes-en-au_2.1-5.4_all.deb #安装软件包
安装Deb包文件需要提前将其下载到本地,安装时需要保证安装的Deb包文件在当前执行目录下,否则无法找到安装包文件。
- dpkg -r 软件包名 #卸载软件包同时保留该软件包的配置信息
- dpkg -P 软件包名 #卸载软件包并删除配置信息
注意:Ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。
常用的APT命令行工具都被分散在apt-get、apt-cache和apt-config这3个命令当中。
apt-get用于执行与软件包安装有关的所有操作,
apt-cache用于查询软件包的相关信息,
apt-config用于配置APT。
Ubuntu 16.04开始引入apt命令,该命令相当于上述3个命令最常用子命令和选项的集合,以解决命令过于分散的问题,这3个命令虽然没有被弃用,但是作为普通用户,还是应该首先使用apt命令。
apt命令同样支持子命令、选项和参数。但是它并不是完全向下兼容apt-get、apt-cache等命令,可以用apt替换他们的部分子命令,但不是全部。apt还有一些自己的命令。
常用的apt命令及其功能说明 P211
apt update #获取最新的软件包列表
apt upgrade 升级当前系统中所有已安装的软件包
- apt install <软件包名> 下载,安装软件包并自动解决依赖问题
- apt remove <软件包名> 卸载指定的软件包
- apt autoremove <软件包名> 卸载从未使用过的软件包
- apt show <软件包名> 显示软件包详细信息
使用APT安装和卸载软件包时必须准确地提供软件包的名称。可以使用apt命令在APT的软件包缓存中搜索软件,收集软件包的信息,获知哪些软件可以在Ubuntu上安装。
由于APT支持模糊查询,因此查询非常方便,下面介绍一下其基本用法。
- #使用子命令list可以列出软件包
-
- apt list 软件包名
- apt list vim #列出vim编辑器的相关信息
- vi vim
- #查找软件包的相关信息
- apt search 软件包名
-
- #查看指定名称的软件包的详细信息
- apt show 软件包名
-
- #查看软件包所依赖的包
- apt depends 软件包名
-
- #显示软件包的安装状态和版本信息
- apt policy 软件包名

- apt update #更新系统中apt缓存的软件包信息
- #只有执行了该命令,才能保证获取到的最新的软件包
- apt install 软件包名 #下载软件包
#卸载已经安装的软件包,但是会保留软件包的配置文档
- #卸载已经安装的软件包,但是会保留软件包的配置文档
- apt remove 软件包名 卸载软件包
-
- apt autoremove 软件包名 卸载软件包并且删除相关配置信息
Snap是跨多种Linux发行版的应用程序及其依赖项的一个捆绑包,可以通过官方的Snap Store(商店)获取和安装。
要安装和使用Snap包,本地系统上需要相应的Snap环境,包括用于管理Snap包的后台服务(守护进程)snapd和安装管理Snap包的命令行工具。
Ubuntu 18.04以后的版本预装有Snapd。
- snap version #查看Snap版本
-
- #如果没有安装Snapd,则可以通过执行如下命令安装:
- apt install snapd #下载snapd
可以使用 snap find 命令搜索要查找的包文件。例如,查找“vlc”播放器,执行命令如下。
snap find "vlc"
可以使用 snap info 命令查看 Snap 包的详细信息。例如,查看 vic 包的详细信息,执行命令如下。
snap info vlc
可以使用snap install命令安装Snap包。例如,安装"vic"播放器,执行命令如下。
snap install vlc
可以使用 snap list 命令列出当前系统已经安装的 Snap包,执行命令如下。
snap list
可以使用snap refresh命令更新已经安装的Snap包。其命令格式如下。
snap refrech Snap 包名
可以使用 snap revert 命令还原以前安装的 Snap包。其命令格式如下。
snap revert Snap 包名
可以使用 snap list--all 命令列出每个已安装包的版本。其命令格式如下。
snap list --all
若一个Snap包暂时不用了,则可以先禁用它,需要时再启用,以避免卸载和重装。可以使用snap enable和snap disabled命令启用或禁用Snap包。其命令格式如下。
- snap enable snap 包名
-
- snap disabled Snap 包名
可以使用 snap remove 命令卸载一个 Snap包。其命令格式如下。
snap remove Snap 包名
默认情况下,该Snap包的所有修订版本也会被删除。要删除特定的修订版本,加以下参数即可:--revision=<revision-number>。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。