Linux 开发工具(一) 软件包管理器的全方位认识
目录
一. 软件包管理器
1.1. Linux 下安装软件的方法

1.2 什么是包管理器
包管理器可以理解为 Linux 中的“应用商店”。当我们需要安装某个软件时,只需要告诉包管理器软件名称,它就会从软件源中下载对应的软件包,并自动处理大部分依赖和版本关系。不同 Linux 发行版使用的包管理器也有所不同,例如 Ubuntu 常用 apt,CentOS 传统上常用 yum,较新的 RPM 系发行版则更多使用 dnf。
1.3 操作系统的生态
1.3.1 操作系统的好坏评估——生态问题

1.3.2 我们下载安装的软件包从何而来
通过流程图我们也能大致理解安装软件整个过程:
开发者写源码
→ 发行版/维护者编译、测试、打包
→ 放到软件仓库(软件源)
→ 你的 apt/yum 去仓库下载安装
1.3.3 开源的操作系统如何获取资金
开源并不等于没有成本。软件仓库、服务器、带宽以及项目维护都需要资金。由于很多公司会长期使用并依赖开源软件,因此企业往往会通过赞助、捐赠、提供服务器或开发人员等方式支持开源社区,从而保证相关项目能够持续维护和发展。
1.3.4 镜像源
在之前的小节我们了解到 apt/yum 会去软件库下载对应的软件包,但是它是如何跳转的呢?
Linux 发行版通常会预先配置好软件源地址。当我们使用
apt、yum或dnf安装软件时,包管理器会根据这些配置连接到与当前发行版及版本相对应的软件仓库,再下载软件包和依赖。
但由于很多 Linux 发行版的官方软件仓库服务器主要部署在海外,国内用户访问时可能出现速度慢、延迟高,甚至连接不稳定的问题,怎么办呢
为了解决这个问题,国内的一些高校、云厂商或开源社区会同步官方软件仓库的内容,建立国内镜像站。用户只需要把系统中原来的软件源地址修改为国内镜像地址,就可以从国内镜像站下载软件和依赖。
1.4 apt 实践操作
1.4.1 联网\离线安装
Linux 支持联网安装,也支持离线安装,这里我们稍微讲讲怎么确保自己是否来联网:
#向 www.baidu.com 连续发送 3 个 ICMP 测试包,
#用来测试网络是否能够到达这个地址,以及查看延迟情况。
ping -c3 www.baidu.com

1.4.2 搜索软件包
1.4.2.1 apt list
apt list 意为把所有可安装的软件列出来。
那么我们想找到某个软件的话,输入下列指令即可:
apt list | grep [软件名]

1.4.2.2 apt search
apt search [关键词] 不只是在软件包名字里找 lrzsz,还会在软件包的相关描述/元数据里搜索。

1.4.2.3 对软件包的解读
Ubuntu:
root@VM-0-8-ubuntu:/home/lzx# apt search lrzsz
Sorting... Done
Full Text Search... Done
cutecom/jammy 0.30.3-1build1 amd64
Graphical serial terminal, like minicom
lrzsz/jammy,now 0.12.21-10 amd64 [installed]
Tools for zmodem/xmodem/ymodem file transfer
lrzsz → 软件包名称
jammy → Ubuntu 22.04 的发行版代号
说明这个包来自 jammy 对应的软件源
now → 表示这是当前系统已经安装着的版本
0.12.21-10 → 软件包版本号
amd64 → 适用于 x86-64 / 64 位 Intel、AMD 架构
[installed] → 已安装
Centos:
sl.x86_64 5.02-1.el7 @epel
这是一个名为 sl 的 x86_64 软件包,软件版本为 5.02,第 1 次打包,
针对 Enterprise Linux 7 系列构建,并且当前安装的这个包来自 EPEL 软件仓库。
sl → 软件包名称
x86_64 → 适用于 x86 64 位架构
5.02 → 软件本身的版本号
-1 → 第 1 个 RPM 打包版本
.el7 → 针对 Enterprise Linux 7 系列构建,也可以这样理解:
"el7"表⽰操作系统发⾏版的版本."el7"表⽰的是centos7/redhat7."el6"表⽰
centos6/redhat6.
@epel → 已安装的软件包,来源于 EPEL 仓库
1.4.3 卸载软件
如果想要卸载某个软件,执行下面的命令即可:
Ubuntu: sudo apt remove [-y] [软件名]
Centos: sudo yum remove [-y] [软件名]
常用选项:
-y: 表示不要问我,直接删除。

