首页 > 运维 > linux运维 > 正文

如何在Linux中检查磁盘使用 Linux df与du命令对比

P粉602998670
发布: 2025-08-28 10:19:01
原创
330人浏览过
答案:df和du是Linux磁盘管理的核心命令,df -h查看文件系统整体使用情况,du -sh分析目录空间占用,通过df定位高占用分区后,用du --max-depth=1逐级深入查找大文件,结合sort和head筛选最大占用者,注意df与du差异常因已删除但被进程占用的文件导致,可用lsof | grep deleted排查,定期清理日志、临时文件、旧内核并配置监控告警可有效预防空间不足问题。

如何在linux中检查磁盘使用 linux df与du命令对比

在Linux系统中,检查磁盘使用情况是日常系统维护的关键一环,我们主要依赖

df
登录后复制
du
登录后复制
这两个命令。简单来说,
df
登录后复制
(disk free)用于查看文件系统整体的磁盘空间使用情况,它能告诉你各个挂载点还剩多少空间;而
du
登录后复制
(disk usage)则专注于估算文件或目录所占用的空间,当你需要找出某个特定目录下哪些文件或子目录是“大胃王”时,它就派上用场了。两者各有侧重,理解它们的差异和适用场景,能让你在管理磁盘空间时事半功倍。

解决方案

要检查Linux中的磁盘使用情况,核心就是灵活运用

df
登录后复制
du
登录后复制
命令。

1. 使用

df
登录后复制
命令查看文件系统整体空间

df
登录后复制
命令报告的是文件系统层面的磁盘空间使用情况。它读取的是文件系统的元数据,所以执行速度很快。

  • 查看所有文件系统的使用情况(人类可读格式):

    df -h
    登录后复制

    这个命令会列出所有已挂载的文件系统,显示它们的大小、已用空间、可用空间、使用百分比以及挂载点。

    -h
    登录后复制
    选项将输出转换为人类可读的格式(如GB、MB),这比原始的块大小更直观。

  • 查看特定文件系统的使用情况:

    df -h /home
    登录后复制

    如果你只关心

    /home
    登录后复制
    分区的情况,可以指定路径。

  • 显示文件系统类型:

    df -Th
    登录后复制

    -T
    登录后复制
    选项会额外显示文件系统的类型,比如ext4、xfs等,这在某些故障排查时会很有用。

  • 查看inode使用情况:

    df -ih
    登录后复制

    -i
    登录后复制
    选项用于查看inode的使用情况。inode是文件系统中的一个数据结构,每个文件或目录都会占用一个inode。如果inode耗尽,即使磁盘空间还有,也无法创建新文件。

2. 使用

du
登录后复制
命令估算文件或目录占用空间

du
登录后复制
命令则深入到目录结构中,逐个计算文件和子目录的大小,然后汇总。这使得它在查找具体是哪个文件或目录消耗了大量空间时非常有效,但对于超大型目录,执行时间可能会比较长。

  • 查看当前目录的总大小(人类可读格式):

    du -sh .
    登录后复制

    -s
    登录后复制
    选项表示“汇总”(summarize),它只会显示指定目录的总大小,而不会列出其下的所有文件和子目录。
    .
    登录后复制
    表示当前目录。

  • 查看指定目录的总大小:

    du -sh /var/log
    登录后复制

    这会显示

    /var/log
    登录后复制
    目录及其所有内容的汇总大小。

  • 查看当前目录下所有子目录的大小(不递归深入):

    du -h --max-depth=1 .
    登录后复制

    --max-depth=1
    登录后复制
    是一个非常实用的选项,它只会显示当前目录下一级子目录的大小,而不会继续深入。这对于快速识别哪个顶级子目录占用空间最大非常有用。

  • 找出占用空间最大的前几个文件或目录: 结合

    sort
    登录后复制
    head
    登录后复制
    命令,可以高效地定位“元凶”。

    du -h /path/to/check | sort -rh | head -n 10
    登录后复制

    这里,

    sort -rh
    登录后复制
    会按大小逆序排列(
    -r
    登录后复制
    表示逆序,
    -h
    登录后复制
    表示处理人类可读的数字),然后
    head -n 10
    登录后复制
    取出前10行,即最大的10个文件或目录。

    标书对比王
    标书对比王

    标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

    标书对比王 58
    查看详情 标书对比王

Linux磁盘空间告急,如何快速定位占用大文件的元凶?

当系统突然报告磁盘空间不足,或者某个分区的使用率飙升时,最让人头疼的就是如何迅速找出那些“大文件”或“大目录”。我个人处理这类问题时,通常会采用一种自上而下、逐步深入的策略,而

