cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
😤 Ce billet a été édité le : 2024-08-09

La commande df indique l’espace occupé par les systèmes de fichiers, elle affiche son résultat sous la forme d’un tableau.

La commande jc permet de convertir la sortie de la plupart des commandes Linux en JSON, cependant cette commande n’existe pas par défaut sur la plupart des systèmes (noter également le cas pour la commande jq)

Voici des solutions qui se passent de jc.



La commande df ne produit pas naturellement de sortie JSON, il va donc falloir retravailler le résultat obtenu.

Pour ce billet, on fait le choix arbitraire d’ignorer :

  • les systèmes de fichier spécifique (ex : squashfs,tmpfs…),
  • les disques distants

Noter que le champ target (le point de montage) peut contenir des espaces, il est donc prudent de le mettre en fin de ligne pour le découpage des colonnes.



La solution à l'aide de jq

Bon pour commencer voici la solution utilisant la commande jc (qui s'installe à l'aide du paquet jc) :

df --human-readable --local --output='source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target' |
  /bin/jc --df |
  jq 'map( select( .filesystem != "tmpfs" ) )'


Une solution utilisant column

df --human-readable --local --output='source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target' |
  sed -e '1d' -e '/^tmpfs[[:blank:]].*$/d' |
  while read -r source fstype itotal iused iavail ipcent size used avail pcent file target ; do
    echo -e  "${source}\t${fstype}\t${itotal}\t${iused}\t${iavail}\t${ipcent}\t${size}\t${used}\t${avail}\t${pcent}\t${file}\t${target}"
  done |
  column -ts $'\t' --table --table-columns 'source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target' --json |
  jq '.table'


Une solution uniquement avec jq

df --human-readable --local --output='source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target' |
  sed -e '1d' -e '/^tmpfs[[:blank:]].*$/d' |
  while read -r source fstype itotal iused iavail ipcent size used avail pcent file target ; do
    jq --null-input \
      --arg source "${source}" \
      --arg fstype "${fstype}" \
      --arg itotal "${itotal}" \
      --arg iused "${iused}" \
      --arg iavail "${iavail}" \
      --arg ipcent "${ipcent}" \
      --arg size "${size}" \
      --arg used "${used}" \
      --arg avail "${avail}" \
      --arg pcent "${pcent}" \
      --arg file "${file}" \
      --arg target "${target}" \
'{
  source:$source,
  fstype:$fstype,
  itotal:$itotal,
  iused:$iused,
  iavail:$iavail,
  ipcent:$ipcent,
  size:$size,
  used:$used,
  avail:$avail,
  pcent:$pcent,
  file:$file,
  target:$target
}'
      done |
  jq --slurp '.'


En dehors de JSON

Si le but est par exemple d’afficher l’espace disponible des disques locaux, on peut se limiter à utiliser df (avec l’option -P pour la portabilité POSIX).

df -h -T -P |
  sed -e '1d' \
      -e '/^.*[[:blank:]]cifs[[:blank:]].*$/d' \
      -e '/^.*[[:blank:]]devtmpfs[[:blank:]].*$/d' \
      -e '/^.*[[:blank:]]fuse.sshfs[[:blank:]].*$/d' \
      -e '/^.*[[:blank:]]squashfs[[:blank:]].*$/d' \
      -e '/^.*[[:blank:]]tmpfs[[:blank:]].*$/d'

La liste des types de système de fichier à filtre est à modifier suivant vos besoins.

Les champs de la portabilité POSIX dans l’ordre :

Libellé En Libellé Fr Nom du champ
Filesystem Sys. de fichiers source
Type Type fstype
Size Taille size
Used Utilisé used
Available Dispo avail
Capacity Uti% pcent
Mounted on Monté sur target

On peut utiliser une boucle similaire à la construction du JSON pour mettre en forme ce résultat : Voir cet exemple.



Liens

ᦿ


ℹ 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog