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 包信息
bash 复制代码
# 查看包内容
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 包
bash 复制代码
# 基础安装(可能因依赖失败)
sudo dpkg -i package.deb
# 示例:
sudo dpkg -i ./google-chrome-stable_current_amd64.deb

# 修复依赖(安装失败后)
sudo apt --fix-broken install -y

# 一次性解决依赖并安装(推荐)
sudo apt install ./package.deb -y
# 示例:
sudo apt install ./code_1.78.2-1683131586_amd64.deb -y
(3)卸载 Deb 包
bash 复制代码
# 移除软件包,保留配置文件
sudo dpkg -r package_name
# 示例:
sudo dpkg -r vscode

# 完全移除(包括配置文件)
sudo dpkg -P package_name
# 示例:
sudo dpkg -P nginx

# 清理不再需要的依赖
sudo apt autoremove -y
(4)多架构支持
bash 复制代码
# 查看已启用架构
dpkg --print-foreign-architectures

# 添加 ARM64 架构支持
sudo dpkg --add-architecture arm64
sudo apt update

# 安装指定架构包
sudo apt install libc6:arm64 -y

# 查看各架构安装的包
dpkg -l | grep amd64  # x86_64 包
dpkg -l | grep arm64  # 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)更新源索引
bash 复制代码
# 必须先执行(获取最新包信息)
sudo apt update
(2)搜索与安装
bash 复制代码
# 搜索软件包
apt search nginx
apt policy nginx  # 查看安装候选版本

# 安装单个包
sudo apt install nginx -y

# 安装多个包
sudo apt install git curl wget -y

# 安装特定版本
sudo apt install nginx=1.18.0-6ubuntu14.4 -y
(3)升级与卸载
bash 复制代码
# 升级所有已安装包
sudo apt upgrade -y

# 完整升级(可新增/删除包)
sudo apt full-upgrade -y

# 卸载软件包(保留配置)
sudo apt remove nginx -y

# 完全卸载(删除配置)
sudo apt purge nginx -y

# 清理无用依赖
sudo apt autoremove -y

# 清理下载缓存(释放空间)
sudo apt clean        # 删除所有 .deb
sudo apt autoclean    # 仅删除旧版本 .deb
(4)高级查询
bash 复制代码
# 查看包详情
apt show nginx

# 列出已安装包
apt list --installed

# 查看包依赖
apt depends nginx    # 依赖
apt rdepends nginx   # 被依赖

# 降级包
sudo apt install nginx=1.18.0-0ubuntu1 -y

3.3 配置 APT 源

(1)官方源(默认)
bash 复制代码
# 备份原配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 查看当前源
cat /etc/apt/sources.list
(2)中国镜像源(加速)
bash 复制代码
# 方法1:使用 sed 替换(Ubuntu 22.04 Jammy)
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

# 方法2:手动编辑
sudo nano /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

# 更新索引
sudo apt update
(3)添加第三方源
bash 复制代码
# 添加 Docker 官方源
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

3.4 PPA (Personal Package Archive) 安装

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

bash 复制代码
# 安装 PPA 工具
sudo apt install software-properties-common -y

# 添加 PPA(示例:Node.js)
sudo add-apt-repository ppa:nodesource/node_18.x -y
sudo apt update

# 安装软件
sudo apt install nodejs -y

# 移除 PPA
sudo add-apt-repository --remove ppa:nodesource/node_18.x -y
# 或
sudo rm /etc/apt/sources.list.d/nodesource-ubuntu-node_18-x-jammy.list

# 列出所有 PPA
ls /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)

bash 复制代码
# 列出所有 Snap
snap 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)基础操作
bash 复制代码
# 搜索软件
snap find code
# 输出:
# Name       Version    Publisher     Notes    Summary
# code       1.78.2     vscode✓       classic  Code editing. Redefined.
# code-flags 0136c1d    flexiondotorg -        Visual Studio Code flags tool

# 安装(默认稳定通道)
sudo snap install code

# 安装特定通道(如 edge)
sudo snap install --edge microk8s

# 查看详细信息
snap info code
(2)管理已安装 Snap
bash 复制代码
# 列出所有已安装
snap list

# 查看服务状态
snap services

# 更新特定包
sudo snap refresh code

# 更新所有包
sudo snap refresh

# 回滚到上一版本
sudo snap revert code

# 禁用/启用
sudo snap disable code
sudo snap enable code
(3)卸载与清理
bash 复制代码
# 卸载软件
sudo snap remove code

# 删除旧版本(保留最新)
sudo snap list --all | awk '/disabled/{print $1, $3}' | xargs -rn2 sudo snap remove

# 彻底清理
sudo apt purge snapd -y  # 谨慎!将移除所有 Snap
(4)权限管理
bash 复制代码
# 查看权限
snap connections code

# 连接/断开接口
sudo snap connect code:home    # 允许访问家目录
sudo snap disconnect code:ssh-keys  # 禁止访问 SSH 密钥

4.5 离线安装 Snap 包

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

bash 复制代码
# 步骤1:在有网机器下载 Snap 及依赖
snap download code
# 生成两个文件:
#   code_123.snap     # 主程序
#   code_123.assert   # 签名验证

# 步骤2:将文件复制到目标机器
scp code_*.snap user@server:/tmp/

