df를 사용하여 총 디스크 공간을 계산하는 방법은 무엇입니까?

df를 사용하여 총 디스크 공간을 계산하는 방법은 무엇입니까?

df -h다음 명령의 결과를 추가하려면(즉, 모두 함께 추가하고 결과를 반환하도록) 명령을 수정하려면 어떻게 해야 합니까 ?

$ df -h | awk '{print $2}'
Size
5.8G
64G
93M
3.9G
12G
108G
16G
134G
3.7T
3.7T
6.0T

답변1

GNU는 df자체적으로 합계를 계산할 수 있습니다. 최신 버전(적어도 8.21 이상, 이전 버전은 확실하지 않음)을 사용하면 출력할 필드를 선택할 수 있습니다.

$ df -h --output=size --total
 Size
 971M
 200M
  18G
 997M
 5.0M
 997M
  82M
  84M
  84M
 200M
  22G
$ df -h --output=size --total | awk 'END {print $1}'
22G

~에서man df:

--output[=FIELD_LIST]
      use the output format defined by FIELD_LIST, or print all fields
      if FIELD_LIST is omitted.
--total
      elide  all entries insignificant to available space, and produce
      a grand total

답변2

사람이 읽을 수 있는 숫자 형식이 방해가 되므로 먼저 일관된 출력이 필요합니다. 이식 가능한 -P옵션을 사용하면 1024개 청크로 출력 할 수 있습니다.

df -P | awk 'NR>2{sum+=$2}END{print sum}'

GNU를 사용하는 경우 옵션을 df지정할 수 있습니다 --blocksize.

df --block-size=1  | awk 'NR>2{sum+=$2}END{print sum}'

NR>2Size부분적으로는 헤더 행을 처리할 필요가 없도록 하기 위한 것입니다 . 데이터를 사람이 읽을 수 있는 형식으로 다시 포맷하려면 Linux를 사용하는 경우 numfmt도구를 사용할 수 있고, 그렇지 않은 경우에는 awkin을 참조하세요.관련 답변.

또한 및 df와 같은 가상 파일 시스템을 포함하여 모든 파일 시스템의 크기가 출력됩니다 . 실제 물리적 디스크만 필요한 경우 필터링을 고려해 볼 수 있습니다. 따라서 파일 시스템에 표시된 장치 파일이 있는 파일 시스템만 고려한다면 아마도 다음과 같은 것을 사용할 수 있을 것입니다.udevtmpfs/dev/

df -P | awk 'NR>2 && /^\/dev\//{sum+=$2}END{print sum}'

GNU의 경우 파일 시스템 삭제를 무시하는 플래그 df사용을 고려할 수도 있습니다 .--local

답변3

어떤 경우에는(예: btrfs) 파일 시스템이 df에 여러 번 나타납니다. 따라서 더 나은 해결책은

 df | awk '/dev\/sd/ {sums[$1]=$3} END {for (i in sums) tot += sums[i]; print tot}' | numfmt --to=iec

관련 정보