免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 14256 | 回复: 46
打印 上一主题 下一主题

关于ls -l的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-12 11:18 |只看该作者 |倒序浏览
2可用积分
关于ls -l的问题,请教各位。
附件是图片。

请问:
1)total后面的数字到底怎么计算?据说是块(512k),但是怎么算才能对上数呢?
2)目录的链接数怎么算?我查资料说是代表子目录个数(包括.和..),但又有人否认这个说法。哪位或哪里能有最终说明?

谢谢指教!

[ 本帖最后由 wkathy 于 2007-3-12 11:22 编辑 ]

未命名.JPG (27.92 KB, 下载次数: 76)

未命名.JPG

最佳答案

查看完整内容

对于一个文件,我们要存的不仅仅是里面的内容了。还有其实一些信息,如访问时间,修改时间,创建时间,权限,uid,gid,这都要存到硬盘里面去。还有这里和存储的原理有关,如,文件不是要存的时候就分配空间!可以先分配,要不这个文件就会分布很散!!读取就会很没效率,所以一个文件在linux里,一有了数据写入就分配好连续的8个block给它,超过了8block的话,就再加8个block,以此类推。但是话又说回来,这个连续的大小,就不能太多 ...

论坛徽章:
0
2 [报告]
发表于 2007-03-12 11:18 |只看该作者
原帖由 楼主mm 于 2007-3-14 09:00 发表于 37楼  


那我不明白的是:b目录(空目录)文件本身是4096大小,为什么会占4块,应该占8块啊?
                     a文件大小才48,为什么也占4块,应该占1块?


对于一个文件,我们要存的不仅仅是里面的内容了。还有其实一些信息,如访问时间,修改时间,创建时间,权限,uid,gid,这都要存到硬盘里面去。还有这里和存储的原理有关,如,文件不是要存的时候就分配空间!可以先分配,要不这个文件就会分布很散!!读取就会很没效率,所以一个文件在linux里,一有了数据写入就分配好连续的8个block给它,超过了8block的话,就再加8个block,以此类推。但是话又说回来,这个连续的大小,就不能太多,多就浪费,小就没有质的提高。呵
不知道现在楼主搞明白了吗?

看eg:

  1. [root@tcserver disk2]# ll
  2. total 0
  3. [root@tcserver disk2]# touch a
  4. [root@tcserver disk2]# mkdir b
  5. [root@tcserver disk2]# ls -sl
  6. total 4
  7. 0 -rw-r--r--  1 root root    0 Nov 13 09:01 a
  8. 4 drwxr-xr-x  2 root root 4096 Nov 13 09:01 b
  9. [root@tcserver disk2]#
  10. [root@tcserver disk2]#
复制代码

证明一:空目录b,用ls -sl显示blocks是4。其实实质是8! 这是因为ls -s是以1024为单位!4096/1024=4! 4096/512=8!

  1. [root@tcserver disk2]# stat b
  2.   File: `b'
  3.   Size: 4096            Blocks: 8          IO Block: 4096   directory
  4. Device: 811h/2065d      Inode: 49153       Links: 2
  5. Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
  6. Access: 2006-11-13 09:01:54.000000000 +0800
  7. Modify: 2006-11-13 09:01:54.000000000 +0800
  8. Change: 2006-11-13 09:01:54.000000000 +0800
  9. [root@tcserver disk2]#
复制代码

现在来看看文件。一写入数据,系统就开始分配了连续的8个blocks!!

  1. [root@tcserver disk2]# echo "hello boy" >a
  2. [root@tcserver disk2]# ll -s
  3. total 8
  4. 4 -rw-r--r--  1 root root   10 Nov 13 09:05 a
  5. 4 drwxr-xr-x  2 root root 4096 Nov 13 09:01 b
  6. [root@tcserver disk2]# stat a
  7.   File: `a'
  8.   Size: 10              Blocks: 8          IO Block: 4096   regular file
  9. Device: 811h/2065d      Inode: 11          Links: 1
  10. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  11. Access: 2006-11-13 09:01:52.000000000 +0800
  12. Modify: 2006-11-13 09:05:28.000000000 +0800
  13. Change: 2006-11-13 09:05:28.000000000 +0800
  14. [root@tcserver disk2]#
复制代码

8个blocks大小是8*0.5k=4K,按照我们的意思,如果文件变为5k-8k之间,它的blocks显示都是16!!,现在试试看是不是这样。

  1. [root@tcserver disk2]# ll /root/
  2. total 300
  3. -rw-r--r--   1 root  root    1268 Sep 14 14:28 anaconda-ks.cfg
  4. ...................此处略

