it-swarm.com.ru

Проверьте свободное место на диске для текущего раздела в bash

Я пишу установщик в Bash. Пользователь перейдет в целевой каталог и запустит скрипт установки, поэтому первым делом нужно проверить, достаточно ли места. Я знаю, что df сообщит обо всех файловых системах, но мне было интересно, есть ли способ получить свободное место только для раздела, на котором находится целевой каталог.

Изменить - ответ, который я придумал

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

Немного странно, потому что df, кажется, форматирует свой вывод, чтобы соответствовать терминалу, поэтому с длинным именем точки монтирования вывод смещается вниз на строку

98
Greg Reynolds

Да:

df -k .

для текущего каталога.

df -k /some/dir

если вы хотите проверить конкретный каталог.

Вы также можете проверить команду stat(1), если она есть в вашей системе. Вы можете указать выходные форматы, чтобы облегчить синтаксический анализ вашего скрипта. Вот небольшой пример:

$ echo $(($(stat -f --format="%a*%S" .)))
170
Mat
  1. Команда df: Отчет об использовании дискового пространства файловой системы
  2. Команда du: Оцените использование файлового пространства

Введите df -h или df -k для отображения свободного места на диске:

 $ df -h

OR

 $ df -k

du показывает, сколько места занимает один или несколько файлов или каталогов.

 $ du -sh

Опция -s суммирует пространство, используемое каталогом, а опция -h обеспечивает Удобочитаемость output.

37
Girish

Я думаю, что это должен быть комментарий или редактирование ответа ThinkingMedia на этот самый вопрос ( Проверить свободное место на диске для текущего раздела в bash ), но мне не разрешено комментировать (недостаточно репов), и мое редактирование было отклонено (причина: «это должен быть комментарий или ответ») . Так что, пожалуйста, полномочия вселенной SO, черт меня побери, если я повторяю и исправляю чужой «ответ». Но кто-то в Интернете ошибался! ™, и они не позволяли мне это исправить.

Код 

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

имеет существенный недостаток: Да, он выдаст 50G free как 50 - но он также выведет 5.0M free как 50 или 3.4G free как 34 или 15K free как 15.

Чтобы создать скрипт с целью проверки на определенное количество свободного дискового пространства, вы должны знать модуль, с которым вы проверяете. Удалите его (как это делает sed в приведенном выше примере), чтобы числа больше не имели смысла.

Если вы действительно хотите, чтобы это работало, вам придется сделать что-то вроде:

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;

Также для установщика df -k $INSTALL_TARGET_DIRECTORY может иметь больше смысла, чем df -k "$PWD". Наконец, обратите внимание, что флаг --output доступен не в каждой версии df/linux.

19
trs

Полный пример для тех, кто может использовать это для мониторинга точки монтирования на сервере. Этот пример проверит, находится ли/var/spool под 5G, и отправит электронное письмо человеку

  #!/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

Чтобы узнать, как использовать конкретный каталог в ГБ или ТБ в Linux, введите команду:

df -h/dir/inner_dir/ 

 or

df -sh/dir/inner_dir/

и чтобы узнать использование конкретного каталога в битах в Linux, команда

df-k/dir/inner_dir/

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

таким образом вы получите размер в байтах. 

1
xerostomus

Введите в командной оболочке: 

 df -h 

или же 

дф-м

или же 

дф -к

Он покажет список свободных дисковых пространств для каждой точки монтирования.

Вы можете показать/просмотреть один столбец также. 

Тип: 

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

Примечание. Здесь 3 - номер столбца. Вы можете выбрать, какой столбец вам нужен.

0
Masud Sarker

Чтобы получить текущее свободное место на диске в удобочитаемом формате с буквами. Следующее выведет свободное место для текущего раздела, отбросит заголовок и раздетые буквы.

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

Выходы 50G свободны как 50.

Чтобы сделать эту часть условием свободного дискового пространства в скрипте 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