web-dev-qa-db-ja.com

`df`出力を解析せずにUNIXで利用可能なディスクスペースを見つける

df -k .と入力すると、次の出力が得られます

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda2       16512936 8650196   7023932  56% /

私がやっていることは、最後の行をテールし、4番目のフィールドを抽出して正しく取得することです。

ただし、ファイルシステム名が長い場合は、たとえば、 /dev/niraj-asdsdsd-dsdsdsa、次にdfは新しい行に詳細を出力し、ロジックを使用すると、7023932ではなく56%になります。

だから私の質問は、どのような状況で正確な空き領域を決定する方法ですか?

1
Niraj

ファイル統計を取得するのに便利なstatutilityは、ファイルシステムに関する情報を提供することもできます。-fオプションを指定するだけです。

ただし、デバイスファイル(/boot)ではなく、マウントポイント(例:/dev/sda1)を指定してください。後者の場合、stat/devファイルシステムの統計を報告するためです。これは(debianでは)仮想ファイルシステムであり、物理ディスクとは関係ありません。

$マウント| grep sda1
/boot typeext2の/ dev/sda1(rw、relatime、errors = Continue、user_xattr、acl)
$ env stat -f/dev/sda2
ファイル: "/ dev/sda1" 
 ID:0 Namelen:255タイプ:tmpfs 
ブロックサイズ:4096基本ブロックサイズ:4096 
ブロック:合計: 2560無料:2560利用可能:2560 
 iノード:合計:497355無料:496852 
$ env stat -f/boot
ファイル: "/ boot" 
 ID:fe082d7c0c42ea6f Namelen:255タイプ:ext2/ext3 
ブロックサイズ:1024基本ブロックサイズ:1024 
ブロック:合計: 99150無料:52490利用可能:47370 
 iノード:合計:25688無料:25355 
  • FreeAvailableのカウントの違いは、rootの予約済みブロックに起因します。
  • envを使用して、シェルの組み込みのstatコマンド(使用されているすべてのオプションを提供する場合と提供しない場合があります)が使用されていないことを確認しました。

したがって、質問に答えるために、カスタマイズされた(-c)統計出力形式を使用して、%aの使用可能なスペース(/)を取得できます。

$ env stat -f -c %a /
1711744

これはブロック単位であるため、賢く、出力をbc計算機にパイプすることにより、システムにKB単位(%S/1024)のブロックサイズで乗算を実行させます。

$ env stat -f -c '%a*%S/1024' / | bc
6846976

dfで確認しましょう:

$ df /
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda2       25066604 16939628   6846976  72% /

結構です、同じ数が報告されました!

3
mpy

Niraj-diユーティリティを見たことがありますか?これは、少なくとも必要なデータを抽出するためのより簡単な方法を提供する可能性があり、ドライブスペースのCSV形式の出力を提供します。

di -c
0
Optichip