Para df
calcular totais, use a --totals
opção Se você deseja os totais apenas em algumas unidades selecionadas, especifique-os como argumentos.
Exemplos (e saída do meu computador)
Este é o total para 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, será utilizado o ponto de montagem contendo o mais próximo [consulte a observação 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%
Personalização adicional
Se você deseja listar todas as montagens, exceto as 'especiais', pode usar a -x
opção para excluir por tipo de partição. (Use a -T
opção para mostrar os tipos.)
Pessoalmente, para uso interativo, eu uso o seguinte alias do 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 nos pontos de montagem pode, em algum momento, produzir resultados diferentes, especificando o caminho exato para o ponto de montagem. Por exemplo, no meu laptop, eu 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 estão montados /disks/*
, dos quais df
(no laptop) não 'sabem'.
Evidentemente, df
pode-se listar o uso do disco nas diferentes montagens no servidor, se houver caminhos adequados. No entanto, mostra o mesmo "Sistema de arquivos" e "Montado em" para todos os caminhos, pois (acredito) esse é o único ponto de montagem (relacionado a esta sshfs
montagem) na tabela local de montagem do kernel.
Outra coisa: não está realmente relacionado à pergunta, mas relacionado a uma resposta anterior à pergunta.
Adicionar números com um awk
script (ou similar), como algumas respostas postadas anteriormente, não é uma boa ideia ao usar o -h
sinalizador. Isso ocorre porque é necessário um tratamento especial. Você não pode simplesmente fazer size+=$2;
por um campo que está 418M
em uma linha e 12G
em outra e obter algo útil com isso…
Por exemplo awk
, adicionando 500M
aos 10.2G
rendimentos
$ echo -e '500M\n10.2G' | awk '{size+=$1;} END{print size;}'
510.2
510,2 de quê?
Há claramente um problema aqui. Portanto, apenas como uma dica para lembrar , ao fazer cálculos (automatizados) sobre a saída de df
(e outros que podem usar números 'legíveis por humanos' ) . Certifique-se de não usar o -h
sinalizador e de que a entrada do script de cálculo seja normalizada (por exemplo, bytes, blocos, KBs ou qualquer outra coisa) e faça o 'display scaling' no final. Não é difícil, na maioria das linguagens de script e de 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...)
em que o valor está em bytes e o limite é da ordem de 1000. O resultado desse método é que você pode ajustá-lo facilmente para produzir valores impressos (excluindo o prefixo) no intervalo desejado e com vários dígitos significativos para o seu escolhendo. Comparado ao caso com utilitários padrão com -h
comutadores, em que o formato geralmente é fixo.
Obviamente, esse cálculo geralmente pode ser mais eficiente e / ou elegante, mas isso é uma pergunta para o idioma específico em que está escrito. Francamente, se for usado em um script de usuário que é executado apenas agora e depois para visualizar interativamente algumas informações, a eficiência não é realmente uma preocupação.