আমি যখন আরও বেশি অনুরোধ করব তখন কেন ডিডি কেবল 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.