/proc からファイルシステムの空き領域を取得します。

/proc からファイルシステムの空き領域を取得します。

/procにUbuntuコマンド:df -hなど、ファイルシステムの空き容量を示すファイルがあるかどうかを知りたいです。

root@localhost:~$ df -h
S. files                               SIZE   USE   FREE  %USE MNT IN
udev                                   1,9G  4,0K   1,9G   1% /dev
tmpfs                                  384M  1,2M   383M   1% /run
/dev/sda3                               95G   58G    33G  65% /
none                                   4,0K     0   4,0K   0% /sys/fs/cgroup
none                                   5,0M     0   5,0M   0% /run/lock
none                                   1,9G  1,2M   1,9G   1% /run/shm
none                                   100M   84K   100M   1% /run/user

無料コラムが必要です。

/proc/partitions でファイルシステムごとのスペース全体を表示できますが、空きスペースが必要です。

知っている人はいますか?

よろしくお願いします。

答え1

通常、/proc次の情報が含まれます。プロセス、いいえファイルシステム。前述のように、statfs()システムコールからデータを解析しようとしています。dfこの目的のための標準シェルユーティリティはありますか?使いたくない理由はありますか?

あまりにも多くのデータ列を解析することに興味がない場合は、次のように使用できます。

$ df -h --output=target,avail

答え2

これを提供するシステムのstatファイルシステムでこのコマンドを使用できます。

例えば

stat -f -c %a /var    # Find the number of free blocks on /var
stat -f -c %S /var    # Determine the block size

使用可能なバイト数を取得するには、1つずつ乗算し、適切な千単位に分割して結果のサイズを変更する必要があります。ファイルシステムの結果をMB単位で取得する1つの方法は次のとおりです/var

MBfree=$(( $(stat -f -c '%a * %S / 1024 / 1024' /var ) ))
echo "$MBfree"

答え3

次のsysfs関数を使用してプログラムで取得できます。

#include <sys/statvfs.h>

function: 
int statvfs(const char *path, struct statvfs *buf);

structure definition
struct statvfs {
               unsigned long  f_bsize;    /* file system block size */
               unsigned long  f_frsize;   /* fragment size */
               fsblkcnt_t     f_blocks;   /* size of fs in f_frsize units */
               fsblkcnt_t     f_bfree;    /* # free blocks */
               fsblkcnt_t     f_bavail;   /* # free blocks for unprivileged users */
               fsfilcnt_t     f_files;    /* # inodes */
               fsfilcnt_t     f_ffree;    /* # free inodes */
               fsfilcnt_t     f_favail;   /* # free inodes for unprivileged users */
               unsigned long  f_fsid;     /* file system ID */
               unsigned long  f_flag;     /* mount flags */
               unsigned long  f_namemax;  /* maximum filename length */

           };

答え4

次のコマンドを試すことができます。

df -Ph |awk 'NR >1{gsub("%","",$0);print }'| awk '{if($(NF-1)>60){print "Disk space issue exsists on partition "$NF" Used percentage is "$(NF-1)"% Used space is "$(NF-3) " out of total space "$(NF-4)}else{print "No disk space issue exsists on partition "$NF" Used percentage is "$(NF-1)"%"}}'

関連情報