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
एक कम यादृच्छिक "यादृच्छिक" मूल्य के लिए उपयोग करें , या अपने एंट्रोपी पूल (एक लूप में, और आवश्यकतानुसार प्रतीक्षा करें) की जांच करें ...