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.