du
登录后复制
命令是这个过程中的绝对主力。

首先,我会用

df -h
登录后复制
快速确认是哪个分区满了。假设是根分区
/
登录后复制
。接下来,我不会直接在根目录下跑
du -sh *
登录后复制
,因为那可能会花费很长时间,而且输出量巨大。更有效的方法是:

  1. 从根目录开始,查看第一级子目录的占用情况:

    sudo du -h --max-depth=1 / | sort -rh | head -n 10
    登录后复制

    这里加上

    sudo
    登录后复制
    是因为很多系统目录需要root权限才能读取。这个命令会列出
    /
    登录后复制
    目录下占用空间最大的前10个子目录。通常,像
    /var
    登录后复制
    /opt
    登录后复制
    /usr
    登录后复制
    /home
    登录后复制
    这些目录是重点关注对象。

  2. 定位到最大的子目录,继续深入: 假设上一步发现

    /var
    登录后复制
    目录占用了大部分空间,那么下一步就是进入
    /var
    登录后复制
    ,重复上述操作:

    sudo du -h --max-depth=1 /var | sort -rh | head -n 10
    登录后复制

    这样,你可能会发现

    /var/log
    登录后复制
    /var/lib
    登录后复制
    是主要贡献者。

  3. 针对性地检查: 如果发现是

    /var/log
    登录后复制
    ,那很可能是日志文件膨胀。我会查看
    /var/log
    登录后复制
    下的具体日志文件:

    sudo du -h /var/log/*.log | sort -rh | head -n 10
    登录后复制

    或者,如果日志文件太多,可以再次用

    --max-depth=1
    登录后复制
    来查看子目录:

    sudo du -h --max-depth=1 /var/log | sort -rh | head -n 10
    登录后复制

    通过这种迭代的方法,你就能很快地锁定具体是哪个文件或目录导致了磁盘空间不足。经验告诉我,通常是日志文件、数据库文件、用户上传的大文件或旧的备份文件在作怪。

df与du报告的磁盘使用量为何有时会出现偏差?

这是一个非常常见的疑问,也是很多初学者在排查磁盘空间问题时会遇到的“坑”。

df
登录后复制
du
登录后复制
命令在某些情况下确实可能报告不同的磁盘使用量,这并非它们有bug,而是因为它们统计的方式和侧重点不同。

最主要,也最常见的差异原因,就是已删除但仍被进程占用的文件

想象一下这个场景:一个应用程序(比如一个Web服务器或数据库)正在写入一个日志文件。突然,这个日志文件变得非常大,你作为系统管理员,为了释放空间,直接用

rm
登录后复制
命令删除了这个文件。

  • df
    登录后复制
    命令的视角:
    当你执行
    rm
    登录后复制
    命令后,文件系统会立即将这个文件的目录条目删除,并认为这些块现在是“空闲”的。所以,
    df
    登录后复制
    命令会立刻显示磁盘空间增加了,因为从文件系统的角度看,这些空间已经可以被重新分配了。
  • du
    登录后复制
    命令的视角:
    du
    登录后复制
    命令是通过遍历目录树来计算文件大小的。由于你已经删除了文件的目录条目,
    du
    登录后复制
    在遍历时就“看不见”这个文件了,自然也不会把它计入总和。
  • 实际情况: 尽管文件被删除了,但如果那个应用程序仍然打开着这个日志文件(持有它的文件描述符),那么操作系统实际上并没有释放那些磁盘块。这些块会一直被占用,直到那个应用程序关闭了文件或者它自己退出。这就是为什么
    df
    登录后复制
    显示空间已释放,而实际可用空间却没有增加,或者说你用
    du
    登录后复制
    加起来的总和远小于
    df
    登录后复制
    报告的已用空间。

如何排查这种情况? 你可以使用

lsof
登录后复制
命令来查找那些被删除但仍被进程打开的文件:

sudo lsof | grep deleted
登录后复制

这个命令会列出所有被打开的文件,并过滤出那些状态为

(deleted)
登录后复制
的文件。输出会显示哪个进程(PID)打开了哪个文件。一旦你找到罪魁祸首,你可以尝试重启相关服务,或者直接杀死那个进程(谨慎操作!),这样被占用的磁盘空间就会被真正释放。

除了这个主要原因,还有一些次要因素也可能导致差异:

  • 硬链接:
    du
    登录后复制
    会为每个硬链接的文件只计算一次空间,而
    df
    登录后复制
    计算的是实际占用的块。
  • 稀疏文件(Sparse Files): 稀疏文件在文件系统中只占用实际写入数据的块,未写入的部分不占用磁盘空间。
    du
    登录后复制
    可能会报告文件的逻辑大小(包括稀疏部分),而
    df
    登录后复制
    报告的是实际分配的块。
  • 文件系统元数据:
    df
    登录后复制
    报告的已用空间包括了文件系统自身的元数据、日志等,这些
    du
    登录后复制
    通常不会计算在内。

理解这些差异,能让你在面对看似矛盾的磁盘使用报告时,更有信心去分析和解决问题。

Linux磁盘空间管理的实用技巧与最佳实践

有效管理Linux磁盘空间不仅仅是知道如何检查,更在于如何预防和解决问题。在多年的系统维护经验中,我总结出了一些非常实用的技巧和最佳实践,希望能帮助大家避免磁盘空间不足的窘境。

  1. 定期清理日志文件: 日志文件是磁盘空间最常见的“吞噬者”。

    • 利用
      logrotate
      登录后复制
      大多数Linux发行版都内置了
      logrotate
      登录后复制
      工具,它能自动对日志文件进行轮换、压缩和删除。务必检查并配置好
      /etc/logrotate.conf
      登录后复制
      及其目录下的配置文件,确保重要服务的日志能够按时清理。
    • 手动清理: 对于一些没有被
      logrotate
      登录后复制
      管理的日志,或者临时性的大型日志,你可以手动清理。例如,删除30天前的旧日志:
      sudo find /var/log -type f -name "*.log" -mtime +30 -delete
      登录后复制

      注意: 在删除任何文件前,请务必确认其重要性,并避免删除当前正在写入的日志文件。

  2. 管理临时文件:

    /tmp
    登录后复制
    /var/tmp
    登录后复制
    目录是系统和应用程序存放临时文件的地方。

    • 系统自动清理: 大多数系统会配置
      tmpwatch
      登录后复制
      systemd-tmpfiles-clean
      登录后复制
      来自动清理这些目录。确保这些服务正常运行。
    • 手动清理: 如果发现临时目录过大,可以手动清理,但要小心,不要删除当前正在使用的文件。通常,重启系统是清理
      /tmp
      登录后复制
      最安全的方式,因为所有临时文件都会被清除。
  3. 清理旧的内核版本: 每次系统更新都可能安装新的内核,而旧的内核版本通常会被保留,以防新内核出现问题。但随着时间推移,这些旧内核会占用大量空间。

    • Debian/Ubuntu:
      sudo apt autoremove --purge
      登录后复制

      这个命令会自动删除不再需要的依赖包,包括旧的内核。

    • RHEL/CentOS/Fedora:
      sudo dnf remove --oldinstallonly --setopt installonly_limit=2 kernel
      登录后复制

      或者手动列出并删除:

      rpm -qa | grep kernel | sort
      sudo yum remove kernel-`uname -r` # 删除当前正在使用的内核以外的旧内核
      登录后复制

      警告: 至少保留一个可用的旧内核,以防新内核启动失败。

  4. 识别并处理大文件/目录: 利用前面提到的

    du -h --max-depth=1 /path | sort -rh | head -n 10
    登录后复制
    命令,定期扫描关键分区,找出异常增长的目录。一旦找到,深入分析并决定是归档、删除还是迁移。

  5. 配置监控与告警: 最有效的管理方式是防患于未然。

    • 监控工具: 使用Prometheus、Zabbix、Nagios等监控系统,对磁盘使用率设置阈值(例如80%或95%)。
    • 脚本告警: 对于小型环境,可以编写简单的shell脚本,结合
      cron
      登录后复制
      mail
      登录后复制
      命令,当磁盘使用率超过某个百分比时,自动发送邮件通知。
      #!/bin/bash
      THRESHOLD=90
      PARTITION="/"
      USAGE=$(df -h $PARTITION | awk 'NR==2 {print $5}' | sed 's/%//g')
      登录后复制

    if [ "$USAGE" -gt "$THRESHOLD" ]; then echo "Warning: Disk usage on $PARTITION is at $USAGE%" | mail -s "Disk Space Alert" your_email@example.com fi

    将此脚本添加到`crontab`中,定期执行。
    登录后复制
  6. 合理规划分区: 在系统安装初期,合理地规划分区(例如,将

    /var
    登录后复制
    /home
    登录后复制
    /opt
    登录后复制
    等常用易满的目录独立分区)可以有效避免一个分区满导致整个系统崩溃的问题。即使某个分区满了,也不会影响其他分区的功能。

记住,磁盘空间管理是一个持续的过程。没有一劳永逸的解决方案,只有持续的关注和维护才能确保系统的稳定运行。

以上就是如何在Linux中检查磁盘使用 Linux df与du命令对比的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号