linux系統擷取硬碟使用資訊_Linux

來源:互聯網
上載者:User

1、df命令

  Linux下可以用df命令擷取硬碟的使用方式,通過man可以擷取df命令的詳細情況。df命令經常用的參數為:

  a:顯示全部的檔案系統和各分割區的磁碟使用情形
  i:顯示i -nodes的使用量
  k:大小用k來表示 (預設值)
  t:顯示某一個檔案系統的所有分割區磁碟使用量
  x:顯示不是某一個檔案系統的所有分割區磁碟使用量
  T:顯示每個分割區所屬的檔案系統名稱
  常用命令:df -hi

舉例截圖如下所示



2、du命令

  du命令用來查詢檔案或目錄的磁碟使用空間,通過man擷取du命令的詳細介紹。常用的命令參數如下:
  a:顯示全部目錄和其次目錄下的每個檔案所佔的磁碟空間
  b:大小用bytes來表示 (預設值為k bytes)
  c:最後再加上總計 (預設值)
  s:只顯示各檔案大小的總合 (summarize)
  x:只計算同屬同一個檔案系統的檔案
  L:計算所有的檔案大小
  常用命令:du -ah

舉例操作如下圖所示:



3、statfs結構及函數

  之前在看APUE時候,在第四章檔案和目錄中,講到了擷取檔案資訊的stat結構,通過stat結構可以獲檔案的大小,建立時間,修改時間,使用者id,組id等等。man上stat結構及操作函數如下圖所示:



今天主要總結學習一下擷取硬碟資訊的statfs結構,通過statfs結構的資訊計算出路徑所在的磁碟使用方式。man上關於statfs介紹如下所示:



statfs結構的中文意思如下所示:

複製代碼 代碼如下:

struct statfs
  {
      long f_type; /* 檔案系統類型*/
      long f_bsize; /* 經過最佳化的傳輸塊大小*/
      long f_blocks; /* 檔案系統資料區塊總數*/
   long f_bfree; /* 可用塊數*/
   long f_bavail; /* 非超級使用者可擷取的塊數*/
   long f_files; /* 檔案結點總數*/
   long f_ffree; /* 可用檔案結點數*/
   fsid_t f_fsid; /* 檔案系統標識*/
   long f_namelen; /* 檔案名稱的最大長度*/
 };



statfs結構中可用空間塊數有兩種f_bfree和 f_bavail,前者是硬碟所有剩餘空間,後者為非root使用者剩餘空間,ext3檔案系統給root使用者分有5%的獨享空間,所以這裡是不同的地方。這裡要強調的是每塊的大小一般是4K。因此,要實現與df結果一致的就得在獲得塊數上乘以4,這樣已用、可用、總塊數就可以實現。
測試程式如下所示:

複製代碼 代碼如下:

#include <stdio.h>
#include <sys/statfs.h>
#include <sys/vfs.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    struct statfs disk_info;
    char *path = "/home/";
    int ret = 0;
    if (argc == 2)
    {
      path = argv[1];
    }
    if (ret == statfs(path, &disk_info) == -1)
    {
      fprintf(stderr, "Failed to get file disk infomation,\
          errno:%u, reason:%s\n", errno, strerror(errno));
      return -1;
    }
    long long total_size = disk_info.f_blocks * disk_info.f_bsize;
    long long available_size = disk_info.f_bavail * disk_info.f_bsize;
    long long free_size = disk_info.f_bfree * disk_info.f_bsize;
    //輸出每個塊的長度,linux下記憶體塊為4KB
    printf("block size: %ld bytes\n", disk_info.f_bsize);
    //輸出塊個數
    printf("total data blocks: %ld \n", disk_info.f_blocks);
    //輸出path所在磁碟的大小
    printf("total file disk size: %d MB\n",total_size >> 20);
    //輸出非root使用者可以用的磁碟空間大小
    printf("avaiable size: %d MB\n",available_size >> 20);
    //輸出硬碟的所有剩餘空間
    printf("free size: %d MB\n",free_size >> 20);
    //輸出磁碟上檔案節點個數
    printf("total file nodes: %ld\n", disk_info.f_files);
    //輸出可用檔案節點個數
    printf("free file nodes: %ld\n", disk_info.f_ffree);
    //輸出檔案名最大長度
    printf("maxinum length of file name: %ld\n", disk_info.f_namelen);
    return 0;
}


測試結果如下所示:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.