it-swarm.cn

在ls -l之后的第一行中,“total”是什么?

ls -l输出中的total是什么?

    $ ls -l /etc
    total 3344
    -rw-r--r--   1 root root   15276 Oct  5  2004 a2ps.cfg
    -rw-r--r--   1 root root    2562 Oct  5  2004 a2ps-site.cfg
    drwxr-xr-x   4 root root    4096 Feb  2  2007 acpi
    -rw-r--r--   1 root root      48 Feb  8  2008 adjtime
    drwxr-xr-x   4 root root    4096 Feb  2  2007 alchemist
112
Sanket Sahu

您可以在平台的ls文档中找到该行的定义。对于coreutilsls(在许多Linux系统上找到的那个),可以通过info coreutils ls找到信息:

对于列出的每个目录,在文件前面加上“total BLOCKS”行,其中BLOCKS是该目录中所有文件的总磁盘分配。

83
Mat

公式:什么是数字?

total int = (physical_blocks_in_use)* physical_block_size/ls_block_size)的总和 为每个文件。

其中:

  • ls_block_size 任意环境变量 (通常为512或1024字节),可以使用ls上的--block-size=<int>标志,POSIXLY_CORRECT=1 GNU环境变量(获得512字节单位)自由修改,或-k标志强制1kB单位。
  • physical_block_size是内部块接口的OS相关值,它可能连接也可能不连接到底层硬件。该值通常为512b或1k,但完全依赖于OS。它可以通过statfstat上的%B值显示。 请注意,此值(几乎总是)与现代存储设备上的物理块数无关。

为什么这么混乱?

此数字与任何物理或有意义的指标相当分离。许多初级程序员没有使用 文件漏洞hard/sym links 的经验。此外,关于此特定主题的文档几乎不存在。

术语“块大小”的脱节和含糊不清是许多不同措施容易混淆的结果,而相对较深的抽象层次围绕着磁盘访问。

冲突信息的示例:du(或ls -s)vs stat

在项目文件夹中运行du *会产生以下结果:(注意:ls -s返回相同的结果。} _

dactyl:~/p% du *
2       check.cc
2       check.h
1       DONE
3       Makefile
3       memory.cc
5       memory.h
26      p2
4       p2.cc
2       stack.cc
14      stack.h

总计 :2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62块

然而,当一个人运行stat时,我们会看到一组不同的值。在同一目录中运行stat会产生:

dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3       (512)   check.cc: 221 bytes
3       (512)   check.h: 221 bytes
1       (512)   DONE: 0 bytes
5       (512)   Makefile: 980 bytes
6       (512)   memory.cc: 2069 bytes
10      (512)   memory.h: 4219 bytes
51      (512)   p2: 24884 bytes
8       (512)   p2.cc: 2586 bytes
3       (512)   stack.cc: 334 bytes
28      (512)   stack.h: 13028 bytes

总计: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118块

注意: 您可以使用命令stat * --printf="%b\t(%B)\t%n: %s bytes\n">输出(按顺序)块数,(以parens为单位)这些块的大小,文件名和大小(以字节为单位),如图所示以上。

有两件重要的事情需要注意:

  • stat报告上面公式中使用的physical_blocks_in_usephysical_block_size。请注意,这些是基于OS接口的值。
  • du提供了通常被接受为物理磁盘利用率的相当准确估计的东西。

作为参考,这里是上面目录的ls -l

dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.cc
-rw-r--r--. 1 dhs217 grad   221 Oct 16  2013 check.h
-rw-r--r--. 1 dhs217 grad     0 Oct 16  2013 DONE
-rw-r--r--. 1 dhs217 grad   980 Oct 16  2013 Makefile
-rw-r--r--. 1 dhs217 grad  2069 Oct 16  2013 memory.cc
-rw-r--r--. 1 dhs217 grad  4219 Oct 16  2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18  2013 p2
-rw-r--r--. 1 dhs217 grad  2586 Oct 16  2013 p2.cc
-rw-r--r--. 1 dhs217 grad   334 Oct 16  2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16  2013 stack.h
39
Don Scott

这是列出的文件使用的文件系统块的总数,包括间接块。如果您对相同的文件运行ls -s并将报告的数字相加,您将获得相同的数字。

26
Dave Lasley

仅举几例 - 您可以使用-h(ls -lh)以人类可读的格式转换它。

18
Tsvetomir Dimitrov