news 2026/5/9 12:02:55

Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的软件包管理 —— 全面详解(9)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的软件包管理 —— 全面详解(9)

Ubuntu 22.04 的软件包管理 —— 全面详解


一、Linux 软件包管理的发展过程

1.1 从源代码编译安装(最原始)

  • 特点:高度定制化,依赖关系需手动解决
  • 流程:下载源码 → 配置 → 编译 → 安装
  • 工具make,gcc,autoconf
  • 适用场景:需要特定编译选项、最新版本不在仓库时

1.2 二进制软件包(Deb/RPM 时代)

  • 特点:预编译二进制,解决部分依赖
  • 工具
    • Debian/Ubuntu:.deb+dpkg
    • RHEL/CentOS:.rpm+rpm
  • 局限:依赖地狱(Dependency Hell)

1.3 高级包管理器(现代解决方案)

  • APT (Advanced Package Tool):Debian/Ubuntu 系统
  • DNF/YUM:RHEL/CentOS/Fedora 系统
  • 特性
    • 自动解析依赖
    • 多源仓库支持
    • 事务回滚
    • 签名验证

1.4 跨发行版新一代技术

技术特点适用场景
Snap自包含、自动更新、沙箱隔离桌面应用、需最新版本
Flatpak应用沙箱、共享运行时桌面应用,跨发行版
AppImage单文件、无需安装便携式应用分发
容器Docker/Podman,完整隔离服务部署、开发环境

💡 Ubuntu 22.04 默认支持 APT (Deb) 和 Snap 两种主流方式。


二、在线安装与离线安装

2.1 离线安装:Deb 软件包管理

(1)查看 Deb 包信息
# 查看包内容dpkg -c package.deb# 示例:dpkg -c ./nginx_1.18.0-0ubuntu1.10_amd64.deb# 查看包详细信息(版本、依赖、描述)dpkg -I package.deb# 示例:dpkg -I ./vscode_1.78.2_amd64.deb# 列出包安装的文件dpkg -L package_name# 已安装的包# 示例:dpkg -L nginx
(2)安装 Deb 包
# 基础安装(可能因依赖失败)sudodpkg -i package.deb# 示例:sudodpkg -i ./google-chrome-stable_current_amd64.deb# 修复依赖(安装失败后)sudoapt--fix-brokeninstall-y# 一次性解决依赖并安装(推荐)sudoaptinstall./package.deb -y# 示例:sudoaptinstall./code_1.78.2-1683131586_amd64.deb -y
(3)卸载 Deb 包
# 移除软件包,保留配置文件sudodpkg -r package_name# 示例:sudodpkg -r vscode# 完全移除(包括配置文件)sudodpkg -P package_name# 示例:sudodpkg -P nginx# 清理不再需要的依赖sudoaptautoremove -y
(4)多架构支持
# 查看已启用架构dpkg --print-foreign-architectures# 添加 ARM64 架构支持sudodpkg --add-architecture arm64sudoaptupdate# 安装指定架构包sudoaptinstalllibc6:arm64 -y# 查看各架构安装的包dpkg -l|grepamd64# x86_64 包dpkg -l|greparm64# ARM64 包

✅ 适用场景:无网络环境、特定版本安装、内部软件分发。


三、使用 APT 工具管理软件包(在线安装)

