LV100-软件包管理
一、软件包
1. 流行的两种软件包管理机制
Debian Linux 首先提出“软件包”的管理机制—— Deb 软件包 。就是将应用程序的二进制文件、配置文档、 man/info 帮助页面等文件合并打包在一个文件中,用户使用软件包管理器直接操作软件包,完成获取、安装、卸载、查询等操作。
Redhat Linux 基于这个理念推出了自己的软件包管理机制—— Rpm 软件包 。
随着 Linux 操作系统规模的不断扩大,系统中软件包间复杂的依赖关系,导致 Linux 用户麻烦不断。所以 Debian Linux 开发出了 APT 软件包管理器 。它可以 检查和修复软件包依赖关系,利用 Internet 网络帮助用户 主动获取软件包。 APT 工具再次促进了 Deb 软件包更为广泛地使用,成为 Debian Linux 的一个无法替代的亮点。
2. 软件包的类型
大概有两种类型,如下表所示:
| 类型 | 说明 |
|---|---|
| 二进制软件包( Binary Packages ) | 它包含可执行文件、库文件、配置文件、 man/info 页面、版权声明和其它文档。 |
| 源码包( Source Packages ) | 包含软件源代码、版本修改说明、构建指令以及编译工具等。先由 tar 工具归档为 .tar.gz 文件,然后再打包成 .dsc 文件。 |
3. 软件包的命名
一般命名格式如下:
Filename_Version-Reversion_Architecture.deb【参数说明】
| Filename | 软件包名称 |
| Version | 软件版本 |
| Reversion | 修订版本 |
| Architecture | 体系架构 |
二、包管理工具
常见的软件包管理工具有以下三类:
| 类别 | 软件包名称 | 描述 |
| 命令行 | dpkg-deb dpkg apt | 在命令行模式下完成软件包管理任务。为完成软件包的获取、查询、软件包依赖性检查、安装、卸载等任务,需要使用各自不同的命令 |
| 文本窗口界面 | dselect aptitude tasksel | 在文本窗口模式中,使用窗口和菜单可以完成软件包管理任务 |
| 图形界面 | synaptic | 在 X-Window 图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点 |
1. dpkg 工具
常用的一些命令如下:
dpkg -i <.deb file_name> # 安装一个在本地文件系统上存在的 Debian 软件包
dpkg -L <package> # 列出与该包相关联的文件,也可以查看安装包的安装位置
dpkg -r <package> # 移除已经安装的软件包,但是保留配置文件
dpkg -P <package> # 移除已安装的软件包,同时移除配置文件
dpkg -s <package> # 显出软件包的安装状态, 包含包的详细信息
dpkg -c <package> # 查看软件包的内容
dpkg -l # 列出当前系统中已经安装的软件以及软件包的状态2. APT 管理工具
2.1 apt 是什么?
Advanced Packaging Tool(apt)是 Linux 下的一款安装包管理工具,是一个客户/服务器系统。常用于在 Ubuntu、Debian 和相关 Linux 发行版上安装、更新、删除和管理 deb 软件包。
2.2 工作原理
在 Ubuntu 系统中,使用软件源配置文件 /etc/apt/sources.list 列出最合适访问的镜像站点地址。软件源配置文件只是告知 Ubuntu 系统可以访问的镜像站点地址。但那些镜像站点都拥有什么软件资源并不清楚。若是每安装一个软件包,就在服务器上寻找一边,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。
- 软件源
根据软件包的开发组织对该软件的支持程度,以及遵从的开源程度,划分为四类:
| 核心(Main) | 官方维护的开源软件,是由 Ubuntu 官方完全支持的软件,包括大多数流行的、稳定的开源软件,是 Ubuntu 默认安装的基本软件包 |
| 公共(Universe) | 社区维护的开源软件,是由 Ubuntu 社区的计算机爱好者维护的软件。这些软件包没有安全升级的保障。用户在使用时,需要考虑这些软件包存在的不稳定性 |
| 受限(Restricted) | 官方维护的非开源软件,是专供特殊用途,而且没有自由软件版权,不能直接修改软件,但依然被 Ubuntu 团队支持的软件 |
| 多元化(Multiverse) | 非 Ubuntu 官方维护的非开源软件,用户使用这些软件包时,需要特别注意版权问题 |
/etc/apt/sources.list 本质就是一个普通的文本文件,可以在超级管理员授权下,使用任何文本编辑器进行编辑。在该文件中,添加的软件源镜像站点称为一个配置项,并遵循以下格式:
DebType AddressType://Hostaddress/Ubuntu Distribution Component1 Component2……
# 例如
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted- 软件包存储位置 /var/cache/apt/archives
/var/cache/apt/archives 中主要 apt-get 命令下载的 deb 软件包;另有一个文件 lock ,随 apt-get 启动而建立,随 apt-get 退出而删除,用以保证同一时间只有一个 apt-get 进程;还有一个文件夹 partial ,用以存放正在下载的软件包(下载完成后会被移动到上一级文件夹)。
- 刷新软件源
修改了配置文件—— /etc/apt/sources.list ,只是告知软件源镜像站点的地址。但那些所指向的镜像站点所具有的软件资源并不清楚,需要将这些资源列个清单,以便本地主机知晓可以申请哪些资源。此时使用使用 apt-get update 命令扫描每一个软件源服务器,并为该服务器所具有软件包资源建立索引文件,存放在本地的 /var/lib/apt/lists/ 目录中。
3. apt 相关命令
3.1 命令格式
在 Ubuntu Linux 中,通常使用 apt-get 命令管理软件包,只需告知软件包名字,就可以自动完成软件包的获取、安装、编译和卸载,以及检查软件包依赖关系。 也经常通过 apt-cache 来查询软件包相关信息。要注意的是大多数的情况需要给管理员权限即要加上 sudo 。
3.1.1 apt-get
sudo apt-get subcommands [option] pkg参数说明如下:
| subcommands | update | 下载更新软件包列表信息 |
| upgrade | 将系统中所有软件包升级到最新的版本 | |
| install | 下载所需软件包并进行安装配置 | |
| remove | 卸载软件包 | |
| autoremove | 将不满足依赖关系的软件包自动卸载 | |
| source | 下载源码包 | |
| build-dep | 为源码包构建所需的编译环境 | |
| dist-upgrade | 发布版升级 | |
| dselect-upgrade | 根据 dselect 的选择来进行软件包升级 | |
| clean | 删除缓存区中所有已下载的包文件 | |
| autoclean | 删除缓存区中老版本的己下载的包文件 | |
| check | 检查系统中依赖关系的完整性 | |
| option | -d | 仅下载软件包,而不安装或解压 |
| -f | 修复系统中存在的软件包依赖性问题 | |
| -m | 当发现缺少关联软件包时,仍试图继续执行 | |
| -q | 将输出作为日志保留,不获取命令执行进度 | |
| --purge | 与 remove 子命令一起使用,完全卸载软件包 | |
| -reinstall | 与 install 子命令一起使用,重新安装软件包 | |
| -b | 在下载完源码包后,编译生成相应的软件包 | |
| -s | 不做实际操作,只是模拟命令执行结果 | |
| -y | 对所有询问都作肯定的回答,apt-get 不再进行任何提示 | |
| -u | 获取已升级的软件包列表 | |
| -h | 获取帮助信息 | |
| -v | 获取 apt-get 版本号 |
sudo apt-cache subcommands [option] pkg参数说明如下:
| subcommands | showpkg | 获取二进制软件包的常规描述信息 |
| showsrc | 获取源码包的详细描述信息 | |
| show | 获取二进制软件包的详细描述信息 | |
| stats | 获取软件源的基本统计信息 | |
| search | 根据正则表达式检索软件包 | |
| depends | 获取该软件包的依赖信息 | |
| rdepends | 获取所有依赖于该软件包的软件包 | |
| pkgnames | 列出所有已安装软件包的名字 | |
| policy | 获取软件包当前的安装状态 | |
| option | 有 [ -p | -s | - q | - i | - c | -h ] 等, 但是不怎么用,详情可查看手册(man apt-cache) | |
3.2 常用命令
在使用以下命令时,若提示没有权限,则可以在前边加上 sudo 。
# 修复软件包依赖关系
# 如果由于故障而中断软件安装过程,可能会造成关联的软件包只有部分安装。之后,可能就会发现该软件既不能重装又不能删除,就可以使用以下两条命令。
apt-get check # 检查软件包依赖关系,检查是否有损坏的依赖
apt-get -f install # 修复依赖关系
# 更新相关命令
apt-get upgrade # 将系统中的所有软件包一次性升级到最新版本。
apt-get update # 更新源
apt-get dist-upgrade # 升级系统
# 安装软件包
apt-get install <package_name>
# 当用户不小心损坏了已安装的软件包,而需要修复。或者,希望重新安装软件包中某些文件的最新版本,可以重新安装软件包。
apt-get --reinstall install <soft_name>
apt-get source package # 下载该包的源代码
# 卸载软件包
# 删除一个软件包时,将会连带删除与该软件包有依赖关系的软件包。
apt-get remove <package_name> # 不完全卸载
apt-get --purge remove <package_name> # 包括配置文件
# 清理软件包缓冲区
apt-get clean # 删除全部下载的软件包
apt-get autoclean # 如果希望缓冲区中只保留最新版本的软件包,多余版本全部清除,可使用该命令
apt-get clean && apt-get autoclean # 清理无用的包
apt-get build-dep package # 安装相关的编译环境
# apt-cache 相关命令
apt-cache show # 获取包的相关信息,如说明、大小、版本等
apt-cache policy # 获取软件包安装状态
apt-cache search package # 搜索软件包
apt-cache depends package # 了解使用该包依赖那些包
apt-cache rdepends package # 查看该包被哪些包依赖4. 更换软件源
4.1 为什么要更换软件源
下载速度:默认软件源可能位于国外,导致下载速度缓慢。更换为国内镜像站点可以显著提高下载速度。
网络稳定性:某些镜像站点可能在网络连接方面更加稳定,减少下载失败的情况。
软件包更新及时性:一些镜像站点会更及时地同步软件包更新,确保获取最新版本。
本地化服务:国内镜像站点通常提供更好的本地化支持和服务。
4.2 软件源格式
软件源文件一般位于 /etc/apt/sources.list,下面是一个清华源的示例:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-backports main restricted universe multiverse
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
deb http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse
# deb-src http://security.ubuntu.com/ubuntu/ noble-security main restricted universe multiverse
# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ noble-proposed main restricted universe multiverse前面有提到软件源文件的格式:
deb [选项] <仓库地址> <发行版> <组件1> <组件2> ...各部分说明如下:
| 组成部分 | 示例 | 含义 |
|---|---|---|
deb | deb / deb-src | deb = 二进制包仓库,deb-src = 源码包仓库 |
| 仓库地址 | https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ | 软件包来源的 URL |
| 发行版 | noble, noble-updates, noble-backports | Ubuntu 版本代号 |
| 组件 | main restricted universe multiverse | 软件包分类 |
4.2.1 仓库地址
这个就是软件包来源的地址,常用的一些就是:
http://archive.ubuntu.com/ubuntu/ # ubuntu默认的软件源
https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ # 清华源 tuna
https://mirrors.ustc.edu.cn/ubuntu/ # 中科大 ustc
https://mirrors.aliyun.com/ubuntu/ # 阿里 aliyun
https://mirrors.cloud.tencent.com/ubuntu/ # 腾讯 tencent4.2.2 发行版
这个是 Ubuntu 的版本代号,Ubuntu 采用 "形容词 + 动物" 的组合作为版本代号,这个传统从 Ubuntu 6.06 (Dapper Drake) 开始。
- 数字编号:表示发布的"年份.月份",如 24.04 = 2024年4月发布
- 代号名称:开发阶段的代号,发布后保留作为别名
我们可以通过lsb_release -c命令直接查看版本代号名称,也可以直接从cat /etc/os-release中查找。这里的noble 就是ubuntu的24.04版本:
| 版本代号 | 说明 |
|---|---|
| noble | Ubuntu 24.04 (Noble Numbat) 版本 |
| noble-updates | 发布后的累积更新/补丁 |
| noble-backports | 较旧软件包的新版本(测试用) |
| noble-security | 安全更新补丁(使用官方源) |
Tips:需要注意,如果版本名不匹配,可能会导致软件包无法正确安装或更新。
4.2.3 组件
组件前面已经提到过了,这里回顾一下:
main- 自由开源软件,受官方支持restricted- 专有驱动/硬件支持community维护的非官方软件multiverse- 闭源/商业软件
4.3 如何更换软件源
方法一:手动编辑 sources.list 文件
- 备份原配置文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup- 编辑 sources.list 文件:
sudo nano /etc/apt/sources.list替换文件内容为新的软件源地址,保存并退出。
更新软件源列表:
sudo apt-get update方法二:使用脚本一键更换
可以使用一些脚本来一键更换软件源,例如:
# 更换为阿里云镜像
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo apt-get update