跳转至

包管理与软件安装

包管理与软件安装

📌 学习时间:1-2天 📌 难度级别:⭐⭐ 基础 📌 前置知识:Linux基础、Shell基础


📚 章节概述

不同 Linux 发行版使用不同的包管理系统。本章涵盖 Debian/Ubuntu 系的 apt、Red Hat/CentOS 系的 yum/dnf、源码编译安装、snap/flatpak 通用包、以及 Python/Node.js 开发环境管理。

🎯 学习目标

  • 掌握 apt 包管理(Debian/Ubuntu)
  • 掌握 yum/dnf 包管理(CentOS/RHEL/Fedora)
  • 学会源码编译安装软件
  • 了解 snap/flatpak 通用包管理
  • 掌握 Python/Node.js 环境管理

📖 1. apt — Debian/Ubuntu 包管理

1.1 基本操作

Bash
# 更新软件包列表(从软件源获取最新信息)
sudo apt update

# 升级已安装的软件包
sudo apt upgrade                       # 安全升级(不删除旧包)
sudo apt full-upgrade                  # 完全升级(可能删除旧包)

# 安装软件
sudo apt install nginx                 # 安装 nginx
sudo apt install nginx=1.18.0-0ubuntu1 # 安装指定版本
sudo apt install -y nginx php mysql-server  # 同时安装多个,自动确认

# 卸载软件
sudo apt remove nginx                  # 卸载(保留配置)
sudo apt purge nginx                   # 彻底卸载(含配置文件)
sudo apt autoremove                    # 清理不再需要的依赖

# 搜索软件
apt search nginx                       # 搜索软件包
apt show nginx                        # 显示软件包详细信息
apt list --installed                   # 列出已安装的包
apt list --upgradable                  # 列出可升级的包
dpkg -l | grep nginx                   # 使用 dpkg 查找

# 查看文件属于哪个包
dpkg -S /usr/sbin/nginx               # 文件 → 包
dpkg -L nginx                          # 包 → 文件列表
apt-file search /usr/sbin/nginx        # 搜索(含未安装的包)

1.2 软件源管理

Bash
# 软件源配置
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

# Ubuntu 22.04 换国内源(清华TUNA镜像)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 注意:不能用 sudo cat > file(重定向在当前Shell执行,没有sudo权限),用 sudo tee
sudo tee /etc/apt/sources.list > /dev/null << 'EOF'
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-security main restricted universe multiverse
EOF
sudo apt update

# 添加 PPA(个人软件包存档)
sudo add-apt-repository ppa:deadsnakes/ppa   # 添加 PPA
sudo apt update
sudo apt install python3.11

# 添加第三方源(以 Docker 为例)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 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
sudo apt update
sudo apt install docker-ce

1.3 dpkg — 底层包管理

Bash
# dpkg 是 apt 的底层工具,直接操作 .deb 文件

# 安装 .deb 文件
sudo dpkg -i package.deb              # 安装
sudo apt install -f                    # 修复依赖

# 其他操作
dpkg -l                               # 列出所有已安装包
dpkg -l | grep nginx                  # 查找特定包
dpkg -s nginx                         # 包状态
dpkg -L nginx                         # 列出包的文件
dpkg -S /path/to/file                 # 查找文件属于哪个包
dpkg --configure -a                    # 修复中断的安装

📖 2. yum/dnf — Red Hat 系包管理

2.1 yum(CentOS 7 及之前)

Bash
# 基本操作
sudo yum update                        # 更新所有包
sudo yum install nginx                 # 安装
sudo yum remove nginx                  # 卸载
sudo yum search nginx                  # 搜索
yum info nginx                        # 包信息
yum list installed                     # 已安装的包
yum list available                     # 可安装的包

# 包组管理
yum grouplist                          # 查看包组
sudo yum groupinstall "Development Tools"  # 安装开发工具组

# 清理缓存
sudo yum clean all
sudo yum makecache

# 历史记录
yum history                            # 查看操作历史
sudo yum history undo 15               # 撤销操作

2.2 dnf(CentOS 8+ / Fedora / RHEL 8+)

Bash
# dnf 是 yum 的下一代,命令基本兼容

sudo dnf update                        # 更新
sudo dnf install nginx                 # 安装
sudo dnf remove nginx                  # 卸载
sudo dnf search nginx                  # 搜索
dnf info nginx                        # 信息
dnf list installed                     # 已安装
sudo dnf autoremove                   # 清理不需要的依赖

# 模块管理(CentOS 8+)
dnf module list                        # 查看可用模块
dnf module list nodejs                 # 查看 nodejs 可用版本
sudo dnf module enable nodejs:18       # 启用 Node.js 18
sudo dnf module install nodejs:18      # 安装

2.3 rpm — 底层包管理

Bash
# rpm 是 yum/dnf 的底层

sudo rpm -ivh package.rpm              # 安装
sudo rpm -Uvh package.rpm              # 升级
sudo rpm -e package_name               # 卸载
rpm -qa                                # 列出所有包
rpm -qa | grep nginx                   # 查找
rpm -qi nginx                          # 包信息
rpm -ql nginx                          # 包文件列表
rpm -qf /usr/sbin/nginx               # 文件属于哪个包

