LV02-01-Linux-01-软件包管理

本文主要是Linux——软件包管理相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
SecureCRT Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日
开发板 正点原子 i.MX6ULL Linux阿尔法开发板
uboot NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03)
linux内核 linux-4.15(NXP官方提供)
STM32开发板 正点原子战舰V3(STM32F103ZET6)
点击查看本文参考资料
参考方向 参考原文
------
点击查看相关文件下载
--- ---

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.软件包的命名

一般命名格式如下:

1
Filename_Version-Reversion_Architecture.deb

【参数说明】

Filename 软件包名称
Version 软件版本
Reversion 修订版本
Architecture 体系架构

例如:

image-20220124184915131

4.软件包管理工具分类

常见的软件包管理工具有以下三类:

类别 软件包名称 描述
命令行 dpkg-deb
dpkg
apt
在命令行模式下完成软件包管理任务。为完成软件包的获取、查询、软件包依赖性检查、安装、卸载等任务,需要使用各自不同的命令
文本窗口界面 dselect
aptitude
tasksel
在文本窗口模式中,使用窗口和菜单可以完成软件包管理任务
图形界面 synaptic 在X-Window图形桌面环境中运行,具有更好的交互性、可读性、易用性等特点

5. dpkg 相关命令

1
2
3
4
5
6
7
dpkg -i <.deb file_name> # 安装一个在本地文件系统上存在的Debian软件包
dpkg -L <package> # 列出与该包相关联的文件,也可以查看安装包的安装位置
dpkg -r <package> # 移除已经安装的软件包,但是保留配置文件
dpkg -P <package> # 移除已安装的软件包,同时移除配置文件
dpkg -s <package> # 显出软件包的安装状态,包含包的详细信息
dpkg -c <package> # 查看软件包的内容
dpkg -l # 列出当前系统中已经安装的软件以及软件包的状态

6.APT管理工具

6.1 apt是什么?

Advanced Packaging Tool(apt)是Linux下的一款安装包管理工具,是一个客户/服务器系统。常用于在Ubuntu、Debian和相关Linux发行版上安装、更新、删除和管理deb软件包。

6.2 apt 工作原理

在 Ubuntu 系统中,使用软件源配置文件 /etc/apt/sources.list 列出最合适访问的镜像站点地址。软件源配置文件只是告知 Ubuntu 系统可以访问的镜像站点地址。但那些镜像站点都拥有什么软件资源并不清楚。若是每安装一个软件包,就在服务器上寻找一边,效率是很低的。因而,就有必要为这些软件资源列个清单(建立索引文件),以便本地主机查询。

  • 软件源

根据软件包的开发组织对该软件的支持程度,以及遵从的开源程度,划分为四类:

核心(Main) 官方维护的开源软件,是由Ubuntu官方完全支持的软件,包括大多数流行的、稳定的开源软件,是Ubuntu默认安装的基本软件包
公共(Universe) 社区维护的开源软件,是由Ubuntu社区的计算机爱好者维护的软件。这些软件包没有安全升级的保障。用户在使用时,需要考虑这些软件包存在的不稳定性
受限(Restricted) 官方维护的非开源软件,是专供特殊用途,而且没有自由软件版权,不能直接修改软件,但依然被Ubuntu团队支持的软件
多元化(Multiverse) 非Ubuntu官方维护的非开源软件,用户使用这些软件包时,需要特别注意版权问题
  • 软件源配置文件 /etc/apt/sources.list

/etc/apt/sources.list 本质就是一个普通的文本文件,可以在超级管理员授权下,使用任何文本编辑器进行编辑。在该文件中,添加的软件源镜像站点称为一个配置项,并遵循以下格式:

1
2
3
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/ 目录中。

6.3 apt相关命令

6.3.1命令格式

在 Ubuntu Linux 中,通常使用 apt-get 命令管理软件包,只需告知软件包名字,就可以自动完成软件包的获取、安装、编译和卸载,以及检查软件包依赖关系。 也经常通过 apt-cache 来查询软件包相关信息。要注意的是大多数的情况需要给管理员权限即要加上 sudo 。

  • apt-get
1
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版本号
  • apt-cache
1
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)

6.3.2常用命令

在使用以下命令时,若提示没有权限,则可以在前边加上 sudo 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 1.修复软件包依赖关系
# 如果由于故障而中断软件安装过程,可能会造成关联的软件包只有部分安装。之后,可能就会发现该软件既不能重装又不能删除,就可以使用以下两条命令。
apt-get check # 检查软件包依赖关系
apt-get -f install # 修复依赖关系

# 2.更新软件包
apt-get upgrade # 将系统中的所有软件包一次性升级到最新版本。

# 3.安装软件包
apt-get install <package_name>
# 当用户不小心损坏了已安装的软件包,而需要修复。或者,希望重新安装软件包中某些文件的最新版本,可以重新安装软件包。
apt-get --reinstall install <soft_name>

# 4.卸载软件包
# 删除一个软件包时,将会连带删除与该软件包有依赖关系的软件包。
apt-get remove <package_name> # 不完全卸载
apt-get --purge remove <package_name> # 包括配置文件

# 5.清理软件包缓冲区
apt-get clean # 删除全部下载的软件包
apt-get autoclean # 如果希望缓冲区中只保留最新版本的软件包,多余版本全部清除,可使用该命令

# 6.查询软件包信息
apt-cache show

# 7.获取软件包安装状态
apt-cache policy