Linux 开发工具(一) 软件包管理器的全方位认识 目录一. 软件包管理器1.1. Linux 下安装软件的方法1.2 什么是包管理器1.3 操作系统的生态1.3.1 操作系统的好坏评估——生态问题1.3.2 我们下载安装的软件包从何而来​编辑1.3.3 开源的操作系统如何获取资金1.3.4 镜像源1.4 apt 实践操作1.4.1 联网\离线安装1.4.2 搜索软件包1.4.2.1 apt list1.4.2.2 apt search1.4.2.3 对软件包的解读1.4.3 卸载软件1.4.4 安装软件1.4.5 卸载\安装软件的权限问题1.5 安装源1.5.1 何为安装源1.5.2 安装源的更新1.5.2.1 清除缓存1.5.2.2 使用新的配置重新形成缓存——1.5.2.3 apt update一. 软件包管理器1.1. Linux 下安装软件的方法1.2 什么是包管理器包管理器可以理解为 Linux 中的“应用商店”。当我们需要安装某个软件时只需要告诉包管理器软件名称它就会从软件源中下载对应的软件包并自动处理大部分依赖和版本关系。不同 Linux 发行版使用的包管理器也有所不同例如 Ubuntu 常用aptCentOS 传统上常用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.com1.4.2 搜索软件包1.4.2.1 apt listapt list意为把所有可安装的软件列出来。那么我们想找到某个软件的话输入下列指令即可apt list | grep [软件名]1.4.2.2 apt searchapt search [关键词]不只是在软件包名字里找lrzsz还会在软件包的相关描述/元数据里搜索。1.4.2.3 对软件包的解读Ubuntu:rootVM-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 transferlrzsz → 软件包名称 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 # 扩展源 # 安装扩展源 [rootVM-4-4-centos ~]# sudo yum install -y epel-release ……………… [rootVM-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.repoUbuntu安装源路径$ cat /etc/apt/sources.list # 标准源 $ ll /etc/apt/sources.list.d/ # 扩展源 # ubuntu 安装扩展源就结合未来具体场景1.5.2 安装源的更新换源通常就是先备份旧的软件源配置再下载或修改新的软件源配置让包管理器改为访问新的软件仓库地址最后刷新软件包索引/缓存。1.5.2.1 清除缓存把 YUM 之前缓存的软件仓库信息清掉。sudo yum clean all1.5.2.2使用新的配置重新形成缓存——根据现在新的软件源配置重新去仓库下载元数据并在本地建立新的缓存。sudo yum makecache整个流程可以看作是原来的软件源 ↓ 本地已经缓存了一套旧仓库信息 修改软件源 ↓ yum clean all ↓ 删除旧缓存 yum makecache ↓ 根据新软件源重新获取仓库信息 ↓ 建立新的本地缓存1.5.2.3 apt update前面我们所看到的都是在Centos版本下在Ubuntu版本下指令又有所不同它把 YUM 里“重新获取仓库信息、刷新本地软件包列表”这件事直接做了。sudo apt update整个流程可以看作是读取新的软件源配置 ↓ 连接新的软件仓库 ↓ 下载最新的软件包索引 ↓ 更新本机保存的软件包列表