“最近发现自己服务器的磁盘占用比例升到了70%以上,为了清理和之后维护,我理了下一些 linux 运维中可以用到的常用命令。 记录下来,给之后做个备忘录,也希望能帮到大家。 ”
话不多说,直接上代码
# 查看所有挂载点的磁盘使用情况
df -h
# 以更易读的方式显示,按使用率排序
df -hT | sort -k6 -rh
# 查看inode使用情况(有时文件数太多也会导致问题)
df -i
# 查看根目录下各文件夹大小
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
# 安装ncdu
sudo apt-get install ncdu # Debian/Ubuntu
sudo yum install ncdu # CentOS/RHEL
# 使用ncdu扫描目录
sudo ncdu /
# 查看日志目录大小
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
# 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
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 注意:有些程序可能正在使用临时文件,建议重启后清理
# 查看Docker磁盘使用
docker system df
# 清理无用的Docker资源
docker system prune -a
# 清理特定资源
docker volume prune # 清理未使用的卷
docker image prune # 清理未使用的镜像
# 清理用户缓存
rm -rf ~/.cache/*
# 清理下载目录
rm -rf ~/Downloads/*
# 查看隐藏文件夹大小
du -sh ~/.* | sort -rh | head -10
# 查找大于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
# 检查是否有系统备份
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
# 查看邮件队列大小
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
编辑 /etc/logrotate.conf:
# 设置日志保留周期
weekly
rotate 4
create
compress
添加定时任务(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
# 安装监控工具
sudo apt-get install htop iotop iftop # Debian/Ubuntu
sudo yum install htop iotop iftop # CentOS/RHEL
# 实时监控
sudo iotop # 查看磁盘IO
sudo htop # 查看进程资源使用
# 检查异常进程
ps auxf | grep -E '(miner|crypto|malware)'
df -h 查看磁盘使用/var/log 目录大小建议建立定期维护计划,预防磁盘空间问题再次发生。