ddहै डिज़ाइन किया गया चर आदानों आकार से पढ़ने के लिए यह आम तौर पर अपने निपटान में सबसे अच्छा उपकरण है आप इसे किया की जरूरत है - रोकने के लिए तुरंत क्योंकि ddवर्तमान बफ़र नहीं होगा कुछ भविष्य में पढ़ता है write() (जब तक आप बहुत स्पष्ट रूप से इसे IBS से बड़ा ओ बीएस साथ इस तरह से कॉन्फ़िगर) , लेकिन इसके बजाय write()यह सब कुछ पढ़ता है जैसे ही यह read()होगा (और वैकल्पिक रूप से इसे संसाधित करता है) ।
यहाँ कुछ महत्वपूर्ण परिभाषाएँ दी गई हैं :
ibs=expr
- इनपुट ब्लॉक आकार निर्दिष्ट करें, बाइट्स में, (डिफ़ॉल्ट रूप से 512) है ।
expr
obs=expr
- आउटपुट ब्लॉक आकार निर्दिष्ट करें, बाइट्स में, (डिफ़ॉल्ट रूप से 512) है ।
expr
bs=expr
- इनपुट और आउटपुट ब्लॉक आकार दोनों को
exprबाइट्स, सुपरस्डिंग ibs=और पर सेट करें obs=। कोई रूपांतरण के अलावा अन्य हैं sync, noerrorऔर notruncनिर्दिष्ट किया जाता है, प्रत्येक इनपुट ब्लॉक कम ब्लॉक के योग के बिना एक भी ब्लॉक के रूप में उत्पादन में कॉपी किया जाएगा।
तो आप देखते हैं, जब ibsऔर obsएक साथ परिभाषित कर रहे हैं के रूप में bsतो ibs, लेकिन अन्यथा यदि आप विशिष्ट हैं या तो फिर, - पहले हो सकती है obsया cbsनहीं करता है।
यहाँ एक उदाहरण है जिसमें ibsसबसे महत्वपूर्ण है। आप इस तरह से कुछ कर सकते हैं यदि आप ट्रैक करना चाहते थे कि /dev/randomपूल जल्द ही कैसे भरे ...
dd "ibs=$size" conv=sync "count=$lmt" \
if=/dev/random of="$somefile"
जब तक if=लक्ष्य बिल्कुल ही पठनीय है, तब तक परिणाम हमेशा एक ही आकार की आउटपुट फ़ाइल के रूप में ddआएगा , क्योंकि syncब्लॉक रीड-इन नल पर hronize करेगा । दूसरे शब्दों में, यदि बार के dd read()इनपुट-ब्लॉक के लिए s $((size=10)) $((count=5))और read()फाइल 2 बाइट्स देता है, तो 8 बाइट्स, फिर 12 बाइट्स, फिर 2 बाइट्स, फिर 4 बाइट्स, ddजैसे उसके आउटफिट को कुछ लिखेंगे
2 read bytes 8NULs \
8 read bytes 2NULs \
10 read bytes 0NULs \
4 read bytes 6NULs \
4 read bytes 6NULs
... क्योंकि dd, डिफ़ॉल्ट रूप से, देरी नहीं करता है । इसलिए अगर आपको इन-स्ट्रीम को ट्रैक करने और किसी अन्य प्रक्रिया के लेखन को सीमांकित करने की आवश्यकता है, तो आपके ddलिए उपकरण है।
यदि आप अभी कुछ मात्रा में एक नियमित फ़ाइल के लिए लिख रहे हैं, तो यहां दिए गए अन्य कथनों के विपरीत, आप इसके लिए भी उपयोग कर सकते हैं dd- और काफी आसानी से - लेकिन आपको एक से अधिक और विश्वसनीय अवरोधक कारक की आवश्यकता होगी ।
उदाहरण के लिए, यदि आपने किया:
{ dd ibs="$size" obs="${size}x$block_factor" |
dd bs="${size}x$blockfactor" "count=$lmt"
} <infile >outfile
... पहला इनपुट ddबफ़र के रूप में कई ibs="$size"इनपुट ब्लॉक के रूप में आवश्यक होगा कि इसके और पाइप के बीच obs="${size}x$block_factor"हर write()पाइप के लिए कम से कम एक आउटपुट ब्लॉक भरना आवश्यक हो dd। इसका मतलब यह है कि दूसरा ddउत्पादन को मज़बूती से सीमित कर सकता है count="$lmt"क्योंकि पहले किए गए सभी write()एस अपने i / o ब्लॉकचेज़ से मेल खाएंगे - भले ही इसे बनाने के read()लिए पहले कितने एस को ddकरना पड़े।
और यह कि आप ddकेवल थोड़ी सी गणित के साथ पाइप या अन्य प्रकार की विशेष फ़ाइलों को मज़बूती से पढ़ने के लिए कैसे उपयोग कर सकते हैं ।
/dev/randomयदि आप चाहते हैं कि अंकों की संख्या उत्पन्न करने के लिए पर्याप्त एन्ट्रापी उपलब्ध नहीं है तो ब्लॉक कर देगा। यह केवल उच्च गुणवत्ता वाले psuedo यादृच्छिक "यादृच्छिकता" की उस राशि को इकट्ठा करने में समय लेता है ... या तो/dev/urandomएक कम यादृच्छिक "यादृच्छिक" मूल्य के लिए उपयोग करें , या अपने एंट्रोपी पूल (एक लूप में, और आवश्यकतानुसार प्रतीक्षा करें) की जांच करें ...