包管理与软件安装¶
📌 学习时间: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:如何查看某个文件属于哪个包?
Q3:源码编译安装的三个步骤?
./configure(配置编译选项和检查依赖)→make(编译)→make install(安装到系统)。推荐使用checkinstall替代make install以生成可管理的 deb/rpm 包。
🔧 练习题¶
- 使用 apt 安装 nginx、查看其版本和文件列表
- 尝试下载一个开源项目源码并编译安装
- 使用 pyenv/nvm 管理 Python/Node.js 多版本
- 将系统默认软件源更换为国内镜像
✅ 自我检查¶
- 熟练使用 apt/yum 安装、更新、卸载软件
- 了解 dpkg/rpm 底层命令
- 能进行源码编译安装
- 了解 snap/flatpak
- 能管理 Python/Node.js 开发环境
上一章:08-服务与系统管理 下一章:10-Vim编辑器