터미널을 통해 킬로바이트를 메가 바이트 또는 기가 바이트로 변환하는 방법은 무엇입니까?


16

내 디스크의 크기를 찾으려고하므로 아래 명령을 실행했습니다.

$ sudo fdisk -s /dev/sda
976762584

위와 같이 보입니다. 976762584디스크 의 크기 ( )는 킬로바이트로 표시됩니다. 더 나은 이해를 위해 터미널을 통해 값을 메가 바이트 또는 기가 바이트로 어떻게 변환합니까?


1
이것은 트릭을 수행합니다 df -h /. 의 크기를 표시 /A의 -h잃어버린 읽을 수있는 형식.
blade19899

fdisk -s도 더 이상 사용되지 않으므로 사용하는 것이 좋습니다.blockdev --getsize64
bac0n

@ blade19899 전체 디스크가 아닌 파티션의 크기를 가져옵니다
bac0n

답변:


10

셸은 오버플로 확인없이 고정 너비 정수 산술을 수행합니다. 따라서 많은 수 또는 분수가 포함될 수있는 계산을 수행 할 때 bc좋은 선택입니다. 메가 바이트를 얻으려면

$ echo "scale=2; $(sudo fdisk -s /dev/sda6) / 1024" | bc
13641.75

기가 바이트를 얻으려면 :

$ echo "scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2" | bc
12.70

과제 scale=2bc소수점 이하 두 자리를 표시하도록 지시 합니다.


다음과 같은 경우 herestrings을 사용하는 것이 좋습니다.bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414


4

어 wk 지

디스크 크기 (MB)를 찾으려면

$ sudo fdisk -s /dev/sda | awk '{$1=$1/1024; print $1,"MB";}'
953870 MB

기가 바이트 단위의 디스크 크기를 찾으려면

$ sudo fdisk -s /dev/sda | awk '{$1=$1/(1024^2); print $1,"GB";}'
931.513 GB

대신 sudo fdisk -s /dev/sda사용할 수 있습니다df | grep ^\/dev.*/\$
Dean Rather

@DeanRather sudo fdisk는 문제의 프로젝트 범위였습니다.
WinEunuuchs2Unix

3

크기가 킬로바이트로 제공되면 Bash 내장 표현식을 통해 계산해야합니다. 블록 크기가 512B라고 가정하면 다음을 입력해야합니다.

echo $((`fdisk -s /dev/sda`*512/1024))

KiB의 디스크 크기가 표시됩니다. 더 나아가려면 /1024식 끝에 추가하십시오 .

echo $((`fdisk -s /dev/sda`*512/1024/1024))

디스크 크기가 MiB 등으로 표시됩니다.


2
잘 했어요 참고로,이 $[...]형식은 더 이상 사용되지 않으며 man bash"다가오는 버전에서는 제거 될 것입니다." 쉘 산술에 현재 선호되는 형식은 $((...))입니다.
John1024

@ John1024 감사합니다. 이중 괄호 구문이 적절하다고 생각하지 않았습니다.
Danatela

두 명령을 복사하여 붙여 넣으면 sudo누락되어 오류 가 발생합니다 . 또한 측정 단위가 인쇄되지 않습니다.
WinEunuuchs2Unix

측정이 잘못되었습니다.
bac0n

하지만 당신은 할 수 있습니다echo $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

기본적으로 Bash 및 의사 부동 소수점 숫자를 사용하여이 작업을 수행 할 수 있습니다. 이 기능을 정의 ~/.bashrc하고 터미널을 다시여십시오.

function BytesToHuman() {

    # /unix/44040/a-standard-tool-to-convert-a-byte-count-into-human-kib-mib-etc-like-du-ls1/259254#259254

    read StdIn

    b=${StdIn:-0}; d=''; s=0; S=(Bytes {K,M,G,T,E,P,Y,Z}iB)
    while ((b > 1024)); do
        d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))"
        b=$((b / 1024))
        let s++
    done
    echo "$b$d ${S[$s]}"

} # BytesToHuman ()

이제 테스트하십시오.

$ sudo fdisk -s /dev/sda
976762584

$ sudo fdisk -s /dev/sda | BytesToHuman
931.51 MiB

1

단위 변환에 사용할 수있는 단위라는 도구가 있습니다.

$ units -o "%.0f" -t "4 gibibytes" "mebibytes"
4096

를 통해 패키지로 제공됩니다 apt install units.

이 도구는 상당히 다른 표준 도구이며, 다양한 다른 UNIX 계열 시스템 (예 : FreeBSD ) 에 기본적으로 설치되어 있습니다 . units (1) 구문은 다양한 운영 체제에서 사용 가능한 구현마다 다를 수 있습니다. 다음은 동일한 변환이지만 이번에는 FreeBSD units (1) 사용합니다 .

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.