Linux 软件包管理
Windows 装软件要去官网下 exe、点击下一步;macOS 要拖到 Applications。Linux 则有一个包管理器,一行命令就能从软件源下载、安装、更新、卸载几乎所有软件,还会自动处理依赖关系。这是 Linux 比 Windows 体验好得多的一大原因。
1. 包管理的核心概念
理解三件事就够了:
- 软件包(package):一个打包好的软件文件,里面是编译好的程序、配置、文档。
- 软件源(repository / repo):存放软件包的服务器。包管理器从源下载包。
- 依赖(dependency):软件 A 运行需要软件 B,包管理器会自动把 B 也装上。
2. apt:Debian / Ubuntu 系列
Ubuntu、Debian、Mint 等 Debian 系发行版用 apt(老命令叫 apt-get)。这是新手最先接触的包管理器。
# apt:Debian / Ubuntu 系列的包管理器
# 更新软件源索引(装任何东西前先 update)
sudo apt update # 从源服务器拉最新软件列表
# "Reading package lists... Done"
# 升级所有已装的软件
sudo apt upgrade # 升级已装软件(不删旧的)
sudo apt dist-upgrade # 升级并处理依赖变化(可装/删包)
# 安装软件
sudo apt install nginx # 装一个
sudo apt install nginx git curl # 装多个
sudo apt install -y nginx # -y:所有问题回答 yes(脚本里常用)
# 卸载
sudo apt remove nginx # 卸载(保留配置文件)
sudo apt purge nginx # 彻底卸载(连配置一起删)
sudo apt autoremove # 清理不再需要的依赖(系统瘦身)
# 查询
apt search keyword # 按关键字搜
apt show nginx # 看软件包详情(版本、依赖、描述)
apt list --installed # 列出所有已装的包
dpkg -l | grep nginx # 同上,旧写法最重要的习惯:装新软件前先 apt update。否则你装的可能是旧版本——apt update 是从源拉最新软件列表,apt upgrade 才是真的升级动作。
3. yum / dnf:CentOS / RHEL 系列
CentOS、Rocky、AlmaLinux、Fedora 用 yum 或它的升级版 dnf。两者用法几乎一样,记一个就行。
# yum / dnf:CentOS / RHEL / Fedora 系列
# dnf 是 yum 的升级版(Fedora 18+ / RHEL 8+ 推荐)
# 用法几乎一样,把 yum 换成 dnf 即可
sudo yum install nginx # 装
sudo yum remove nginx # 卸
sudo yum update # 升级所有
sudo yum update nginx # 只升级 nginx
sudo yum search nginx # 搜
sudo yum info nginx # 详情
sudo yum list installed # 已装列表
yum provides */nginx # 哪个包提供 nginx 命令
# 装企业源(EPEL,额外软件包)
sudo yum install epel-release
# 装完就能装很多官方源里没有的软件4. apk / pacman:容器和极客的选择
Docker 镜像经常基于 Alpine(体积只有 5MB),它的包管理器是 apk。Arch Linux 用户则用 pacman。
# apk:Alpine Linux(Docker 容器首选)
apk update # 更新源
apk add nginx # 装
apk add --no-cache nginx # 不留缓存(Dockerfile 里必加)
apk del nginx # 卸
apk search nginx # 搜
apk info # 已装列表
# pacman:Arch Linux
sudo pacman -S nginx # 装
sudo pacman -Syu # 全系统更新(滚动更新日常)
sudo pacman -R nginx # 卸
sudo pacman -Ss nginx # 搜
pacman -Q # 已装列表不同发行版的命令虽然不同,但套路完全一样:update → install → remove → search。学会一个,其他查文档就能用。
5. 配置软件源(国内提速)
默认软件源在国外,国内访问很慢。换成阿里云、清华、中科大的镜像源可以快十倍以上。这是装完 Linux 的"第一件事"。
# 软件源(repository)配置
# Ubuntu/Debian 的源在 /etc/apt/sources.list
# 国内服务器换成阿里云/清华源可以大幅提速
sudo vim /etc/apt/sources.list
# 把 archive.ubuntu.com 换成 mirrors.aliyun.com
sudo apt update # 改完必须 update 一下
# 添加第三方 PPA 源(Ubuntu)
sudo add-apt-repository ppa:deadsnakes/python3.12
sudo apt update
sudo apt install python3.12
# CentOS 添加 EPEL 和 REMI 源
sudo yum install epel-release
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm改源就是修改配置文件里的 URL,把官方域名换成镜像站域名。改完必须 apt update 刷新一下索引,否则还是用旧源。
6. 通用包格式:snap / flatpak / AppImage
传统包管理器绑死发行版:Ubuntu 的 deb 在 Fedora 上装不了。通用包格式解决这个问题——一份包所有发行版都能装:
# 通用包格式:跨发行版
# snap:Canonical(Ubuntu 公司)推的格式,自带依赖
sudo snap install code --classic # 装 VS Code
sudo snap install docker
sudo snap list # 已装
# flatpak:Linux 桌面应用主流,跨发行版
flatpak install flathub com.visualstudio.code
# AppImage:单文件应用,下载即用
chmod +x app.AppImage
./app.AppImage
# 这些格式体积大但隔离好,适合桌面应用
# 服务器场景仍然推荐用系统原生包管理器(apt/yum)这些格式主要用在桌面应用上(VS Code、Slack、GIMP)。服务器场景仍然推荐系统原生包管理器,体积小、启动快。
7. 源码编译安装
有时软件没提供预编译包,或你需要特定编译选项,就要从源码编译。Linux 经典的"三步走":
# 源码编译安装(找不到预编译包时的最后选择)
# 经典三步走(解压后进入源码目录)
./configure # 检测环境,生成 Makefile
make # 编译
sudo make install # 安装到系统
# 示例:从源码装最新版 Redis
wget https://download.redis.io/redis-stable.tar.gz
tar -xzvf redis-stable.tar.gz
cd redis-stable
make
sudo make install
# 缺点:卸载麻烦(要保留源码 make uninstall),
# 升级也要重新编译。
# 优先用包管理器,源码安装只在必要时用。源码安装是最后的选择——卸载麻烦、升级要重新编译、依赖要自己装。能用包管理器就别用源码。
8. 常见踩坑
- 忘记 apt update:装到旧版本,或报"找不到包"。
- 没装 software-properties-common:add-apt-repository 命令找不到,
sudo apt install software-properties-common装一下。 - 锁文件冲突:报 "Could not get lock /var/lib/dpkg/lock"。是另一个 apt 在跑,等它结束;或确认没有后
sudo rm /var/lib/dpkg/lock-frontend(谨慎)。 - 损坏的依赖:
sudo apt --fix-broken install修复。 - 磁盘满了:
sudo apt clean清缓存包(/var/cache/apt/archives)。
9. 实战:装一个完整的 Node.js 环境
把这一篇的知识串起来,装 Node.js 有几种方式,体会不同方法的取舍:
- 系统源自带的:
sudo apt install nodejs npm。版本旧,不推荐。 - NodeSource 源(推荐):加官方源后装最新 LTS。
- nvm(版本管理器):开发机推荐,可装多版本切换。
- 源码编译:不推荐,除非需要特殊编译选项。
小结
这一篇你学会了用包管理器装软件:Ubuntu 用 apt、CentOS 用 yum/dnf、Alpine 用 apk。掌握了更新源、安装、卸载、查询、换镜像源。下一篇讲把这些命令组合起来自动执行的Shell 脚本。
← 上一篇 Linux 管道与重定向
下一篇 Shell 脚本入门 →