df 命令详解#

df 命令是 Linux 系统中用于显示磁盘空间使用情况的命令,是文件操作中常用的命令之一。本文将从入门到无敌,详细介绍 df 命令的使用方法和技巧。

入门阶段#

基本用法#

df 命令的基本语法:

df [选项]

功能:显示文件系统的磁盘空间使用情况,包括总空间、已使用空间、可用空间和挂载点。

常用示例#

  1. 显示磁盘空间使用情况

    df
  2. 以人类可读的格式显示

    df -h
  3. 显示指定文件系统的磁盘空间使用情况

    df /dev/sda1
  4. 显示指定目录的磁盘空间使用情况

    df /home

中级阶段#

常用选项#

选项说明
-a, --all显示所有文件系统,包括虚拟文件系统
-h, --human-readable以人类可读的格式显示(如 K、M、G)
-H, --si以 SI 单位显示(1000 为基数)
-T, --print-type显示文件系统类型
-t, --type=TYPE只显示指定类型的文件系统
-x, --exclude-type=TYPE排除指定类型的文件系统
-i, --inodes显示 inode 使用情况
-k, --kilobytes以 KB 为单位显示
-m, --megabytes以 MB 为单位显示
-g, --gigabytes以 GB 为单位显示
--help显示帮助信息
--version显示版本信息

组合使用示例#

  1. 以人类可读的格式显示所有文件系统

    df -ah
  2. 显示文件系统类型

    df -T
  3. 只显示 ext4 类型的文件系统

    df -t ext4
  4. 排除 tmpfs 类型的文件系统

    df -x tmpfs
  5. 显示 inode 使用情况

    df -i
  6. 以 GB 为单位显示

    df -g

高级阶段#

高级使用示例#

  1. 使用通配符

    # 显示所有 sd 开头的设备
    df /dev/sd*
  2. 使用管道

    # 显示使用率超过 80% 的文件系统
    df -h | grep -v "Filesystem" | awk '{if($5 > 80) print $0}'
    
    # 按使用率排序
    df -h | grep -v "Filesystem" | sort -k 5 -nr
  3. 使用重定向

    # 将磁盘空间使用情况保存到文件
    df -h > disk_usage.txt
  4. 显示指定挂载点的磁盘空间使用情况

    # 显示多个挂载点的磁盘空间使用情况
    df -h / /home /var
  5. 使用 -P 选项以 POSIX 格式显示

    # 以 POSIX 格式显示
    df -P
  6. 使用 -l 选项只显示本地文件系统

    # 只显示本地文件系统
    df -l

大师阶段#

