zoukankan      html  css  js  c++  java
  • 【Linux命令】ls -l显示的内容中total到底是什么?

    当我们使用 ls -l 命令时,会看到如下信息:

    [root@model ESSSClient]# ls -l
    total 36
    -rw-r--r--    1  root  root   1670   Jan 11 10:11  CMakeLists.txt
    drwxr-xr-x    2  root  root   46     Jan 11 10:11  config
    -rw-r--r--    1  root  root   17078  Jan 11 10:11  ESSSCliOper.cpp
    -rw-r--r--    1  root  root   3708   Jan 11 10:11  ESSSCliOper.h
    -rw-r--r--    1  root  root   5421   Jan 11 10:11  ESSSCliTest.cpp

    很多人对于第一行的 total 36 的数值并不是很在意,但是你是否想过,它究竟是什么意思?

    man中说明: total 表示 "所列出内容的磁盘占用空间总和值,单位为kbytes"。这句话是什么意思?

    我们知道 ls -l 列出的第5列数值是该文件或目录的大小。这里目录的大小并非目录所包含的文件的总大小,仅仅是目录自身的大小

    如果无法理解这一概念,请思考一下 "linux中一切皆文件" 的含义。

    那么,图中的 total 36k 应该等于1670+46+17078+3708+5421 的值。我们计算一下,1670+46+17078+3708+5421 = 27923,单位是bytes,换算成 kbytes 则是 27923/1024 = 27.2685546875。 

    显然 36 ≠ 27.2685546875。

    但为什么total却是所列出内容的磁盘占用空间总和值? 请注意其中的“占用”二字,何为占用?

    我们知道文件系统中是有block(块)的概念的,块就像一间间屋子,如果你的文件系统中存的都是一些较大的文件,那么使用较大的block会得到较好的性能,反之亦然。所以,数据在存放过程中占据的block的大小就是 “占用”的空间。

    那么27.2685546875k占用多少个block呢?

    首先查看系统中block的大小,我们用以下两种方法查看:

    [root@model home]# tune2fs -l /dev/sdb5 | grep "Block size"
    Block size:               4096
    [root@model home]# getconf PAGESIZE
    4096

    可以看出,系统中一个块(block)的大小是4k(4096bytes),并且一个块(block)只可以容纳一个文件。所以,上面每个不足4K的文件(目录不占用块内存)都要占用一个块(block),即2个块(block);另外,ESSSCliOper.cpp文件为 17078bytes/1024 =  16.677734375K,占5个块(block),虽然第5个block中只存了0.677734375K的数据,但是它依然要占用一个block空间;ESSSCliTest.cpp文件 5421bytes/1024 = 5.2939453125 K,占2个块(block)。因此,上面的文件共占用了9个块,即 9*4096 bytes = 36K。.

    最后我们还有一个很方便的查看和计算total的办法。就是使用 ls 命令的 -s 选项:

    -s   以块大小为单位列出所有文件的大小

  • 相关阅读:
    深入学习 History 对象管理浏览器会话历史
    js用斜率判断鼠标进入div的四个方向
    致敬各位10年阿里的前端开发
    JavaScript 时间与日期处理实战:你肯定被坑过
    圣杯/双飞翼布局
    ES6入门
    Javascript中类式继承和原型式继承的实现方法和区别
    五十行javascript代码实现简单的双向数据绑定
    JavaScript 巧学巧用
    VUE2.0学习总结
  • 原文地址:https://www.cnblogs.com/SchrodingerDoggy/p/14274197.html
Copyright © 2011-2022 走看看