回答:
シェルは、オーバーフローのチェックなしで固定幅整数演算を行います。したがって、大きな数または分数を含む可能性のある計算を行う場合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、小数点以下2桁を表示するよう指示します。
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、「今後のバージョンでは削除される予定です」と言われています。シェル演算で現在推奨されている形式は$((...))です。
sudoが見つからないため、2つのコマンドをコピーして貼り付けるとエラーが発生します。また、測定単位は印刷されません。
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ます。