* nix shellscript: Obtém o uso de disco em vários sistemas operacionais

0

Estou tentando obter a porcentagem de uso de um determinado disco em um sistema. O programa que tenho que escrever será um script de bash . O script tem que funcionar no Debian, Arch e Mac OS X.

Minha abordagem atual é fazer um df e grep para a porcentagem de uso. O problema é que a saída de df é diferente nesses sistemas. Quero evitar if os==Arch elseif os == Debian… na medida do possível.

Existe uma solução que evite distinguir o sistema operacional?

Exemplo de saída para cada sistema operacional / versão de df :

Mac

Filesystem    512-blocks       Used Available Capacity   iused    ifree %iused  Mounted on
/dev/disk2     179032136  106162416  72357720    60%  13334300  9044715   72%   /

Debian

Filesystem    1K-blocks  Used     Available  %used Mounted on
/dev/hdv1       20480000 8423436  11016564   44%   /

Arch

Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/root        5160576 813420   4085012  17% /

Então, Arch e Debian são praticamente os mesmos. Também pode ser um problema que os rótulos sejam impressos em diferentes idiomas.

    
por gorootde 04.04.2013 / 11:50

2 respostas

0

Isso deve funcionar para todos os três df de saídas:

df | awk '/\//{print $1,$(NF-1)}'

Esta é a saída de cada um dos exemplos que você publicou:

/dev/disk2 72%
/dev/hdv1 44%
/dev/root 17%

EXPLICAÇÃO:

O comando awk procura linhas que contenham / (assim, ignora os cabeçalhos) e imprime os primeiros campos ( $1 ) e penúltimo ( $(NF-1) ). Se você quiser somente a porcentagem de uso, faça o seguinte:

df | awk '/\//{print $(NF-1)}'

Atualização:

Minha resposta acima fornecerá o campo %iused na saída Mac df . Se você quiser o Capacity , faça isso (funciona nos três novamente):

df | perl -ne '/\// && do {/(.+?)\s.+?(\d+%)/ && print "$1 $2\n"}'

que também imprime o primeiro campo (o não-ganancioso (.+?) , terminado por \s ) e o primeiro número percentual ( (\d+%) , precedido pelo não-ganancioso .+? ).

    
por 04.04.2013 / 14:07
0

Uma solução um pouco confusa, mas provavelmente mais universal, é

df | sed -n 's/^\([^ ]*\) .*[^0-9]\([0-9]*%\).*/ /p'

, que exibe a primeira "palavra" na linha (o nome do dispositivo do sistema de arquivos) e, em seguida, procura uma sequência de dígitos seguida por um % . Especificamente, ele procura pela última última cadeia de caracteres.

[Opa: ele também exibe um subconjunto do cabeçalho (isto é, a primeira linha, com os títulos das colunas).]

Atualização:

df | sed -n 's/^\([^ ]*\) .*[^0-9]\([0-9][0-9]*%\).*/ /p'

corrige a falha com a linha de cabeçalho e

df | sed -n 's/^\([^ ]*\) [^%]*[^0-9]\([0-9][0-9]*%\).*/ /p'

captura o campo do número de porcentagem primeiro . Em particular, no Mac, isso irá capturar a coluna Capacity em vez da coluna %iused .

    
por 05.04.2013 / 01:13