Como imprimir a porcentagem de uso de disco de 'df -hl'

6

Eu sei que df -hl exibe uma lista de todas as minhas partições com seu tamanho, uso como porcentagem e espaço disponível.

Se eu quisesse produzir apenas o tamanho e uso como uma porcentagem de sda2 e sda3 , por exemplo, como eu poderia dizer ao Linux (Ubuntu) para verificá-los, soma-los e mostrá-los para mim?

    
por user32398 14.02.2013 / 21:27

4 respostas

7

Para df calcular totais, use a opção --totals . Se você quiser os totais apenas sobre algumas unidades selecionadas, especifique-os como argumentos.

Exemplos (e saída do meu computador)

Este é o total de todas as montagens locais:

$ df --total -hl
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
none                  490M  660K  489M   1% /dev
none                  497M  1,5M  495M   1% /dev/shm
none                  497M  260K  496M   1% /var/run
none                  497M     0  497M   0% /var/lock
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  19G   12G  7,3G  62%

Restringindo a algumas unidades (observe que, se o caminho especificado não for um ponto de montagem exato, o ponto de montagem mais próximo será usado [consulte a nota no final] ):

$ df -hl --total /home /fastdisk
Filesystem            Size  Used Avail Use% Mounted on
/dev/sdb1              14G   12G  2,1G  85% /
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
total                  17G   12G  5,3G  69%

ou usando dev nomes:

$ df -hl --total /dev/sda1 /dev/sdb1
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             3,7G  418M  3,3G  12% /fastdisk
/dev/sdb1              14G   12G  2,1G  85% /
total                  17G   12G  5,3G  69%

Outras personalizações

Se você deseja listar todas as montagens, exceto as "especiais", use a opção -x para excluir por tipo de partição. (Use a opção -T para mostrar os tipos.)

Pessoalmente, para uso interativo, uso o seguinte alias bash (adicionado a ~/.bash_aliases ) para excluir as montagens "não físicas".

alias df='df -h -x devtmpfs -x tmpfs -x debugfs'

Nota

A especificação de caminhos dentro de pontos de montagem pode gerar resultados diferentes, especificando o caminho exato para o ponto de montagem. Por exemplo, no meu laptop, uso sshfs para montar meu servidor de arquivos (local).

df -h ~/.server-root/ ~/.server-root/disks/A ~/.server-root/disks/B
Filesystem            Size  Used Avail Use% Mounted on
johan@server:/        185G   58G  118G  33% /home/johan/.server-root
johan@server:/        1,9T  637G  1,2T  35% /home/johan/.server-root
johan@server:/        1,8T  1,1T  757G  59% /home/johan/.server-root

A raiz do servidor ( / ) está montada em ~/.server-root . No entanto, no servidor, os discos são montados em /disks/* , que df (no laptop) não "conhece".

Evidentemente, df pode listar o uso do disco nas diferentes montagens no servidor, se forem fornecidos caminhos adequados. No entanto, ele mostra o mesmo “Sistema de Arquivos” e “Montado em” para todos os caminhos, já que (acredito) é o único ponto de montagem (relativo a este sshfs mount) no kernel local mesa de montagem.

Outra coisa: Não está realmente relacionado com a questão, mas está relacionado com uma resposta anterior à questão.

Adicionar os números com um script awk (ou similar), como algumas respostas postadas anteriormente, é não uma boa ideia ao usar o sinal -h . Isso ocorre porque o manuseio especial é necessário. Você não pode fazer apenas size+=$2; para um campo que é 418M em uma linha e 12G em outra e obter algo útil…

Para um exemplo com awk , adicionar 500M a 10.2G yields

$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2

510,2 de quê?

Existe claramente um problema aqui. Então, apenas como uma dica para lembrar , ao fazer um cálculo (automatizado) na saída de df (e outros que podem usar números 'legíveis por humanos' ) . Certifique-se de que você faz não usar o -h sinalizador e que a entrada para o script de cálculo é, em vez disso, normalizada (por exemplo, para bytes, blocos, KBs ou qualquer outro) e faça o 'display scaling' no final. Não é difícil, na maioria das linguagens de script e programação, adicionar algo como:

If value < threshold Then
  print (value),"B"
Else If value < 1024*threshold Then
  print (value/1024),"kB"
Else If value < 1024*1024*threshold Then
  print (value/1024/1024),"MB"
(and so on...)

onde valor está em bytes e limite é um valor na ordem de 1000. O resultado desse método é que você pode ajustá-lo facilmente para produzir valores impressos ( excluindo o prefixo) em um intervalo desejado e com um número de dígitos significativos à sua escolha. Comparado ao caso com utilitários padrão com -h switches, onde o formato é frequentemente corrigido.

Naturalmente, esse cálculo pode muitas vezes ser mais eficiente e / ou elegante, mas isso é uma questão para o idioma específico em que está escrito. Francamente, se for usado em um script de usuário que é executado apenas agora e, em seguida, para visualizar interativamente algumas informações, a eficiência não é realmente uma preocupação.

    
por 15.02.2013 / 02:39
4

Acho que você queria a soma dos dois size e use%

 df -hl | grep 'sda2\|sda3' | awk 'BEGIN{print "Size","Use%"} {size+=$2;percent+=$5;} END{print size,percent}' | column -t
    
por 14.02.2013 / 21:38
2

Você usaria uma ferramenta como awk :

df -hl | awk '/^\/dev\/sd[ab]/ { sum+=$5 } END { print sum }'

Onde:

  • /^\/dev\/sd[ab]/ é um padrão para filtrar somente as linhas que começam com /dev/sda ou /dev/sdb
  • { sum+=$5 } adiciona o quinto campo para quaisquer correspondências do padrão acima

Você pode encontrar algumas referências úteis de awk na wiki Awk.info .

    
por 14.02.2013 / 21:36
1
sudo df -hl | grep 'mountdirname' | awk '{print $5}'
    
por 22.12.2017 / 10:49