Linux df 和 du 命令详解

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 系统运维 发布于9个月前 更新于9个月前 616

在 Linux 系统中,管理磁盘空间是系统管理员和开发者的一项重要任务。本文将详细介绍用于查看文件系统磁盘空间使用情况的 df 命令以及用于查看目录和文件磁盘使用情况的 du 命令。这两个命令相辅相成,可以帮助你全面了解和管理系统的磁盘使用情况。


df 命令详解

df(disk free)命令是 Linux 系统中用于查看文件系统磁盘空间使用情况的工具。

基本用法

df [选项] [文件]

执行 df 命令而不带任何参数时,会显示所有文件系统的磁盘使用情况。

常用选项

  • -h:以可读性更好的方式显示磁盘空间信息(例如,KB、MB、GB)。
  • -a:包括所有文件系统(包括大小为 0 的文件系统)。
  • -T:显示文件系统类型。
  • -i:显示 inode 信息,而不是块使用情况。
  • --total:显示总计。
  • -B:指定块大小,例如 -B M 以 MB 为单位显示。
  • --output:指定输出信息的格式,如 --output=source,size,used,avail,pcent,target
  • -P:使用 POSIX 输出格式。

示例

  1. 显示所有文件系统的磁盘使用情况

    df
    

    输出示例:

    文件系统        1K-块      已用      可用   已用% 挂载点
    /dev/sda1      20480000  10240000  10240000   50% /
    
  2. 以人类可读的格式显示

    df -h
    

    输出示例:

    文件系统        大小  已用  可用 已用% 挂载点
    /dev/sda1       20G   10G   10G   50% /
    
  3. 显示文件系统类型

    df -T
    

    输出示例:

    文件系统     类型     1K-块    已用    可用 已用% 挂载点
    /dev/sda1    ext4  20480000 10240000 10240000  50% /
    
  4. 显示 inode 信息

    df -i
    

    输出示例:

    文件系统     Inodes   已用    可用 已用% 挂载点
    /dev/sda1    1280000  640000  640000  50% /
    
  5. 显示总计信息

    df --total
    

    输出示例:

    文件系统        1K-块      已用      可用   已用% 挂载点
    /dev/sda1      20480000  10240000  10240000   50% /
    /dev/sdb1      51200000  25600000  25600000   50% /data
    total          71680000  35840000  35840000   50%
    
  6. 指定块大小

    df -B M
    

    输出示例:

    文件系统        1M-块      已用      可用   已用% 挂载点
    /dev/sda1      20000      10000     10000   50% /
    
  7. 指定输出格式

    df --output=source,size,used,avail,pcent,target
    

    输出示例:

    源         大小  已用  可用 已用% 挂载点
    /dev/sda1  20G   10G   10G   50% /
    
  8. 使用 POSIX 输出格式

    df -P
    

    输出示例:

    文件系统  1024-blocks      Used Available Capacity Mounted on
    /dev/sda1  20480000  10240000  10240000   50% /
    
  9. 显示指定目录或文件的磁盘使用情况

    df -h /home
    

    输出示例:

    文件系统        大小  已用  可用 已用% 挂载点
    /dev/sda1       20G   10G   10G   50% /home
    

du 命令详解

du(disk usage)命令用于查看一个目录和文件的磁盘使用情况,与 df 命令配合使用,可以详细了解磁盘空间的分配情况。

基本用法

du [选项] [文件或目录]

执行 du 命令时,会递归显示指定目录及其子目录的磁盘使用情况。

常用选项

  • -h:以可读性更好的方式显示磁盘空间信息(例如,KB、MB、GB)。
  • -s:仅显示每个参数的总计。
  • -a:显示所有文件和目录的磁盘使用情况。
  • -c:显示总计。
  • --max-depth=N:限制显示的目录深度。
  • --exclude=PATTERN:排除匹配特定模式的文件或目录。
  • -d:与 --max-depth 相同,指定显示的目录深度。

示例

  1. 显示指定目录的磁盘使用情况

    du /home
    

    输出示例:

    1024    /home/user1
    2048    /home/user2
    3072    /home
    
  2. 以人类可读的格式显示

    du -h /home
    

    输出示例:

    1.0K    /home/user1
    2.0K    /home/user2
    3.0K    /home
    
  3. 显示指定目录的总计

    du -sh /home
    

    输出示例:

    3.0K    /home
    
  4. 显示所有文件和目录的磁盘使用情况

    du -ah /home
    

    输出示例:

    1.0K    /home/user1/file1
    1.0K    /home/user1
    2.0K    /home/user2/file2
    2.0K    /home/user2
    3.0K    /home
    
  5. 显示总计信息

    du -hc /home
    

    输出示例:

    1.0K    /home/user1/file1
    1.0K    /home/user1
    2.0K    /home/user2/file2
    2.0K    /home/user2
    3.0K    /home
    3.0K    total
    
  6. 限制显示的目录深度

    du -h --max-depth=1 /home
    

    输出示例:

    1.0K    /home/user1
    2.0K    /home/user2
    3.0K    /home
    
  7. 排除特定模式的文件或目录

    du -h --exclude="*.log" /home
    

    该命令会排除所有 .log 文件。

    输出示例:

    1.0K    /home/user1
    2.0K    /home/user2
    3.0K    /home
    

