
Percebi que ele ls -l
informa o tamanho físico de um diretório enquanto informa o tamanho lógico de um arquivo. Por exemplo, este é um exemplo de saída de ls -l
:
drwxr-xr-x 2 chris chris 36864 2017-04-23 18:14 dir1
-rw-r--r-- 1 chris chris 6 2017-04-23 18:10 file1.txt
dir1
o tamanho é 36.864 bytes, que é um múltiplo de 4.096 bytes (portanto, é provavelmente o tamanho físico).
Enquanto file1.txt
o tamanho é de 6 bytes (que é o tamanho lógico).
Responder1
Na verdade, ls
reporta tudo o que o kernel diz: não faz nada diferente em relação ao tamanho dependendo se o arquivo é um diretório). E o Linux informa o tamanho lógico. Mas o tamanho lógico de um diretório não é uma propriedade muito interessante: depende do formato do sistema de arquivos.
O tipo de sistema de arquivos padrão na maioria das distribuições Linux é ext4, e provavelmente é isso que você está usando. Ext4 aloca blocos inteiros para diretórios e gerencia o espaço dentro desses blocos conforme achar necessário. Ele nem mesmo libera blocos se um diretório diminuir ( dir1
continuaria tendo 9 blocos mesmo se você removesse todos os arquivos nele). Quando questionado sobre o tamanho de um arquivo que é um diretório, ext4 retorna o tamanho alocado para o diretório, e este é sempre um número inteiro de blocos.
Diferentes tipos de sistemas de arquivos se comportam de maneira diferente. Por exemplo, com o Btrfs, experimentalmente, o tamanho de um diretório pode ser qualquer múltiplo de 2.
Responder2
Essa é uma característica dos sistemas de arquivos ext2
// , eles informam o tamanho dos diretórios em blocos completos. Se você tentar o mesmo com o XFS, verá um tamanho mais refinado.ext3
ext4
Não importa, realmente. Para arquivos, o tamanho "lógico" é relevante, pois uma aplicação pode depender do conhecimento do tamanho de um arquivo até um byte: o lixo final pode ser relevante, ou alguma estrutura de dados pode ser colocada em uma posição relativa ao final do arquivo (por exemplo, arquivos .zip).
Para diretórios, o tamanho "lógico" não importa, já que a estrutura interna é bem conhecida e, no Linux, um programa de espaço de usuário não consegue nem ler diretamente o conteúdo de um diretório. Em vez disso, uma leitura precisa passar por chamadas de sistema feitas exatamente para esse propósito. E essas chamadas de sistema tratarão da estrutura interna do diretório.