Linux服务器管理完全攻略 第3篇:软件包管理与服务运营
Linux Server Administration Complete Guide Part 3
Linux服务器管理完全攻略系列
第2篇:用户与权限 | 第3篇:软件包管理与服务(当前)| 第4篇:网络与防火墙
引言:软件管理的重要性
在服务器运营中,软件的安装、更新和删除是日常工作。Linux通过软件包管理系统高效处理依赖关系解析、版本管理和安全更新。此外,通过systemd管理服务的启动、停止和自动启动。
1. 理解软件包管理系统
1.1 什么是软件包?
软件包是将软件、配置文件和依赖信息打包在一起的压缩文件。软件包管理器自动处理安装、更新和删除。
1.2 主要软件包管理系统
| 发行版系列 | 软件包格式 | 底层工具 | 高级工具 |
|---|---|---|---|
| Debian/Ubuntu | .deb | dpkg | apt, apt-get |
| RHEL/CentOS/Fedora | .rpm | rpm | yum, dnf |
| Arch Linux | .pkg.tar.zst | pacman | pacman |
2. APT(Debian/Ubuntu系列)
2.1 更新软件包列表
# 更新软件包列表(安装前必须)
sudo apt update
# 升级已安装的软件包
sudo apt upgrade
# 全系统升级(包括依赖关系变更)
sudo apt full-upgrade
# 删除不需要的软件包
sudo apt autoremove
2.2 搜索和查看软件包信息
# 搜索软件包
apt search nginx
# 查看软件包信息
apt show nginx
# 列出已安装的软件包
apt list --installed
# 检查特定软件包是否已安装
apt list --installed | grep nginx
2.3 安装/删除软件包
# 安装软件包
sudo apt install nginx
# 同时安装多个软件包
sudo apt install nginx mysql-server php-fpm
# 安装特定版本
sudo apt install nginx=1.18.0-0ubuntu1
# 删除软件包(保留配置文件)
sudo apt remove nginx
# 完全删除软件包(包括配置文件)
sudo apt purge nginx
# 直接安装.deb文件
sudo dpkg -i package.deb
sudo apt install -f # 解决依赖关系
2.4 仓库管理
# 仓库列表位置
/etc/apt/sources.list
/etc/apt/sources.list.d/
# 添加PPA(Ubuntu)
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# 删除PPA
sudo add-apt-repository --remove ppa:ondrej/php
3. YUM/DNF(RHEL/CentOS/Fedora系列)
3.1 基本命令
# 更新软件包列表和升级
sudo yum update # CentOS 7
sudo dnf update # CentOS 8+, Fedora
# 搜索软件包
yum search nginx
dnf search nginx
# 软件包信息
yum info nginx
dnf info nginx
# 安装软件包
sudo yum install nginx
sudo dnf install nginx
# 删除软件包
sudo yum remove nginx
sudo dnf remove nginx
3.2 组软件包
# 列出组
dnf group list
# 安装开发工具组
sudo dnf groupinstall "Development Tools"
# 删除组
sudo dnf groupremove "Development Tools"
3.3 仓库管理
# 仓库列表位置
/etc/yum.repos.d/
# 添加EPEL仓库
sudo dnf install epel-release
# 列出仓库
dnf repolist
# 从特定仓库安装
sudo dnf install --enablerepo=epel package-name
4. 软件包管理实战技巧
4.1 仅应用安全更新
# Ubuntu/Debian
sudo apt upgrade --only-upgrade
# RHEL/CentOS
sudo yum update --security
sudo dnf update --security
4.2 锁定软件包版本
# Ubuntu/Debian - 锁定版本
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
apt-mark showhold
# RHEL/CentOS - 排除软件包
# 在 /etc/yum.conf 或 /etc/dnf/dnf.conf 中
exclude=nginx*
4.3 缓存管理
# APT缓存清理
sudo apt clean # 删除下载的软件包文件
sudo apt autoclean # 仅删除旧版本
# YUM/DNF缓存清理
sudo yum clean all
sudo dnf clean all
5. systemd与服务管理
5.1 什么是systemd?
systemd是Linux的init系统和系统管理守护进程。它负责服务的启动/停止、开机自启、日志记录和依赖管理。
5.2 服务控制基础
# 检查服务状态
sudo systemctl status nginx
# 启动/停止/重启服务
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
# 重新加载配置(不停机)
sudo systemctl reload nginx
# 重启或重新加载(支持则重新加载)
sudo systemctl reload-or-restart nginx
5.3 开机自启
# 启用开机自启
sudo systemctl enable nginx
# 禁用开机自启
sudo systemctl disable nginx
# 立即启动 + 启用开机自启
sudo systemctl enable --now nginx
# 检查是否启用
systemctl is-enabled nginx
5.4 服务列表和状态
# 所有服务
systemctl list-units --type=service
# 仅运行中的服务
systemctl list-units --type=service --state=running
# 失败的服务
systemctl list-units --type=service --state=failed
# 服务依赖关系
systemctl list-dependencies nginx
6. 创建自定义服务
6.1 Unit文件结构
# /etc/systemd/system/myapp.service
[Unit]
Description=My Custom Application
After=network.target
[Service]
Type=simple
User=appuser
Group=appgroup
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start.sh
ExecStop=/opt/myapp/bin/stop.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
6.2 主要部分说明
- [Unit]:服务描述、依赖定义
- [Service]:执行方法、用户、重启策略
- [Install]:启用时链接到的目标
6.3 注册和管理服务
# 创建/修改Unit文件后
sudo systemctl daemon-reload
# 启用并启动服务
sudo systemctl enable --now myapp
# 检查状态
sudo systemctl status myapp
# 查看日志
sudo journalctl -u myapp -f
6.4 各种服务类型
# Type=simple(默认)
# 主进程直接启动
# Type=forking
# 传统守护进程方式,fork后父进程退出
Type=forking
PIDFile=/var/run/myapp.pid
# Type=oneshot
# 一次性任务(脚本执行)
Type=oneshot
RemainAfterExit=yes
# Type=notify
# 服务通知systemd启动完成
Type=notify
7. journalctl - 日志管理
7.1 基本使用
# 查看所有日志
sudo journalctl
# 特定服务的日志
sudo journalctl -u nginx
# 实时跟踪日志
sudo journalctl -u nginx -f
# 启动后的日志
sudo journalctl -b
# 上次启动的日志
sudo journalctl -b -1
7.2 时间和优先级过滤
# 时间范围
sudo journalctl --since "2026-01-21 10:00" --until "2026-01-21 12:00"
sudo journalctl --since "1 hour ago"
sudo journalctl --since today
# 优先级过滤
sudo journalctl -p err # error及以上
sudo journalctl -p warning # warning及以上
# 输出格式
sudo journalctl -o json-pretty # JSON格式
sudo journalctl -o short-iso # ISO时间格式
7.3 日志维护
# 检查磁盘使用量
sudo journalctl --disk-usage
# 删除旧日志
sudo journalctl --vacuum-time=7d # 删除7天前的
sudo journalctl --vacuum-size=500M # 保持在500MB以下
# 配置文件:/etc/systemd/journald.conf
SystemMaxUse=500M
MaxRetentionSec=7day
8. 实战场景
8.1 LAMP堆栈安装(Ubuntu)
# 更新软件包
sudo apt update
# 安装Apache、MySQL、PHP
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql
# 启动并启用服务
sudo systemctl enable --now apache2
sudo systemctl enable --now mysql
# 检查状态
systemctl status apache2 mysql
8.2 注册Node.js应用为服务
# /etc/systemd/system/nodeapp.service
[Unit]
Description=Node.js Application
After=network.target
[Service]
Type=simple
User=nodeuser
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node app.js
Restart=on-failure
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
# 注册并启动
sudo systemctl daemon-reload
sudo systemctl enable --now nodeapp
8.3 自动化定期更新
# Ubuntu - unattended-upgrades
sudo apt install unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
# 验证配置
cat /etc/apt/apt.conf.d/20auto-upgrades
# RHEL/CentOS - dnf-automatic
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
9. 故障排除
9.1 软件包问题
# APT锁定问题
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
# 修复损坏的软件包
sudo apt --fix-broken install
sudo dpkg --configure -a
# 重建RPM数据库
sudo rpm --rebuilddb
9.2 服务问题
# 检查服务失败原因
sudo systemctl status myservice
sudo journalctl -xe -u myservice
# 配置文件语法检查
sudo nginx -t
sudo apache2ctl configtest
# 重新加载systemd
sudo systemctl daemon-reexec
总结
软件包管理和服务运营是服务器管理的核心。使用apt/yum/dnf高效管理软件,使用systemd稳定运行服务。
下一篇第4篇将介绍网络设置与防火墙。
系列文章
← 第2篇:用户与权限 | 第3篇(当前)| 第4篇:网络与防火墙 →