1.4.4 安装软件
如果想要安装某个软件,执行下面的命令即可:
Ubuntu: sudo apt install -y [软件名]
Centos: sudo yum install -y [软件名]
常用选项:
-y: 表示不要问我,直接安装。

1.4.5 卸载\安装软件的权限问题
在 Linux 中,安装或卸载软件通常需要 root 权限。因为系统级软件往往会被安装到 /usr/bin、/usr/lib、/etc、/var 等系统目录中,而这些目录通常只允许普通用户读取和执行,不允许随意写入。安装软件时,需要在这些目录中创建文件、修改目录项、写入配置文件;卸载时又需要删除这些文件。同时,包管理器还要修改自己的软件包数据库。因此普通用户权限通常不够,需要通过 root 或 sudo 来完成。
1.5 安装源
1.5.1 何为安装源
Linux 发行版通常会预先配置一些软件源,安装源中保存了对应软件仓库的信息和地址,yum、apt 等包管理器通过这些地址访问软件仓库并下载安装包。由于软件仓库不止一个,因此软件源也可以配置多个。入门阶段可以大致分为标准源和扩展源,其中标准源通常对应发行版官方的软件仓库,扩展源则用于提供官方基础仓库之外的软件。
Centos安装源路径:
$ ll /etc/yum.repos.d/
total 16
-rw-r--r-- 1 root root 676 Oct 8 20:47 CentOS-Base.repo # 标准源
-rw-r--r-- 1 root root 230 Aug 27 10:31 epel.repo # 扩展源
# 安装扩展源
[root@VM-4-4-centos ~]# sudo yum install -y epel-release
………………
[root@VM-4-4-centos ~]# ll /etc/yum.repos.d/
total 16
-rw-r--r-- 1 root root 641 Sep 10 22:45 CentOS-Base.repo
-rw-r--r-- 1 root root 230 Sep 10 22:45 CentOS-Epel.repo
-rw-r--r-- 1 root root 1358 Sep 5 2021 epel.repo
-rw-r--r-- 1 root root 1457 Sep 5 2021 epel-testing.repo
Ubuntu安装源路径:
$ cat /etc/apt/sources.list # 标准源
$ ll /etc/apt/sources.list.d/ # 扩展源
# ubuntu 安装扩展源,就结合未来具体场景
1.5.2 安装源的更新
换源通常就是先备份旧的软件源配置,再下载或修改新的软件源配置,让包管理器改为访问新的软件仓库地址,最后刷新软件包索引/缓存。
1.5.2.1 清除缓存
把 YUM 之前缓存的软件仓库信息清掉。
sudo yum clean all
1.5.2.2 使用新的配置,重新形成缓存——
根据现在新的软件源配置,重新去仓库下载元数据,并在本地建立新的缓存。
sudo yum makecache
整个流程可以看作是:
原来的软件源
↓
本地已经缓存了一套旧仓库信息
修改软件源
↓
yum clean all
↓
删除旧缓存
yum makecache
↓
根据新软件源重新获取仓库信息
↓
建立新的本地缓存
1.5.2.3 apt update
前面我们所看到的都是在Centos版本下,在Ubuntu版本下指令又有所不同:
它把 YUM 里“重新获取仓库信息、刷新本地软件包列表”这件事直接做了。
sudo apt update
整个流程可以看作是:
读取新的软件源配置
↓
连接新的软件仓库
↓
下载最新的软件包索引
↓
更新本机保存的软件包列表
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)