# 步骤3:在目标机器安装
sudo snap ack /tmp/code_123.assert
sudo snap install /tmp/code_123.snap

# 验证
snap list | grep code

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


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

5.1 基本步骤

  1. 安装构建工具

    bash 复制代码
    sudo apt update
    sudo apt install build-essential checkinstall -y
    sudo apt install libssl-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. 解压与配置

    bash 复制代码
    tar xvf package.tar.gz
    cd package/
    ./configure --prefix=/usr/local  # 指定安装路径
  4. 编译与安装

    bash 复制代码
    make -j$(nproc)  # 并行编译(使用所有CPU核心)
    sudo make install
  5. 验证

    bash 复制代码
    /usr/local/bin/program --version

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

bash 复制代码
#!/bin/bash
# install_python311.sh

echo "=== 1. 安装依赖 ==="
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

echo "=== 2. 下载源码 ==="
wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz
tar -xf Python-3.11.4.tar.xz
cd Python-3.11.4

echo "=== 3. 配置编译选项 ==="
# --enable-optimizations: 优化性能(编译更慢)
# --with-ensurepip=install: 自带pip
./configure --enable-optimizations --with-ensurepip=install

echo "=== 4. 编译与安装 ==="
make -j$(nproc)
sudo make altinstall  # 使用 altinstall 避免覆盖系统python

echo "=== 5. 验证安装 ==="
python3.11 --version
pip3.11 --version

echo "✅ Python 3.11 安装完成!"

💡 为什么用 altinstall

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

5.3 源码编译软件的卸载

(1)使用 make uninstall(如果有)
bash 复制代码
cd /path/to/source
sudo make uninstall
(2)手动卸载(通用方法)
bash 复制代码
# 方法1:记录安装文件(编译前)
sudo make install | tee install.log
# 从日志中提取文件列表,再手动删除

# 方法2:使用 checkinstall 创建 Deb 包
sudo apt install checkinstall -y
cd /path/to/source
sudo checkinstall --pkgname=myapp --pkgversion=1.0 --default
# 生成 .deb 包,可用 dpkg -r 卸载

# 方法3:手动删除(需知道安装路径)
sudo rm -rf /usr/local/bin/myapp
sudo rm -rf /usr/local/lib/myapp
sudo rm -rf /usr/local/share/doc/myapp

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


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

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

bash 复制代码
#!/bin/bash
# deploy_lamp_nextcloud.sh

echo "=== 1. 配置国内镜像源(加速)==="
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo apt update

echo "=== 2. 安装 LAMP 栈 ==="
# 安装 Apache
sudo apt install apache2 -y

# 安装 MySQL(自动设置 root 密码)
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password MyRootPass123!'
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password MyRootPass123!'
sudo apt install mysql-server -y

# 安全加固(非交互式)
sudo mysql_secure_installation <<EOF
n
y
y
y
y
EOF

# 安装 PHP
sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip -y

# 重启服务
sudo systemctl restart apache2 mysql

echo "=== 3. 配置 PHP ==="
sudo sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/' /etc/php/*/apache2/php.ini
sudo systemctl restart apache2

echo "=== 4. 安装 Snap 版 Nextcloud ==="
# 确保 snapd 服务运行
sudo systemctl enable --now snapd

# 安装 Nextcloud
sudo snap install nextcloud

# 配置域名和端口
sudo nextcloud.occ config:system:set trusted_domains 1 --value="your-domain.com"
sudo snap set nextcloud 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 "数据库状态: $(sudo systemctl 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 稳定、安全、自动更新
最新桌面应用 Snap sudo snap install code 需最新版本、跨发行版
离线环境 Deb 手动安装 sudo apt install ./package.deb 无网络、特定版本
高度定制化 源码编译 ./configure && make && sudo make install 特殊编译选项、最新特性

最佳实践建议:

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

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

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

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

  5. 保持系统更新

    bash 复制代码
    sudo apt update && sudo apt upgrade -y
    sudo snap 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

源码编译关键步骤

bash 复制代码
# 安装依赖
sudo apt build-dep package  # 自动安装构建依赖

# 配置(常见选项)
./configure --prefix=/usr/local --enable-feature --with-library

# 编译(加速)
make -j$(nproc)  # 使用所有CPU核心

# 安全安装(记录文件)
sudo checkinstall --pkgname=myapp --default

📌 重要提醒

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

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

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

相关推荐
蒙奇D索大2 小时前
【数据结构】排序算法精讲|折半插入排序全解:高效优化、性能对比、实战剖析
数据结构·学习·考研·算法·排序算法·改行学it
有个人神神叨叨2 小时前
odoo 学习- 01. Odoo 工程结构概览
学习
有个人神神叨叨2 小时前
odoo 学习- 02. Odoo 核心框架探究
学习
石像鬼₧魂石2 小时前
SQLMap注入完整操作流程(含全部细节 靶机学习用)
学习
爱学大树锯2 小时前
421 · 简化路径
linux·运维·服务器
wadesir2 小时前
Debian集群容量规划(从零开始掌握Linux服务器集群资源评估与优化)
linux·服务器·debian
复业思维202401082 小时前
STM32学习和实践笔记(45):SPI-FLASH实验
笔记·stm32·学习
2301_781143562 小时前
python学习(一)
python·学习
GHL2842710902 小时前
redis编译调试(linux)
linux·数据库·redis