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.
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" .)))
df
: Indique l'utilisation de l'espace disque du système de fichiers.du
commande: Estimer l'utilisation de l'espace fichierTapez 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.
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.
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
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/
df --output=avail -B 1 "$PWD" |tail -n 1
vous obtenez la taille en octets de cette façon.
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.
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;