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

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

Entendo que os tamanhos ls -linformados paradiretóriosreflete o espaço ocupado pelos "metadados" desses diretórios. Além disso, imagino que esses metadados existam em formato binário/não legível por humanos.

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

EDIT: se a resposta à pergunta acima for altamente dependente do sistema de arquivos, quais 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údo do diretório", etc. encontro apenas informações sobre como listar os arquivos em um diretório, o que não é exatamente o que estou procurando.

Responder1

lsexibe essas informações porque os dados são armazenados no sizecampo do inode do diretório. Isso depende 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 de seu interesse, a leitura dos dados é simples. lse statsão ferramentas para exibir as informações do inode de diferentes maneiras. Você pode examiná-los para ver como extrair os dados e exibi-los em formato legível. Dê uma olhadaestatística(2)para a chamada do sistema consultar as informações.

Se você quiser apenas reunir esse número diretamente, considerestat -c "%s"

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

Responder2

Sim, existe: chama-se ls

O tamanho relatado por lspara 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 tipos históricos de sistemas de arquivos). VerQuando os diretórios deixaram de ser legíveis como arquivos?edump octal do diretório

O tamanho relatado por lsé maior do que o necessário para armazenar os dados que você vê lspor vários motivos:

  • Pode haver metadados que lsnão são exibidos, como listas de bloqueios para o conteúdo do arquivo.
  • Pode haver preenchimento, por exemplo, bits não utilizados aqui e ali, alinhamento com limites de palavras de máquina, 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 uma estrutura de árvore de pesquisa.
  • Normalmente os arquivos são organizados em blocos e um arquivo usa um número inteiro de blocos, com o último bloco sendo apenas parcialmente preenchido, a menos que o tamanho do arquivo seja exatamente um múltiplo do tamanho do bloco.
  • Em alguns sistemas de arquivos, como ext4, os diretórios não devolvem blocos não utilizados depois de terem crescido muito (porque continham muitos arquivos) e depois diminuíram muito (porque muitos arquivos foram excluídos).

Se você quiser saber sobre coisas que lsnão serão mostradas, você precisa olhar diretamente o conteúdo do diretório. Execute odou 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, comodebugfspara ext2/ext3/ext4. As informações que você verá desta forma não se qualificam como “legíveis por humanos”, exceto para poucas pessoas que estão intimamente familiarizadas com o formato do sistema de arquivos.

informação relacionada