linux + 루트 파일 시스템 크기 인쇄

linux + 루트 파일 시스템 크기 인쇄

lvs는 파일 시스템의 크기를 표시할 수 있는 훌륭한 명령입니다.

lvs
  LV      VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root vgW -wi-ao---- 100.00g
  lv_swap vgW -wi-ao----   7.72g
  lv_var  vgW -wi-ao---- 100.87g

루트 파일 시스템 크기를 캡처하려고 합니다.

지금까지 다음 구문을 만들었습니다.

lvs | awk  '$1 ~ /root/' | awk '{print $NF}' | sed s'/\./ /g' | awk '{print $1}'

및 그 인쇄(예상 출력은 100)

100

하지만 구문을 더 좋게 개선하고 싶습니다.

어떤 제안이 있으십니까?

답변1

lvsLVM 볼륨에 대한 정보를 표시합니다. 해당 파일 시스템이 LVM 볼륨에 있고 어떤 볼륨(아니요, 논리 볼륨의 이름)이 아닌지 아는 경우 루트 파일 시스템을 포함하는 블록 장치의 크기(해당 파일 시스템의 크기가 아님)를 제공합니다.가지다"루트"가 있음).

size=$(
  lvs --unit b --nosuffix --no-headings --config 'log{prefix=""}' -o size vgW/lv_root
)

LVM 볼륨, 디스크 파티션, NBD/loop/md... 장치 등 루트 파일 시스템을 포함하는 블록 장치의 크기를 확인하려면(그러나 루트 파일 시스템은 블록 백업될 필요가 없습니다) ) 장치(예: 네트워크 파일 시스템, zfs, btrfs...), Linux에서는 다음을 사용합니다 lsblk.

size=$(
  lsblk -Jbo size,mountpoint | jq '.blockdevices[]|select(.mountpoint=="/").size'
)

파일 시스템의 크기를 찾으려면 (GNU 가정 ) 또는 다음 을 /사용할 수 있습니다 .dfdffindmnt

size=$(findmnt -bno size /)
size=$(df -B1 --output=size / | awk 'NR==2{print $1}')

이는 가장 정확한 크기인 바이트 단위의 크기를 제공합니다. 크기를 정수 GB로 내림하려면 1000000000으로 나누면 됩니다.

gigabytes=$((size / 1000000000))

또는 기비바이트 단위로 측정하려면( 기가바이트가 아닌 기비바이트를 의미하는 lvs1024 기반 접미사가 사용됨 ) 다음을 사용합니다.g

gibibytes=$((size / 1024 / 1024 / 1024))

위의 모든 명령은 서로 다른 단위를 지정할 수도 있지만(그러나 기가바이트와 기가바이트를 주의해야 하며 대부분의 명령은 부동 소수점 숫자를 제공하며 다르게 반올림되고 로캘에 따라 다른 문자를 소수점으로 사용할 수 있습니다).

답변2

이 모든 것을 단일 awk호출로 쉽게 통합할 수 있습니다.

lvs | awk '$1=="lv_root" {split($4,a,"."); print a[1]}'

행이 와 같은 첫 번째 필드만 확인하여 프로세스가 종료됩니다 lv_root. 그런 다음 네 번째 필드를 .배열로 분할 a하고 이전 섹션에 해당하는 첫 번째 항목을 인쇄합니다 ..

인쇄 크기를 정수로 사용하면 동일한 효과를 얻을 수 있으며 printf부동 소수점 숫자를 가장 가까운 숫자로 자릅니다.더 작은정수(흥미롭게도 숫자 부분 뒤의 "텍스트 부분"을 무시합니다. 이 경우 g):

lvs | awk '$1=="lv_root" {printf "%d\n",$4}'

노트이는 크기를 가장 가까운 정수로 반올림하는 것과 동일하지 않습니다. 이것을 달성하려면 다음을 사용할 수 있습니다.

lvs | awk '$1=="lv_root" {printf "%.0f\n",$4}'

답변3

awk '$1 ~/root$/{gsub(/\..*/,"",$NF);print $NF}' filename

산출

praveen:/tmp$ awk '$1 ~/root$/{gsub(/\..*/,"",$NF);print $NF}' filename
100
praveen@praveen:/tmp$ 

관련 정보