मुझे यह निर्धारित करने के लिए बैश में एक कमांड चाहिए कि लिनक्स ब्लॉक डिवाइस में सभी 0 बाइट्स हैं या नहीं। मुझे पता है कि मैं डिवाइस पर हेक्सडंप कर सकता हूं और आउटपुट को पार्स करने का प्रयास कर सकता हूं, लेकिन क्या कुछ और अधिक सुरुचिपूर्ण है? अगर यह किसी अन्य स्क्रिप्टिंग भाषा में आसानी से किया जा सकता है, तो मुझे भी जानना अच्छा लगेगा।

1
terryma 2 अगस्त 2011, 04:15
1
/dev/zero से किसी प्रकार की तुलना का पता लगाना शुरू करने के लिए एक जगह हो सकती है
 – 
Merlyn Morgan-Graham
2 अगस्त 2011, 04:21

2 जवाब

सबसे बढ़िया उत्तर

मैंने डिवाइस के पहले 1MB को पढ़ने के लिए निम्नलिखित का उपयोग करके समाप्त किया

dd if=/dev/zero bs=1024 count=1024 | sed -e 's/\o00//g' | wc -c

सभी 0 बाइट वाले डिवाइस के लिए, यह परिणाम के रूप में 0 लौटाएगा।

1
terryma 3 अगस्त 2011, 04:23

सभी 0 बाइट असंभव है, क्योंकि कई उपकरणों के लिए यह कभी समाप्त नहीं होगा (/dev/zero का कोई अंत नहीं है)। आप पहले कुछ बाइट्स की जांच कर सकते हैं ( /dev/zero को उस स्ट्रीम से बदलें जिसका आप परीक्षण कर रहे हैं):

count=0
while IFS= read -r -d ''
do
    if [ -z "$REPLY" ]
    then
        let count++
    else
        echo "Found non-NUL character"
        break
    fi
    if [ $count -eq 5 ]
    then
        echo "Found 5 NUL characters at the start of the stream"
        break
    fi
done < /dev/zero
1
l0b0 2 अगस्त 2011, 13:29