- Dave McKay
@TheGurkha
- 19 de dezembro de 2019, 8:00 EDT
Quando você usa o Linux du
comando, você obter o real de uso de disco e o verdadeiro tamanho de um arquivo ou diretório. Vamos explicar porque é que estes valores não são os mesmos.
Utilização real do disco e tamanho verdadeiro
o tamanho de um ficheiro e o espaço que ocupa no seu disco rígido raramente são os mesmos., O espaço em disco é alocado em blocos. Se um arquivo é menor que um bloco, um bloco inteiro ainda é alocado a ele porque o sistema de arquivos não tem uma unidade menor de imóveis para usar.
a menos que o tamanho de um arquivo seja um múltiplo exato de blocos, o espaço que ele usa no disco rígido deve ser sempre arredondado para o próximo bloco inteiro. Por exemplo, se um arquivo é maior que dois blocos, mas menor que três, ele ainda leva três blocos de espaço para armazená-lo.
duas medições são utilizadas em relação ao tamanho do ficheiro., O primeiro é o tamanho real do arquivo, que é o número de bytes do conteúdo que compõem o arquivo. O segundo é o tamanho efetivo do arquivo no disco rígido. Este é o número de blocos de Sistema de arquivos necessários para armazenar esse arquivo.
um exemplo
vamos olhar para um exemplo simples., Vamos redirecionar um único caractere em um arquivo para criar um pequeno arquivo:
echo "1" > geek.txt
Agora, vamos usar o formato longo listagem, ls
, a olhar para a duração do ficheiro:
ls -l geek.txt
o comprimento é O valor numérico que acompanha o dave dave
entradas, que é de dois bytes. Por que são dois bytes quando só enviamos um personagem para o arquivo? Vamos ver o que está a acontecer dentro do ficheiro.,
usaremos o comando hexdump
, que nos dará uma contagem exata de bytes e nos permitirá “ver” caracteres não-impressores como valores hexadecimais. Também vamos usar o -C
(canônico) opção para forçar a saída para mostrar valores hexadecimais no corpo da saída, bem como o seu carácter alfanumérico equivalentes:
hexdump -C geek.txt
A saída mostra-nos que, de início no deslocamento 00000000 no arquivo, há um byte que contém um valor hexadecimal de 31, e um que contém um valor hexadecimal de 0A., A parte direita da saída apresenta estes valores como caracteres alfanuméricos, sempre que possível.
o valor hexadecimal de 31 é usado para representar o algarismo um. O valor hexadecimal de 0A é usado para representar o caráter de linha de alimentação, que não pode ser mostrado como um caráter alfanumérico, por isso é mostrado como um período (.) Sim. O carácter da linha de alimentação é adicionado por echo
. Por padrão, echo
inicia uma nova linha depois de mostrar o texto que precisa escrever na janela do terminal.,
que corresponde à saída de ls
e concorda com o tamanho do arquivo de dois bytes.
RELACIONADOS: Como Usar o Comando ls para Listar Arquivos e Diretórios no Linux
Agora, vamos usar o du
comando para verificar o tamanho do arquivo:
du geek.txt
Ele diz que o tamanho é de quatro, mas quatro de quê?
existem blocos, e então há blocos
quando du
relata tamanhos de arquivos em blocos, o tamanho que usa depende de vários fatores., Você pode especificar qual o tamanho do bloco que ele deve usar na linha de comando. Se você não forçar du
a usar um tamanho de bloco particular, ele segue um conjunto de regras para decidir qual usar.
Primeiro, ele verifica as seguintes variáveis de ambiente:
- DU_BLOCK_SIZE
- BLOCK_SIZE
- tamanho de bloco
Se qualquer um destes existir, o tamanho do bloco é definido, e du
deixa de conferir. If none are set, du
defaults to a block size of 1,024 bytes., A menos que, isto é, uma variável de ambiente chamada POSIXLY_CORRECT
seja definida. Se for esse o caso, du
defaults to a block size of 512 bytes.
então, como é que descobrimos qual está em uso? Você pode verificar cada variável de ambiente para resolvê-lo, mas há uma maneira mais rápida. Vamos comparar os resultados com o tamanho do bloco que o sistema de arquivos USA em vez disso.
para descobrir o tamanho do bloco que o sistema de arquivos usa, usaremos o programa tune2fs
., Usaremos então a opção -l
(list superblock), canalize a saída através de grep
, e depois imprime as linhas que contêm a palavra “Block.”
neste exemplo, vamos olhar para o sistema de ficheiros na primeira partição do primeiro disco rígido, sda1
, e vamos precisar usar sudo
:
sudo tune2fs -l /dev/sda1 | grep Block
O sistema de arquivos tamanho de bloco é 4096 bytes. Se dividirmos isso pelo resultado que obtivemos de du
(quatro), ele mostra o du
tamanho padrão do bloco é 1,024 bytes., Sabemos agora várias coisas importantes.
primeiro, sabemos que a menor quantidade de Sistema de arquivos imóveis que pode ser dedicado a armazenar um arquivo é 4.096 bytes. Isso significa que até o nosso pequeno arquivo de dois bytes está ocupando 4 KB de espaço de disco rígido.
a segunda coisa A manter em mente é que os aplicativos dedicados para relatórios na unidade de disco rígido e sistema de arquivos, estatísticas, tais como du
ls
e tune2fs
, pode ter diferentes concepções de “bloquear” significa., Otune2fs
application reports true file system block sizes, whilels
anddu
pode ser configurado ou forçado a usar outros tamanhos de bloco. Esses tamanhos de bloco não são destinados a se relacionar com o tamanho de bloco do sistema de arquivos; eles são apenas “pedaços” que os comandos usam em sua saída.
finalmente, além de usar tamanhos de bloco diferentes, as respostas de du
e tune2fs
transmitem o mesmo significado., O resultadotune2fs
foi um bloco de 4.096 bytes, e o resultadodu
foi quatro blocos de 1.024 bytes.
usando du
sem parâmetros ou Opções da linha de comandos, du
lista o espaço total em disco que a pasta actual e todas as sub-pastas estão a usar.
Let’s take a look at an example:
du
o tamanho é indicado no tamanho padrão do bloco de 1,024 bytes por bloco. A árvore de subdiretório inteira é atravessada.,
Usando du em um Diretório Diferente
Se você quiser du
relatório em um diretório diferente do que o atual, você pode passar o caminho para o diretório na linha de comando:
du ~/.cach/evolution/
Usando du em um Arquivo Específico
Se você quiser du
relatório em um arquivo específico, passar o caminho para o arquivo na linha de comando., Você também pode passar um shell padrão para selecionar um grupo de arquivos, como *.txt
:
du ~/.bash_aliases
Relatórios em Arquivos em Diretórios
Para que du
relatório sobre os arquivos no diretório atual e subdiretórios, use o -a
(todos os arquivos) opção:
du -a
Para cada diretório, o tamanho de cada arquivo é relatado, bem como um total de cada diretório.,
limitação da profundidade da árvore de pastas
pode dizer a du
para listar a árvore de pastas a uma determinada profundidade. Para isso, use a opção -d
(profundidade máxima) e forneça um valor de profundidade como parâmetro. Note que todas as subdiretórios são escaneadas e usadas para calcular os totais relatados, mas não estão todas listadas. Para definir uma profundidade máxima de diretório de um nível, use este comando:
du -d 1
a saída lista o tamanho total dessa subdiretoria no diretório atual e também fornece um total para cada um.,
A lista de diretórios de um nível mais profundo, use este comando:
du -d 2
Definir o Tamanho do Bloco
Você pode usar o block
opção para definir um tamanho de bloco de du
para a operação atual.,d mais apropriado bloco de tamanho de acordo com o espaço em disco usado pelos arquivos e diretórios, use o -h
(legível) opção:
du -h
Para ver o tamanho aparente do arquivo, ao invés do que a quantidade de espaço no disco rígido usado para armazenar o arquivo, use o --apparent-size
opção:
du --apparent-size
Você pode combinar isso com o -a
(todos os) opção para ver o tamanho aparente de cada arquivo:
du --apparent-size -a
Cada arquivo está listado, juntamente com o seu tamanho aparente.,
mostrando apenas os totais
Se quiser du
para reportar apenas o total para a pasta, use a opção -s
(resumo)., Você também pode combinar isso com outras opções, tais como o -h
(legível) opção:
du -h -s
Aqui, nós vamos usar com a tag --apparent-size
opção:
du --apparent-size -s
a Exibição de horas de Modificação
Para ver a criação ou última modificação, data e hora, utilize o --time
opção:
du --time -d 2
Resultados Estranhos?,
Se você ver resultados estranhos a partir de du
, especialmente quando você cross-reference tamanhos para a saída de outros comandos, geralmente é devido aos diferentes tamanhos de bloco para que os diferentes comandos podem ser definidas ou aqueles para os quais eles predefinição. Também pode ser devido às diferenças entre os tamanhos de arquivos reais e o espaço em disco necessário para armazená-los.
Se precisar de corresponder ao resultado de outros comandos, experimente com o --block
opção em du
.,Dave McKay usou pela primeira vez computadores quando a fita de papel perfurado estava em voga, e ele tem estado programando desde então. Depois de mais de 30 anos na indústria de TI, ele é agora um jornalista de tecnologia em tempo integral. Durante sua carreira, ele trabalhou como programador freelance, gerente de uma equipe internacional de desenvolvimento de software, um gerente de projeto de serviços de TI, e, mais recentemente, como um oficial de proteção de dados. Dave é um evangelista Linux e defensor de código aberto.Read Full Bio ”