如何通过终端将千字节转换为兆字节或千兆字节?


16

我尝试查找磁盘的大小,因此我运行了以下命令

$ sudo fdisk -s /dev/sda
976762584

如上图所示。我认为976762584磁盘的size()以千字节为单位显示。如何通过终端将值转换为兆字节或千兆字节以更好地理解?


1
这会做的伎俩:df -h //-human可读格式显示的大小。
blade19899 '16

fdisk -s也已被弃用,因此可能更好使用blockdev --getsize64
bac0n

@ blade19899,它将获得分区的大小而不是整个磁盘的大小
bac0n

Answers:


10

Shell执行固定宽度的整数算法,不检查溢出。因此,在进行可能涉及大量数字或分数的计算时,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=2告诉bc显示两位小数。


我喜欢在以下情况下使用herestrings:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414 '17


4

在awk中

要查找磁盘大小(以兆字节为单位),

$ 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说,“将在以后的版本中删除”。Shell算术当前首选的格式是$((...))
John1024 '04 -4-25

@ John1024感谢您的来信。没想到双括号语法是合适的。
Danatela 2014年

由于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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.