linux中,ls -l命令显示的total的含义。

当在linux里使用ll或者ls -l命令查看文件详情时,会在第一行看到如下的字样:

total 20
drwxr-xr-x 8 user rnd 134 Apr 27 04:40 ./
drwxr-xr-x 6 user rnd 59 Apr 27 07:56 ../
drwxr-xr-x 8 user rnd 4096 May 3 08:13 .git/
-rw-r--r-- 1 user rnd 1374 Apr 27 04:40 .gitignore
-rw-r--r-- 1 user rnd 2710 Apr 27 04:40 info
drwxr-xr-x 3 user rnd 18 Apr 27 04:40 platform/
-rw-r--r-- 1 user rnd 163 Apr 27 04:40 project
drwxr-xr-x 4 user rnd 30 Apr 27 04:40 testsupport/
drwxr-xr-x 7 user rnd 4096 Apr 27 04:40 utils/

那么total后的20是什么意思呢?

首先要了解一个数据块(Block)的概念,linux的数据存储是以block为单位的。块,可以理解为一个固定的容器,或者形象点,理解为我们日常生活中要乘坐的电梯,电梯的承重大小就是Block的大小。此时,我们把当前目录的文件(包含文件夹,注意linux下一切皆文件的概念) 想象成有序乘坐电梯,但是体重不同的人。

接下来,首先要查询当前电梯的承重能力,我们可以使用下面的命令查询:

$ getconf PAGESIZE

我的系统得到的数值是4096,也就是4K。
所以我们的电梯承重是4096,接下来,我们开始看total的20是怎么来的,也就是模拟乘客乘坐电梯的过程。
第一趟:

  1. 第一个名为 . 的乘客,体重是134b,他进去电梯后,电梯不超重,继续进人;
  2. 第二个名为 .. 的乘客,体重是59b,进去后,依旧不超重,继续进人;
  3. 第三个名为 .git 的乘客,体重是4096,进去后,电梯报警超重,所以他退出电梯。

因为规定了乘客的顺序不能改变,所以当3号退出电梯后,虽然电梯还有很多空余空间,但是也不允许让3号身后的人进电梯,所以第一趟电梯,只载了1和2两个人。
第二趟:

3号的体重是4096,刚好达到电梯城中上限,故,第二趟只栽了3号。

第三趟:

  1. 第四位乘客叫 .gitignore,他的体重是1374,进去电梯后,电梯仍有空余承重;
  2. 名为info的5号乘客,体重是2710,当他进去后,电梯也未报警,此时,电梯已承载1374+2710=4084。
  3. 第六位乘客名为plateform,体重为18b,当他进去后,电梯承载的重量达到4102,超载,故6号退出。

因此第三趟电梯载了4号和5号两个人。
第四趟:

同上方法,可以得到,第四趟载了6,7,8三个人。

第五趟:

同第二趟一样,刚好第五趟载了一个人就满载了。

综上,电梯一共运输5趟,我们已经知道电梯每趟的承重能力大小是4K,故5趟的总承重能力是4K*5=20K。我们可以把载重能力看成一种资源,而total的意思是:列表中所有文件的磁盘空间占用总和,也就是资源占用总和,它的统计单位是kb。
因而,这也就是total后的20(Kb)的来历。

  • 24
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
我们可以仿写Linux下的ls-l命令,通过该命令可以列出当前目录下的所有文件和文件夹,并且显示详细的信息,如文件/文件夹的权限、所有者、大小、创建时间等。 下面是一个简单的仿写ls-l命令的Python代码实现: ```python import os import time import pwd import grp def ls_l(path='.'): # 列出指定路径下的所有文件和文件夹 files = os.listdir(path) for file in files: # 获取文件/文件夹的详细信息 st = os.stat(os.path.join(path, file)) mode = st.st_mode nlink = st.st_nlink uid = st.st_uid gid = st.st_gid size = st.st_size mtime = time.localtime(st.st_mtime) # 将详细信息格式化输出 print('-' * 80) print('Name:', file) print('Type:', 'Directory' if os.path.isdir(os.path.join(path, file)) else 'File') print('Permission:', oct(mode)[-3:]) print('Link Count:', nlink) print('Owner:', pwd.getpwuid(uid)[0]) print('Group:', grp.getgrgid(gid)[0]) print('Size:', size) print('Last Modified:', time.strftime('%Y-%m-%d %H:%M:%S', mtime)) ``` 我们可以使用该函数来分析一些实验数据,比如在一个包含大量文件的目录下,我们可以通过仿写的ls-l命令列出所有文件的详细信息,并且统计文件的数量和大小,以及最近修改时间。 下面是一个例子: ```python import os def analyze_data(path='.'): # 列出指定路径下的所有文件和文件夹 files = os.listdir(path) # 初始化统计变量 file_count = 0 total_size = 0 latest_mtime = 0 for file in files: # 只统计文件,跳过文件夹 if os.path.isfile(os.path.join(path, file)): # 获取文件的详细信息 st = os.stat(os.path.join(path, file)) size = st.st_size mtime = st.st_mtime # 统计文件数量和总大小 file_count += 1 total_size += size # 更新最近修改时间 if mtime > latest_mtime: latest_mtime = mtime # 输出文件的详细信息 print('Name:', file) print('Size:', size) print('Last Modified:', mtime) print('-' * 80) # 输出统计信息 print('File Count:', file_count) print('Total Size:', total_size) print('Latest Modified Time:', latest_mtime) ``` 通过这个例子,我们可以分析一个包含大量文件的目录下的数据,统计文件数量、总大小和最近修改时间等信息,方便我们对数据进行管理和处理。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值