Nasıl Kilobayt dönüştürmek için Megabayt veya gigabayt terminal aracılığıyla?


16

Diskimin boyutunu bulmaya çalışıyorum, bu yüzden aşağıdaki komutu çalıştırdım

$ sudo fdisk -s /dev/sda
976762584

Yukarıdaki gibi gösterir. Sanırım 976762584diskin boyutu ( ) kilobayt olarak gösteriliyor. Daha iyi anlaşılması için değeri terminalden megabayt veya gigabayta nasıl dönüştürebilirim?


1
Bu işi halleder: df -h /. Boyutunu gösterir /bir de -hUman okunabilir formatta.
blade19899

fdisk -s da kullanım için çok muhtemelen daha iyi kullanımdan kaldırıldıblockdev --getsize64
bac0n

@ blade19899 tüm disk değil bölümün boyutunu alacak
bac0n

Yanıtlar:


10

Kabuk, taşma kontrolü olmaksızın sabit genişlikli tamsayı aritmetiği yapar. Bu nedenle, çok sayıda veya kesir içerebilecek bir hesaplama yaparken, bciyi bir seçimdir. Megabayt almak için:

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

Gigabayt almak için:

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

Ödev iki ondalık basamak göstermeyi scale=2söyler bc.


Benestrings böyle durumlarda için kullanmayı seviyorum:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414


4

Awk içinde

Diskin boyutunu Megabayt cinsinden bulmak için,

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

Diskin boyutunu Gigabyte cinsinden bulmak için,

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

yerine sudo fdisk -s /dev/sdakullanabilirsinizdf | grep ^\/dev.*/\$
Dean Rather

@DeanRather söz sudo fdiskkonusu proje kapsamında tanımlandı.
WinEunuuchs2Unix

3

Boyut Kilobayt olarak verilirse, Bash yerleşik ifadeleri aracılığıyla hesaplamanız gerekir. Blok boyutu = 512B varsayarsak, şunu yazmanız gerekir:

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

Bu, KiB cinsinden disk boyutunu gösterecektir. Daha ileri gitmek /1024için ifadenin sonuna ekleyin :

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

Bu MiB ve benzeri disk boyutunu gösterecektir.


2
Güzel yapılmış. Küçük bir not olarak, $[...]biçim kullanımdan kaldırılmıştır ve man bashdediği gibi "gelecek sürümlerde kaldırılacaktır." Kabuk aritmetiği için şu anda tercih edilen biçim $((...)).
John1024

@ John1024 not için teşekkürler. Çift parantez sözdiziminin uygun olduğunu tahmin etmedim.
Danatela

İki komutu kopyalayıp yapıştırmak sudoeksik olduğu için hata üretir . Ayrıca ölçü birimi yazdırılmaz.
WinEunuuchs2Unix

ölçüm yanlış.
bac0n

ama yapabilirsinecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

Bunu yerel olarak Bash ve sözde kayan nokta sayılarıyla yapabilirsiniz. Bu işlevi kendinizde tanımlayın ~/.bashrcve terminalinizi yeniden açın:

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

Şimdi test edin:

$ sudo fdisk -s /dev/sda
976762584

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

1

Birim dönüştürme için kullanılabilecek birimler adı verilen bir araç vardır:

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

Üzerinden paket olarak temin edilebilir apt install units.

Diğer standart UNIX benzeri sistemlere (ör . FreeBSD ) varsayılan olarak kurulmuş bulunan oldukça standart bir araçtır . Birimler (1) sözdiziminin çeşitli işletim sistemlerinde bulunan uygulamalar arasında farklılık gösterebileceğini unutmayın. İşte aynı dönüşüm ancak bu sefer FreeBSD birimleriyle (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.