टर्मिनल के माध्यम से किलोबाइट्स को मेगाबाइट या गीगाबाइट में कैसे परिवर्तित करें?


16

मैं अपनी डिस्क का आकार खोजने की कोशिश करता हूं, इसलिए मैंने नीचे की कमांड को चलाया

$ sudo fdisk -s /dev/sda
976762584

यह ऊपर की तरह दिखाता है। मुझे लगता 976762584है कि डिस्क का आकार ( ) किलोबाइट्स में दिखाया गया है। बेहतर समझ के लिए मैं टर्मिनल के माध्यम से मेगाबाइट या गीगाबाइट के मूल्य को कैसे परिवर्तित करूं?


1
यह चाल होगी df -h /:। /एक -human पठनीय प्रारूप का आकार प्रदर्शित करें ।
ब्लेड

fdisk -s को भी उपयोग करने के लिए बेहतर ढंग से blockdev --getsize64
चित्रित किया गया है

@ ब्लेड 19899 जिसे पूरे डिस्क नहीं विभाजन का आकार मिलेगा
bac0n

जवाबों:


10

शेल फिक्स्ड-चौड़ाई पूर्णांक अंकगणित करता है जिसमें अतिप्रवाह नहीं होता है। इसलिए, जब एक गणना करना जिसमें बड़ी संख्या या अंश शामिल हो सकते हैं, 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"
dimo414


4

जागने में

मेगाबाइट में डिस्क का आकार खोजने के लिए,

$ 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प्रोजेक्ट स्कोप को प्रश्न में परिभाषित किया गया था।
विनयुनुच्स

3

यदि आकार किलोबाइट्स में दिया गया है, तो आपको बैश बिल्ट-इन अभिव्यक्तियों के माध्यम से गणना करने की आवश्यकता है। ब्लॉक आकार = 512B मानकर, आपको टाइप करना होगा:

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

यह KiB में डिस्क का आकार दिखाएगा। आगे जाने के लिए, बस /1024अभिव्यक्ति के अंत में जोड़ें :

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

यह MiB और इतने पर डिस्क आकार दिखाएगा।


2
अच्छी तरह से किया। एक मामूली नोट के रूप में, $[...]प्रारूप को हटा दिया गया है और, जैसा man bashकि कहा गया है, "आगामी संस्करणों में हटा दिया जाएगा।" शेल अंकगणित के लिए वर्तमान में पसंदीदा प्रारूप है $((...))
जॉन 1024

@ जॉन 1024 नोट के लिए धन्यवाद। अनुमान नहीं लगाया कि डबल ब्रैकेट सिंटैक्स उचित है।
दानतला

दो आदेशों को कॉपी और पेस्ट करना त्रुटि उत्पन्न करता है क्योंकि sudoगायब है। इसके अलावा माप की इकाई प्रिंट आउट नहीं करती है।
विनयुनुच्स

माप गलत है।
Bac0n

लेकिन आप कर सकते हैंecho $((($(cat /sys/block/sda/size)*512)/1024**3))GB
bac0n

1

आप इसे मूल रूप से बैश और छद्म फ्लोटिंग पॉइंट नंबरों के साथ कर सकते हैं। इस फ़ंक्शन को अपने में परिभाषित करें ~/.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 ) पर डिफ़ॉल्ट रूप से स्थापित किया जा सकता है । ध्यान रखें कि विभिन्न ऑपरेटिंग सिस्टम पर उपलब्ध कार्यान्वयनों में यूनिट (1) सिंटैक्स भिन्न हो सकते हैं। यहाँ एक ही रूपांतरण है लेकिन इस बार FreeBSD इकाइयों (1) के साथ :

$ units -o "%0.f" -t "4 gigabytes" "megabytes"
4096
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.