O que significa tamanho de um diretório na saída do comando 'ls -l'?

65

O que significa tamanho de um diretório na saída do ls -lcomando?

Hemant
fonte
11
Mais informações sobre o tamanho do diretório nesta resposta .
Christian Long

Respostas:

45

Esse é o tamanho do espaço no disco usado para armazenar as metainformações do diretório (ou seja, a tabela de arquivos que pertencem a esse diretório). Se for 1024, significa 1024 bytes no disco (sempre aloca blocos completos) para esse fim.

txwikinger
fonte
3
e quando um diretório contém milhares de arquivos, o tamanho do diretório em si pode ser facilmente> 10KB
glenn jackman
11
@txwikinger Acho que os diretórios contêm listas de inodes, não nomes de arquivos reais.
Ярослав Рахматуллин
6
@ AрославРахматуллин Uma entrada de diretório consiste em um número de inode e um nome de arquivo.
200_success 01/10
2
Portanto, o "tamanho" de um diretório está relacionado apenas ao número de arquivos internos, não ao tamanho dos arquivos?
Lee
11
@ Lee: Sim, está certo.
gato
14

O "tamanho de um diretório" impresso com ls -l(como em qualquer tipo de arquivo) é o valor relatado pela stat()chamada statbuf.st_size.

O que isso st_sizesignifica para diretórios depende completamente do tipo de sistema de arquivos. Se você não sabe o tipo de sistema de arquivos e entender seus conceitos, você não pode deduzir qualquer coisa de valor em st_size.

  • No sistema de arquivos histórico UNIX atualmente normalmente chamado v7-fs, os diretórios foram repetidos com entradas de 16 bytes que continham um número de inode de 16 bits e 14 bytes de nome de arquivo. O "tamanho" de um diretório era significativo em relação à read(2)operação e sempre crescia ou permanecia como está. As entradas .e ..são criadas vinculando-as manualmente manualmente ao diretório atual e ao nível acima. A contagem de links para um diretório de donzela vazio e sadio é 2.

  • No sistema de arquivos BSD-4.2 que é chamado desde 1989 (SVr4) ufs, os diretórios são uma série de registros de comprimento variável que usam um formato que não é garantido como estável, portanto, os comandos de espaço do usuário não têm permissão para ler esse formato. O "tamanho" relatado é o tamanho em bytes, como na v7-fs, o tamanho geralmente aumenta ou permanece como está, mas as versões mais recentes do sistema de arquivos podem reduzir o tamanho sob algumas condições - mas nem sempre quando você espera isso. A contagem de links relatada para um diretório vazio é 2 como em v7-fs.

  • No WOFSsistema de arquivos que eu projetei e implementei entre o verão de 1988 e maio de 1991, os diretórios sempre relatam o "tamanho" 0 e nunca têm um tipo de conteúdo que possa ser lido usando a read(2)chamada. Isso ocorre porque WOFSé o primeiro sistema de arquivos Copy-on-Write e porque nos WOFSarquivos relatam o diretório em que estão, em vez de serem listados no diretório. Se você lê um WOFSdiretório usando readdir(), obtém apenas dados para as entradas pretendidas, mas nunca para .e ... A contagem de links de um diretório vazio WOFSé 1 e todo o comportamento é completamente compatível com POSIX.

  • Em ZFS, isso foi implementado após a leitura dos WOFSjornais. ZFSé um sistema de arquivos copy-on-write e seus autores não negam que copiaram conceitos WOFS. Diretórios em ZFS relatar o number of directory entriesem st_size, de modo que o "tamanho", relatou não tem significado real em relação ao espaço em disco ocupado a partir dos dados de diretório. Não existem entradas .e ..em um diretório ZFS, mas se você ligar readdir(), essas entradas serão falsificadas e retornadas para as duas primeiras operações. O ZFS é o único FS da lista que não oferece suporte a diretórios de link físico, mas a contagem de links relatada é sempre 2. Essas duas irregularidades no ZFS são implementadas para reduzir a confusão em programas históricos não POSIX.

  • Semelhante ao ZFS, o WAFL copia algumas, mas não todas, idéias WOFS. A Netapp WAFLfoi escrita três anos após a WOFSpublicação do documento, o WAFL é copiado na gravação, mas o WAFL parece relatar valores de "tamanho" que podem ser o "tamanho real do diretório", pressupondo que o diretório tenha conteúdo.

esperto
fonte
13

Um diretório reserva 4096 bytes (no mínimo) para metadados sobre si e seu conteúdo.

Além disso, 4096 bytes é a unidade de alocação padrão (bloco) para o sistema de arquivos ext2 / ext3 / ext4 e, portanto, um diretório não pode ser menor.

Em sistemas de arquivos diferentes, você pode encontrar diretórios com tamanhos padrão diferentes, devido ao tamanho do bloco padrão do sistema de arquivos.

Os tamanhos de diretório também podem crescer dinamicamente à medida que são preenchidos, mas, uma vez preenchido, o espaço reservado para os metadados não pode ser realocado sem a remoção do diretório.

h3rrmiller
fonte
11
A que metadados você está se referindo?
Stéphane Chazelas
11
os detalhes dependem do sistema de arquivos, mas geralmente incluem metadados como nome do arquivo, número do inode, tipo de arquivo (arquivo, dir, fifo, soquete, nó do dispositivo, link simbólico etc.), proprietário, grupo, permissões, atributos, ACLs e destinos de link simbólico.
cas
6
@CraigSanders, o diretório contém o nome do objeto e número inode correspondente única . O inode contém o tipo de objeto, proprietário / grupo, permissões, referência para onde as ACLs e atributos estendidos são mantidos, ... Qualquer outra coisa causará severa quebra da semântica do sistema de arquivos POSIX.
vonbrand
Meu UFS reserva apenas 512 bytes para seus próprios metadados por diretório.
FUZxxl 28/09/18
4

Um diretório é apenas um diretório, como uma lista telefônica. É apenas um arquivo com uma lista de números e um nome ao lado deles. Cada número faz referência a um arquivo no sistema de arquivos (um número de inode) e o nome é o nome do arquivo.

Você precisa de espaço em disco para salvar esses dados, como eles são alocados, aumentados e diminuídos depende do sistema de arquivos.

Stéphane Chazelas
fonte
você pode incluir os detalhes reais de quais metadados são mantidos e as considerações de alocação de bloco em relação ao aumento de tamanho. daria uma resposta mais exata com a alegoria já apresentada. :)
n611x007
3
@ naxa, isso depende do sistema de arquivos e até mesmo dentro de um sistema de arquivos (como ext4), que depende de quais opções você ativa, então prefiro deixá-lo como "depende do sistema de arquivos", em vez de tentar ser exaustivo, o que não seria muito relevante para esta questão.
Stéphane Chazelas