Como converter Kilobytes para Megabytes ou gigabytes através do terminal?


15

Eu tento encontrar o tamanho do meu disco, então executei o comando abaixo

$ sudo fdisk -s /dev/sda
976762584

Mostra como acima. Eu acho que o tamanho ( 976762584) do disco é mostrado em kilobytes. Como faço para converter o valor em megabytes ou gigabytes através do terminal para melhor entendimento?


11
Isso faria o truque: df -h /. Exiba o tamanho de /em um -hformato legível.
blade19899

fdisk -s também está obsoleta por isso provavelmente melhor usoblockdev --getsize64
bac0n

@ blade19899 que terá o tamanho da partição não o disco inteiro
bac0n

Respostas:


9

O shell faz aritmética inteira de largura fixa, sem verificação de estouro. Portanto, ao fazer um cálculo que possa envolver números grandes ou frações, bcé uma boa escolha. Para obter megabytes:

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

Para obter gigabytes:

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

A atribuição scale=2informa bcpara exibir duas casas decimais.


Eu gosto de usar herestrings para casos como este:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414 23/08


3

Em awk

Para encontrar o tamanho do disco em megabytes,

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

Para encontrar o tamanho do disco em Gigabytes,

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

em vez de sudo fdisk -s /dev/sdavocê pode usardf | grep ^\/dev.*/\$
Dean Rather

@DeanRather sudo fdiskera o escopo do projeto definido em questão.
WinEunuuchs2Unix

3

Se o tamanho for fornecido em kilobytes, você precisará calcular através das expressões internas do Bash. Supondo tamanho do bloco = 512B, você deve digitar:

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

Isso mostrará o tamanho do disco no KiB. Para ir além, basta adicionar /1024ao final da expressão:

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

Isso mostrará o tamanho do disco no MiB e assim por diante.


2
Bem feito. Como observação secundária, o $[...]formato foi descontinuado e, como man bashdiz, "será removido nas próximas versões". O formato atualmente preferido para a aritmética de shell é $((...)).
precisa saber é o seguinte

@ John1024 obrigado pela nota. Não acho que a sintaxe entre colchetes duplos seja apropriada.
Danatela

Copiar e colar dois comandos gera erro porque sudoestá faltando. Além disso, a unidade de medida não é impressa.
WinEunuuchs2Unix

medição está errada.
bac0n

mas você poderia fazerecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n 9/10/1919

1

Você pode fazer isso nativamente com números de ponto Bash e pseudo-flutuante. Defina esta função no seu ~/.bashrce reabra o seu terminal:

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 ()

Agora teste:

$ sudo fdisk -s /dev/sda
976762584

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

1

Existe uma ferramenta chamada units, que pode ser usada para conversão de unidades:

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

Está disponível como um pacote via apt install units.

É uma ferramenta bastante padrão, que pode ser encontrada instalada por padrão em vários outros sistemas semelhantes ao UNIX (por exemplo, FreeBSD ). Lembre-se de que a sintaxe das unidades (1) pode diferir nas implementações disponíveis em vários sistemas operacionais. Aqui está a mesma conversão, mas desta vez com as unidades do FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.