Linux 软件包与服务命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑦族:软件包与服务管理,约 27 个命令。装软件和管理后台服务是运维的日常主业。包管理器负责"把软件正确地放进来"(含依赖解析),systemd 则负责"让它跑起来并保持运行"。发行版不同,包管理命令完全不同,但 systemd 部分在新一点的发行版上是通用的。定时任务进阶见 日志、时间与计划任务。
一、Debian / Ubuntu 系
apt(Advanced Package Tool,高级包工具)是 Debian 系的高层包管理器,会自动处理依赖关系——你要装 A,它会把 A 依赖的 B、C 一起装上。dpkg 是它底层的工具,只负责拆包安装,不解决依赖。
| 命令 | 作用 | 常用示例 |
|---|---|---|
apt | 高级包工具,日常主力 | apt update(刷新索引,装包前必做);apt upgrade(升级所有包);apt install pkg;apt remove pkg;apt purge pkg(连配置文件一起删);apt search key;apt show pkg;apt autoremove(清理不再需要的依赖);apt list --installed |
apt-get | apt 的传统接口,脚本里更常见(输出更稳定) | apt-get install -y pkg(-y 免确认,脚本必备);apt-get --purge remove pkg;apt-get clean(清缓存);apt-get -f install(修复依赖断裂) |
apt-cache | 查询包索引(纯查询,不改系统) | apt-cache search key;apt-cache show pkg;apt-cache policy pkg(看可安装版本与来源仓库);apt-cache depends pkg(看依赖) |
dpkg | 底层包工具,管理 .deb 包本身 | dpkg -l(已装列表);dpkg -l | grep pkg;dpkg -L pkg(这个包装了哪些文件);dpkg -S /path/file(这个文件属于哪个包);dpkg -i pkg.deb(本地安装);dpkg -r pkg(卸载) |
add-apt-repository | 添加或移除软件源(PPA 或第三方仓库) | add-apt-repository ppa:xxx/yyy;add-apt-repository --remove ppa:xxx/yyy;add-apt-repository "deb https://... focal main" |
装包报错先
apt update——十次里有八次是索引太旧。依赖装不上时用apt-get -f install修复。想知道某个命令是哪个包提供的,dpkg -S $(which cmd);反过来查包装了什么文件用dpkg -L pkg。这两个排查"文件从哪来"非常顺手。
二、RedHat / CentOS / Fedora 系
dnf 是 yum 的继任者(RHEL 8+ 默认),命令几乎完全兼容,只是依赖解析更快、更准确。rpm 是底层工具,对应 Debian 系的 dpkg。
| 命令 | 作用 | 常用示例 |
|---|---|---|
dnf | 新一代包管理器,RHEL 8+/Fedora 默认 | dnf install pkg;dnf remove pkg;dnf search key;dnf info pkg;dnf update;dnf provides */bin/file(查命令属于哪个包);dnf history(历史记录);dnf history undo N(回滚某次操作) |
yum | 传统包管理器,CentOS 7 及更早版本的默认 | yum install -y pkg;yum list installed;yum provides */bin/file;yum groupinstall "Development Tools"(装整组开发包);yum clean all |
rpm | 底层 RPM 包管理工具 | rpm -qa(全部已装包);rpm -qa | grep pkg;rpm -ql pkg(包文件清单);rpm -qf /path/file(文件属于哪个包);rpm -ivh pkg.rpm(本地安装);rpm -e pkg(卸载);rpm -V pkg(校验包文件是否被改动过) |
zypper | openSUSE / SLES 的包管理器 | zypper install pkg;zypper search key;zypper update;zypper se -i(已安装的) |
rpm -V pkg是个被低估的安全审计工具:它会校验包内文件的大小、MD5、权限、时间戳,输出里出现5(校验和变了)说明文件被改过。怀疑系统被入侵或配置被乱改时,用rpm -Va全量校验一遍,能快速定位异常。
三、其他发行版与通用格式
| 命令 | 作用 | 常用示例 |
|---|---|---|
apk | Alpine Linux 的包管理器,容器镜像里最常见(因为 Alpine 极小) | apk add pkg;apk del pkg;apk search key;apk info pkg;apk add --no-cache pkg(容器里推荐,不缓存索引) |
snap | Canonical 推的跨发行版打包格式,自带依赖、沙箱运行 | snap install pkg;snap list;snap remove pkg;snap refresh(更新) |
flatpak | 另一个跨发行版的桌面应用打包方案 | flatpak install flathub org.gimp.GIMP;flatpak list;flatpak run app |
四、systemd 服务管理
systemd 是现代 Linux 的初始化系统与服务管理器,取代了老的 SysV init。它的管理单元叫 unit(单元),服务是其中一种(后缀 .service)。日常操作就是 systemctl <动作> <服务名>。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| systemctl | systemd 的主管理命令 | systemctl start/stop/restart/reload nginx(reload 不中断服务重读配置);systemctl enable --now nginx(开机自启并立即启动);systemctl disable nginx;systemctl status nginx(看状态与最近日志);systemctl is-active nginx;systemctl is-enabled nginx;systemctl list-units --type=service --state=running |
systemctl daemon-reload | 重新加载 systemd 配置,改了 unit 文件后必须执行,否则改动不生效 | systemctl daemon-reload;systemctl daemon-reexec(重跑 systemd 自身) |
systemctl edit | 安全地覆盖服务的部分配置(生成 drop-in 片段,不改动原 unit 文件) | systemctl edit nginx(全量编辑);systemctl edit --full nginx;编辑完需 daemon-reload |
systemctl mask | 屏蔽服务,禁止以任何方式启动(比 disable 更彻底) | systemctl mask nginx;systemctl unmask nginx |
| journalctl | 查看 systemd 收集的日志(二进制格式,支持按字段查询) | journalctl -u nginx(某服务的日志);journalctl -u nginx -f(实时跟踪);journalctl --since "1 hour ago";journalctl -b(本次启动以来);journalctl -p err(只看错误级别);journalctl -u nginx --since today --until "1 hour ago" |
journalctl --disk-usage | 查看日志占用的磁盘空间,日志太大时可据此清理 | journalctl --disk-usage;journalctl --vacuum-size=500M(保留最近 500M);journalctl --vacuum-time=7d(保留 7 天) |
systemd-analyze | 分析系统启动性能 | systemd-analyze(总启动耗时);systemd-analyze blame(各单元耗时排序,找拖慢启动的元凶);systemd-analyze critical-chain(关键路径) |
systemctl list-timers | 列出所有定时器(systemd 版的定时任务) | systemctl list-timers;systemctl list-timers --all(含未激活的) |
改服务配置的正确姿势是用
systemctl edit nginx生成覆盖片段,而不是直接改/usr/lib/systemd/system/nginx.service——后者会在软件包升级时被覆盖。改完记得systemctl daemon-reload && systemctl restart nginx。服务起不来时,systemctl status输出里通常会直接给出失败原因和相关日志行,先看它再去翻 journalctl。
五、SysV init 兼容
老系统(CentOS 6、Debian 7 及更早)用的是 SysV init,靠 /etc/init.d/ 下的脚本启停服务。现代 systemd 系统仍保留了 service 命令作为兼容层,它会自动转译成 systemctl 调用。
| 命令 | 作用 | 常用示例 |
|---|---|---|
service | SysV 兼容的服务管理命令 | service nginx start/stop/restart/status;service --status-all(列出全部服务状态) |
chkconfig | SysV 的开机自启管理(RedHat 系老系统) | chkconfig --list;chkconfig nginx on;chkconfig nginx off |
update-rc.d | SysV 的开机自启管理(Debian 系老系统) | update-rc.d nginx defaults(添加默认启动链接);update-rc.d -f nginx remove(移除) |
六、任务计划
cron 是最经典的定时任务机制,靠 crontab 文件里的五段时间表达式描述"什么时候跑"。格式是:分 时 日 月 周 命令。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| crontab | 管理用户的定时任务表 | crontab -e(编辑当前用户任务);crontab -l(列出);crontab -r(清空全部,慎用);crontab -u alice -e(编辑指定用户的,需 root);crontab -l -u alice(查看某人) |
| crontab 时间格式 | 五段:分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7) | 0 2 * * * /backup.sh(每天 2 点);*/5 * * * * cmd(每 5 分钟);0 0 * * 0 cmd(每周日零点);30 3 1 * * cmd(每月 1 号 3:30);@reboot cmd(开机时) |
at | 一次性定时任务 | at now + 5 minutes(交互输入命令,Ctrl+D 提交);at 2am tomorrow;atq(查看队列);atrm N(删除第 N 个任务) |
crontab 里最常见的问题是环境变量:cron 执行时的 PATH 很精简(通常只有 /usr/bin:/bin),脚本里用到的命令可能找不到。解决办法是在脚本里用绝对路径,或在 crontab 顶部显式写
PATH=/usr/local/bin:/usr/bin:/bin。另外任务的输出默认会发邮件,不想收到就重定向:0 2 * * * /backup.sh > /dev/null 2>&1。非 7×24 开机的机器要用anacron补跑,见 日志、时间与计划任务。
七、系统信息与配置
| 命令 | 作用 | 常用示例 |
|---|---|---|
timedatectl | 时间与时区管理 | timedatectl(状态);timedatectl set-timezone Asia/Shanghai;timedatectl set-ntp true(启用自动同步);timedatectl list-timezones |
hostnamectl | 主机名管理(含静态、瞬态、美化三种) | hostnamectl;hostnamectl set-hostname newname;hostnamectl set-hostname --pretty "Web Server" |
localectl | 系统语言与键盘布局 | localectl;localectl set-locale LANG=zh_CN.UTF-8;localectl list-locales |
loginctl | 管理登录会话与席位 | loginctl list-sessions;loginctl list-users;loginctl terminate-user alice(踢掉某用户的所有会话);loginctl enable-linger alice(允许用户级服务在登出后继续运行) |
update-alternatives | 管理系统里同一软件的多个版本(Debian 系) | update-alternatives --config java(交互式切换);update-alternatives --display java;update-alternatives --install /usr/bin/java java /opt/jdk21/bin/java 1 |
update-alternatives是管理多版本 JDK、Python 的正规做法,比手工改/usr/bin下的软链接可靠得多。切换后用java -version确认生效。RedHat 系对应的命令是alternatives。
一句话总结
软件包与服务速查:装包 Debian 用 apt、RedHat 用 dnf/yum(Alpine 用 apk),查文件归属用 dpkg -S/rpm -qf,管服务用 systemctl start/stop/enable/status(改配置用 systemctl edit + daemon-reload),看日志用 journalctl -u,定时任务用 crontab -e(注意 PATH 问题),系统配置用 timedatectl/hostnamectl/localectl——27 个命令覆盖从装软件到管服务的日常运维。