Linux

在 /proc 中獲取文件系統可用空間

  • November 6, 2020

我想知道 /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 我可以看到文件系統的總空間,但我需要免費的。

有誰知道?

提前致謝。

一般來說,/proc包含有關程序的資訊,而不是文件系統的資訊。如前所述,您希望從statfs()系統呼叫中解析數據。 df是用於此的規範 shell 實用程序;你有什麼不想使用它的理由嗎?

如果您對解析如此多的數據列不感興趣,可以使用:

$ df -h --output=target,avail

可以使用以下 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 */

          };

引用自:https://unix.stackexchange.com/questions/399373