Debian Linux 日常运维实战:服务器管理、资源监控、日志分析与故障排查
Debian 是一种稳定、轻量且广泛应用于服务器环境的 Linux 发行版。
在日常服务器管理中,无论是运行 Web 网站、数据库、API 服务,还是部署各种后台程序,都需要掌握基本的 Linux 运维技能。
服务器上线后,并不意味着工作结束。日常运维还包括:
-
检查 CPU、内存和磁盘使用情况。
-
管理系统服务和进程。
-
查看系统日志与应用日志。
-
检查网络连接和端口状态。
-
更新系统软件包。
-
排查网站无法访问、服务异常等问题。
-
管理用户、权限和 SSH 登录。
-
定期备份重要数据。
本文以 Debian 12/13 为例,介绍常用的日常运维命令和操作方法。大部分命令也适用于 Ubuntu 等 Debian 系 Linux 系统。
一、登录服务器与基础信息查看
1. SSH 登录服务器
在 Windows PowerShell 或 Linux 终端中执行:
ssh root@服务器IP
如果 SSH 使用非默认端口,例如 2222:
ssh -p 2222 root@服务器IP
如果使用指定私钥:
ssh -i ~/.ssh/id_ed25519 root@服务器IP
首次连接服务器时,SSH 可能提示是否信任服务器主机密钥。确认服务器身份后再输入 yes。
2. 查看 Debian 版本
cat /etc/debian_version
查看更完整的系统信息:
cat /etc/os-release
也可以使用:
hostnamectl
输出示例:
Static hostname: debian-server
Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.1.0
Architecture: x86-64
3. 查看内核版本
uname -r
查看完整内核信息:
uname -a
4. 查看服务器运行时间
uptime
示例:
08:30:12 up 15 days, 3:20, 1 user, load average: 0.20, 0.35, 0.40
其中:
-
up:系统连续运行时间。 -
1 user:当前登录用户数量。 -
load average:过去 1、5、15 分钟的系统平均负载。
负载值需要结合 CPU 核心数判断。
例如:
| CPU 核心数 | 负载 1.0 | 负载 4.0 |
|---|---|---|
| 1 核 | 已达到较高负载 | 严重繁忙 |
| 2 核 | 负载较低 | 负载较高 |
| 4 核 | 负载较低 | 接近满负载 |
| 8 核 | 负载较低 | 通常仍有余量 |
Load Average 不完全等于 CPU 使用率,还可能受到磁盘 I/O 等不可中断任务影响。
二、CPU 和内存监控
服务器出现响应缓慢、网站加载卡顿时,首先应该检查 CPU 和内存。
1. 查看 CPU 使用情况
安装常用工具:
apt update
apt install -y htop
运行:
htop
可以看到:
-
CPU 各核心使用率。
-
内存和 Swap 使用情况。
-
运行中的进程。
-
进程 CPU 使用率。
-
进程内存使用率。
退出:
F10
如果不想安装额外软件,可以使用:
top
2. 查看内存使用情况
free -h
示例:
total used free shared buff/cache available
Mem: 3.8Gi 1.2Gi 800Mi 100Mi 1.8Gi 2.4Gi
Swap: 2.0Gi 0B 2.0Gi
重点关注:
-
total:总内存。 -
used:已使用内存。 -
free:完全空闲内存。 -
buff/cache:缓存和缓冲区。 -
available:系统估算的可用内存。
判断服务器内存是否紧张时,通常优先看 available,而不是只看 free。
Linux 会主动使用空闲内存作为缓存,这是正常现象。
3. 查看进程内存占用
ps aux --sort=-%mem | head -10
显示内存占用最高的 10 个进程。
4. 查看 CPU 占用最高的进程
ps aux --sort=-%cpu | head -10
如果某个 Python、MySQL 或其他进程长期占用大量 CPU,需要进一步检查其运行状态和日志。
5. 查看 Swap 使用情况
swapon --show
也可以:
free -h
如果物理内存不足,Linux 可能使用 Swap。
Swap 可以缓解内存压力,但速度通常远低于物理内存。持续大量使用 Swap,可能导致服务器响应变慢。
三、磁盘空间与文件管理
磁盘空间不足是服务器运维中非常常见的问题。
例如:
-
网站日志不断增长。
-
数据库文件持续增加。
-
系统更新缓存没有清理。
-
上传文件占用了大量磁盘空间。
-
Docker 镜像和容器日志占满磁盘。
1. 查看磁盘使用情况
df -h
示例:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 40G 18G 20G 48% /
重点关注 Use%。
如果根分区达到 90% 以上,就应该开始排查。
2. 查看目录占用空间
查看当前目录:
du -sh .
查看根目录下各目录占用:
du -h --max-depth=1 / 2>/dev/null
查看 /var 目录:
du -h --max-depth=1 /var 2>/dev/null
查看 /var/log:
du -h --max-depth=1 /var/log 2>/dev/null
3. 查找大文件
查找大于 500 MB 的文件:
find / -type f -size +500M 2>/dev/null
查找大于 100 MB 的文件:
find / -type f -size +100M 2>/dev/null
查看文件大小:
ls -lh 文件路径
4. 清理 APT 软件包缓存
Debian 使用 APT 管理软件包。
清理已经下载的软件包缓存:
apt clean
删除不再需要的依赖:
apt autoremove --purge
执行前建议检查将要删除的软件包,避免误删仍在使用的组件。
查看 APT 缓存占用:
du -sh /var/cache/apt
5. 清理 systemd 日志
查看日志占用:
journalctl --disk-usage
保留最近 7 天日志:
journalctl --vacuum-time=7d
限制日志总容量为 500 MB:
journalctl --vacuum-size=500M
也可以通过配置限制日志长期增长。
编辑:
nano /etc/systemd/journald.conf
设置:
[Journal]
SystemMaxUse=500M
SystemKeepFree=1G
MaxRetentionSec=30day
保存后重启日志服务:
systemctl restart systemd-journald
注意:清理日志会删除历史排障证据。发生故障时,应先保存重要日志,再进行清理。
6. 查找已删除但仍被进程占用的文件
有时候 rm 删除文件后,磁盘空间并没有释放。
可能是因为某个进程仍然打开着该文件。
安装工具:
apt install -y lsof
执行:
lsof +L1
如果看到较大的日志文件显示为 deleted,说明文件已经从目录中删除,但进程仍然持有文件句柄。
可以在确认服务后,安全地重新打开日志或重启相关服务,释放空间。
不要随意终止不清楚用途的进程。
四、进程管理
Linux 中运行的程序通常以进程形式存在。
日常运维需要掌握进程查询、停止和信号管理。
1. 查看所有进程
ps aux
查看指定进程:
ps aux | grep nginx
2. 查看进程 PID
pgrep -a nginx
3. 结束指定进程
先尝试正常终止:
kill PID
如果进程无法正常退出,再考虑:
kill -9 PID
区别:
-
kill默认发送 SIGTERM,允许程序正常清理资源并退出。 -
kill -9发送 SIGKILL,进程无法捕获或处理该信号。
因此,不要一遇到进程异常就使用 kill -9。
4. 查看进程打开的文件
lsof -p PID
查看进程监听的网络连接:
ss -tunap
5. 实时观察进程
top
或者:
htop
五、systemd 服务管理
Debian 使用 systemd 管理大部分系统服务。
常见服务包括:
-
SSH
-
Nginx
-
MySQL
-
MariaDB
-
Redis
-
Docker
-
自己部署的 FastAPI 服务
1. 查看服务状态
例如查看 Nginx:
systemctl status nginx
查看 MySQL:
systemctl status mysql
2. 启动服务
systemctl start nginx
3. 停止服务
systemctl stop nginx
4. 重启服务
systemctl restart nginx
5. 重新加载配置
如果服务支持配置热加载:
systemctl reload nginx
Nginx 修改配置后,建议先检查:
nginx -t
确认配置正确后再执行:
systemctl reload nginx
6. 设置开机启动
systemctl enable nginx
同时立即启动:
systemctl enable --now nginx
7. 取消开机启动
systemctl disable nginx
8. 查看失败的服务
systemctl --failed
查看所有服务:
systemctl list-units --type=service
六、日志查看与故障排查
日志是 Linux 运维中最重要的排障工具之一。
遇到服务无法启动、网站访问失败、数据库连接异常时,应该先查看日志,而不是盲目重启服务器。
1. 查看 systemd 服务日志
查看 Nginx 最近 100 行日志:
journalctl -u nginx -n 100
实时查看:
journalctl -u nginx -f
查看 MySQL 日志:
journalctl -u mysql -n 100
只查看本次开机后的日志:
journalctl -b
查看上一次开机的日志:
journalctl -b -1
2. 查看 Nginx 日志
Debian 默认通常使用:
/var/log/nginx/
├── access.log
└── error.log
查看访问日志:
tail -f /var/log/nginx/access.log
查看错误日志:
tail -f /var/log/nginx/error.log
查看最近 100 行:
tail -n 100 /var/log/nginx/error.log
3. 搜索错误日志
查找包含 error 的日志:
grep -i error /var/log/nginx/error.log
查找最近日志中的 502:
grep '502' /var/log/nginx/access.log | tail -20
4. 查看 Python 服务日志
如果 FastAPI 通过 systemd 运行,例如服务名为 fastapi.service:
journalctl -u fastapi -n 100
实时查看:
journalctl -u fastapi -f
查看最近 30 分钟:
journalctl -u fastapi --since "30 minutes ago"
5. 常见 HTTP 状态码
| 状态码 | 含义 | 常见原因 |
|---|---|---|
| 200 | 请求成功 | 正常返回 |
| 301 | 永久重定向 | HTTP 跳转 HTTPS |
| 403 | 禁止访问 | 权限或访问规则问题 |
| 404 | 资源不存在 | 路径或路由错误 |
| 413 | 请求过大 | 上传文件超出限制 |
| 500 | 服务器内部错误 | 应用程序异常 |
| 502 | 网关错误 | 后端服务不可用 |
| 503 | 服务不可用 | 服务过载或维护 |
| 504 | 网关超时 | 后端响应超时 |
遇到 502 时,可以依次检查:
systemctl status nginx
systemctl status fastapi
ss -lntp
journalctl -u fastapi -n 100
tail -n 100 /var/log/nginx/error.log
七、网络与端口管理
服务器网络故障可能来自 DNS、路由、防火墙、监听端口或服务自身。
1. 查看 IP 地址
ip addr
查看路由表:
ip route
2. 查看网络连接
ss -tunap
参数说明:
-
-t:TCP。 -
-u:UDP。 -
-n:显示数字地址和端口。 -
-a:显示全部连接及监听端口。 -
-p:显示关联进程。
3. 查看监听端口
ss -lntp
示例:
State Recv-Q Send-Q Local Address:Port
LISTEN 0 511 0.0.0.0:80
LISTEN 0 511 0.0.0.0:443
LISTEN 0 128 127.0.0.1:8000
其中:
-
80:HTTP。
-
443:HTTPS。
-
8000:示例应用服务端口。
如果 FastAPI 只需要由本机 Nginx 反向代理访问,通常可以监听 127.0.0.1,而不是直接暴露给公网。
4. 检查端口是否开放
ss -lntp | grep ':443'
检查本机服务:
curl -I http://127.0.0.1:8000
检查网站:
curl -I https://example.com
5. 检查 DNS 解析
安装工具:
apt install -y dnsutils
查询域名:
dig example.com
指定 DNS 服务器:
dig @1.1.1.1 example.com
也可以使用:
nslookup example.com
6. 测试网络连通性
ping -c 4 1.1.1.1
测试域名:
ping -c 4 example.com
如果 IP 可以访问但域名无法解析,应该优先检查 DNS。
注意,部分服务器或网络环境会屏蔽 ICMP,因此 ping 不通不一定意味着 TCP 服务不可访问。
7. 查看网络路由路径
安装:
apt install -y traceroute
执行:
traceroute example.com
也可以使用:
tracepath example.com
如果怀疑是 TCP 端口问题,可以进一步使用 nc:
apt install -y netcat-openbsd
nc -vz example.com 443
八、用户与权限管理
Linux 服务器通常不建议长期使用 root 账户进行所有操作。
可以创建普通管理用户,并通过 sudo 执行需要管理员权限的命令。
1. 创建用户
adduser admin
按照提示设置密码。
2. 添加 sudo 权限
usermod -aG sudo admin
确认用户组:
groups admin
3. 切换用户
su - admin
4. 使用 sudo
sudo apt update
5. 查看当前用户
whoami
查看登录用户:
who
查看更详细的登录记录:
last
6. 查看文件权限
ls -l
例如:
-rw-r--r-- 1 root root 1024 Nov 7 config.txt
权限说明:
| 权限 | 含义 |
|---|---|
| r | 读取 |
| w | 写入 |
| x | 执行 |
7. 修改文件权限
chmod 644 config.txt
设置目录权限:
chmod 755 /var/www/html
8. 修改文件所有者
chown admin:admin config.txt
递归修改目录:
chown -R admin:admin /var/www/html
注意:递归修改网站目录权限前,应确认 Web 服务运行用户和目录用途,避免破坏原有权限配置。
九、SSH 安全维护
SSH 是远程管理 Debian 服务器的重要入口。
如果 SSH 配置不当,可能增加暴力破解和未授权登录风险。
1. 查看 SSH 服务状态
systemctl status ssh
2. 查看 SSH 登录日志
journalctl -u ssh -n 100
也可以查看:
tail -n 100 /var/log/auth.log
3. 修改 SSH 端口
编辑配置:
nano /etc/ssh/sshd_config
例如:
Port 2222
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
说明:
-
Port:修改 SSH 监听端口。 -
PermitRootLogin no:禁止 root 直接登录。 -
PubkeyAuthentication yes:允许密钥认证。 -
PasswordAuthentication no:关闭密码认证。
重要: 修改 SSH 配置前,必须先确保普通用户具有 sudo 权限,并且已经测试过 SSH 密钥登录。还要先在云平台防火墙或系统防火墙中放行新端口。
检查配置:
sshd -t
重启 SSH:
systemctl restart ssh
不要立即关闭当前 SSH 会话。
打开另一个终端,测试新端口:
ssh -p 2222 admin@服务器IP
确认可以正常登录后,再关闭旧连接。
4. 安装 Fail2ban
Fail2ban 可以根据日志识别反复失败的登录行为,并临时封禁相关来源 IP。
安装:
apt install -y fail2ban
启动并设置开机启动:
systemctl enable --now fail2ban
查看状态:
fail2ban-client status
查看 SSH 规则:
fail2ban-client status sshd
具体规则应根据 SSH 日志路径、认证方式和实际登录策略配置。
十、Debian 系统更新与软件包管理
Debian 使用 APT 管理软件包。
定期更新系统能够修复已知漏洞、改善稳定性。
1. 更新软件包索引
apt update
2. 升级已安装软件包
apt upgrade
执行前建议查看将要升级的内容。
3. 完整升级
apt full-upgrade
full-upgrade 可能安装或删除软件包,以完成依赖关系调整,因此在生产服务器上应先检查变更计划。
4. 查找软件包
apt search nginx
5. 查看软件包信息
apt show nginx
6. 安装软件
apt install nginx
7. 卸载软件
apt remove nginx
同时删除软件包配置:
apt purge nginx
8. 查看可升级软件
apt list --upgradable
9. 查看是否需要重启
安装:
apt install -y needrestart
运行:
needrestart
它可以帮助判断哪些服务仍在使用旧版本库,以及是否需要重启服务或系统。
生产服务器更新前,建议先备份配置和重要数据,并安排维护窗口。
十一、时间与时区管理
服务器时间不正确,可能导致:
-
日志时间混乱。
-
HTTPS 证书验证异常。
-
数据库时间不一致。
-
定时任务执行时间错误。
-
Token 过期判断异常。
1. 查看当前时间
date
2. 查看时区
timedatectl
3. 设置时区
例如设置为上海时间:
timedatectl set-timezone Asia/Shanghai
设置为 UTC:
timedatectl set-timezone UTC
4. 查看 NTP 同步状态
timedatectl status
查看:
System clock synchronized: yes
NTP service: active
如果没有启用时间同步,可以根据系统配置使用 systemd-timesyncd 或 chrony。
例如:
apt install -y chrony
启动:
systemctl enable --now chrony
查看同步状态:
chronyc tracking
不要在生产服务器上随意关闭时间同步。
十二、备份与恢复
备份是服务器运维中非常重要的一项工作。
服务器可能遇到:
-
磁盘损坏。
-
数据库误删除。
-
系统升级失败。
-
配置文件被覆盖。
-
用户误操作。
-
VPS 服务商故障。
因此,重要数据必须定期备份。
1. 备份配置文件
例如备份 Nginx 配置:
tar -czf nginx-config-$(date +%F).tar.gz /etc/nginx
2. 备份网站目录
tar -czf website-$(date +%F).tar.gz /var/www/html
3. 备份 MySQL 数据库
安装 MySQL 客户端工具后,可以使用:
mysqldump -u root -p database_name > database.sql
如果需要导出所有数据库:
mysqldump -u root -p --all-databases > all-databases.sql
具体权限和认证方式应根据 MySQL 版本及账号配置调整。
4. 恢复 MySQL 数据库
mysql -u root -p database_name < database.sql
5. 备份文件传输到其他服务器
使用 scp:
scp backup.tar.gz admin@远程服务器IP:/backup/
使用 rsync:
rsync -avz /var/www/html/ admin@远程服务器IP:/backup/html/
6. 备份策略建议
| 数据类型 | 建议频率 |
|---|---|
| 数据库 | 每天 |
| 网站上传文件 | 每天或按变更频率 |
| 配置文件 | 修改后立即备份 |
| 系统镜像 | 重要升级前 |
| 完整服务器备份 | 定期执行 |
备份不能只保存在同一台服务器上。
建议至少保留一份异地备份,并定期进行恢复测试。
十三、定时任务管理
Linux 使用 cron 实现定时任务。
1. 编辑当前用户定时任务
crontab -e
2. 查看定时任务
crontab -l
3. 每天凌晨 2 点执行任务
0 2 * * * /usr/local/bin/backup.sh
4. 每 5 分钟执行一次
*/5 * * * * /usr/local/bin/check.sh
5. 每周日凌晨 3 点执行
0 3 * * 0 /usr/local/bin/weekly-backup.sh
Cron 表达式格式:
分 时 日 月 星期 命令
例如:
30 1 * * * /usr/local/bin/backup.sh
表示每天凌晨 1:30 执行。
建议在脚本中使用绝对路径,并明确设置日志输出:
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
还要注意,cron 的运行环境通常比交互式 Shell 简单,不要假设它自动加载了用户的全部环境变量。
十四、常用故障排查流程
掌握命令之后,更重要的是形成排障思路。
场景一:网站无法访问
按顺序检查:
第一步:检查服务器是否正常运行
uptime
第二步:检查 Nginx 状态
systemctl status nginx
第三步:检查端口
ss -lntp
第四步:检查 Nginx 配置
nginx -t
第五步:查看错误日志
tail -n 100 /var/log/nginx/error.log
第六步:检查后端服务
systemctl status fastapi
第七步:本机测试后端
curl -I http://127.0.0.1:8000
通过逐层排查,可以判断问题出在 Nginx、后端程序、端口监听还是网络访问环节。
场景二:服务器 CPU 占用过高
查看 CPU:
top
查看 CPU 排名前 10 的进程:
ps aux --sort=-%cpu | head -10
找到进程后:
ps -fp PID
检查对应服务日志:
journalctl -u 服务名称 -n 100
不要直接结束高 CPU 进程,应先判断它是否正在执行正常任务。
场景三:服务器磁盘空间不足
检查磁盘:
df -h
检查大目录:
du -h --max-depth=1 /var 2>/dev/null
检查日志:
journalctl --disk-usage
检查大文件:
find /var -type f -size +100M 2>/dev/null
确定文件用途后再决定清理方式。
场景四:MySQL 无法启动
查看服务:
systemctl status mysql
查看日志:
journalctl -u mysql -n 100
查看磁盘:
df -h
检查端口:
ss -lntp | grep 3306
如果出现数据目录权限、磁盘空间或配置错误,应根据日志具体处理,不要直接删除数据库文件。
场景五:服务器网络不通
依次检查:
ip addr
ip route
测试公网 IP:
ping -c 4 1.1.1.1
检查 DNS:
dig example.com
检查 HTTPS 端口:
nc -vz example.com 443
这样可以初步区分网卡、路由、DNS 和 TCP 连接问题。
十五、日常运维命令速查表
以下命令建议熟练掌握。
| 任务 | 命令 |
|---|---|
| 查看系统版本 | cat /etc/os-release |
| 查看内核 | uname -r |
| 查看运行时间 | uptime |
| 查看 CPU 和进程 | top |
| 查看内存 | free -h |
| 查看磁盘 | df -h |
| 查看目录大小 | du -sh 目录 |
| 查找大文件 | find / -type f -size +100M |
| 查看端口 | ss -lntp |
| 查看进程 | ps aux |
| 查看服务 | systemctl status 服务名 |
| 查看失败服务 | systemctl --failed |
| 查看服务日志 | journalctl -u 服务名 -n 100 |
| 实时查看日志 | journalctl -u 服务名 -f |
| 查看 DNS | dig 域名 |
| 测试 HTTP | curl -I URL |
| 更新软件索引 | apt update |
| 升级软件 | apt upgrade |
| 清理缓存 | apt clean |
| 查看登录记录 | last |
| 查看登录用户 | who |
| 查看时区 | timedatectl |
| 编辑定时任务 | crontab -e |
十六、建议建立每日运维检查清单
日常运维不一定每天都需要执行大量命令,但应该形成固定的检查习惯。
每日检查
-
查看服务器 CPU 和负载。
-
查看内存和 Swap。
-
检查磁盘空间。
-
检查关键服务状态。
-
检查网站是否正常访问。
-
查看关键服务错误日志。
-
检查数据库是否正常运行。
-
确认备份任务是否执行成功。
每周检查
-
检查系统安全更新。
-
检查异常 SSH 登录记录。
-
检查磁盘增长趋势。
-
检查日志占用情况。
-
检查备份文件是否完整。
-
检查是否存在异常进程和监听端口。
每月检查
-
执行一次备份恢复测试。
-
检查用户和 SSH 权限。
-
检查证书有效期。
-
检查系统软件包更新情况。
-
检查服务器资源使用趋势。
-
检查防火墙和安全策略。
十七、总结
Debian 日常运维的核心不是记住所有命令,而是能够通过正确的工具发现问题、定位问题并安全处理问题。
建议重点掌握以下内容:
-
系统信息:
uname、hostnamectl、uptime。 -
资源监控:
top、htop、free。 -
磁盘管理:
df、du、find。 -
进程管理:
ps、kill、lsof。 -
服务管理:
systemctl。 -
日志分析:
journalctl、grep、tail。 -
网络排查:
ip、ss、dig、curl。 -
用户权限:
adduser、sudo、chmod、chown。 -
安全维护:SSH 密钥、Fail2ban、防火墙。
-
数据保护:备份、恢复、定时任务。
对于一台长期运行的 Debian 服务器,资源监控、日志分析、安全更新和异地备份应当成为常规工作,而不是等到网站出现故障后才开始处理。
- 点赞
- 收藏
- 关注作者
评论(0)