Como exibir o conteúdo que dá origem aos tamanhos que 'ls -l' reporta para diretórios?

1

Eu entendo que os tamanhos que ls -l reporta para diretórios refletem o espaço ocupado pelos "metadados" para esses diretórios. Além disso, imagino que esses metadados existam em forma binária / não legível por humanos.

Existe um comando Unix para exibir esses metadados em formato legível?

EDIT: se a resposta à pergunta acima é altamente dependente do sistema de arquivos, que palavras-chave devo usar para procurar a resposta para um sistema de arquivos específico? (Estou interessado na resposta para muitos tipos de sistemas de arquivos, incluindo nfs, ext3, ext4, vfat, gpfs, tmpfs e lustre). Quando procuro, por exemplo, "como exibir dados / informações / conteúdos do diretório", etc., só encontro informações sobre como listar os arquivos em um diretório, o que não é exatamente o que estou procurando.

    
por kjo 23.06.2016 / 00:52

2 respostas

2

ls exibe essas informações porque os dados são armazenados no campo size do inode do diretório. Isso é dependente do sistema de arquivos. Um determinado sistema de arquivos poderia conter outras informações. Por exemplo, o ZFS informa o número de entradas de diretório nesse campo.

Se esse é o nível em que você está interessado, a leitura dos dados é simples. ls e stat são ferramentas para exibir as informações do inode de maneiras diferentes. Você pode examiná-los para ver como puxar os dados e exibi-los em formato legível. Dê uma olhada no stat (2) para a chamada do sistema para consultar as informações.

Se você quiser apenas coletar esse número diretamente, considere stat -c "%s"

% ls -ld /
drwxr-xr-x 44 root root 4096 Jun 10 17:11 /
% stat -c "%s" /
4096
    
por 23.06.2016 / 01:58
1

Sim, existe: chama-se ls

O tamanho relatado por ls para um diretório é o tamanho do conteúdo do diretório. Não são metadados do diretório, são metadados dos arquivos no diretório. A maior parte disso está listada com ls -la .

Em algumas variantes do Unix, você pode exibir a forma binária desses dados chamando cat (ou od , etc.) no diretório. Este não é o caso no Linux, e em sistemas onde é possível, a interpretação desses dados pode depender do tipo de sistema de arquivos ou pode ser normalizada (para ser compatível com os tipos de sistema de arquivos históricos). Consulte Quando os diretórios deixaram de ser legíveis como arquivos? e octal dump do diretório

O tamanho informado por ls é maior do que o necessário para armazenar os dados que você vê com ls por diversos motivos:

  • Pode haver metadados que ls não exiba, como listas de bloqueio para o conteúdo do arquivo.
  • Pode haver preenchimento, por ex. bits não utilizados aqui e ali, alinhamento a limites de palavras de máquinas, nomes de arquivos armazenados em campos de tamanho fixo, etc.
  • Existem metadados para organizar a lista de nomes de arquivos, por exemplo uma árvore B ou estrutura de árvore de pesquisa.
  • Normalmente, os arquivos são organizados em blocos e um arquivo usa um número inteiro de blocos, sendo o último bloco preenchido apenas parcialmente, a menos que o tamanho do arquivo seja exatamente um múltiplo do tamanho do bloco.
  • Em alguns sistemas de arquivos, como o ext4, os diretórios não devolvem blocos não utilizados depois de terem crescido muito (porque continham muitos arquivos) e então diminuíram muito (porque muitos arquivos foram excluídos). / li>

Se você quiser saber sobre as coisas que ls não irá mostrar, você precisa olhar diretamente para o conteúdo do diretório. Execute od ou similar no diretório, se sua variante Unix permitir, ou use uma ferramenta de baixo nível, como um visualizador hexadecimal na partição ou um depurador de sistema de arquivos, como debugfs para ext2 / ext3 / ext4. As informações que você verá desta maneira não se qualificam como “legíveis por humanos”, exceto para as poucas pessoas que estão intimamente familiarizadas com o formato do sistema de arquivos.

    
por 23.06.2016 / 01:47