在工作和日常的编程中时常需要确定文件的大小,一些基本的查看方式在此做一个总结。

一. linux shell环境下

df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。
    du可以查看文件及文件夹的大小。

两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。

下面分别简要介绍

df命令可以显示目前所有文件系统的可用空间及使用情形

-bash-4.1$ df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/vg_sporsay-lv_root

50G  8.9G   38G  20% /

tmpfs                 127G  216K  127G   1% /dev/shm

/dev/sda2             477M   42M  410M  10% /boot

/dev/sda1             200M  264K  200M   1% /boot/efi

/dev/mapper/vg_sporsay-lv_home

4.7T  1.7T  2.8T  38% /home9306144  38% /home

上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。

接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。

 du:查询文件或文件夹的磁盘使用空间

~/net$ du -h --max-depth=1

60K     ./socket

20K     ./pyofwebserver

88K     ./test

29M     .

查看linux文件目录的大小和文件夹包含的文件数

统计总数大小

du -sh xmldb/

du -sm * | sort -n //统计当前目录大小 并安大小 排序

du -sk * | sort -n

du -sk * | grep guojf //看一个人的大小

du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字

查看此文件夹有多少文件 /*/*/* 有多少文件

du xmldb/

du xmldb/*/*/* |wc -l

40752

解释:

wc [-lmw]

参数说明:

-l :多少行

-m:多少字符

-w:多少字

二.编程统计文件字符数

诚然,在统计文件字符数的时候可以通过读取文件过程中文件指针移动情况得出文件字符数,但是对于大文件这种方法就显得十分耗费时间及CPU资源,例如:

unsigned long get_file_size(const char *path)

{

unsigned long filesize = -1;

FILE *fp;

fp = fopen(path, "r");

if(fp == NULL)

return filesize;

fseek(fp, 0L, SEEK_END);

filesize = ftell(fp);

fclose(fp);

return filesize;

}

还有一个较为快捷的办法是通过文件的属性描述得到文件的大小以及一切其他的信息,使用方法如下:

#include <sys/stat.h>

unsigned long get_file_size(const char *path)

{

unsigned long filesize = -1;

struct stat statbuff;

if(stat(path, &statbuff) < 0){

return filesize;

}else{

filesize = statbuff.st_size;

}

return filesize;

}

结构体定义如下:

  1. struct stat
  2. {
  3. dev_t       st_dev;     /* ID of device containing file -文件所在设备的ID*/
  4. ino_t       st_ino;     /* inode number -inode节点号*/
  5. mode_t      st_mode;    /* 文件的类型和存取的权限*/
  6. nlink_t     st_nlink;   /* number of hard links -链向此文件的连接数(硬连接)*/
  7. uid_t       st_uid;     /* user ID of owner -user id*/
  8. gid_t       st_gid;     /* group ID of owner - group id*/
  9. dev_t       st_rdev;    /* device ID (if special file) -设备号,针对设备文件*/
  10. off_t       st_size;    /* total size, in bytes -文件大小,字节为单位*/
  11. blksize_t   st_blksize; /* blocksize for filesystem I/O -系统块的大小*/
  12. blkcnt_t    st_blocks;  /* number of blocks allocated -文件所占块数*/
  13. time_t      st_atime;   /* time of last access -最近存取时间*/
  14. time_t      st_mtime;   /* time of last modification -最近修改时间*/
  15. time_t      st_ctime;   /* time of last status change - */
  16. };
  17. 其中, st_mode这个变量用来判断文件类型。
  18. st_mode是用特征位来表示文件类型的,特征位的定义如下:
  1. S_IFMT      0170000     文件类型的位遮罩
  2. S_IFSOCK    0140000     socket
  3. S_IFLNK     0120000     符号链接(symbolic link)
  4. S_IFREG     0100000     一般文件
  5. S_IFBLK     0060000     区块装置(block device)
  6. S_IFDIR     0040000     目录
  7. S_IFCHR     0020000     字符装置(character device)
  8. S_IFIFO     0010000     先进先出(fifo)
  9. S_ISUID     0004000     文件的(set user-id on execution)位
  10. S_ISGID     0002000     文件的(set group-id on execution)位
  11. S_ISVTX     0001000     文件的sticky位
  12. S_IRWXU     00700       文件所有者的遮罩值(即所有权限值)
  13. S_IRUSR     00400       文件所有者具可读取权限
  14. S_IWUSR     00200       文件所有者具可写入权限
  15. S_IXUSR     00100       文件所有者具可执行权限
  16. S_IRWXG     00070       用户组的遮罩值(即所有权限值)
  17. S_IRGRP     00040       用户组具可读取权限
  18. S_IWGRP     00020       用户组具可写入权限
  19. S_IXGRP     00010       用户组具可执行权限
  20. S_IRWXO     00007       其他用户的遮罩值(即所有权限值)
  21. S_IROTH     00004       其他用户具可读取权限
  22. S_IWOTH     00002       其他用户具可写入权限
  23. S_IXOTH     00001       其他用户具可执行权限
  24. 摘自《Linux C 函数库参考手册》

