艾林博客 - 技术交流与经验分享的个人博客

Linux df 和 du 命令详解

Liner51

Liner51

2个月前更新

在 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
系统运维

喜欢就支持一下把!

(0)
我有我的人格、良心,不是钱能买的。我的音乐,要献给祖国,献给劳动人民大众,为挽救民族危机服务。

冼星海

为您推荐