复制代码


  1. 呵。我们系统默认刚好有一个差不多一k大的。我们只要>> 5次左右;
  2. [root@tcserver disk2]# cat /root/anaconda-ks.cfg >> a
  3. [root@tcserver disk2]# cat /root/anaconda-ks.cfg >> a
  4. [root@tcserver disk2]# cat /root/anaconda-ks.cfg >> a
  5. [root@tcserver disk2]# cat /root/anaconda-ks.cfg >> a
  6. [root@tcserver disk2]# cat /root/anaconda-ks.cfg >> a
  7. [root@tcserver disk2]# ll -sl
  8. total 12
  9. 8 -rw-r--r--  1 root root 6395 Nov 13 09:10 a
  10. 4 drwxr-xr-x  2 root root 4096 Nov 13 09:01 b
  11. [root@tcserver disk2]#

复制代码


看到没有;blocks变成了8,也就是实际的16!(用stat看就知道);而我们的文件只是变成了6K左右!

  1. [root@tcserver disk2]# stat a
  2.   File: `a'
  3.   Size: 6395            Blocks: 16         IO Block: 4096   regular file
  4. Device: 811h/2065d      Inode: 11          Links: 1
  5. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
  6. Access: 2006-11-13 09:01:52.000000000 +0800
  7. Modify: 2006-11-13 09:10:28.000000000 +0800
  8. Change: 2006-11-13 09:10:28.000000000 +0800
  9. [root@tcserver disk2]#
复制代码

[ 本帖最后由 ipv6ok 于 2007-3-14 09:27 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-03-12 11:44 |只看该作者
total 后面的数字是  ls -ls  后的第一列 之和。

论坛徽章:
0
4 [报告]
发表于 2007-03-12 13:50 |只看该作者
原帖由 hiei1321 于 2007-3-12 11:44 发表于 2楼  
total 后面的数字是  ls -ls  后的第一列 之和。


不是啊,和不是20啊?

论坛徽章:
0
5 [报告]
发表于 2007-03-12 15:02 |只看该作者
原帖由 wkathy 于 2007-3-12 13:50 发表于 3楼  


不是啊,和不是20啊?

1.怎么不是呢?!
你先ls -ls一下,比如:
  1. # ls -ls
  2. total 4
  3.    2 drwxr-xr-x   3 root     bin          512 Sep 21 11:14 SUNWits
  4.    2 drwxr-xr-x   5 root     sys          512 Sep 21 11:22 SUNWrtvc
复制代码

看见第一列显示的两个2没有?加起来,就是total后面的4;
用man看一下ls,对于-s的说明是这样的:
  1. -s    Gives size in blocks, including indirect  blocks,  for each entry.
复制代码

也就是表示所占的block(块)的数目。

2.对于第二个问题,以楼主给出的为例:
  1. lrwxrwxrwx  2 root     root    9  Mar  12  09:11 g -> ../wctest
复制代码

这是一个符号连接,连接数9就表示“->”后面../wctest的字符数,共有9个字符。不知道楼主想问的是不是这个。

说得不对的地方还望大家指正!

[ 本帖最后由 Jync 于 2007-3-12 15:04 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2007-03-12 15:19 |只看该作者

回复 #4 Jync 的帖子

谢谢jync,第一个是你说的那样,是我算错了。那一个文件所占块数到底怎么算呢?a文件大小48byte,b目录是4096byte,为什么所占块数都是4个呢?为什么链接文件c和g不占块数呢,它们不也是保存在磁盘上的吗?

第二个链接数是长格式第2列的数字,附件里每个文件都是2,是关于硬链接的。我想知道关于目录的链接数是不是等于.+..+子目录个数,包括隐藏目录吗?

论坛徽章:
0
7 [报告]
发表于 2007-03-12 15:21 |只看该作者
thank hiei1321 !

论坛徽章:
0
8 [报告]
发表于 2007-03-12 15:29 |只看该作者
原帖由 wkathy 于 2007-3-12 15:19 发表于 5楼  
谢谢jync,第一个是你说的那样,是我算错了。那一个文件所占块数到底怎么算呢?a文件大小48byte,b目录是4096byte,为什么所占块数都是4个呢?为什么链接文件c和g不占块数呢,它们不也是保存在磁盘上的吗?

...

回wkathy兄,对于第一个所占块数为什么是4,和c,g不占块数的问题,请恕我水平有限,无法向你解释,因为我也是菜鸟,呵呵,等等其他高手来给个答案吧
链接数第二列的数字就是该目录下子目录的总和了,包括隐藏目录(文件)!

[ 本帖最后由 Jync 于 2007-3-12 16:29 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2007-03-12 16:04 |只看该作者
total 20指的是存放的block数了,这个block指的是文件夹占用的block(就是存放如文件分配表之类信息了),文件占用的block。楼上说的极是。
注意的是。虽然每一个block,默认是512byte但是不一定就是会存放512byte噢。如:有二个2byte的文件存进来,用的是二个block!!当有第三个510byte来的时候,用的是三个block!!
目录连接数:每个文件夹为2,文件为1.
注意:如file1下面有二个文件夹file2 file3,三个文件a b c
那么在file1的父目录看。file1的目录数为2+2=4  ;在file1目录里面看就是2+2+1+1+1

论坛徽章:
0
10 [报告]
发表于 2007-03-12 16:12 |只看该作者
ln -s ,信息是存在源文件!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP