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

j'écris un installateur à bash. L'utilisateur ira dans le répertoire cible et lancera le script d'installation, donc la première action devrait être de vérifier qu'il y a suffisamment d'espace. Je sais que df signalera tous les systèmes de fichiers, mais je me demandais s'il y avait un moyen d'obtenir l'espace libre juste pour la partition sur laquelle se trouve le répertoire cible.

Edit - la réponse que j'ai trouvé avec

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

légèrement étrange car df semble formater son sortie pour s'adapter au terminal, donc avec un nom de point de montage long la sortie est décalée le long d'une ligne

93
demandé sur mgoldwasser 2011-11-13 12:37:16

8 réponses

Oui:

df -k .

pour le répertoire courant.

df -k /some/dir

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

vous pourriez aussi vouloir vérifier la commande stat(1) si votre système l'a. Vous pouvez spécifier les formats de sortie pour faciliter l'analyse de votre script. Voici un petit exemple:

$ echo $(($(stat -f --format="%a*%S" .)))
157
répondu Mat 2011-11-13 08:38:59
  1. df commande : Utilisation de l'espace disque du système de fichiers de rapport
  2. du commande: estimation de l'utilisation de l'espace dans les fichiers

Type df -h ou df -k pour la liste d'espace libre sur le disque:

 $ df -h

ou

 $ df -k

du montre combien d'espace un ou plusieurs fichiers ou répertoires utilise.

 $ du -sh

-s l'option résume l'espace qu'un répertoire utilise et l'option -h fournit la sortie lisible par L'humain .

36
répondu Girish 2017-03-14 01:32:17

je pense que cela devrait être un commentaire ou une édition à la réponse de ThinkingMedia sur cette question même ( vérifier l'espace disque libre pour la partition actuelle dans bash ), mais je ne suis pas autorisé à commenter (pas assez de rep) et mon édition a été rejetée (raison:"ceci devrait être un commentaire ou une réponse"). Alors s'il vous plaît, puissances de L'univers, ne me damnez pas pour répéter et réparer la "réponse"de quelqu'un d'autre. Mais quelqu'un sur internet est faux!™ et ils ne me laissaient pas de le corriger.

le code

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

a un défaut important: Oui, il affichera 50G libre comme 50 -- mais il affichera aussi 5.0M libre comme 50 ou 3.4G libre comme 34 ou 15K libre comme 15.

pour créer un script dans le but de vérifier une certaine quantité d'espace disque libre, vous devez connaître l'unité contre laquelle vous vérifiez. Supprimez - le (comme le fait sed dans l'exemple ci-dessus) les nombres ne pas faire plus aucun sens.

si vous voulez vraiment 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 avoir plus de sens que df -k "$PWD" . Enfin, veuillez noter que le drapeau --output n'est pas disponible dans toutes les versions de DF / linux.

17
répondu trs 2017-05-23 11:47:16

pour connaître l'usage du répertoire spécifique dans les GB ou TB dans linux la commande est,

df -h /dir/inner_dir/

 or

df-sh /dir/inner_dir/

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

df-k /dir/inner_dir/

1
répondu ganesh hegde 2016-12-14 06:19:23

Un exemple complet pour quelqu'un qui souhaiterez peut-être utiliser pour surveiller un point de montage sur un serveur. Cet exemple vérifiera si /var/spool est sous 5G et enverra un email à 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 "151900920").log
  MAILCMD=mail
  EMAILIDS="dude@wheres.mycar"
  MAILMESSAGE=/tmp/tmp-$(basename "151900920")

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

  function email_on_failure(){

          sMess=""
          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 "151900920") 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
répondu Mike Q 2017-01-11 19:04:27

pour obtenir l'espace disque libre courant dans le format lisible par l'homme avec des lettres. Ce qui suit affichera l'espace libre pour la partition courante, supprimera l'en-tête et les lettres de bande.

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

Sorties 50G libre 50 .

pour faire cette partie d'une condition d'espace disque libre en 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
répondu cgTag 2016-05-11 15:49:35
df --output=avail -B 1 "$PWD" |tail -n 1

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

0
répondu xerostomus 2017-09-13 05:49:02

Type dans le shell de commande:

 df -h 

ou

df-m

ou

df-k

il affichera la liste des espaces disque libres pour chaque point de montage.

vous pouvez afficher/voir la colonne simple aussi.

Type:

df -m |awk '{print }'

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

0
répondu Masud Sarker 2018-05-22 09:03:32