bashの現在のパーティションの空きディスク容量を確認する


118

私はbashでインストーラーを書いています。ユーザーはターゲットディレクトリに移動してインストールスクリプトを実行するため、最初のアクションは十分なスペースがあることを確認することです。私はdfがすべてのファイルシステムを報告することを知っていますが、ターゲットディレクトリが存在するパーティションだけの空き領域を取得する方法があるかどうか疑問に思っていました。

編集-私が思いついた答え

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

dfは出力を端末に合わせてフォーマットしているように見えるため、少し奇妙です。マウントポイント名が長いと、出力が1行下にシフトします。


4
-Pフラグを使用してdf、すべてを1行で取得します。
マット

5
du -hs .現在のディレクトリで使用されているディスク容量の確認に関連しています。
ここでは

@Matが言ったように、ソリューションを使用する場合は-Pを使用する必要があります。過去に、奇妙にフォーマットされた、または長い名前のパーティションに遭遇し、-Pフラグがないためにスクリプトが失敗しました。
SuperTetelman 2017年

回答:


204

はい:

df -k .

現在のディレクトリ。

df -k /some/dir

特定のディレクトリを確認する場合。

stat(1)システムにコマンドがある場合は、コマンドをチェックアウトすることも できます。スクリプトが解析しやすいように、出力形式を指定できます。ここに小さな例があります:

$ echo $(($(stat -f --format="%a*%S" .)))

それをありがとう!statは私に少し心を吹き飛ばしているように見えます。manページを読むと、自分のバージョンのdfで-kを使いたくないことが示されていますが、パスを入れると役に立ちました。
Greg Reynolds、

ああ-今-kを使用する理由がわかりました。計算が簡単になります!
グレッグレイノルズ

1
指定しない場合、多くのシステムはデフォルトで512バイトブロックになります-k。(coreutils dfのデフォルトは1kブロックなので、Linuxではかなり安全ですがstat、coreutilsがあれば、さらに安全です-解析は必要ありません)。
マット

2
私のレッドハットの何かでは、フォーマット文字列はの%a*%s代わりにすべきです%a*%S。これが違いなのか、タイプミスなのかはわかりません。
RnMss 2013年

@RnMss:だはずであることを%SRedHatの上のmanページによる(首都)。%s != %SいくつかのRedHatsでもアクセスできるファイルシステムが見つからないため、チェックできません:-(
Mat

43
  1. df コマンド:ファイルシステムのディスク領域の使用状況を報告する
  2. du コマンド:ファイル領域の使用量を見積もる

またはと入力してdf -hdf -k空きディスク容量を表示します。

 $ df -h

または

 $ df -k

du 1つ以上のファイルまたはディレクトリが使用している容量を示します。

 $ du -sh

-sオプションでは、ディレクトリが使用され、スペースまとめた-hオプションが提供する人間が読み取り可能な出力を。


24

これは、この質問に対するThinkingMediaの回答に対するコメントまたは編集であると思います(bashの現在のパーティションの空きディスク領域を確認する)が、コメントすることは許可されていません(十分な担当者ではありません)。私の編集は拒否されました(理由: 「これはコメントまたは回答である必要があります」)。ですから、SO宇宙の力は、誰かの「答え」を繰り返して修正することを私に気にしないでください。しかし、インターネット上の誰かが間違っていました!™そして彼らは私にそれを修正させませんでした。

コード

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

重大な欠陥があります:はい、それは50G50として無料で出力されます-しかし、それはまた5.0M、50 3.4Gとして15K無料または34 として無料または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"。最後に、この--outputフラグはdf / linuxのすべてのバージョンで使用できるわけではないことに注意してください。


すべてのディストリビューションが持っているわけではありません--output=avail
Yzmir Ramirez

1
良い観察。それはまさに答えの最後の文が述べていることです。@YzmirRamirez ;-)
trs '25 / 08/25

3
df --output=avail -B 1 "$PWD" |tail -n 1

この方法でサイズをバイト単位で取得します。


すべてのディストリビューションが持っているわけではありません--output=avail
Yzmir Ramirez

2

これを使用してサーバー上のマウントポイントを監視する可能性のある人のための完全な例。この例では、/ 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

1

LinuxでGBまたはTBの特定のディレクトリの使用状況を知るには、コマンドは次のとおりです。

df -h / dir / inner_dir /

 or

df -sh / dir / inner_dir /

Linuxでビット単位で特定のディレクトリの使用法を知るためのコマンドは、

df-k / dir / inner_dir /


0

コマンドシェルに入力します。

 df -h 

または

df -m

または

df -k

各マウントポイントの空きディスク領域のリストが表示されます。

単一の列を表示/表示することもできます。

タイプ:

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

注:ここで3は列番号です。必要な列を選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.