[linux] Bash에서 현재 파티션의 여유 디스크 공간 확인

bash에서 설치 프로그램을 작성 중입니다. 사용자는 대상 디렉토리로 이동하여 설치 스크립트를 실행하므로 첫 번째 조치는 충분한 공간이 있는지 확인하는 것입니다. df가 모든 파일 시스템을보고한다는 것을 알고 있지만 대상 디렉토리가있는 파티션에 대해서만 여유 공간을 확보 할 수있는 방법이 있는지 궁금합니다.

편집-내가 생각해 낸 대답

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

df가 터미널에 맞게 출력 형식을 지정하기 때문에 약간 이상하므로 긴 마운트 지점 이름을 사용하면 출력이 한 줄 아래로 이동합니다.



답변

예:

df -k .

현재 디렉토리.

df -k /some/dir

특정 디렉토리를 확인하려면.

stat(1)시스템에 명령이 있으면 체크 아웃 할 수도 있습니다 . 스크립트를 쉽게 구문 분석 할 수 있도록 출력 형식을 지정할 수 있습니다. 다음은 약간의 예입니다.

$ echo $(($(stat -f --format="%a*%S" .)))


답변

  1. df 명령 : 파일 시스템 디스크 공간 사용량보고
  2. du command : 파일 공간 사용량 추정

사용 가능한 디스크 공간을 입력 df -h하거나 df -k나열하려면 :

 $ df -h

또는

 $ df -k

du 하나 이상의 파일 또는 디렉토리가 사용중인 공간을 표시합니다.

 $ du -sh

-s옵션은 디렉토리가 사용하고 공간 요약 -h옵션을 제공하는 사람이 읽을 수있는 출력을.


답변

나는 이것이 바로이 질문에 대한 ThinkingMedia의 대답 ( bash에서 현재 파티션에 대한 여유 디스크 공간 확인) 에 대한 주석 또는 편집이어야한다고 생각 하지만 주석을 달 수 없으며 (반복이 충분하지 않음) 편집이 거부되었습니다 (이유 : “이것은 의견 또는 답변이어야합니다”). 그러니 제발, SO 우주의 힘 이여, 다른 사람의 “답변”을 반복하고 고친다 고 저주하지 마십시오. 그러나 인터넷상의 누군가가 틀렸어요! ™ 그리고 그들은 제가 그것을 고치도록 허락하지 않았습니다.

코드

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

상당한 결함이 있음 : 예, 50G무료로 50으로 출력 하지만 5.0M무료로 50으로 출력 하거나 3.4G34로, 15K무료로 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_DIRECTORYdf -k "$PWD". 마지막으로, --output모든 버전의 df / linux에서 플래그를 사용할 수있는 것은 아닙니다.


답변

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

이런 식으로 크기를 바이트 단위로 얻습니다.


답변

이것을 사용하여 서버의 마운트 지점을 모니터링하려는 사람을위한 완전한 예입니다. 이 예제는 / ​​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="dude@wheres.mycar"
  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


답변

Linux에서 GB 또는 TB의 특정 디렉토리 사용을 알기 위해 명령은 다음과 같습니다.

df -h / dir / inner_dir /

 or

df -sh / dir / inner_dir /

그리고 리눅스에서 특정 디렉토리의 사용법을 알기 위해 명령은 다음과 같습니다.

df-k / dir / inner_dir /


답변

명령 셸을 입력합니다.

 df -h 

또는

df -m

또는

df -k

각 마운트 지점에 대한 사용 가능한 디스크 공간 목록이 표시됩니다.

또한 단일 열을 표시하거나 볼 수 있습니다.

유형:

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

참고 : 여기서 3은 열 번호입니다. 필요한 열을 선택할 수 있습니다.