高级实例

  1. 查找存储占用最高的目录

    使用 df 命令你可以了解文件系统的使用情况,但要进一步找到占用空间最多的目录,可以结合 du(disk usage)命令。

    du -sh /* | sort -rh | head -n 10
    

    这条命令会显示根目录下占用空间最大的10个目录。

    输出示例:

    12G     /var
    8.0G    /home
    4.0G    /usr
    2.1G    /lib
    1.5G    /opt
    1.0G    /tmp
    
  2. 监控磁盘使用情况并发送告警

    结合 df 命令和一些脚本,你可以监控磁盘使用情况并在空间接近满载时发送告警。

    #!/bin/bash
    THRESHOLD=80
    df -h | awk 'NR>1{if($5+0 > '$THRESHOLD') print $0}'
    

    该脚本会检查所有文件系统的使用率,如果超过了80%,就会输出相关信息。

  3. 自动清理临时文件

    你可以设置一个自动化任务,当某个分区的使用率超过一定阈值时,自动清理临时文件。

    #!/bin/bash
    THRESHOLD=90
    USAGE=$(df /tmp | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ $USAGE -gt $THRESHOLD ]; then
        echo "Cleaning /tmp directory..."
        rm -rf /tmp/*
    fi
    

    可以将这个脚本设置为 cron 任务,每隔一段时间自动运行。

  4. 定期生成磁盘使用报告

    可以编写一个脚本,定期生成磁盘使用报告并发送给系统管理员。

    #!/bin/bash
    df -h > /var/log/disk_usage_report.txt
    mail -s "Disk Usage Report" admin@example.com < /var/log/disk_usage_report.txt
    

    将这个脚本设置为 cron 任务,每天生成并发送磁盘使用报告。

使用场景

  • 监控磁盘使用情况:可以定期检查磁盘使用情况,防止磁盘空间不足。
  • 管理文件系统:可以帮助识别哪个分区空间不足,需要进行扩展或清理。
  • 系统优化:通过观察 inode 使用情况,判断是否需要调整文件系统。
  • 自动化脚本:通过 POSIX 格式输出,可以方便地在脚本中进行进一步处理。
  • 定期报告和告警:结合脚本和邮件系统,可以实现磁盘使用的自动监控和告警。
  • 目录和文件分析:通过 du 命令,可以详细了解磁盘空间在目录和文件之间的分配情况。

注意事项

  • 使用 df 命令时,结果可能会因为文件系统的不同而有所差异。
  • 有些挂载点可能会被忽略,需要使用 -a 选项来显示所有挂载点。
  • 在使用 -h 等选项时,注意与其他选项的组合可能会导致输出格式变化。
  • du 命令的权限问题:使用 du 命令时,可能会因为权限问题无法访问某些目录或文件,需要使用 sudo 命令来提升权限。
THE END

喜欢就支持一下吧!

版权声明:除却声明转载或特殊注明,否则均为艾林博客原创文章,分享是一种美德,转载请保留原链接,感谢您的支持和理解

乐观使你倾向于幸福健康事业顺利,悲观使你倾向于绝望患病失败忧郁孤独懦怯。

佚名

推荐阅读

前后端分离架构的优点、挑战与最佳实践

本文详细介绍了前后端分离架构的优点、常见挑战及最佳实践,适用于开发团队在构建现代 Web 应用时参考和借鉴。

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 01月13日

探索 PHP 8.4 的革新:增强类型系统、惰性初始化与更多新特性

深入了解PHP 8.4带来的重大改进,包括更强大的类型系统、属性(Property Hooks)支持、非对称可见性、惰性...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 01月08日

Phpstorm+Phpstudy 搭建xdebug调试

在日常的工作或者学习中,项目调试是是开发过程中不可缺少的存在,他不仅能帮你更直接的作为一个观察者查阅项目运行流程,更重要...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 02月24日

读懂 Docker:基础概念、实用场景与应用现状

本文详细介绍了 Docker 的概念、用途以及其在当下是否广泛使用的情况,从定义、核心组件阐述 Docker 是什么,列...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 03月08日

如何提升网站性能?从后端优化到整体提速的实用技巧

本文分享了如何在后端开发中优化网站性能,从数据库优化、缓存设计到负载均衡,涵盖实践案例与工具推荐,帮助开发者高效提升网站...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 12月27日

深入浅出:后端开发中的缓存机制

这篇文章深入探讨了后端开发中的缓存机制,包括缓存的定义、分类、常见使用场景、挑战与解决方案,以及如何选择合适的缓存工具,...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 01月15日

MySQL字符串类型的字段 默认值NULL、空值、Empty String的区别,哪个更好?

本文详细介绍了在MySQL中默认值为NULL、空值和Empty String(空字符串)的区别,并分析了在生产环境下的优...

https://file-one.7k7s.com//uploads/20240604/89f56a7378e381410f4dfcfab3948775.jpg
陈杰 10月29日