linux系统获取硬盘使用信息

 更新时间:2013年10月22日 09:32:45   作者:  
linux查看硬盘信息要用的几个命令:df命令、du命令、statfs结构及函数,这里用图文说明一下使用方法。

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;
}


测试结果如下所示:

相关文章

  • Linux定时任务Crontab的使用方法

    Linux定时任务Crontab的使用方法

    这篇文章主要为大家详细介绍了Linux定时任务Crontab的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 在Linux中使用Vundle管理Vim插件的方法

    在Linux中使用Vundle管理Vim插件的方法

    Vim缺乏默认的插件管理器,所有插件的文件都散布在~/.vim下的几个文件夹中,插件的安装与更新与删除都需要自己手动来,既麻烦费事,又可能出现错误。下面这篇文章主要给大家介绍了关于在Linux中使用Vundle管理Vim插件的方法,需要的朋友可以参考下。
    2018-04-04
  • Linux通过设备号找到设备的方法

    Linux通过设备号找到设备的方法

    所有的Linux设备文件均位于/dev目录下,是根(/)文件系统的一个组成部分,因为这些设备文件在操作系统启动过程中必须可以使用。接下来通过本文给大家介绍Linux通过设备号找到设备的方法,感兴趣的朋友一起看看吧
    2018-07-07
  • Linux mysql-5.6如何实现重置root密码

    Linux mysql-5.6如何实现重置root密码

    这篇文章主要介绍了Linux mysql-5.6如何实现重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 实例详解Linux下的Make命令

    实例详解Linux下的Make命令

    众所周知在Linux系统下的make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。下面这篇文章我们将用一些实例来讨论make命令背后的工作机制。有需要的朋友们可以看看。
    2016-12-12
  • CentOS MySQL 5.7编译安装步骤详细说明

    CentOS MySQL 5.7编译安装步骤详细说明

    这篇文章主要介绍了CentOS MySQL 5.7编译安装详细介绍的相关资料,这里对安装步骤进行了详细介绍,需要的朋友可以参考下
    2016-12-12
  • SSH 登录工具常用命令

    SSH 登录工具常用命令

    既然申请了国外的主机,那么SSH登录工具肯定是必不可少的,这里罗列一些常用的SSH命令,以备查用。
    2009-02-02
  • Centos6 网络配置的实例详解

    Centos6 网络配置的实例详解

    这篇文章主要介绍了Centos6 网络配置的实例详解的相关资料,希望通过本文大家能够掌握配置网络的知识,需要的朋友可以参考下
    2017-09-09
  • 在linux下玩转带有超时时间的connect函数

    在linux下玩转带有超时时间的connect函数

    今天小编就为大家分享一篇关于在linux下玩转带有超时时间的connect函数,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 从Windows到Linux的三种文件传输实现方式

    从Windows到Linux的三种文件传输实现方式

    文章介绍了在跨平台工作环境中将文件从Windows系统传输到Linux服务器的几种方法,包括使用SCP命令、搭建Web服务和使用wget下载文件,每种方法都有其特点,如安全性、速度、易用性和适用场景等
    2024-12-12

最新评论