/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)"%"}}'