Verifique se há menos espaço livre em disco na linha de comando

1

Existem várias perguntas e respostas no askubuntu sobre como ver o espaço em disco a partir da linha de comando.

Naturalmente, df é a ferramenta para isso.

No entanto, quero um script no login para gerar um alerta se o espaço livre em disco estiver abaixo de um certo limite.

Infelizmente df parece usar colunas de tamanho arbitrário e não sei como extrair apenas o valor da coluna em que estou interessado.

Por exemplo:

$ df /dev/mapper/root
Filesystem       1K-blocks    Used Available Use% Mounted on
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1
/dev/mapper/root   2563092 1649968    763212  69% /
$ df /dev/mapper/root | tail -n 1 | cut -d ' ' -f 9
763212

Eu realmente quero a quarta coluna, mas devo pedir o nono.

Existe uma maneira mais fácil de extrair o valor da coluna da saída de df ou de outra maneira para acessar esse valor.

    
por Drew Noakes 28.10.2014 / 22:54

3 respostas

1

Se você estiver no Ubuntu 14.04 ou posterior, df poderá gerar apenas os valores desejados:

$ df --output=avail /
   Avail
15127808

Em man df :

--output[=FIELD_LIST]
      use the output format defined by FIELD_LIST, or print all fields
      if FIELD_LIST is omitted.
...
FIELD_LIST  is a comma-separated list of columns to be included.  Valid
field names  are:  'source',  'fstype',  'itotal',  'iused',  'iavail',
'ipcent',  'size',  'used',  'avail',  'pcent'  and  'target' (see info
page).

Como observado por Drew Noakes , essa habilidade foi adicionada no GNU coreutils 8.21 e, portanto, não está disponível em versões mais antigas do Ubuntu.

Para selecionar campos, awk é uma ferramenta muito melhor que cut e você pode basear-se na resposta de Jan para isso depois de escolher os campos que você deseja que df produza.

    
por muru 28.10.2014 / 22:58
2

Apenas percebi que isso não é o que foi solicitado, isso mostra um alerta se o espaço usado for maior que um limite predefinido. Vou deixar para referência futura.

Você poderia usar algo como o script abaixo

#!/bin/bash
X=
X=$(du -sc | awk 'NR < 2' | awk '{ print  }')
if [ $X -gt 999000 ]; then
  message="Already using 'du -sch | awk 'NR <2' |awk '{ print  }'' KB"
echo $message | mail -s "File System Full Warning" [email protected]
fi

X contém o número de KB usado, se maior que 999000 envia uma mensagem de aviso por e-mail.

    
por Jan 28.10.2014 / 22:58
2

Eu usaria um awk para lidar apenas com a segunda linha (pula a primeira aqui) e obter sua coluna:

$ df /dev/mapper/sil_acababdfabcf1 | awk 'NR==2 {print }'
11903752
    
por Oli 28.10.2014 / 23:09