📖 3. 源码编译安装

Bash
# 源码编译三部曲:configure → make → make install

# 1. 安装编译工具
# Ubuntu
sudo apt install build-essential

# CentOS
sudo yum groupinstall "Development Tools"

# 2. 下载源码
wget https://nginx.org/download/nginx-1.25.3.tar.gz
tar xzf nginx-1.25.3.tar.gz
cd nginx-1.25.3

# 3. 查看帮助
./configure --help

# 4. 配置
./configure \
    --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_v2_module \
    --with-http_gzip_static_module

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

# 6. 安装
sudo make install

# 7. 验证
/usr/local/nginx/sbin/nginx -v

# 清理
make clean                             # 清理编译产物

# 卸载(源码安装无卸载命令,手动删除)
sudo rm -rf /usr/local/nginx

# checkinstall — 将源码安装转为 deb/rpm 包(推荐)
sudo apt install checkinstall          # 安装
sudo checkinstall                      # 替代 make install
# 自动生成 .deb 包,后续可以用 dpkg 管理

📖 4. 通用包管理

4.1 snap

Bash
# snap 是 Canonical 开发的通用包管理器

# 基本操作
sudo snap install vlc                  # 安装
sudo snap remove vlc                   # 卸载
snap find "text editor"                # 搜索
snap list                             # 已安装
snap info vlc                          # 详细信息
sudo snap refresh                      # 更新所有
sudo snap refresh vlc                  # 更新指定

# 特点
# - 包含所有依赖(独立运行)
# - 自动更新
# - 沙箱隔离
# - 跨发行版通用

4.2 flatpak

Bash
# flatpak 是另一个通用包管理器

sudo apt install flatpak               # 安装 flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 基本操作
flatpak install flathub org.gimp.GIMP  # 安装
flatpak run org.gimp.GIMP             # 运行
flatpak uninstall org.gimp.GIMP       # 卸载
flatpak list                           # 已安装
flatpak update                         # 更新所有

📖 5. 开发环境管理

5.1 Python 环境

Bash
# pyenv — Python 版本管理
curl https://pyenv.run | bash

# ~/.bashrc 添加
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"  # $()命令替换:执行命令并获取输出
eval "$(pyenv virtualenv-init -)"

# 使用
pyenv install --list                   # 可安装版本
pyenv install 3.12.0                   # 安装
pyenv global 3.12.0                    # 设为全局默认
pyenv local 3.11.0                     # 设为项目本地版本

# venv — 虚拟环境
python3 -m venv myenv                  # 创建虚拟环境
source myenv/bin/activate              # 激活
deactivate                             # 退出

# pip — 包管理
pip install requests                   # 安装
pip install -r requirements.txt        # 从需求文件安装
pip freeze > requirements.txt          # 导出依赖
pip list                              # 列出已安装包
pip install --upgrade pip              # 升级 pip

# 国内镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

5.2 Node.js 环境

Bash
# nvm — Node.js 版本管理
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash  # |管道:将前一命令的输出作为后一命令的输入
source ~/.bashrc

# 使用
nvm ls-remote                          # 可安装版本
nvm install 20                         # 安装 Node.js 20
nvm install --lts                      # 安装最新 LTS
nvm use 20                            # 切换版本
nvm alias default 20                   # 设为默认

# npm — 包管理
npm init -y                            # 初始化项目
npm install express                    # 安装依赖
npm install -g pm2                     # 全局安装
npm list                              # 列出依赖
npm update                            # 更新
npm audit                             # 安全审计

# 国内镜像
npm config set registry https://registry.npmmirror.com

📖 6. 面试要点

Q1:apt 和 dpkg 的关系?

dpkg 是底层工具,直接操作 .deb 包但不处理依赖。apt 是高层工具,自动解决依赖关系,会调用 dpkg 完成实际安装。类似的,rpm 是底层而 yum/dnf 是高层。

Q2:如何查看某个文件属于哪个包?

Bash
# Debian/Ubuntu
dpkg -S /usr/sbin/nginx

# CentOS/RHEL
rpm -qf /usr/sbin/nginx

Q3:源码编译安装的三个步骤?

./configure(配置编译选项和检查依赖)→ make(编译)→ make install(安装到系统)。推荐使用 checkinstall 替代 make install 以生成可管理的 deb/rpm 包。


🔧 练习题

  1. 使用 apt 安装 nginx、查看其版本和文件列表
  2. 尝试下载一个开源项目源码并编译安装
  3. 使用 pyenv/nvm 管理 Python/Node.js 多版本
  4. 将系统默认软件源更换为国内镜像

✅ 自我检查

  • 熟练使用 apt/yum 安装、更新、卸载软件
  • 了解 dpkg/rpm 底层命令
  • 能进行源码编译安装
  • 了解 snap/flatpak
  • 能管理 Python/Node.js 开发环境

上一章08-服务与系统管理 下一章10-Vim编辑器