news 2026/4/16 12:52:17

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/4/16 7:20:37

AMD显卡实时监控神器amdgpu_top:从入门到精通的完整指南

AMD显卡实时监控神器amdgpu_top&#xff1a;从入门到精通的完整指南 【免费下载链接】amdgpu_top Tool to display AMDGPU usage 项目地址: https://gitcode.com/gh_mirrors/am/amdgpu_top 在Linux系统中&#xff0c;想要实时掌握AMD显卡的运行状态一直是用户的痛点。am…

作者头像 李华
网站建设 2026/4/15 19:09:58

从源码到服务上线:Open-AutoGLM Docker化部署实战路径

第一章&#xff1a;智浦Open-AutoGLM开源模型部署概述 智浦推出的 Open-AutoGLM 是一款面向自动驾驶场景的开源大语言模型&#xff0c;具备强大的自然语言理解与决策推理能力。该模型可集成至车载系统或边缘计算平台&#xff0c;支持环境语义解析、驾驶意图识别和多模态交互等功…

作者头像 李华
网站建设 2026/4/16 7:30:35

快速掌握QRCoder:C开发者的终极QR码生成解决方案

快速掌握QRCoder&#xff1a;C#开发者的终极QR码生成解决方案 【免费下载链接】QRCoder A pure C# Open Source QR Code implementation 项目地址: https://gitcode.com/gh_mirrors/qr/QRCoder 在现代应用开发中&#xff0c;QR码已经成为连接数字世界与物理世界的重要桥…

作者头像 李华
网站建设 2026/4/16 7:28:02

ComfyUI自定义脚本完全指南:解锁AI工作流无限可能

ComfyUI自定义脚本完全指南&#xff1a;解锁AI工作流无限可能 【免费下载链接】ComfyUI-Custom-Scripts Enhancements & experiments for ComfyUI, mostly focusing on UI features 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Custom-Scripts 想象一下&a…

作者头像 李华
网站建设 2026/4/16 9:01:29

终极指南:快速掌握 awesome-shadcn/ui 精选组件库

终极指南&#xff1a;快速掌握 awesome-shadcn/ui 精选组件库 【免费下载链接】awesome-shadcn-ui A curated list of awesome things related to shadcn/ui. 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-shadcn-ui 在当今快速发展的前端开发领域&#xff0c;…

作者头像 李华
网站建设 2026/4/16 9:02:20

Edge TTS终极指南:5分钟掌握专业级语音合成技术

Edge TTS终极指南&#xff1a;5分钟掌握专业级语音合成技术 【免费下载链接】edge-tts Use Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 项目地址: https://gitcode.com/GitHub_Trending/ed/edge-t…

作者头像 李华