Linux磁盘占用分析指南
概述
在Linux系统中,分析磁盘占用情况是系统管理的重要任务。本指南将介绍多种快速分析当前文件夹磁盘占用情况的方法,从基础命令到高级技巧,帮助您高效地管理和优化磁盘空间。
基础命令
1. 使用 du 命令
du (disk usage) 是Linux中最常用的磁盘占用分析工具。
基本用法
bash
# 查看当前目录下各子目录的磁盘占用(以KB为单位)
du
# 以人类可读格式显示(K、M、G)
du -h
# 只显示当前目录的总占用
du -sh
# 查看当前目录下所有子目录的大小,并按大小排序
du -h --max-depth=1 | sort -hr
常用参数
-h:以人类可读格式显示(K、M、G)-s:只显示总计--max-depth=N:限制显示深度-a:显示所有文件和目录的大小-c:显示总计-t SIZE:只显示大于指定大小的文件/目录
实用示例
bash
# 查看当前目录下最大的10个子目录
du -h --max-depth=1 | sort -hr | head -n 10
# 查找大于100MB的文件
find . -type f -size +100M -exec ls -lh {} \;
# 查看当前目录下各类型文件的总大小
find . -type f -name "*.log" -exec du -ch {} + | grep total$
2. 使用 df 命令
df (disk free) 用于显示文件系统的磁盘空间使用情况。
bash
# 显示所有挂载点的磁盘使用情况
df -h
# 显示特定目录所在的文件系统使用情况
df -h .
# 显示inode使用情况
df -i
高级工具
1. ncdu 工具
ncdu (NCurses Disk Usage) 是一个交互式的磁盘使用分析工具。
安装
bash
# Debian/Ubuntu
sudo apt-get install ncdu
# CentOS/RHEL
sudo yum install ncdu
# Fedora
sudo dnf install ncdu
使用
bash
# 分析当前目录
ncdu
# 分析指定目录
ncdu /path/to/directory
# 不扫描子目录
ncdu --no-scan /path/to/directory
2. gt5 工具
gt5 是另一个基于终端的磁盘使用分析工具,可以比较不同时间点的磁盘使用情况。
安装
bash
# Debian/Ubuntu
sudo apt-get install gt5
使用
bash
# 分析当前目录
gt5 .
# 比较两个时间点的磁盘使用情况
gt5 --old=/path/to/old/snapshot --new=/path/to/current/dir
3. pydf 工具
pydf 是 df 命令的增强版,提供彩色输出和更友好的显示格式。
安装
bash
# Debian/Ubuntu
sudo apt-get install pydf
使用
bash
# 使用彩色输出显示磁盘使用情况
pydf
# 以人类可读格式显示
pydf -h
实用脚本和技巧
1. 查找大文件脚本
bash
#!/bin/bash
# 查找当前目录下最大的N个文件
# 用法: ./find_large_files.sh [目录] [文件数量]
DIRECTORY=${1:-.}
FILE_COUNT=${2:-10}
echo "在 $DIRECTORY 中查找最大的 $FILE_COUNT 个文件:"
find $DIRECTORY -type f -exec du -h {} + | sort -hr | head -n $FILE_COUNT
2. 目录大小分析脚本
bash
#!/bin/bash
# 分析目录大小并生成报告
# 用法: ./analyze_directory.sh [目录]
DIRECTORY=${1:-.}
REPORT_FILE="disk_usage_report_$(date +%Y%m%d_%H%M%S).txt"
echo "磁盘使用分析报告" > $REPORT_FILE
echo "生成时间: $(date)" >> $REPORT_FILE
echo "分析目录: $DIRECTORY" >> $REPORT_FILE
echo "================================" >> $REPORT_FILE
echo -e "\n\n总磁盘使用情况:\n" >> $REPORT_FILE
df -h >> $REPORT_FILE
echo -e "\n\n目录大小分析 (前10个最大子目录):\n" >> $REPORT_FILE
du -h --max-depth=1 $DIRECTORY | sort -hr | head -n 10 >> $REPORT_FILE
echo -e "\n\n大文件列表 (前20个):\n" >> $REPORT_FILE
find $DIRECTORY -type f -exec du -h {} + | sort -hr | head -n 20 >> $REPORT_FILE
echo "报告已保存到: $REPORT_FILE"
3. 磁盘使用监控脚本
bash
#!/bin/bash
# 监控磁盘使用情况,当使用率超过阈值时发送警告
# 用法: ./monitor_disk_usage.sh [阈值百分比]
THRESHOLD=${1:-80}
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5 " " $1}' | while read output;
do
usage=$(echo $output | awk '{print $1}' | sed 's/%//g')
partition=$(echo $output | awk '{print $2}')
if [ $usage -ge $THRESHOLD ]; then
echo "警告: 分区 $partition 使用率已达到 ${usage}% (超过阈值 ${THRESHOLD}%)"
fi
done
可视化工具
1. filelight
filelight 是KDE桌面环境下的磁盘使用可视化工具。
bash
# 安装
sudo apt-get install filelight
# 使用
filelight
2. baobab
baobab 是GNOME桌面环境下的磁盘使用分析工具。
bash
# 安装
sudo apt-get install baobab
# 使用
baobab
最佳实践
-
定期清理:设置定期任务清理临时文件和日志
bash# 清理超过30天的日志文件 find /var/log -type f -name "*.log" -mtime +30 -delete -
监控磁盘使用:设置监控脚本,当磁盘使用率超过阈值时发送警报
-
分析大文件:定期查找和分析大文件,确定是否可以删除或压缩
-
使用符号链接:对于占用大量空间的目录,考虑将其移动到其他分区并创建符号链接
-
压缩归档:对于不常访问的大文件,考虑压缩归档
常见问题解决
1. 磁盘空间不足但 du 显示占用很少
这通常是因为有文件被删除但进程仍在使用:
bash
# 查找已删除但仍被进程占用的文件
sudo lsof | grep '(deleted)'
# 重启相关服务释放空间
sudo systemctl restart service_name
2. du 命令运行缓慢
对于包含大量小文件的目录,du 可能会很慢:
bash
# 使用 --apparent-size 选项加速(但可能不准确)
du -h --apparent-size
# 限制扫描深度
du -h --max-depth=2
3. 权限问题导致的扫描不完整
bash
# 使用sudo运行以获取完整结果
sudo du -h /path/to/directory
# 忽略权限错误
du -h /path/to/directory 2>/dev/null
总结
Linux提供了多种工具和方法来分析磁盘占用情况,从简单的命令行工具到图形化界面工具。选择合适的工具取决于具体需求和环境:
- 对于快速检查,使用
du -h --max-depth=1 | sort -hr - 对于交互式分析,使用
ncdu - 对于可视化分析,使用
filelight或baobab - 对于自动化监控,编写脚本结合
df和du命令
通过合理使用这些工具和技巧,您可以有效地管理和优化Linux系统的磁盘空间。