![df에서 사용 및 사용 가능한 크기에 대해서만 변수를 생성하는 방법은 무엇입니까?](https://linux55.com/image/4231/df%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%20%EB%B0%8F%20%EC%82%AC%EC%9A%A9%20%EA%B0%80%EB%8A%A5%ED%95%9C%20%ED%81%AC%EA%B8%B0%EC%97%90%20%EB%8C%80%ED%95%B4%EC%84%9C%EB%A7%8C%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%83%9D%EC%84%B1%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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))