首页 文章

在bash中检查当前分区的可用磁盘空间

提问于
浏览
96

我正在用bash编写安装程序 . 用户将转到目标目录并运行安装脚本,因此第一个操作应该是检查是否有足够的空间 . 我知道df将报告所有文件系统,但我想知道是否有办法获得目标目录所在分区的可用空间 .

编辑 - 我想出的答案

df $PWD | awk '/[0-9]%/{print $(NF-2)}'

有点奇怪,因为df似乎将其输出格式化为适合终端,所以使用长安装点名称输出向下移动一行

8 回答

  • 1

    要了解linux中GB或TB中特定目录的用法,命令是,

    df -h /dir/inner_dir/

    or
    

    df -sh /dir/inner_dir/

    并且知道linux中位的特定目录的用法命令是,

    df-k /dir/inner_dir/

  • 18

    是:

    df -k .
    

    对于当前目录 .

    df -k /some/dir
    

    如果要检查特定目录 .

    如果系统有,您可能还想查看 stat(1) 命令 . 您可以指定输出格式,以便脚本更容易解析 . 这是一个小例子:

    $ echo $(($(stat -f --format="%a*%S" .)))
    
  • 0
    • df command:报告文件系统磁盘空间使用情况

    • du 命令:估计文件空间使用情况

    键入 df -hdf -k 以列出可用磁盘空间:

    $ df -h
    

    要么

    $ df -k
    

    du 显示一个或多个文件或目录正在使用多少空间 .

    $ du -sh
    

    -s 选项汇总目录正在使用的空间, -h 选项提供 Human-readable 输出 .

  • 1

    我认为这应该是对ThinkingMedia在这个问题(Check free disk space for current partition in bash)上的回答的评论或编辑,但是我不允许发表评论(没有足够的代表)并且我的编辑被拒绝(原因:"this should be a comment or an answer") . 所以请,SO宇宙的力量,不要't damn me for repeating and fixing someone else' s "answer" . 但是互联网上有人错了!™他们不会让我解决它 .

    代码

    df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'
    

    有一个重大的缺陷:是的,它将输出 50G 免费为50 - 但它也将输出 5.0M 免费为50或 3.4G 免费为34或 15K 免费为15 .

    要创建一个脚本以检查一定数量的可用磁盘空间,您必须知道要检查的单元 . 删除它(如上面的示例中的 sed ),数字不再有意义 .

    如果你真的想要它工作,你将不得不做这样的事情:

    FREE=`df -k --output=avail "$PWD" | tail -n1`   # df -k not df -h
    if [[ $FREE -lt 10485760 ]]; then               # 10G = 10*1024*1024k
         # less than 10GBs free!
    fi;
    

    同样对于 df -k $INSTALL_TARGET_DIRECTORY 的安装程序可能比 df -k "$PWD" 更有意义 . 最后请注意,每个版本的df / linux都没有 --output 标志 .

  • 0

    对于可能希望使用它来监视服务器上的挂载点的人的完整示例 . 此示例将检查/ var / spool是否低于5G并通过电子邮件发送给该人员:

    #!/bin/bash
      # -----------------------------------------------------------------------------------------
      # SUMMARY: Check if MOUNT is under certain quota, mail us if this is the case
      # DETAILS: If under 5G we have it alert us via email. blah blah  
      # -----------------------------------------------------------------------------------------
      # CRON: 0 0,4,8,12,16 * * * /var/www/httpd-config/server_scripts/clear_root_spool_log.bash
    
      MOUNTP=/var/spool  # mount drive to check
      LIMITSIZE=5485760 # 5G = 10*1024*1024k   # limit size in GB   (FLOOR QUOTA)
      FREE=$(df -k --output=avail "$MOUNTP" | tail -n1) # df -k not df -h
      LOG=/tmp/log-$(basename ${0}).log
      MAILCMD=mail
      EMAILIDS="dude@wheres.mycar"
      MAILMESSAGE=/tmp/tmp-$(basename ${0})
    
      # -----------------------------------------------------------------------------------------
    
      function email_on_failure(){
    
              sMess="$1"
              echo "" >$MAILMESSAGE
              echo "Hostname: $(hostname)" >>$MAILMESSAGE
              echo "Date & Time: $(date)" >>$MAILMESSAGE
    
              # Email letter formation here:
              echo -e "\n[ $(date +%Y%m%d_%H%M%S%Z) ] Current Status:\n\n" >>$MAILMESSAGE
              cat $sMess >>$MAILMESSAGE
    
              echo "" >>$MAILMESSAGE
              echo "*** This email generated by $(basename $0) shell script ***" >>$MAILMESSAGE
              echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE
    
              # sending email (need to have an email client set up or sendmail)
              $MAILCMD -s "Urgent MAIL Alert For $(hostname) AWS Server" "$EMAILIDS" < $MAILMESSAGE
    
              [[ -f $MAILMESSAGE ]] && rm -f $MAILMESSAGE
    
      }
    
      # -----------------------------------------------------------------------------------------
    
      if [[ $FREE -lt $LIMITSIZE ]]; then
              echo "Writing to $LOG"
              echo "MAIL ERROR: Less than $((($FREE/1000))) MB free (QUOTA) on $MOUNTP!" | tee ${LOG}
              echo -e "\nPotential Files To Delete:" | tee -a ${LOG}
              find $MOUNTP -xdev -type f -size +500M -exec du -sh {} ';' | sort -rh | head -n20 | tee -a ${LOG}
              email_on_failure ${LOG}
      else
              echo "Currently $(((($FREE-$LIMITSIZE)/1000))) MB of QUOTA available of on $MOUNTP. "
      fi
    
  • 165
    df --output=avail -B 1 "$PWD" |tail -n 1
    

    你这样得到大小的字节数 .

  • 1

    使用字母以人类可读的格式获取当前可用磁盘空间 . 以下将输出当前分区的可用空间,删除 Headers 和条带字母 .

    df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'
    

    输出 50G 免费为 50 .

    在bash脚本中使这部分空闲磁盘空间条件 .

    FREE=`df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'`
    if [[ $FREE -lt 10 ]]; then
             # less than 10GBs free!
    fi;
    
  • 37

    输入命令shell:

    df -h
    

    要么

    df -m

    要么

    df -k

    它将显示每个安装点的可用磁盘空间列表 .

    您也可以显示/查看单列 .

    类型:

    df -m |awk '{print $3}'
    

    注意:这里的3是列号 . 您可以选择所需的列 .

相关问题