Ubuntu 下的软件管理

Ubuntu 下的软件管理方法与相互比较

Posted by Ethan on June 15, 2019

这里记录 了 Ubuntu 下的几种软件管理方式及相互对比。

在初步接触 linux 时,因为自己并不是先阅读 Ubuntu 的介绍书籍 虽然也很怀疑自己一开始是否能记得住那些长篇大论 ,而是直接上手 Ubuntu ,所以一直以来对 Ubuntu 缺少一个比较系统的了解。

所以从本篇 post 开始,我将结合着自己的使用经验,开设一个 “Ubuntu 探索”系列博客,以 post 的方式来展开软件管理,用户管理,终端命令,文件系统等比较重要的 Ubuntu 话题。

这些都是相对比较 easy 的博客,请大佬自行绕过 😃

前言

作为 Ubuntu 探索系列的第一篇 Blog ,我首先来简单介绍一下 Ubuntu 。

Ubuntu

Ubuntu 是 Linux 操作系统的一支,其直接派生自历史最为久远的 Linux 发行版之一: Debian 。而 Debian 是当前可用的最为稳定,最为安全的 Linux 发布之一。所以说,一开始 Ubuntu 就拥有良好的血统,之后又得益于世界各地自由软件开发人员的共同努力,自2004年发布以来,它便以易于使用、易于安装的优势逐渐称霸了Linux世界。

现在常用的 Ubuntu 版本号包括:

版本号 代号 发布时间
18.04 LTS Bionic Beaver 2018.4.27
16.10 Yakkety Yak 2016/10/20
16.04 LTS Xenial Xerus 2016/04/21
14.10 Utopic Unicorn 2014/10/23
14.04 LTS Trusty Tahr 2014/04/18
12.10 Quantal Quetzal 2012/10/18
12.04 LTS Precise Pangolin 2012/04/26

现在下载安装 Ubuntu 都已经十分的简便,个人比较推荐从清华 tuna 源上下载所需要版本的 Ubuntu 镜像,然后自行制作启动盘并进行安装。

下面让我们聊聊 Ubuntu 下的软件管理。

Ubuntu 下的软件管理方式

由于 Ubuntu 下的软件管理方式与常用的 Windows 有很大的不同,所以让我们来详细考察一下 Ubuntu 下的软件管理方式。同时,我们也可以从中一窥 Ubuntu 的一些核心设计与使用的思想。

Ubuntu下的软件管理方式主要包括如下几种:

  • apt 命令
  • dpkg 命令
  • make

### apt 命令

对于软件下载与管理, Ubuntu 是采用集中式的 软件仓库机制 ,将各式各样的软件包分门别类地存放在软件仓库中来进行有效地组织和管理。然后,将软件仓库置于许许多多的 镜像服务器 中,并保持基本一致。这样一来,所有的 Ubuntu 用户随时都能获得最新版本的安装 软件包 。因此,对于用户,这些镜像服务器就是他们的软件源 ( Reposity )。

Hint : 在 Linux (Ubuntu) 下,所有的软件都被视作“包”

APT (Advanced Package Tool) 是 Linux 下的一款 包管理工具 。其最早来源于 Ubuntu 的前身 Debian ,在设计时就以 “快速、实用、高效” 作为其设计目标。作为一款软件包管理工具,其最为强大的功能就在于每当软件包更新时,它能够自动管理关联文件 ( dependency ) 并维护已有的 配置文件

但是作为一款包管理工具,APT 是Ubuntu系统的一部分,属于系统软件,并不面向一般的 Linux 用户。所以每次 Linux 用户调用软件管理功能,都是通过 APT 的一个命令行工具 apt 来进行调用。

Hint:	apt 和 APT 是两个完全不同的东西,前者是命令行工具(面向用户),后者是系统的一部分(不面向用户)

与 apt 类似的命令行工具还包括我们经常使用的 apt-getapt-cache 等等。

但是我推荐在软件管理时,应该 尽可能的使用 apt 命令 。原因在于:

  1. apt 命令行工具在开发的时候就是以融合 apt-get, apt-cache 等比较杂散的命令行工具为开发目的。所以,一方面 apt 拥有大多数 apt-get 等命令行工具的功能并且指令参数基本相同,另一方面 apt 在一部分命令参数上更为精简易用。
  2. 现在大多数 Linux 发行商都推荐 apt,尽管在短时间内, apt-get 等工具还没有被完全取缔的迹象。

常用的 apt 命令

apt 命令 命令功能
apt install 安装软件包
apt remove 移除软件包
apt purge 移除软件包及配置文件
apt update 刷新存储库索引
apt upgrade 升级所有可升级的软件包
apt autoremove 自动删除不需要的包
apt full-upgrade 在升级软件包时自动处理依赖关系
apt search 搜索应用程序
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表
apt show 显示安装细节

其他的未列出的 apt 命令以及每个命令的具体参数可以在命令行中使用 –help 或者使用 man 命令来详细查看。

其他 apt 问题

在使用到 apt 命令时的一些常见问题,一般都与软件源 ( repository ) 有关。而更换软件源和添加软件仓库的具体方式,如果我之后有时间的话会另写一篇博客总结一下。

dpkg 管理

