web-dev-qa-db-fra.com

Vérifier l'espace disque disponible pour la partition actuelle dans bash

J'écris un installateur à Bash. L'utilisateur accédera au répertoire cible et exécutera le script d'installation. La première action consiste donc à vérifier que l'espace disponible est suffisant. Je sais que df signalera tous les systèmes de fichiers, mais je me demandais s’il existait un moyen d’obtenir l’espace libre uniquement pour la partition sur laquelle se trouve le répertoire cible.

Modifier - la réponse que j'ai trouvée

df $PWD | awk '/[0-9]%/{print $(NF-2)}'

Légèrement étrange car df semble formater sa sortie pour s’adapter au terminal. Ainsi, avec un nom de point de montage long, la sortie est décalée d’une ligne à l’autre.

98
Greg Reynolds

Oui:

df -k .

pour le répertoire en cours.

df -k /some/dir

si vous voulez vérifier un répertoire spécifique.

Vous pouvez également consulter la commande stat(1) si votre système en est équipé. Vous pouvez spécifier des formats de sortie pour faciliter l'analyse de votre script. Voici un petit exemple:

$ echo $(($(stat -f --format="%a*%S" .)))
170
Mat
  1. Commande df: Indique l'utilisation de l'espace disque du système de fichiers.
  2. du commande: Estimer l'utilisation de l'espace fichier

Tapez df -h ou df -k pour lister l'espace disque disponible:

 $ df -h

OR

 $ df -k

du indique l'espace occupé par un ou plusieurs fichiers ou répertoires.

 $ du -sh

L'option -s résume l'espace utilisé par le répertoire et l'option -h fournit Human-lisible output.

37
Girish

Je pense que cela devrait être un commentaire ou une modification de la réponse de ThinkingMedia sur cette question précise ( Vérifier l'espace disque disponible pour la partition actuelle dans bash ), mais je n'ai pas le droit de commenter (pas assez de représentants) et ma modification a été effectuée. rejeté (raison: "cela devrait être un commentaire ou une réponse") . Alors, s'il vous plaît, puissances de l'univers SO, ne me maudissez pas d'avoir répété et corrigé la "réponse" de quelqu'un d'autre. Mais quelqu'un sur Internet avait tort! ™ et ils ne m'ont pas laissé réparer.

Le code 

  df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'

a un défaut important: Oui, il générera 50G libre en tant que 50 - mais il produira également 5.0M libre en tant que 50 ou 3.4G libre en tant que 34 ou 15K libre en tant que 15.

Pour créer un script dans le but de vérifier une certaine quantité d’espace disque disponible, vous devez connaître l’unité que vous vérifiez. Supprimez-le (comme le fait sed dans l'exemple ci-dessus), les nombres n'ont plus de sens.

Si vous voulez que cela fonctionne, vous devrez faire quelque chose comme:

FREE=`df -k --output=avail "$PWD" | tail -n1`   # df -k not df -h
if [[ $FREE -lt 10485760 ]]; then               # 10G = 10*1024*1024k
     # less than 10GBs free!
fi;

Aussi, pour un installateur, df -k $INSTALL_TARGET_DIRECTORY pourrait être plus logique que df -k "$PWD"..__ Enfin, notez que le drapeau --output n'est pas disponible dans toutes les versions de df/linux.

19
trs

Un exemple complet pour quelqu'un qui voudra peut-être l'utiliser pour surveiller un point de montage sur un serveur. Cet exemple vérifiera si/var/spool est inférieur à 5G et enverra un courrier électronique à la personne:

  #!/bin/bash
  # -----------------------------------------------------------------------------------------
  # SUMMARY: Check if MOUNT is under certain quota, mail us if this is the case
  # DETAILS: If under 5G we have it alert us via email. blah blah  
  # -----------------------------------------------------------------------------------------
  # CRON: 0 0,4,8,12,16 * * * /var/www/httpd-config/server_scripts/clear_root_spool_log.bash

  MOUNTP=/var/spool  # mount drive to check
  LIMITSIZE=5485760 # 5G = 10*1024*1024k   # limit size in GB   (FLOOR QUOTA)
  FREE=$(df -k --output=avail "$MOUNTP" | tail -n1) # df -k not df -h
  LOG=/tmp/log-$(basename ${0}).log
  MAILCMD=mail
  EMAILIDS="[email protected]"
  MAILMESSAGE=/tmp/tmp-$(basename ${0})

  # -----------------------------------------------------------------------------------------

  function email_on_failure(){

          sMess="$1"
          echo "" >$MAILMESSAGE
          echo "Hostname: $(hostname)" >>$MAILMESSAGE
          echo "Date & Time: $(date)" >>$MAILMESSAGE

          # Email letter formation here:
          echo -e "\n[ $(date +%Y%m%d_%H%M%S%Z) ] Current Status:\n\n" >>$MAILMESSAGE
          cat $sMess >>$MAILMESSAGE

          echo "" >>$MAILMESSAGE
          echo "*** This email generated by $(basename $0) Shell script ***" >>$MAILMESSAGE
          echo "*** Please don't reply this email, this is just notification email ***" >>$MAILMESSAGE

          # sending email (need to have an email client set up or sendmail)
          $MAILCMD -s "Urgent MAIL Alert For $(hostname) AWS Server" "$EMAILIDS" < $MAILMESSAGE

          [[ -f $MAILMESSAGE ]] && rm -f $MAILMESSAGE

  }

  # -----------------------------------------------------------------------------------------

  if [[ $FREE -lt $LIMITSIZE ]]; then
          echo "Writing to $LOG"
          echo "MAIL ERROR: Less than $((($FREE/1000))) MB free (QUOTA) on $MOUNTP!" | tee ${LOG}
          echo -e "\nPotential Files To Delete:" | tee -a ${LOG}
          find $MOUNTP -xdev -type f -size +500M -exec du -sh {} ';' | sort -rh | head -n20 | tee -a ${LOG}
          email_on_failure ${LOG}
  else
          echo "Currently $(((($FREE-$LIMITSIZE)/1000))) MB of QUOTA available of on $MOUNTP. "
  fi
1
Mike Q

Pour connaître l'utilisation du répertoire spécifique en Go ou en To sous Linux, la commande est la suivante:

df -h/dir/rép_inner/ 

 or

df -sh/dir/rép_inner/

et pour connaître l'utilisation du répertoire spécifique en bits sous linux, la commande est,

df-k/dir/rép_inner/

1
ganesh hegde
df --output=avail -B 1 "$PWD" |tail -n 1

vous obtenez la taille en octets de cette façon. 

1
xerostomus

Tapez la commande Shell: 

 df -h 

ou 

df -m

ou 

df -k

Il affichera la liste des espaces disque disponibles pour chaque point de montage.

Vous pouvez également afficher/afficher une colonne unique. 

Type: 

df -m |awk '{print $3}'

Remarque: Ici 3 est le numéro de colonne. Vous pouvez choisir la colonne dont vous avez besoin.

0
Masud Sarker

Pour obtenir l'espace disque libre actuel au format lisible par l'homme. Ce qui suit produira l’espace disponible pour la partition actuelle, supprimera l’en-tête et les lettres.

df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'

Sorties 50G gratuites en tant que 50.

Pour rendre cette partie d'une condition d'espace disque libre dans le script bash.

FREE=`df --output=avail -h "$PWD" | sed '1d;s/[^0-9]//g'`
if [[ $FREE -lt 10 ]]; then
         # less than 10GBs free!
fi;
0
cgTag