3.1 APT 基础架构

  • 源列表/etc/apt/sources.list+/etc/apt/sources.list.d/*.list
  • 缓存/var/lib/apt/lists/
  • 下载目录/var/cache/apt/archives/
  • 配置/etc/apt/apt.conf.d/

3.2 核心 APT 命令

(1)更新源索引
# 必须先执行(获取最新包信息)sudoaptupdate
(2)搜索与安装
# 搜索软件包aptsearch nginxaptpolicy nginx# 查看安装候选版本# 安装单个包sudoaptinstallnginx -y# 安装多个包sudoaptinstallgitcurlwget-y# 安装特定版本sudoaptinstallnginx=1.18.0-6ubuntu14.4 -y
(3)升级与卸载
# 升级所有已安装包sudoaptupgrade -y# 完整升级(可新增/删除包)sudoaptfull-upgrade -y# 卸载软件包(保留配置)sudoaptremove nginx -y# 完全卸载(删除配置)sudoaptpurge nginx -y# 清理无用依赖sudoaptautoremove -y# 清理下载缓存(释放空间)sudoaptclean# 删除所有 .debsudoaptautoclean# 仅删除旧版本 .deb
(4)高级查询
# 查看包详情aptshow nginx# 列出已安装包aptlist --installed# 查看包依赖aptdepends nginx# 依赖aptrdepends nginx# 被依赖# 降级包sudoaptinstallnginx=1.18.0-0ubuntu1 -y

3.3 配置 APT 源

(1)官方源(默认)
# 备份原配置sudocp/etc/apt/sources.list /etc/apt/sources.list.bak# 查看当前源cat/etc/apt/sources.list
(2)中国镜像源(加速)
# 方法1:使用 sed 替换(Ubuntu 22.04 Jammy)sudosed-i's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.listsudosed-i's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.list# 方法2:手动编辑sudonano/etc/apt/sources.list# 替换内容为(清华源):deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 更新索引sudoaptupdate
(3)添加第三方源
# 添加 Docker 官方源curl-fsSL https://download.docker.com/linux/ubuntu/gpg|sudogpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho"deb [arch=$(dpkg --print-architecture)signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu$(lsb_release -cs)stable"|sudotee/etc/apt/sources.list.d/docker.list>/dev/nullsudoaptupdate

3.4 PPA (Personal Package Archive) 安装

PPA 是 Ubuntu 社区维护的第三方软件仓库,提供最新/未包含在官方源的软件。

# 安装 PPA 工具sudoaptinstallsoftware-properties-common -y# 添加 PPA(示例:Node.js)sudoadd-apt-repository ppa:nodesource/node_18.x -ysudoaptupdate# 安装软件sudoaptinstallnodejs -y# 移除 PPAsudoadd-apt-repository --remove ppa:nodesource/node_18.x -y# 或sudorm/etc/apt/sources.list.d/nodesource-ubuntu-node_18-x-jammy.list# 列出所有 PPAls/etc/apt/sources.list.d/

⚠️ 警告:仅添加可信 PPA!恶意 PPA 可能包含后门。


四、安装和管理 Snap 包

4.1 什么是 Snap 包?

  • 定义:由 Canonical 开发的通用 Linux 包格式
  • 核心特点
    • 自包含:包含所有依赖
    • 沙箱隔离:受限权限
    • 原子更新:失败自动回滚
    • 跨发行版:同一包适用于所有 Linux

4.2 Snap 与 Deb 对比

特性Deb (APT)Snap
依赖管理依赖系统库自带依赖
更新频率跟随发行版开发者直接推送
隔离性严格沙箱
大小较大(含依赖)
启动速度稍慢(首次)

4.3 预装的 Snap 包(Ubuntu 22.04)

# 列出所有 Snapsnap list# 典型输出:# Name Version Rev Tracking Publisher Notes# core20 20230503 1828 latest/stable canonical✓ base# firefox 113.0.2-1 2747 latest/stable mozilla✓ -# snapd 2.59.5 18933 latest/stable canonical✓ snapd

4.4 Snap 命令详解

(1)基础操作
# 搜索软件snapfindcode# 输出:# Name Version Publisher Notes Summary# code 1.78.2 vscode✓ classic Code editing. Redefined.# code-flags 0136c1d flexiondotorg - Visual Studio Code flags tool# 安装(默认稳定通道)sudosnapinstallcode# 安装特定通道(如 edge)sudosnapinstall--edge microk8s# 查看详细信息snap info code
(2)管理已安装 Snap
# 列出所有已安装snap list# 查看服务状态snap services# 更新特定包sudosnap refresh code# 更新所有包sudosnap refresh# 回滚到上一版本sudosnap revert code# 禁用/启用sudosnap disable codesudosnapenablecode
(3)卸载与清理
# 卸载软件sudosnap remove code# 删除旧版本(保留最新)sudosnap list --all|awk'/disabled/{print $1, $3}'|xargs-rn2sudosnap remove# 彻底清理sudoaptpurge snapd -y# 谨慎!将移除所有 Snap
(4)权限管理
# 查看权限snap connections code# 连接/断开接口sudosnap connect code:home# 允许访问家目录sudosnap disconnect code:ssh-keys# 禁止访问 SSH 密钥

4.5 离线安装 Snap 包

适用场景:无网络服务器、安全隔离环境。

# 步骤1:在有网机器下载 Snap 及依赖snap download code# 生成两个文件:# code_123.snap # 主程序# code_123.assert # 签名验证# 步骤2:将文件复制到目标机器scpcode_*.snap user@server:/tmp/# 步骤3:在目标机器安装sudosnap ack /tmp/code_123.assertsudosnapinstall/tmp/code_123.snap# 验证snap list|grepcode

✅ 优势:不依赖在线仓库,适合离线环境部署。


五、使用源代码编译安装软件

5.1 基本步骤

  1. 安装构建工具

    sudoaptupdatesudoaptinstallbuild-essential checkinstall -ysudoaptinstalllibssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev -y
  2. 获取源码

    • 官方下载:wget https://example.com/package.tar.gz
    • Git 克隆:git clone https://github.com/user/repo.git
  3. 解压与配置

    tarxvf package.tar.gzcdpackage/ ./configure --prefix=/usr/local# 指定安装路径
  4. 编译与安装

    make-j$(nproc)# 并行编译(使用所有CPU核心)sudomakeinstall
  5. 验证

    /usr/local/bin/program --version

5.2 源码编译安装示例:Python 3.11

#!/bin/bash# install_python311.shecho"=== 1. 安装依赖 ==="sudoaptupdatesudoaptinstall-ymakebuild-essential libssl-dev zlib1g-dev\libbz2-dev libreadline-dev libsqlite3-devwgetcurlllvm\libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-devecho"=== 2. 下载源码 ==="wgethttps://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xztar-xf Python-3.11.4.tar.xzcdPython-3.11.4echo"=== 3. 配置编译选项 ==="# --enable-optimizations: 优化性能(编译更慢)# --with-ensurepip=install: 自带pip./configure --enable-optimizations --with-ensurepip=installecho"=== 4. 编译与安装 ==="make-j$(nproc)sudomakealtinstall# 使用 altinstall 避免覆盖系统pythonecho"=== 5. 验证安装 ==="python3.11 --version pip3.11 --versionecho"✅ Python 3.11 安装完成!"

💡 为什么用altinstall
Ubuntu 系统依赖/usr/bin/python3,直接make install会覆盖它,导致系统工具异常。

5.3 源码编译软件的卸载

(1)使用make uninstall(如果有)
cd/path/to/sourcesudomakeuninstall
(2)手动卸载(通用方法)
# 方法1:记录安装文件(编译前)sudomakeinstall|teeinstall.log# 从日志中提取文件列表,再手动删除# 方法2:使用 checkinstall 创建 Deb 包sudoaptinstallcheckinstall -ycd/path/to/sourcesudocheckinstall --pkgname=myapp --pkgversion=1.0--default# 生成 .deb 包,可用 dpkg -r 卸载# 方法3:手动删除(需知道安装路径)sudorm-rf /usr/local/bin/myappsudorm-rf /usr/local/lib/myappsudorm-rf /usr/local/share/doc/myapp

⚠️ 警告:源码编译软件难以完全卸载,优先使用 APT/Snap


六、综合实战案例:部署 LAMP + Snap 应用

目标:在新 Ubuntu 22.04 服务器上部署 LAMP 环境,并安装 Snap 版 Nextcloud。

#!/bin/bash# deploy_lamp_nextcloud.shecho"=== 1. 配置国内镜像源(加速)==="sudosed-i's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.listsudosed-i's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.listsudoaptupdateecho"=== 2. 安装 LAMP 栈 ==="# 安装 Apachesudoaptinstallapache2 -y# 安装 MySQL(自动设置 root 密码)sudodebconf-set-selections<<<'mysql-server mysql-server/root_password password MyRootPass123!'sudodebconf-set-selections<<<'mysql-server mysql-server/root_password_again password MyRootPass123!'sudoaptinstallmysql-server -y# 安全加固(非交互式)sudomysql_secure_installation<<EOF n y y y y EOF# 安装 PHPsudoaptinstallphp libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip -y# 重启服务sudosystemctl restart apache2 mysqlecho"=== 3. 配置 PHP ==="sudosed-i's/;date.timezone =/date.timezone = Asia\/Shanghai/'/etc/php/*/apache2/php.inisudosystemctl restart apache2echo"=== 4. 安装 Snap 版 Nextcloud ==="# 确保 snapd 服务运行sudosystemctlenable--now snapd# 安装 Nextcloudsudosnapinstallnextcloud# 配置域名和端口sudonextcloud.occ config:system:set trusted_domains1--value="your-domain.com"sudosnapsetnextcloud ports.http=8080# 避免与 Apache 80 端口冲突echo"=== 5. 验证部署 ==="echo"Apache: http://$(hostname-I|awk'{print $1}')"echo"Nextcloud: http://$(hostname-I|awk'{print $1}'):8080"echo"数据库状态:$(sudosystemctl is-active mysql)"echo"✅ LAMP + Nextcloud 部署完成!"

