【问题标题】:Get remaining disk space from df's output从 df 的输出中获取剩余磁盘空间
【发布时间】:2015-10-14 17:59:04
【问题描述】:

我想在我的主目录中获得剩余的磁盘空间:

df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs           20G   15G  3.5G  81% /
/dev/root        20G   15G  3.5G  81% /
devtmpfs        990M  4.0K  990M   1% /dev
none            199M  2.7M  196M   2% /run
none            5.0M     0  5.0M   0% /run/lock
none            991M   12K  991M   1% /run/shm
/dev/sda2       894G  847G  1.9G 100% /home

注意:从上面的输出中我只需要1.9G

【问题讨论】:

  • 这里有一个提示:awk 是你的朋友。

标签: shell unix diskspace linux-disk-free


【解决方案1】:

使用grep 只取/home 行,使用awk 只取你想要的字段:

df -h | grep -w /home | awk '{print $4}'

【讨论】:

  • 太棒了,我还是初学者,请给我解释一下
  • @OumAlaa: grep -w /home 仅打印 df -h 的输出中包含字符串 /home 的整个单词的行。结果被馈送到awk,然后只打印该行上的第 4 个空格分隔字段,即剩余的磁盘空间量。 explainshell.com 是一个分析 shell 命令行的好站点;这里是grep -w /home的解释:explainshell.com/explain?cmd=grep+-w+%2Fhome
  • @OumAlaa:虽然在性能方面不是真正的问题,但没有必要得到grep - 因此需要额外的过程 - 因为awk 可以很容易 - 和更准确 - 对/home 的存在执行相同的测试,正如我的回答所证明的那样。也就是说,有时将流程分解为更小的步骤会更容易,这没关系,只要性能不是问题。
  • 非常感谢,不胜感激
【解决方案2】:

试试下面的awk 命令:

df -h | awk '$6 == "/home" { print $4 }'
  • $6 == "/home" 仅处理第 6 个空格分隔列包含 /home 的(一)行。
  • { print $4 } 在该行打印第 4 个以空格分隔的字段,即剩余磁盘空间。

【讨论】:

  • 有帮助,你真好,我不熟悉“awk”
  • @OumAlaa:我的荣幸; awk 值得学习;它是一个强大的文本处理工具——背景见en.wikipedia.org/wiki/AWK
  • 非常感谢,不胜感激
  • @OumAlaa:因为您已经表达了对这个特定答案的赞赏而没有投票,所以让我提供这个一般建议:除了接受 i> 一个答案,您可以并被鼓励投票 其他您认为有帮助 的答案,这有助于未来的读者。 (这不是对 this 答案投票的隐蔽请求。)
【解决方案3】:

尝试以下命令之一:

$ grep -o 1.9G <(df -h)
$ df -h|awk '/home/{print $4}'
$ grep home <(df -h) | awk '{print $4}'
$ df=($(tail -1 <(df -h))) echo ${df[3]}
$ vi -es +'%j|norm 3dWWd$' -c%p -cq! <(df -h)
$ printf "%s\n" $(tail -1 <(df -h))|tail -3|head -1
$ ex -s <(df -h|egrep -o "\S+\s+\S+\s+/home") +'norm Wd$' +%p -cq!

【讨论】:

  • 基本上是:grep/filter-by home process substitution) | awk {print 4th column}
【解决方案4】:

试试这个:

df -h | awk '{print $4}'

【讨论】:

  • 这是输出:df -h | awk '{print $4}' Avail 3.3G 3.3G 990M 196M 5.0M 991M 773M 但我只需要最后一个
【解决方案5】:

虽然回旋处,并绑定到 ext2,但这是tune2fs 的一种方式

tune2fs /dev/sdc1 -l | egrep '^(Free blocks|Block size)' | 
    cut -d: -f2 | xargs |
    while read free size; 
    do 
        echo "$free blocks of size $size free: $((($size*$free)>>20)) mebibytes"
    done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多