Làm cách nào để chuyển đổi Kilobytes thành Megabyte hoặc gigabyte thông qua thiết bị đầu cuối?


15

Tôi cố gắng tìm kích thước của đĩa, vì vậy tôi đã chạy lệnh dưới đây

$ sudo fdisk -s /dev/sda
976762584

Nó cho thấy như trên. Tôi nghĩ rằng kích thước ( 976762584) của đĩa được hiển thị bằng kilobyte. Làm cách nào để chuyển đổi giá trị thành megabyte hoặc gigabyte thông qua thiết bị đầu cuối để hiểu rõ hơn?


1
Điều này sẽ làm cho mẹo : df -h /. Hiển thị kích thước của /một -hđịnh dạng có thể đọc được.
lưỡi19899

fdisk -s cũng không được dùng nữa nên có lẽ tốt hơn để sử dụngblockdev --getsize64
bac0n

@ blade19899 sẽ có kích thước của phân vùng chứ không phải toàn bộ đĩa
bac0n

Câu trả lời:


9

Shell không tính toán số nguyên chiều rộng cố định mà không kiểm tra tràn. Vì vậy, khi thực hiện một phép tính có thể liên quan đến số lượng lớn hoặc phân số, bclà một lựa chọn tốt. Để có được megabyte:

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

Để có được gigabyte:

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

Bài tập scale=2cho biết bcđể hiển thị hai chữ số thập phân.


Tôi thích sử dụng herestrings cho các trường hợp như thế này:bc <<<"scale=2; $(sudo fdisk -s /dev/sda6) / 1024^2"
dimo414

6

numfmt(một phần của GNU Coreutils ) có thể được sử dụng ở đây:

$ sudo fdisk -s /dev/sda | numfmt --to=iec-i --suffix=B --format="%.2f"
931.52MiB

1
Bao gồm đầu ra từ lệnh trong câu trả lời của bạn sẽ làm cho nó hoàn chỉnh hơn.
WinEunuuchs2Unix

3

Trong awk

Để tìm kích thước của đĩa tính bằng Megabyte,

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

Để tìm kích thước của đĩa trong Gigabyte,

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

thay vì sudo fdisk -s /dev/sdabạn có thể sử dụngdf | grep ^\/dev.*/\$
Dean Thay

@DeanRather sudo fdisklà phạm vi dự án được xác định trong câu hỏi.
WinEunuuchs2Unix

3

Nếu kích thước được đưa ra trong Kilobytes, bạn cần tính toán thông qua các biểu thức tích hợp Bash. Giả sử kích thước khối = 512B, bạn phải gõ:

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

Điều này sẽ hiển thị kích thước đĩa trong KiB. Để đi xa hơn, chỉ cần thêm /1024vào cuối biểu thức:

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

Điều này sẽ hiển thị kích thước đĩa trong MiB và như vậy.


2
Làm rất tốt Một lưu ý nhỏ, $[...]định dạng đã không được chấp nhận và, như đã man bashnói, "sẽ bị xóa trong các phiên bản sắp tới." Các định dạng hiện đang được ưa thích cho số học shell là $((...)).
John1024

@ John1024 cảm ơn bạn đã lưu ý. Không đoán được cú pháp ngoặc kép là phù hợp.
Danatela

Sao chép và dán hai lệnh tạo lỗi vì sudobị thiếu. Ngoài ra đơn vị đo không in ra.
WinEunuuchs2Unix

đo lường là sai.
bac0n

nhưng bạn có thể làmecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

Bạn có thể thực hiện điều này một cách tự nhiên với Bash và các số dấu phẩy động. Xác định chức năng này trong ~/.bashrcvà mở lại thiết bị đầu cuối của bạ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 ()

Bây giờ hãy kiểm tra nó:

$ sudo fdisk -s /dev/sda
976762584

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

1

Có một công cụ gọi là các đơn vị, có thể được sử dụng để chuyển đổi đơn vị:

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

Nó có sẵn như là một gói thông qua apt install units.

Đây là một công cụ khá chuẩn, có thể được tìm thấy được cài đặt theo mặc định trên các hệ thống tương tự UNIX khác (ví dụ FreeBSD ). Hãy nhớ rằng cú pháp đơn vị (1) có thể khác nhau giữa các lần triển khai có sẵn trên các hệ điều hành khác nhau. Đây là cùng một chuyển đổi nhưng lần này với các đơn vị FreeBSD (1) :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.