जवाबों:
इसका अर्थ है कि उस bs
आकार के पूर्ण खंड और अतिरिक्त ब्लॉक जो कि bs से छोटे आकार के हैं।
pushd "$(mktemp -d)"
dd if=/dev/zero of=1 bs=64M count=1 # and you get a 1+0
dd if=1 of=/dev/null bs=16M # 4+0
dd if=1 of=/dev/null bs=20M # 3+1
dd if=1 of=/dev/null bs=80M # 0+1
_crap=$PWD; popd; rm -rf "$_crap"; unset _crap
# frostschutz's case
yes | dd of=/dev/null bs=64M count=1 # 0+1
संपादित करें : frostschutz के उत्तर में गैर-पूर्ण ब्लॉक उत्पन्न करने के लिए एक और मामले का उल्लेख किया गया है। पढ़ने योग्य। Https://unix.stackexchange.com/a/17357/73443 भी देखें ।
0+b records out
के लिए b>1
एक पाइप या किसी अन्य स्रोत है कि प्रदान नहीं कर सकते से पढ़ते समय आमतौर पर अधूरा पढ़ता हैं bs=X
डेटा की जल्दी से पर्याप्त। आप dd
डेटा के पूर्ण ब्लॉक का उपयोग करने के लिए प्रतीक्षा करने के लिए बाध्य कर सकते हैं iflag=fullblock
। यह विकल्प विशेष रूप से उपयोगी है यदि आप भी count=X
गिनती के रूप में उपयोग कर रहे हैं तो अपूर्ण ब्लॉकों को भी गिना जाता है, इसलिए यह फुलब्लॉक के बिना अविश्वसनीय है ...
दर्जनों मानक कमांड लाइन उपयोगिताओं हैं जो एक डिस्क्रिप्टर पर लटका सकते हैं और इनपुट की प्रतीक्षा कर सकते हैं। यह बहुत ज्यादा है कि वे सभी कैसे काम करते हैं। dd
यह अद्वितीय है कि यह आपको दिखा सकता है कि एक विवरणक अभी कैसा दिखता है ।
व्यक्तिगत रूप से, मैं वास्तव में GNU iflag=fullblock
विकल्प के पीछे की उपयोगिता को नहीं समझता । मेरा मतलब है, आप cat
अपने इनपुट को कम से कम आसानी से और बिना किसी चिंता के केवल i / o ब्लॉक आकार के बारे में बता सकते हैं।
लेकिन एक धारा का dd
एक हिस्सा ले सकते हैं - और यह एक यथोचित आधुनिक प्रणाली पर read()
/ write()
सीमाओं पर कर सकता है।
{ ( sleep 1 #don't write() til dd is definitely setup
printf 123 #write() 3 bytes
printf %-30s\\n 456 #write() 31 bytes
printf you\ there\? #write() 10 bytes
)| dd bs=64 count=2 conv=sync| #2 64 byte read()/write() \0-padded blocks
od -vtc #show it with octal radices
} 2>/dev/null #drop stderr
0000000 1 2 3 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000100 4 5 6
0000120 \n \0
0000140 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000160 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000200
dd
एक read()
प्रति इनपुट ब्लॉक करता है। यदि यह जिस फ़ाइल में कोशिश read()
करता है उसके पास उतना डेटा नहीं है जितना उसने अनुरोध किया है कि इससे कोई फर्क नहीं पड़ता - एक इनपुट के एक ब्लॉक के read()
रूप में गिना जाता है । यह कैसे काम करता है - यह प्राथमिक उपयोगिता है।dd
जब इसने अपना काम किया है, तो dd
इसके द्वारा निपटाए गए सभी इनपुट / आउटपुट ब्लॉकों पर रिपोर्ट। उपरोक्त आदेश फिर से चल रहा है, लेकिन इस बार के बजाय stdout छोड़ने ...
dd: warning: partial read (3 bytes); suggest iflag=fullblock
0+2 records in
2+0 records out
128 bytes (128 B) copied, 1.00161 s, 0.1 kB/s
हर बार dd
की थी read(0,&in,64)
read
वापस कम आया था - क्योंकि इसके stdin फ़ाइल वर्णनकर्ता वह अपने अनुरोध को पूरा करने के लिए जब यह इसे बनाया पर्याप्त बाइट्स इंतजार कर नहीं था। और इसलिए dd
read()
0 पूर्ण इनपुट रिकॉर्ड, और 2 लघु। यही उन रिपोर्टों का मतलब है।