Answers:
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
显示两位小数。
bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
numfmt
(GNU Coreutils的一部分)可以在这里使用:
$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB
要查找磁盘大小(以兆字节为单位),
$ 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.*/\$
sudo fdisk
是有问题的项目范围。
如果大小以千字节为单位,则需要通过Bash内置表达式进行计算。假设块大小= 512B,则必须键入:
echo $((`fdisk -s /dev/sda`*512/1024))
这将在KiB中显示磁盘大小。要进一步讲,只需/1024
在表达式的末尾添加:
echo $((`fdisk -s /dev/sda`*512/1024/1024))
这将在MiB中显示磁盘大小,依此类推。
$[...]
格式已被弃用,并且man bash
说,“将在以后的版本中删除”。Shell算术当前首选的格式是$((...))
。
sudo
缺少两个命令,因此复制和粘贴会产生错误。同样,度量单位不会打印出来。
echo $((($(cat /sys/block/sda/size)*512)/1024**3))GB
您可以使用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
有一个称为单位的工具,可用于单位转换:
$ 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
df -h /
。/
以-h
uman可读格式显示的大小。