O número de links para uma pasta não reflete o status real?

6

Uma pergunta do n00b para o comando ls .

root@cqcloud script]# ls /var/www/html -la 
total 36 
drwxr-xr-x  9 root root 4096 Aug 31 01:12 .
drwxr-xr-x  7 root root 4096 Aug 31 01:10 ..
drwxr-xr-x  2 root root 4096 Aug 26 04:07 cmd
drwxr-xr-x  5 root root 4096 Jul  3 10:07 cn.fnmili.com
drwxr-xr-x  7 root root 4096 Aug 30 11:42 internal
drwxr-xr-x  3 root root 4096 Jul 25 02:03 node
drwxr-xr-x  4 root root 4096 Jul 11 01:26 sandbox
drwxr-xr-x 13 root root 4096 Aug 26 03:45 tpshop
drwxr-xr-x  2 root root 4096 Aug 31 01:12 trash

[root@cqcloud script]# ls /var/www/html/cmd -la 
total 16 
drwxr-xr-x 2 root root 4096 Aug 26 04:07 . 
drwxr-xr-x 9 root root 4096 Aug 31 01:12 .. 
-rw-r--r-- 1 root root 52 Aug 26 04:07 .htaccess 
-rw-r--r-- 1 root root 73 Aug 26 04:02 df.php

Você pode ver que a pasta cmd tem uma contagem de links de 2, mas na verdade tem 4 links, incluindo 2 arquivos, . e .. pasta. Alguém pode explicar por quê?

    
por Weijing Lin 30.08.2017 / 19:24

1 resposta

10

A contagem de links para um diretório é o número de nomes que o diretório possui (isto funciona exatamente como para arquivos regulares).

Seu diretório cmd tem dois nomes:

  1. cmd em seu diretório pai.
  2. . no próprio diretório.

O diretório /var/www/html tem nove nomes:

  1. html em seu diretório pai.
  2. . em si mesmo.
  3. .. em cada um dos seus (sete) subdiretórios.

Em circunstâncias normais, a contagem de links para a entrada . de um diretório deve ser 2 mais o número de subdiretórios contidos.

Isso também é verdade para o diretório raiz / , mesmo que não tenha um diretório pai e, portanto, deve ter uma contagem de links 1 mais número de subdiretórios.

O que tem é um diretório .. , que leva de volta a / . Então isso resolve esse enigma; é /.. que fornece o link "extra" para / . Este é o único diretório cujo diretório .. é um link de volta para . .

    
por 30.08.2017 / 19:46