🔒 安全提示:

  • 生产环境应使用 SSL 证书(Let’s Encrypt)
  • 修改默认 MySQL 密码
  • 限制 Nextcloud 访问 IP
  • 定期更新:sudo apt upgrade && sudo snap refresh

七、本章小结

场景推荐方式命令示例适用情况
常规软件APT (Deb)sudo apt install nginx稳定、安全、自动更新
最新桌面应用Snapsudo snap install code需最新版本、跨发行版
离线环境Deb 手动安装sudo apt install ./package.deb无网络、特定版本
高度定制化源码编译./configure && make && sudo make install特殊编译选项、最新特性

最佳实践建议:

  1. 优先使用 APT:除非需要最新版本,否则首选官方仓库

  2. 谨慎使用 PPA:仅添加可信源,定期审查

  3. Snap 合理使用:桌面应用优先,服务器避免(性能/启动延迟)

  4. 源码编译最后考虑:仅当其他方式无法满足需求时

  5. 保持系统更新

    sudoaptupdate&&sudoaptupgrade -ysudosnap refresh

八、附录:常用命令速查表

APT 核心命令

命令说明
sudo apt update更新软件源索引
sudo apt install pkg安装软件包
sudo apt remove pkg卸载软件(保留配置)
sudo apt purge pkg完全卸载
sudo apt search keyword搜索软件包
apt policy pkg查看安装候选版本

