web-dev-qa-db-fra.com

Vérifiez si moins d'une certaine quantité d'espace disque libre à partir de la ligne de commande

Il y a plusieurs questions et réponses sur askubuntu sur la façon de voir l'espace disque depuis la ligne de commande.

Naturellement, df est l'outil incontournable pour cela.

Cependant, je veux qu'un script à la connexion déclenche une alerte si l'espace disque libre est inférieur à un certain seuil.

Malheureusement, df semble utiliser des colonnes de taille arbitraire et je ne sais pas comment extraire uniquement la valeur de la colonne qui m'intéresse.

Par exemple:

$ 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

Vraiment, je veux la quatrième colonne, mais je dois demander la neuvième.

Existe-t-il un moyen plus simple d'extraire la valeur de la colonne de la sortie de df, ou une autre façon d'accéder à cette valeur.

1
Drew Noakes

Si vous utilisez Ubuntu 14.04 ou une version ultérieure, df ne peut afficher que les valeurs que vous souhaitez:

$ df --output=avail /
   Avail
15127808

De 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).

Comme indiqué par Drew Noakes , cette capacité a été ajoutée dans GNU coreutils 8.21, et n'est donc pas disponible dans les anciennes versions d'Ubuntu.

Pour sélectionner des champs, awk est un bien meilleur outil que cut, et vous pouvez construire sur la réponse de Jan pour cela après avoir choisi les champs que vous voulez que df affiche.

1
muru

Je viens de réaliser que ce n'est pas ce qui était demandé, cela montre une alerte si l'espace utilisé est supérieur à un seuil prédéfini. Je vais cependant le laisser pour plus de référence.

Vous pouvez utiliser quelque chose comme le script ci-dessous

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

X contient le nombre de Ko utilisés, s'il est supérieur à 999 000, il envoie un message d'avertissement par e-mail.

2
Jan

J'utiliserais un awk pour traiter uniquement la deuxième ligne (saute la première ici) et vous obtiendrais votre colonne:

$ df /dev/mapper/sil_acababdfabcf1 | awk 'NR==2 {print $4}'
11903752
2
Oli