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系统的磁盘空间。

相关推荐
映翰通网络5 分钟前
自动化产线,如何真正走向“可控、可见、可远程”的智能化?
运维·自动化·工厂数字化
祎直向前8 分钟前
linuxshell循环,条件分支语句
前端·chrome
cuijiecheng201813 分钟前
Linux下libsocket库的使用
linux·运维·服务器
小树苗m17 分钟前
将dockers通过远程ssh配置在pycharm中
运维·pycharm·ssh
翼龙云_cloud19 分钟前
腾讯云渠道商:如何在CVM 上手动搭建 LNMP 环境?
运维·服务器·云计算·腾讯云
BIBI204920 分钟前
通过 HeidiSQL 连接 CentOS 7 中的 MySQL 5.7
linux·windows·mysql·centos·数据库管理·环境搭建·服务器运维
小码吃趴菜20 分钟前
网络编程-基础网络概念
linux·网络
wdfk_prog32 分钟前
[Linux]学习笔记系列 -- [fs]ramfs
linux·笔记·学习
一尘之中34 分钟前
在 Ubuntu 上安装 Docker 的完整指南(使用国内镜像源)
linux·docker·ai写作
RisunJan34 分钟前
Linux命令-ip命令(网络配置工具)
linux·网络·tcp/ip