df를 사용할 때 크기와 사용 가능한 변수에 각각 해당하는 변수를 만들고 싶다고 가정해 보겠습니다. 각 변수에 대한 변수를 만드는 방법은 무엇입니까? 그 중 하나만 반환하는 옵션이 있나요?
directorySize=
directoryUsed=
directoryAvailable=
내 홈 디렉터리를 기반으로 이러한 변수를 만들고 싶다고 가정해 보겠습니다. 어떻게 해야 합니까?
답변1
어떤 선택도 하나의 필드만 반환하지 않습니다. 그러나 이 옵션을 사용하면 -P
모든 필드가 동일한 줄에 인쇄됩니다(이 옵션을 사용하지 않으면 첫 번째 열이 너무 넓은 경우 다른 필드가 다음 줄로 이동됩니다). 그런 다음 awk를 사용하여 두 번째 줄에서 원하는 열을 인쇄할 수 있습니다.
size=$(df -Pk ~ | awk 'NR==2 {print $2}') # in kB
모든 변수를 한 번에 설정하려면 awk에서 쉘 조각을 인쇄하도록 할 수 있습니다.
eval "$(df -Pk ~ | awk 'NR==2 {printf "size=%d used=%d available=%d", $2, $3, $4}')"
일부 외국 시스템에서는 파일 시스템 레이블에 공백을 허용하므로 df
출력을 안정적으로 구문 분석하는 것이 불가능합니다. 불행히도 다른 이식 가능한 방법은 없습니다.
Linux에서만 이 stat
명령을 사용할 수 있습니다. 블록을 사용하여 크기를 표현하는 것은 다소 어색합니다.
block_size=$(stat -f -c %S ~)
total_blocks=$(stat -f -c %b ~)
free_blocks=$(stat -f -c %f ~)
size=$((block_size * total_blocks)) # in bytes
available=$((block_size * free_blocks))
used=$((size - available))