ডিডির "এ + বি রেকর্ড" পরিসংখ্যানগুলিতে যথাক্রমে দুটি সংখ্যাটির অর্থ কী?


16

ddপরিসংখ্যানের প্রথম 2 টি লাইনের নিম্নলিখিত ফর্ম্যাট রয়েছে:

a+b records in
c+d records out

2 সংখ্যার মান কেন? এই প্লাস চিহ্নটির অর্থ কী? এটি সাধারণত a+0, তবে কখনও কখনও যখন আমি বড় ব্লকের আকার, ডিডি প্রিন্ট ব্যবহার করি0+b records out

উত্তর:


16

এর অর্থ, সেই 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

সম্পাদনা : ফ্রয়েস্টচুটজের উত্তরে পূর্ণ-অবরুদ্ধ ব্লকগুলি উত্পন্ন করার জন্য অন্য একটি মামলার উল্লেখ রয়েছে। পরার যোগ্য. Https://unix.stackexchange.com/a/17357/73443 এও দেখুন ।


10

0+b records outকারণ b>1সাধারণত পাইপ বা অন্য উত্স থেকে পড়ার সময় অসম্পূর্ণ পাঠযোগ্য যা bs=Xদ্রুত পর্যাপ্ত ডেটা সরবরাহ করতে পারে না । আপনি ddব্যবহার করে ডেটা সম্পূর্ণ ব্লকের জন্য অপেক্ষা করতে বাধ্য করতে পারেন iflag=fullblock। এই বিকল্পটি বিশেষত কার্যকর যদি আপনি count=Xগণনা হিসাবেও অসম্পূর্ণ ব্লক গণনা করেন তবে এটি সম্পূর্ণ ব্লক ছাড়া বিশ্বাসযোগ্য নয় ...


4

এমন কয়েক ডজন স্ট্যান্ডার্ড কমান্ড লাইন ইউটিলিটি রয়েছে যা কোনও বিবরণীতে ঝুলতে পারে এবং ইনপুটটির জন্য অপেক্ষা করতে পারে। তারা সবাই কীভাবে কাজ করে তা এটি বেশ সুন্দর। ddএটি অনন্য যে এটি আপনাকে দেখায় যে কোনও বিবরণী এখনই দেখতে কেমন লাগে ।

ব্যক্তিগতভাবে, আমি সত্যিই জিএনইউ iflag=fullblockবিকল্পের পিছনে প্রয়োজনীয়তা বুঝতে পারি না । আমি বলতে চাইছি, আপনি কেবলমাত্র catনিজের ইনপুটটি কমপক্ষে সহজেই এবং আই / ও ব্লক মাপের মোটেও চিন্তা না করেই করতে পারেন।

তবে একটি স্ট্রিমের 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

ddread()ইনপুট ব্লক প্রতি একক করে । ফাইল এটা করার চেষ্টা করে তাহলে read()- অনেক তথ্য হিসাবে নেই যেমন অনুরোধ করেছে এটা কোন ব্যাপার না এক read() হিসাবে গন্য এক ইনপুটের ব্লক। এটি কিভাবে এটি কাজ করে - এটিই ddপ্রাথমিক উপযোগ।

এটি যখন কাজটি সম্পন্ন করে, এর ddসাথে সম্পর্কিত সমস্ত ইনপুট / আউটপুট ব্লকগুলির প্রতিবেদনগুলি। উপরের কমান্ডটি আবার চালানো হচ্ছে, তবে এবার পরিবর্তে স্টডআউট হ্রাস হচ্ছে ...


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 সংক্ষিপ্ত। এই রিপোর্টগুলির অর্থ এটাই।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.