web-dev-qa-db-fra.com

Obtenez de l'espace disque libre avec df pour afficher simplement l'espace libre en Ko?

J'essaie de générer la quantité d'espace disque libre sur le système de fichiers /example.

Si j'exécute la commande df -k /example Je peux obtenir de bonnes informations sur l'espace disque disponible en ko mais uniquement en étant humain et en le regardant.

Je dois prendre ces données et les utiliser ailleurs dans mon script Shell. J'ai d'abord pensé à utiliser cut mais ensuite mon script ne sera pas portable sur d'autres disques car l'espace disque libre variera et la coupure ne produira pas de résultats précis.

Comment puis-je obtenir la sortie de l'espace disque libre d'exemple en Ko?

26
Whoppa

Pour obtenir la sortie de df pour afficher les données en Ko, il vous suffit d'utiliser le drapeau -k:

df -k

De plus, si vous spécifiez un système de fichiers à df, vous obtiendrez les valeurs pour ce spécifique, au lieu de toutes:

df -k /example

Concernant le corps de votre question: vous souhaitez extraire la quantité d'espace disque libre sur un système de fichiers donné. Cela nécessitera un certain traitement.

Étant donné une sortie normale de df -k:

$ df -k /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda1        7223800 4270396   2586456  63% /

Vous pouvez obtenir le Available (4e colonne) par exemple avec awk ou cut (auparavant, vous canalisez vers tr vers squeeze-repeats (-s) Pour les espaces):

$ df -k /tmp | tail -1 | awk '{print $4}'
2586456
$ df -k /tmp | tail -1 | tr -s ' ' | cut -d' ' -f4
2586456

Comme toujours, si vous souhaitez stocker le résultat dans une variable, utilisez la syntaxe var=$(command) comme ceci:

$ myUsed=$(df -k /tmp | tail -1 | awk '{print $4}')
$ echo "$myUsed"
2586456

De plus, à partir du commentaire de Tim Bunce , vous pouvez gérer les noms de système de fichiers longs en utilisant --direct Pour obtenir un - À la place, afin qu'il n'imprime pas une ligne qui rompt le moteur:

$ df -k --direct /tmp
Filesystem     1K-blocks    Used Available Use% Mounted on
-                7223800 4270396   2586456  63% /
47
fedorqui

Vous pouvez utiliser la commande stat (2) pour afficher les blocs libres et également pour connaître la taille de chaque bloc, par ex.

stat -f --printf="%a %s\n" /

affichera le nombre de blocs libres (% a) sur un système de fichiers donné (/) suivi d'une taille de bloc (% s). Pour obtenir la taille en Ko, vous pouvez utiliser la commande bc (1) comme dans l'exemple suivant:

stat -f --printf="%a * %s / 1024\n" / | bc

Enfin, pour mettre cela dans une variable, il suffit d'utiliser la substitution de backtick (ou $ () comme dans la première réponse):

SOMEVAR=`stat -f --printf="%a * %s / 1024\n" / | bc`
12
sgros

Afficher uniquement les colonnes intéressantes

 df /example --total -k -h  --output=source,avail
  • --total = grand total à la fin
  • -k = taille de bloc 1K
  • -h = lisible par l'homme
  • --output = [FIELD_LIST] liste des colonnes à afficher séparées par ","

Pas tout à fait standard (j'ai vu --output uniquement dans les pages de manuel Ubuntu), dans ce cas, Awk et d'autres pour supprimer les colonnes ne sont pas nécessaires.

Voici une autre solution:

df --output=avail -m /example | tail -1

production:

6415

1
Alberto Rojas