আমি যখন আরও বেশি অনুরোধ করব তখন কেন ডিডি কেবল 128 বাইটগুলি / dev / এলোমেলোভাবে অনুলিপি করে?


10

আমি ddকমান্ডের আউটপুট বুঝতে চেষ্টা করছি । আমি চেষ্টা করেছিলাম

dd if=/dev/zero of=/dev/null bs=512 count=1

এবং পেয়েছি (যেমন প্রত্যাশিত):

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s

তবে আমি যখন চেষ্টা করেছি

dd if=/dev/random of=/dev/null bs=512 count=1

আমি পেয়েছি

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s

কেন এটি কেবল 128 বাইট অনুলিপি করছে?


দেখুন superuser.com/questions/359599/... / dev / র্যান্ডম এবং urandom আরো একটি সম্পূর্ণ আলোচনার জন্য
— BobT

উত্তর:


8

আপনার ব্যবহার করতে হবে /dev/urandom, বা "অবরুদ্ধ করা" এলোমেলো উত্স।

/dev/randomবিট উত্সের এলোমেলোতা বাড়ানোর জন্য এক ধরণের এনট্রপি পুল ব্যবহার করে। এই পদ্ধতিটি কেবলমাত্র এন্ট্রপি পুলের অবস্থার উপর ভিত্তি করে যতগুলি এলোমেলো বিট / বাইটগুলি ফিরিয়ে আনতে পারে ততক্ষণে ফিরে আসবে, সুতরাং যদি কোনও হার্ডওয়ারের এলোমেলো সংখ্যা জেনারেটর ব্যবহার করা হয় তবে এটি কখনও কখনও স্থির হতে পারে। থেকে লিনাক্স র manpage :

জেনারেটর এছাড়াও এনট্রপি পুলে শব্দ বিটের সংখ্যার একটি অনুমান রাখে। এই এনট্রপি পুল থেকে এলোমেলো সংখ্যা তৈরি করা হয়।

/dev/urandomফাইল অভ্যন্তরীন পুকুর পুনঃব্যবহার যতদিন না পর্যন্ত আপনি প্রয়োজন হিসাবে নম্বর জেনারেট করতে যেমন হল রাখে। এর পার্শ্ব প্রতিক্রিয়া হ'ল: ক্রিপ্টোগ্রাফিক উদ্দেশ্যে ব্যবহার করবেন না/dev/urandom , কারণ এটি উত্পাদিত বিটের চেয়ে কম এলোমেলো /dev/random। বিস্তারিত জানার জন্য উপরের ম্যানপেজ লিঙ্কটি দেখুন।



3

যেহেতু পঠন /dev/randomকেবলমাত্র উপলব্ধ বাইটের পরিমাণ ফেরত দেয় তাই আপনাকে ব্লক আকার 1 নির্দিষ্ট করতে হবে । আপনার উদাহরণে, আপনি ব্লকের আকার 512 এ সেট করেছেন যা প্রথম পড়ার পরে ব্যর্থ হয়।

অতএব, সঠিকভাবে 512 বাইট পড়ার যুক্তিগুলি হ'ল:

dd if=/dev/random of=filename bs=1 count=512

নোটটি যতক্ষণ না সিস্টেমে সমস্ত ডেটা উত্পন্ন করার জন্য পর্যাপ্ত এনট্রপি রয়েছে তা অবরুদ্ধ থাকবে Note এভাবেই /dev/randomকাজ করে। আপনি যদি অপেক্ষা করতে না চান এবং আপনি কম এনট্রপি দিয়ে ভাল থাকেন তবে /dev/urandomপরিবর্তে ব্যবহার করুন। বেশিরভাগ ক্ষেত্রে ক্ষেত্রে ব্যবহার /dev/urandomপছন্দ করা হয়।


ব্যাখ্যার জন্য +1, যদিও এটি বলা উচিত যে 512 হিসাবে বাইট গণনা ব্যবহার করে /dev/randomকার্যত অকেজো হয়ে যায়, কারণ আদেশটি শেষ হতে অনেক মিনিট সময় নিতে পারে। এছাড়াও, এমনকি bs=512 count=1এটির সাথেও মনে হয় যে কলটি এখনও অবরুদ্ধ আছে যদি কোনও বাইট পাওয়া না যায়, সঠিক? স্যুইচিং bsএবং countমানগুলির বিকল্প হ'ল ব্যবহার করা iflag=fullblock; যেমন bs=512 count=1 iflag=fullblock,।
— mklement0

আইএমএইচও, এই উত্তরটি @ ব্রেকথ্রু'র একটিতে মিশ্রিত করা উচিত। (ব্রেকথ্রু যখন ছিল না তখন এটি আমার সমস্যার উত্তর ছিল)।
— সুপারবব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.