软件管理
1. 包管理基础
在 Linux 上有各种包管理系统(package management system, PMS),以及用来进行软件安装、管理和删除的命令行工具。
软件包通常会依赖其他的包,为了软件能够正常运行,被依赖的包必须提前安装在系统中,PMS 工具将会检测这些依赖关系,并在安装需要的包之前先安装好所有额外的软件包。
各种主流 linux 发行版都采用了某种形式的包管理系统来控制软件和库的安装,PMS 利用一个数据库来记录各种相关内容:Linux 系统上已安装了什么软件包;每个包安装了什么文件;每个已安装软件包的版本。
各种各样的软件包都存储在服务器上,可以利用本地 Linux 系统上的 PMS 工具通过互联网进行访问,这些服务器称为仓库(repository)。
PMS 工具及相关命令在不同的 Linux 发行版上有很大的不同,Linux 中广泛使用的两种主要的 PMS 基础工具是 dpkg 和 rpm,这两个工具是各个 Linux 发行版上的 PMS 核心,但并非全部的 PMS,Linux 发行版都有各自的基于这些命令的特定 PMS 工具。
工具 | 使用对象 | 说明 |
---|---|---|
dpkg | 使用对象为基于 Debian 的发行版,如 Ubuntu, Linux Mint | dpkg 会直接和 Linux 系统上的 PMS 交互,用来安装、管理、删除软件包 |
rmp | 使用对象为基于 Red Hat 的发行版,如 Fedora, openSUSE, Mandriva | rmp 是这些 Linux 系统上 PMS 的底层基础,可安装、管理、删除软件包 |
2. 基于 Debian 的系统
dpkg 命令是基于 Debian 系 PMS 工具的核心,包含在这个 PMS 中的工具还有:
- dpkg
- apt-get
- apt-cache
- aptitude
最常用的命令行工具是 aptitude,因为 aptitude 工具本质上是 apt 工具和 dpkg 的前端,命令行下使用 aptitude 命令有助于避免常见的软件安装问题,如软件依赖关系缺失、系统环境不稳定等。
用 aptitude search package_name 时,显示的每一行的包的前面可能为 i, p, v, c,其有如下含义:
字符 | 含义 |
---|---|
i | 此包已安装 |
p/v | 此包(在仓库中?)可用,但尚未安装 |
c | 此包已删除,但配置文件尚未从系统中清楚 |
aptitude 有一些默认的软件仓库,其是在安装 Linux 发行版时设置的,具体位置存储在文件/etc/apt/source.list 中,在下载、安装或更新时,aptitude 只会从这些库中检查信息。如果需要为你的 PMS 添加一些额外的软件仓库,可在/etc/apt/source.list 文件中设置。设置时格式如下,实际上软件仓库网站或各种包开发人员网站往往都会有一行文本,直接复制粘贴到 sources.list 文件中即可。
deb address distribution_name package_type_list
:deb 表明是一个已编译的程序源deb-src address distribution_name package_type_list
:deb-src 表明是一个源代码的源address
:软件仓库的 web 地址distribution_name
:软件仓库的发行版版本的名称package_type_list
:仓库里含有的包类型, main, restricted, universe, partner, …
相关命令使用:
命令 | 作用 |
---|---|
aptitude | 进入 aptitude 的全屏模式,按 q 退出 |
aptitude show package_name | 显示服务器软件仓库中某个特定包的详细信息 |
aptitude search package_name | 搜索与 package_name 相关的软件包(相当于自带通配符) |
aptitude install package_name | 安装某软件包 |
aptitude safe-upgrade | 将所有已安装的包更新到软件仓库中的最新版本 |
aptitude full-upgrade | 同上,但不检查包与包之间的依赖关系,不稳定 |
aptitude dist_upgrade | 同上,但不检查包与包之间的依赖关系,不稳定 |
aptitude remove package_name | 删除软件包,但不删除数据和配置文件 |
aptitude purge package_name | 删除软件包,同时删除相关数据和配置文件 |
dpkg -L package_name | 列出某个软件包相关的所有文件 |
dpkg --search absolute_file_name | 查找某个特定文件属于哪个软件包 |
3. 基于 Red Hat 的系统
基于 Red Hat 的系统也有几种不同的可用前端工具,它们自然也都基于 rpm 命令行工具,常见的有:
最常用的其实是 yum。
- yum:在 Red Hat 和 Fedora 中使用
- uprm:在 Mandriva 中使用
- zypper:在 openSUSE 中使用
4. 从源码安装
在好用的 rpm 和 dpkg 工具出现之前,管理员必须知道如何从 tarball 来解包和安装软件。
从源码中安装有如下步骤:
下载软件包,其格式往往是.tar.gz
解包:tar -zxvf filename.tar.gz
在解压到的目录编码源码:make
执行安装程序:make install
5. 更改 Ubuntu 的 apt 源为阿里源
Ubuntu 下的包管理工具 apt 默认的软件源为国外服务器,在国内使用时经常会速度非常慢,因此可将其更换为清华源、阿里源等,只需要更改配置文件/etc/apt/sources.list 即可。
5.1 备份原配置文件
cd /etc/apt/
sudo cp sources.list sources.list.backup
5.2 改写 source.list 配置文件
将/etc/apt/sources.list 文件的原内容全部加#
号注释或直接删除,然后添加以下内容:
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
现在已经改写了配置文件,再执行以下命令即可完成 apt 的软件源的更新:
sudo apt update
附:由于更新了软件源,因此一些软件被系统检测到的最新版本号可能发生变化,故而不妨再使用
sudo apt upgrade
更新一下这些软件。
5.3 sources.list 配置内容说明
sources.list 文件的每个配置条目都是有格式的:
deb http://site.example.com/debian distribution component1 component2 component3
deb-src http://site.example.com/debian distribution component1 component2 component3
其中每一行最后面的componentN参数表示对软件包的分类,ubuntu 下就是 main、restricted、universe、multiverse;distribution参数代表系统版本代号,可使用lsb_release -c
命令查看,比如:
版本 | 代号 |
---|---|
Ubuntu 15.04 | vivid |
Ubuntu 16.04 | xenial |
Ubuntu 17.04 | zesty |
Ubuntu 18.04 | bionic |
Ubuntu 19.04 | disco |
Ubuntu 20.04 | focal |
6. 更新 Git 到最新版本
Ubuntu 的默认软件源(以及阿里源)不能把 Git 更新到官方最新版,导致一些特性不能使用(比如我想把主分支的命名从 master 改为 main)。要想对 Git 进行更新,如下添加 Git 官方的软件源然后更新即可:
# 添加Git官方软件源
sudo add-apt-repository ppa:git-core/ppa
# 更新
sudo apt update
sudo apt upgrade
# 查看当前Git版本
git --version