Linux磁盘占用分析指南

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 工具

pydfdf 命令的增强版,提供彩色输出和更友好的显示格式。

安装
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

最佳实践

  1. 定期清理:设置定期任务清理临时文件和日志

    bash 复制代码
    # 清理超过30天的日志文件
    find /var/log -type f -name "*.log" -mtime +30 -delete
  2. 监控磁盘使用:设置监控脚本,当磁盘使用率超过阈值时发送警报

  3. 分析大文件:定期查找和分析大文件,确定是否可以删除或压缩

  4. 使用符号链接:对于占用大量空间的目录,考虑将其移动到其他分区并创建符号链接

  5. 压缩归档:对于不常访问的大文件,考虑压缩归档

常见问题解决

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
  • 对于可视化分析,使用 filelightbaobab
  • 对于自动化监控,编写脚本结合 dfdu 命令

通过合理使用这些工具和技巧,您可以有效地管理和优化Linux系统的磁盘空间。

相关推荐
飘忽不定的bug8 小时前
记录:编译rockchip libv4l-rkmpp库
linux·libv4l-rkmpp
UCH1HA9 小时前
MySQL主从复制与读写分离
linux·mysql·集群
Xの哲學9 小时前
Linux 文件系统一致性: 从崩溃恢复到 Journaling 机制
linux·服务器·算法·架构·边缘计算
学烹饪的小胡桃9 小时前
WGCAT工单系统 v1.2.7 更新说明
linux·运维·服务器·网络·工单系统
别多香了10 小时前
系统批量运维管理器 paramiko
linux·运维·服务器
习惯就好zz10 小时前
在 Ubuntu 18.04 旧系统上部署新版 GitHub Actions Runner 的终极方案
linux·ubuntu·github·cicd·action
杨云龙UP10 小时前
Linux LVM 在线扩容标准操作流程_20260102
linux·运维·服务器·centos·ux
warton8810 小时前
ubuntu24.04 安装mysql8.0.36
linux·运维·mysql
范纹杉想快点毕业10 小时前
嵌入式通信核心架构:从状态机、环形队列到多协议融合
linux·运维·c语言·算法·设计模式
白驹过隙^^10 小时前
VitrualBox及ubuntu系统安装
linux·运维·ubuntu