引言:软件管理的重要性

在服务器运营中,软件的安装、更新和删除是日常工作。Linux通过软件包管理系统高效处理依赖关系解析、版本管理和安全更新。此外,通过systemd管理服务的启动、停止和自动启动。

1. 理解软件包管理系统

1.1 什么是软件包?

软件包是将软件、配置文件和依赖信息打包在一起的压缩文件。软件包管理器自动处理安装、更新和删除。

1.2 主要软件包管理系统

发行版系列软件包格式底层工具高级工具
Debian/Ubuntu.debdpkgapt, apt-get
RHEL/CentOS/Fedora.rpmrpmyum, dnf
Arch Linux.pkg.tar.zstpacmanpacman

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篇将介绍网络设置与防火墙