判断文件类型时,用对文件的st_mode的值与上面给出的值相与,再比较。比如:

  1. #include <sys/stat.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. int main()
  5. {
  6. int abc;
  7. struct stat buf;
  8. stat("/home", &buf);
  9. abc = buf.st_mode & S_IFDIR;//与对应的标志位相与
  10. if(abc == S_IFDIR)          //结果与标志位比较
  11. printf("It's a directory.\n");
  12. return 0;
  13. }

Linux文件大小 指令&编程的更多相关文章

  1. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  2. 【linux草鞋应用编程系列】_6_ 重定向和VT100编程

    一.文件重定向     我们知道在linux shell 编程的时候,可以使用文件重定向功能,如下所示: [root@localhost pipe]# echo "hello world&q ...

  3. 【linux草鞋应用编程系列】_1_ 开篇_系统调用IO接口与标准IO接口

    最近学习linux系统下的应用编程,参考书籍是那本称为神书的<Unix环境高级编程>,个人感觉神书不是写给草鞋看的,而是 写给大神看的,如果没有一定的基础那么看这本书可能会感到有些头重脚轻 ...

  4. 《Linux/Unix系统编程手册》读书笔记3

    <Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...

  5. Linux相关指令

    Linux相关指令 1.find文件搜索功能 find [目录列表] [匹配参数] [匹配标准] -name :按文件名称进行搜索 -group :按文件所属组进行搜索 -user :按文件拥有者进行 ...

  6. 《Linux/Unix系统编程手册》读书笔记2

    <Linux/Unix系统编程手册>读书笔记 目录 第5章: 主要介绍了文件I/O更深入的一些内容. 原子操作,将一个系统调用所要完成的所有动作作为一个不可中断的操作,一次性执行:这样可以 ...

  7. 【ZZ】Linux常用指令

    linux常用指令 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000011068772 查看目录下有什么文件信息 ls //lis ...

  8. Linux C语言编程基本原理与实践

    Linux C语言编程基本原理与实践(2018-06-16 19:12:15) Linux C语言编程基本原理与实践 高效的学习带着目的性: 是什么 -> 干什么 -> 怎么用 重识C语言 ...

  9. linux pwd指令的C实现

    linux pwd指令的C实现 pwd指令的功能介绍 linux pwd命令用于显示工作目录 执行pwd命令可立刻得知当前所在工作目录的绝对路径名称. 示例: 查询系统手册 如图所示,getcwd的描 ...

随机推荐

  1. undefined null测试

    测试浏览器:chrome 当有父元素的子元素未定义时undefined和null均为true,类型为undefined 当元素赋给null后undefined和null均为true,类型为object ...

  2. tar的具体参数和用法!

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  3. Android如何正确引用其它jar包 (转)

    转:http://blog.csdn.net/liranke/article/details/17226083 Android项目常常需要引用自定义的或者外部的jar包,这里提供一些经验,供参考. 一 ...

  4. tomcat7以下线程控制

    web server允许的最大线程连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右. 1.编辑tomcat安装目录下的conf目录下的server. ...

  5. svn提交代码失败提示清理(清理失败并且报错信息乱码解决办法)

    原因是;svn的数据库队列原因 1,下载sqlite3.exe,  sqlite官网http://www.sqlite.org/download.html) 2.在Windows的D盘中新建tools ...

  6. upc组队赛5 Ground Defense【枚举】

    Ground Defense 题目描述 You are a denizen of Linetopia, whose n major cities happen to be equally spaced ...

  7. python学习笔记:itsdangerous模块

    使用itsdangerous生成临时身份令牌 安装 pip install itsdangerous 使用 import itsdangerous salt='sdaf'#加盐 t=itsdanger ...

  8. 推荐Windows下SVN服务器端和客户端工具软件

    相信很多人使用过Windows下的SVN客户端软件TortoiseSVN或者也有过Linux下.MAC下的SVN命令行使用经验,另外MAC下还有以一款就做Vesions的SVN客户端软件,不过个人感觉 ...

  9. zookeeper的监听

    统一配置管理.统一命名服务.分布式锁.集群管理

  10. [轉]C/C++中的volatile使用時機?

    不知各位對volatile(揮發性的)這個字陌不陌生? 我相信大家在一些程式或多或少都看 過這個字眼, 但是究竟要在何種場合用它呢?.當然一定是有需要, C/C++才會有這個保留字, 否則只是增加pr ...