复杂组合命令#

  1. find 命令结合使用

    # 查找大文件并显示磁盘空间使用情况
    find / -type f -size +100M 2>/dev/null | head -n 10 && df -h
  2. du 命令结合使用

    # 显示目录大小并显示磁盘空间使用情况
    du -sh /home/* && df -h /home
  3. grep 命令结合使用

    # 显示包含特定关键字的文件系统
    df -h | grep "ext4"
    
    # 显示不包含特定关键字的文件系统
    df -h | grep -v "tmpfs"
  4. awk 命令结合使用

    # 计算总磁盘空间
    df -k | grep -v "Filesystem" | awk '{total += $2} END {print "总磁盘空间:", total/1024/1024, "GB"}'
    
    # 计算已使用磁盘空间
    df -k | grep -v "Filesystem" | awk '{used += $3} END {print "已使用磁盘空间:", used/1024/1024, "GB"}'
    
    # 计算可用磁盘空间
    df -k | grep -v "Filesystem" | awk '{available += $4} END {print "可用磁盘空间:", available/1024/1024, "GB"}'
  5. sort 命令结合使用

    # 按总空间排序
    df -h | grep -v "Filesystem" | sort -k 2 -hr
    
    # 按可用空间排序
    df -h | grep -v "Filesystem" | sort -k 4 -hr

与其他命令结合使用#

  1. watch 命令结合使用

    # 实时监控磁盘空间使用情况
    watch -n 1 "df -h"
  2. alert 命令结合使用

    # 当磁盘使用率超过 90% 时发送警告
    # 注意:需要安装相应的告警工具
    df -h | grep -v "Filesystem" | awk '{if($5 > 90) system("echo \"Disk usage alert: " $0 "\" | mail -s \"Disk Usage Alert\" user@example.com")}'
  3. cron 命令结合使用

    # 添加到 crontab 定时执行
    # 编辑 crontab
    # crontab -e
    # 添加以下行,每小时检查一次磁盘空间
    # 0 * * * * df -h > /var/log/disk_usage.log
  4. lsblk 命令结合使用

    # 显示磁盘分区信息和磁盘空间使用情况
    lsblk -f && df -h
  5. fdisk 命令结合使用

    # 显示磁盘分区表和磁盘空间使用情况
    sudo fdisk -l && df -h

无敌阶段#

自定义 df 命令别名#

为了提高工作效率,可以在 .bashrc.bash_profile 文件中为 df 命令创建别名:

# 在 ~/.bashrc 文件中添加以下内容
alias df='df -h'            # 默认以人类可读的格式显示
alias dfa='df -ah'          # 显示所有文件系统
alias dft='df -T'           # 显示文件系统类型
alias dfi='df -i'           # 显示 inode 使用情况
alias dfl='df -l'           # 只显示本地文件系统
alias dfx='df -x tmpfs'     # 排除 tmpfs 类型的文件系统

添加后,执行 source ~/.bashrc 使别名生效。

高级技巧#

  1. 使用 df 命令监控远程服务器的磁盘空间

    # 监控远程服务器的磁盘空间
    ssh user@server "df -h"
  2. 使用 df 命令和 tmux 命令结合使用

    # 在 tmux 会话中监控磁盘空间
    # 启动 tmux 会话
    tmux new -s disk_monitor
    # 在 tmux 会话中执行
    watch -n 1 "df -h"
  3. 使用 df 命令和 grafana 命令结合使用

    # 配置 Grafana 监控磁盘空间
    # 1. 安装 Prometheus 和 Node Exporter
    # 2. 配置 Prometheus 采集 Node Exporter 数据
    # 3. 在 Grafana 中添加 Prometheus 数据源
    # 4. 创建磁盘空间监控面板
  4. 使用 df 命令和 systemd 命令结合使用

    # 创建系统服务监控磁盘空间
    # 创建服务文件
    sudo nano /etc/systemd/system/disk-monitor.service
    
    # 添加以下内容
    [Unit]
    Description=Disk Monitor
    After=network.target
    
    [Service]
    Type=simple
    ExecStart=/bin/bash -c 'df -h | grep -v "Filesystem" | awk "{if($5 > 90) system(\"echo \"Disk usage alert: \" $0 \"\" | mail -s \"Disk Usage Alert\" user@example.com\")}"'
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    # 启用并启动服务
    sudo systemctl enable disk-monitor.service
    sudo systemctl start disk-monitor.service
  5. 使用 df 命令和 python 命令结合使用

    # 使用 Python 脚本监控磁盘空间
    cat > disk_monitor.py << 'EOF'
    #!/usr/bin/env python3
    import subprocess
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    # 执行 df 命令
    result = subprocess.run(['df', '-h'], capture_output=True, text=True)
    output = result.stdout
    
    # 检查磁盘使用率
    lines = output.strip().split('\n')[1:]
    alerts = []
    
    for line in lines:
        parts = line.split()
        if len(parts) >= 5:
            usage = parts[4]
            if usage.endswith('%'):
                usage_percent = int(usage[:-1])
                if usage_percent > 90:
                    alerts.append(line)
    
    # 发送告警邮件
    if alerts:
        sender_email = "your_email@example.com"
        receiver_email = "user@example.com"
        password = "your_password"
    
        message = MIMEMultipart()
        message["From"] = sender_email
        message["To"] = receiver_email
        message["Subject"] = "Disk Usage Alert"
    
        body = "Disk usage alert:\n" + "\n".join(alerts)
        message.attach(MIMEText(body, "plain"))
    
        with smtplib.SMTP_SSL("smtp.example.com", 465) as server:
            server.login(sender_email, password)
            server.send_message(message)
    EOF
    
    chmod +x disk_monitor.py
    python3 disk_monitor.py
  6. 使用 df 命令和 bash 脚本结合使用

    # 创建 bash 脚本监控磁盘空间
    cat > disk_monitor.sh << 'EOF'
    #!/bin/bash
    
    # 执行 df 命令
    df -h > /var/log/disk_usage.log
    
    # 检查磁盘使用率
    while read line; do
        usage=$(echo $line | awk '{print $5}')
        if [[ $usage =~ % ]]; then
            usage_percent=${usage%"%"}
            if [ $usage_percent -gt 90 ]; then
                echo "Disk usage alert: $line" | mail -s "Disk Usage Alert" user@example.com
            fi
        fi
    done < <(df -h | grep -v "Filesystem")
    EOF
    
    chmod +x disk_monitor.sh
    ./disk_monitor.sh

性能优化#

  1. 使用 -l 选项只显示本地文件系统

    # 推荐:只显示本地文件系统
    df -l
    
    # 不推荐:显示所有文件系统
    df
  2. 使用 -t 选项只显示指定类型的文件系统

    # 推荐:只显示 ext4 类型的文件系统
    df -t ext4
    
    # 不推荐:显示所有文件系统
    df
  3. 使用 -x 选项排除不需要的文件系统

    # 推荐:排除 tmpfs 类型的文件系统
    df -x tmpfs
    
    # 不推荐:显示所有文件系统
    df
  4. 使用 -h 选项以人类可读的格式显示

    # 推荐:以人类可读的格式显示
    df -h
    
    # 不推荐:以默认格式显示
    df
  5. 对于远程服务器,使用 -P 选项以 POSIX 格式显示

    # 推荐:以 POSIX 格式显示
    ssh user@server "df -P"
    
    # 不推荐:以默认格式显示
    ssh user@server "df"

总结#

df 命令是 Linux 系统中用于显示磁盘空间使用情况的重要命令,掌握其各种选项和使用技巧,可以帮助你更好地管理和监控系统的磁盘空间。从入门到无敌,本文涵盖了 df 命令的所有重要用法,希望对你有所帮助。

常用选项总结#

选项说明
-a, --all显示所有文件系统,包括虚拟文件系统
-h, --human-readable以人类可读的格式显示(如 K、M、G)
-H, --si以 SI 单位显示(1000 为基数)
-T, --print-type显示文件系统类型
-t, --type=TYPE只显示指定类型的文件系统
-x, --exclude-type=TYPE排除指定类型的文件系统
-i, --inodes显示 inode 使用情况
-k, --kilobytes以 KB 为单位显示
-m, --megabytes以 MB 为单位显示
-g, --gigabytes以 GB 为单位显示
-l, --local只显示本地文件系统
-P, --portability以 POSIX 格式显示

最佳实践#

  1. 使用 -h 选项:使用 -h 选项,以人类可读的格式显示磁盘空间使用情况,便于查看。

  2. 定期检查:定期使用 df 命令检查磁盘空间使用情况,及时发现并处理磁盘空间不足的问题。

  3. 监控告警:配置监控系统,当磁盘使用率超过阈值时发送告警,及时处理。

  4. 结合其他命令:与 finddulsblk 等命令结合使用,更全面地了解磁盘使用情况。

  5. 性能优化:使用 -l-t-x 等选项,只显示需要的信息,提高命令执行速度。

  6. 远程监控:使用 ssh 命令监控远程服务器的磁盘空间使用情况。

通过不断练习和使用,你将能够熟练掌握 df 命令的各种技巧,成为 Linux 磁盘空间管理的高手。