【问题标题】:How to get the link count of a directory that has multiple directories inside of it?如何获取其中包含多个目录的目录的链接计数?
【发布时间】:2015-09-14 01:30:32
【问题描述】:

我在想这将是目录中链接计数的总和?

【问题讨论】:

  • 不,只是子目录数+2。
  • 每个目录都有一个指向其父目录的.. 链接。没有指向祖父母的链接,因此更往下的目录不会增加顶层目录的链接数。
  • 如果要得到总数,需要写一个循环和递归的函数。
  • 不,这只会显示目录的链接数。这仅计算直接子目录,而不是所有后代。
  • 这对您有帮助吗? 找到./ -type d | wc -l

标签: linux ls


【解决方案1】:

链接计数与目录无关,它与 inode 有关。链接计数本质上是一个引用计数。

  • inode 是文件系统中的基本对象
  • 目录条目链接到inodes
  • 目录也有一个inode,就像一个普通文件一样
  • 每个链接计数:链接到 inode 的目录条目将计数加 1,因此 两个 目录条目引用的 inode 的链接计数为 2。
  • 到父目录的链接也是这个目录的链接(这是防止孤儿目录的保护措施)
  • 当一个 inode 的链接计数变为零时,它将被取消引用,并且该 inode(以及相关的磁盘块或其他任何内容)也可以被丢弃
  • [“打开”文件无形中也有类似的机制]
  • 符号链接不计算在内:添加/删除文件的符号链接时,其链接计数不会受到影响。 (因此:您可以符号链接到不存在的文件)

【讨论】:

    【解决方案2】:

    您可以使用树实用程序来查看目录的数量。

    【讨论】:

      【解决方案3】:

      Linux find 实用程序有一个选项 -type d 来过滤某些类型(目录、文件、符号链接、套接字或其他),因此它应该与 wc -l 计算 STDOUT 行数:

      find ./ -type d | wc -l
      

      如果您需要限制嵌套目录的数量,请使用 -maxdepth 参数:

      find ./ -type d -maxdepth 2 | wc -l
      

      【讨论】:

        【解决方案4】:

        你只是想总结所有子目录的链接数吗?

        请问具体目的是什么?

        你可以做类似Unix find average file size的事情:

        find ./ -type d -ls | awk '{sum += $4;} END {print sum;}'
        

        您甚至可以找到平均链接数:

        find ./ -type d -ls | awk '{sum += $4; n++;} END {print sum/n;}'
        

        【讨论】:

          猜你喜欢
          • 2012-12-24
          • 1970-01-01
          • 2012-07-18
          • 2017-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-13
          • 1970-01-01
          相关资源
          最近更新 更多