É possível ter no total? de blocos tomados pelos mesmos arquivos ser diferente em dois computadores? [fechadas]

0

eu usei

ls -l mysoftware/

em duas máquinas diferentes, cada uma executando o Ubuntu 12.04.

Mas o 'total' retornado por este comando é diferente nas duas máquinas. Em uma máquina está imprimindo 6, e em outra máquina está imprimindo 24. Embora eu possa ver o mesmo número de arquivos listados.

Na verdade eu copiei a pasta compactada mysoftware.tar.bz2 do meu pendrive para essas máquinas e depois descompacte usando o seguinte comando:

sudo tar xvfj mysoftware.tar.bz2

Depois disso, usei ls -l como acima.

Desde que eu não pude instalar algum software na máquina onde estou obtendo 6, eu suspeito que alguns arquivos estão faltando.

A questão é que os dois 'total' podem ser diferentes em máquinas diferentes?

    
por gpuguy 14.03.2014 / 12:53

1 resposta

2

O "total" na parte superior de uma listagem ls -l é a soma dos blocos usados por todos os itens nessa listagem. Você pode obter a contagem de blocos para cada item individual adicionando o sinalizador -s .

Coisas a serem notadas sobre as contagens de blocos e "total":

  1. ls não relata as contagens de bloco usando o tamanho do bloco do sistema de arquivos (que normalmente é 4096 bytes), mas em unidades de 1024 ou 512 bytes, dependendo da versão (e sinalizadores e às vezes variáveis de ambiente). É por isso que, na maioria dos sistemas modernos, as contagens de bloco relatadas por ls são sempre um múltiplo de 4.

  2. O tamanho de um diretório não é uma soma recursiva dos tamanhos das coisas contidas nele.

     mkdir a
     mkdir a/b
     head -9999999999c /dev/urandom > a/b/foo
    

    O que ls -l a exibirá? Ele mostrará b , que é um diretório. E qual é o tamanho de b ? Muito pequeno, provavelmente 4 blocos (1 bloco de sistema de arquivos real) Um diretório não é um tarball; não fisicamente contém os arquivos sob ele. É apenas uma lista de nomes de arquivos e números de inodes. Portanto, a listagem de a inclui apenas b , que é pequena, e o "total" dessa listagem também é pequeno. ls -l a/b mostrará foo , que é grande, e o "total" será grande.

  3. Como o total é a soma dos itens exibidos, as opções ls que alteram o que é exibido também alteram o total.

    mv a/b/foo a/b/.foo
    ls -l a/b
    

    Como .foo começa com um ponto, ele não é mais incluído na lista de diretórios. Então o "total" agora é 0, para um diretório com um arquivo enorme nele! Adicione o -a flag e .foo aparece eo "total" se torna grande novamente. Na verdade, o "total" é maior que a contagem de blocos para .foo , porque também inclui as contagens de blocos para . ( a/b ) e .. ( a ). O -A flag é melhor (omitem . e .. , mas incluem todos os outros dotfiles).

  4. Contagens de bloco não são completamente previsíveis em tamanhos de arquivo porque sistemas de arquivos diferentes têm tamanhos de bloco diferentes (assim, um arquivo contendo 1 byte será relatado como ocupando 1 bloco em um sistema de arquivos com blocos de 1024 bytes e 4 blocos em um sistema de arquivos com blocos de 4096 bytes), e também porque a contagem inclui sobrecarga do sistema de arquivos ( blocos indiretos que são onde ele armazena a lista principal de blocos), e porque há arquivos esparsos - um grande pedaço de zeros em um arquivo pode ser (mas não sempre ser) armazenado de uma maneira eficiente que não ocupe nenhum bloco adicional.

por 14.03.2014 / 13:37

Tags