“最近发现自己服务器的磁盘占用比例升到了70%以上,为了清理和之后维护,我理了下一些 linux 运维中可以用到的常用命令。
记录下来,给之后做个备忘录,也希望能帮到大家。
”
话不多说,直接上代码
一、问题分析与诊断
1. 查看整体磁盘使用情况
# 查看所有挂载点的磁盘使用情况
df -h
# 以更易读的方式显示,按使用率排序
df -hT | sort -k6 -rh
# 查看inode使用情况(有时文件数太多也会导致问题)
df -i
2. 定位大目录
# 查看根目录下各文件夹大小
sudo du -sh /* 2>/dev/null | sort -rh | head -20
# 深入分析特定目录
sudo du -sh /var/* 2>/dev/null | sort -rh | head -10
sudo du -sh /home/* 2>/dev/null | sort -rh | head -10
sudo du -sh /usr/* 2>/dev/null | sort -rh | head -10
3. 使用ncdu(更直观的工具)
# 安装ncdu
sudo apt-get install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL
# 使用ncdu扫描目录
sudo ncdu /
二、常见高磁盘占用原因及处理
1. 日志文件过大
# 查看日志目录大小
sudo du -sh /var/log
# 查看具体大日志文件
sudo find /var/log -type f -name "*.log" -size +100M -exec ls -lh {} \;
# 清理方法:
# a) 清空日志文件(注意:确认日志可清理)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# b) 使用logrotate管理日志
sudo logrotate -f /etc/logrotate.conf
# c) 删除旧日志
sudo find /var/log -type f -name "*.log.*" -mtime +7 -delete
sudo find /var/log -type f -name "*.gz" -mtime +30 -delete
2. 未清理的软件包缓存
# Debian/Ubuntu系统
sudo apt-get clean # 清理所有软件包缓存
sudo apt-get autoclean # 清理旧版本软件包缓存
sudo apt-get autoremove # 删除不需要的依赖
# CentOS/RHEL系统
sudo yum clean all # 清理所有yum缓存
sudo dnf clean all # Fedora/CentOS 8+
# 查看缓存大小
sudo du -sh /var/cache/apt/archives # Debian/Ubuntu
sudo du -sh /var/cache/yum # CentOS/RHEL
3. 系统临时文件
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 注意:有些程序可能正在使用临时文件,建议重启后清理
4. Docker占用(如果使用)
# 查看Docker磁盘使用
docker system df
# 清理无用的Docker资源
docker system prune -a
# 清理特定资源
docker volume prune # 清理未使用的卷
docker image prune # 清理未使用的镜像
5. 用户文件和历史记录
# 清理用户缓存
rm -rf ~/.cache/*
# 清理下载目录
rm -rf ~/Downloads/*
# 查看隐藏文件夹大小
du -sh ~/.* | sort -rh | head -10
三、深度分析与定位
1. 查找大文件
# 查找大于100MB的文件
sudo find / -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh
# 查找最近修改的大文件
sudo find / -type f -size +50M -mtime -7 -exec ls -lh {} \; 2>/dev/null
# 查找空文件和空目录
sudo find / -type f -empty
sudo find / -type d -empty
2. 检查系统备份和快照
# 检查是否有系统备份
sudo find / -type f -name "*backup*" -size +100M 2>/dev/null
sudo find / -type f -name "*.tar" -o -name "*.tar.gz" -o -name "*.tgz" -size +100M 2>/dev/null
3. 检查邮件系统(如果启用)
# 查看邮件队列大小
sudo du -sh /var/spool/mail
sudo du -sh /var/mail
四、自动化维护脚本
创建清理脚本 /usr/local/bin/disk-cleanup.sh:
#!/bin/bash
echo"=== 磁盘清理开始 ==="
echo"当前磁盘使用情况:"
df -h /
echo -e "\n=== 清理APT缓存 ==="
apt-get clean
apt-get autoclean
echo -e "\n=== 清理日志文件 ==="
find /var/log -type f -name "*.log.*" -mtime +7 -delete
find /var/log -type f -name "*.gz" -mtime +30 -delete
echo -e "\n=== 清理临时文件 ==="
rm -rf /tmp/* 2>/dev/null
echo -e "\n=== 清理后的磁盘情况 ==="
df -h /
echo"=== 磁盘清理完成 ==="
给脚本执行权限:
sudo chmod +x /usr/local/bin/disk-cleanup.sh
五、预防措施
1. 设置日志轮转
编辑 /etc/logrotate.conf:
# 设置日志保留周期
weekly
rotate 4
create
compress
2. 监控磁盘使用
添加定时任务(crontab):
# 每天检查磁盘使用率
0 2 * * * /usr/local/bin/disk-cleanup.sh >> /var/log/disk-cleanup.log
# 每周发送磁盘使用报告
0 9 * * 1 df -h | mail -s "Weekly Disk Usage Report" admin@example.com
3. 使用监控工具
# 安装监控工具
sudo apt-get install htop iotop iftop # Debian/Ubuntu
sudo yum install htop iotop iftop # CentOS/RHEL
# 实时监控
sudo iotop # 查看磁盘IO
sudo htop # 查看进程资源使用
六、安全注意事项
- 使用truncate而非rm:对于日志文件,使用truncate更安全
# 检查异常进程
ps auxf | grep -E '(miner|crypto|malware)'
七、定期维护建议
建议建立定期维护计划,预防磁盘空间问题再次发生。