Snap 核心命令

命令说明
snap find keyword搜索 Snap
sudo snap install pkg安装 Snap
sudo snap refresh pkg更新 Snap
sudo snap revert pkg回滚版本
snap connections pkg查看权限
sudo snap remove pkg卸载 Snap

源码编译关键步骤

# 安装依赖sudoaptbuild-dep package# 自动安装构建依赖# 配置(常见选项)./configure --prefix=/usr/local --enable-feature --with-library# 编译(加速)make-j$(nproc)# 使用所有CPU核心# 安全安装(记录文件)sudocheckinstall --pkgname=myapp --default

📌重要提醒
本章所有命令均在Ubuntu 22.04 LTS验证。
生产环境操作前务必:

  1. 在测试环境验证
  2. 备份关键数据 (/etc,/home, 数据库)
  3. 阅读官方文档
  4. 遵循最小权限原则

软件包管理是系统稳定与安全的基石,谨慎操作!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 3:02:12

校园综合服务系统的设计与实现-计算机毕业设计源码+LW文档

摘 要 随着信息技术的快速发展&#xff0c;校园综合服务系统逐渐成为高校学生管理和服务的重要平台。本文设计并实现了一种基于Spring Boot框架的校园综合服务系统&#xff0c;旨在为广大学生提供便捷的二手商品交易、失物招领、校园活动报名等功能。系统包括了二手商品信息的…

作者头像 李华
网站建设 2026/5/8 5:59:12

终极免费表情符号库:微软Fluent Emoji完整使用指南

终极免费表情符号库&#xff1a;微软Fluent Emoji完整使用指南 【免费下载链接】fluentui-emoji A collection of familiar, friendly, and modern emoji from Microsoft 项目地址: https://gitcode.com/gh_mirrors/fl/fluentui-emoji 想要为你的数字创作注入生动趣味和…

作者头像 李华
网站建设 2026/5/3 4:29:59

VBScript 条件语句

VBScript 条件语句详解 VBScript 提供了两种主要的条件语句&#xff1a;If…Then…Else 和 Select Case。它们用于根据条件执行不同的代码块。 1. If…Then…Else 语句 最常用、最灵活的条件判断结构。 语法结构 单行形式&#xff08;简单条件&#xff09;&#xff1a; If …

作者头像 李华
网站建设 2026/5/4 19:40:43

VBScript 关键字

VBScript 关键字&#xff08;保留字&#xff09;详解 VBScript 的关键字&#xff08;Reserved Keywords&#xff09; 是不能用作变量名、函数名、子程序名或常量的标识符。这些词具有特殊含义&#xff0c;由 VBScript 解释器保留使用。 以下是 VBScript 的完整保留关键字列表…

作者头像 李华
网站建设 2026/5/1 15:41:28

PaddlePaddle镜像如何实现GPU训练任务排队机制

PaddlePaddle镜像如何实现GPU训练任务排队机制 在深度学习项目从实验室走向生产线的过程中&#xff0c;一个常见的挑战浮出水面&#xff1a;多个团队成员同时提交训练任务&#xff0c;GPU服务器却频繁崩溃。这种“抢卡大战”不仅拖慢了研发节奏&#xff0c;更造成了昂贵硬件资源…

作者头像 李华
网站建设 2026/5/3 22:53:45

WhisperLiveKit说话人区分实战:从混乱对话到清晰记录

WhisperLiveKit说话人区分实战&#xff1a;从混乱对话到清晰记录 【免费下载链接】WhisperLiveKit Real-time, Fully Local Speech-to-Text and Speaker Diarization. FastAPI Server & Web Interface 项目地址: https://gitcode.com/GitHub_Trending/wh/WhisperLiveKit …

作者头像 李华