相对于 apt 而言,同样是源自 Debian 的 dpkg ( “Debian Packager”的缩写 ) 就显得没有那么智能了。这两种软件管理工具的区别主要有三点:

  1. apt 命令在进行软件安装时,会咨询软件仓库(源),属于在线安装。而 dpkg 只能安装本地的软件包文件( Ubuntu 下的经典软件包格式为 .deb),属于本地安装。
  2. apt 在安装软件包时,会自动解决底层冲突的问题(只有极少数情况下需要手动解决),而 dpkg 不会解决此问题。
  3. dpkg 相对而言比 apt更为底层,使用 dpkg 安装的软件包 apt 往往是不知情的。在使用 apt 进行安装相应包时不仅会重复安装 dpkg 安装过的包,而且还会自动覆盖掉 dpkg 安装的软件包。

dpkg 常用命令

dpkg 命令 命令功能
dpkg -l/-s a.deb 查看 a.deb 包的详细信息
dpkg -c a.deb 查看 a.deb 包中的文件结构
dpkg -i a.deb 安装 a.deb 包
dpkg -p a.deb 卸载 a.deb 包及其配置文件
dpkg -r iptux 卸载 a.deb 包

build from source : 源码编译

对于某些软件包来说,有时候我们会遇到软件仓库里没有对应包,或者下载速度过慢的情况。这时我们可以选择直接下载其源码,然后进行源码安装。

这一安装过程大致分为三个步骤:配置 ( configure ) –> 编译 ( make ) –> 安装 ( install )

  1. 配置:通常是编译源码的第一步,通过 ./configure 命令完成。该命令的常见参数包括:
./configure --prefix=PREFIX :用以指定程序安装位置
./configure --help			:查看其他指令参数

当然,有些软件是不需要执行这一步的

  1. 编译:一旦配置通过,就可以使用 make 指令来开始编译源代码。编译源代码的时间因电脑性能的不同有十分明显的差异,但是我们可以通过命令:
make -jn					:将编译任务分成n份同时执行

来进行加速。但是需要注意的是,这里的 n 参数并不是自己想设多大就设多大的,需要考虑到CPU核数。一般来说,一个 n 核的 CPU ,最多是可以完美支持 2n 个 ”job” 同时进行的,即可以使用 -j2n 参数。

  1. 安装:如果编译不存在问题,那么就可以执行安装命令了。这一过程中执行的命令一般为 make install ,但是也包括有:
make install-init 
make install-config 

这个有时是需要视自己安装的软件包类型而定,一般来说这些东西都可以在 GitHub 的 README.md 文件中找到。

补充:pip 安装

其实 pip 并不是 Ubuntu 的包安装工具,而仅仅能够安装来自 PyPI 的 python 包。但是由于这些 Python 包往往也能够通过 apt 来进行安装,所以也把它列在这里。

在 Python 包的安装上,pip 和 apt 之间的区别有:

  1. pip 可以安装 python 包的指定版本,而 apt 直接安装最新版本
  2. pip 可以安装旧版本的依赖包,而 apt 不行。

所以说,在安装 python 包时,应尽可能的先使用 pip 命令。在 pip 命令失败后再考虑使用 apt 命令。

pip 常用命令

pip 命令 命令功能
pip install package_name 安装 Python 包
pip install package_name==version 安装指定版本的 Python 包
pip list 查看现在已经安装的 Python 包及其版本号
pip install –upgrade package_name 升级 Python 包
pip uninstall package_name 卸载 Python 包

同样的,其中每一个指令的详细参数,都可以通过 pip --help 来查阅。

常用命令一览表

在结束这篇 Blog 前,将所有文中的常用命令都列在这里,方便后续查阅

apt

apt 命令 命令功能
apt install 安装软件包
apt remove 移除软件包
apt purge 移除软件包及配置文件
apt update 刷新存储库索引
apt upgrade 升级所有可升级的软件包
apt autoremove 自动删除不需要的包
apt full-upgrade 在升级软件包时自动处理依赖关系
apt search 搜索应用程序
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表
apt show 显示安装细节

dpkg

dpkg 命令 命令功能
dpkg -l/-s a.deb 查看 a.deb 包的详细信息
dpkg -c a.deb 查看 a.deb 包中的文件结构
dpkg -i a.deb 安装 a.deb 包
dpkg -p a.deb 卸载 a.deb 包及其配置文件
dpkg -r iptux 卸载 a.deb 包

make

./configure 
make -jn 
make install

pip

pip 命令 命令功能
pip install package_name 安装 Python 包
pip install package_name==version 安装指定版本的 Python 包
pip list 查看现在已经安装的 Python 包及其版本号
pip install –upgrade package_name 升级 Python 包
pip uninstall package_name 卸载 Python 包

后记

距离自己上次博客转眼就过去了半个月的时间,中间隔的时间真的长

但这是由于博主平时实在太忙 真的不是因为太懒 ,而写一篇质量中上的原创博客偏偏又是一件很花时间的事情。

估计自己以后更新博客的频率大概也会是每两周一到两次了吧( 唉 ~😞

这篇 Blog 是自己 Ubuntu 探索系列的第一篇文章,主要讲解了 Ubuntu 系统下的几个主要软件包管理工具。

希望能对那些还不大了解 Ubuntu 系统底层的开发者们有所帮助~

(Plus:喜欢的话记得 ⭐️ star 一下 ~ )