সংক্ষিপ্তসার: ddএকটি ক্র্যাংকি সরঞ্জাম যা সঠিকভাবে ব্যবহার করা শক্ত। এটি আপনাকে বলে এমন অসংখ্য টিউটোরিয়াল সত্ত্বেও এটি ব্যবহার করবেন না। ddএর সাথে একটি "ইউনিক্স স্ট্রিট ক্রেডিট" ভিবি যুক্ত রয়েছে - তবে আপনি কী করছেন তা যদি আপনি সত্যিই বুঝতে পারেন তবে আপনি জানতে পারবেন যে এটি আপনাকে 10 ফুট খুঁটির সাথে স্পর্শ করা উচিত নয়।
ddreadপ্রতি ব্লক সিস্টেমে একটি কল দেয় (এর মান দ্বারা সংজ্ঞায়িত bs)। readসিস্টেম কলটি নির্দিষ্ট বাফার আকারের যতটা ডেটা দেয় তার কোনও গ্যারান্টি নেই । এটি নিয়মিত ফাইল এবং ব্লক ডিভাইসের জন্য কাজ করতে ঝোঁক, তবে পাইপ এবং কিছু অক্ষর ডিভাইসের জন্য নয়। দেখুন ডেডি কখন অনুলিপি করার উপযুক্ত? (বা, কখন পড়বেন) (এবং আংশিক লিখুন) আরও তথ্যের জন্য। যদি readসিস্টেম কল একেরও কম পূর্ণ ব্লক ফেরত দেয় তবে ddআংশিক ব্লক স্থানান্তর করে। এটি এখনও নির্দিষ্ট সংখ্যক ব্লকের অনুলিপি করে, তাই স্থানান্তরিত বাইটের মোট পরিমাণ অনুরোধের চেয়ে কম হয়।
"আংশিক পঠন" সম্পর্কে সতর্কতা আপনাকে ঠিক এটি বলে: একটি পাঠ আংশিক ছিল, তাই ddএকটি অসম্পূর্ণ ব্লক স্থানান্তরিত করে। ব্লকের গণনায়, এর +1অর্থ একটি ব্লক আংশিকভাবে পড়া হয়েছিল; আউটপুট গণনা হ'ল +0, সমস্ত ব্লকগুলি পঠিত হিসাবে লিখিত ছিল।
এই ডেটার যদৃচ্ছতা প্রভাবিত করে না: সমস্ত বাইট যে ddআউট লিখেছেন বাইট এটি থেকে পড়তে হয় /dev/urandom। তবে আপনি প্রত্যাশার চেয়ে কম বাইট পেয়েছেন।
লিনাক্সের /dev/urandomযথেচ্ছ বৃহত অনুরোধগুলি (উত্স: extract_entropy_userইন drivers/char/random.c) সংযোজন করে , তাই ddএটি পড়ার পরে সাধারণত নিরাপদ। তবে বিপুল পরিমাণে ডেটা পড়তে সময় লাগে। প্রক্রিয়াটি যদি একটি সিগন্যাল পায় তবে readসিস্টেম কলটি তার আউটপুট বাফারটি পূরণ করার আগে ফিরে আসে। এটি স্বাভাবিক আচরণ এবং অ্যাপ্লিকেশনগুলির readএকটি লুপে কল করার কথা ; ddএটি করবেন না, historicalতিহাসিক কারণে ( ddএর উত্সগুলি সংকীর্ণ, তবে এটি টেপগুলি অ্যাক্সেস করার একটি সরঞ্জাম হিসাবে শুরু হয়েছে বলে মনে হয়, যার অদ্ভুত প্রয়োজনীয়তা রয়েছে এবং এটি কখনও কখনও সাধারণ-উদ্দেশ্যে সরঞ্জাম হিসাবে অভিযোজিত হয়নি)। আপনি যখন অগ্রগতি পরীক্ষা করেন, এটি ddপ্রক্রিয়াটি এমন সংকেত প্রেরণ করে যা পাঠকে বাধা দেয়। আপনার কাছে কতগুলি বাইট জেনে যাওয়ার মধ্যে একটি পছন্দ আছেddসামগ্রিকভাবে অনুলিপি করবেন (এটিকে বাধা না দেওয়ার বিষয়টি নিশ্চিত করুন - কোনও অগ্রগতি চেক নেই, কোনও স্থগিতাদেশ নেই), বা ddএখনও অবধি কতগুলি বাইট অনুলিপি করেছেন তা জেনেছেন, এই ক্ষেত্রে আরও কতগুলি বাইট অনুলিপি করবেন তা আপনি জানেন না।
ddজিএনইউ কোর্টিলস- এর সংস্করণটির (যেমন এমবেডেড লিনাক্স এবং সাইগউইন-তে পাওয়া যায়) একটি পতাকা রয়েছে fullblockযা একটি লুপে (এবং এর জন্য ডাইটো ) ddকল করতে বলে এবং এভাবে সর্বদা সম্পূর্ণ ব্লক স্থানান্তর করে। ত্রুটি বার্তাটি আপনাকে এটি ব্যবহার করার পরামর্শ দেয়; আপনার সবসময় এটি ব্যবহার করা উচিত (উভয় ইনপুট এবং আউটপুট পতাকাগুলিতে) খুব বিশেষ পরিস্থিতিতে (বেশিরভাগ সময় টেপগুলি অ্যাক্সেস করার সময়) ব্যতীত - আপনি যদি কিছুটা ব্যবহার করেন তবে তা হ'ল: এখানে আরও ভাল সমাধান থাকে (নীচে দেখুন)।readwritedd
dd if=/dev/urandom iflag=fullblock oflag=fullblock of=file bs=1M count=1000000
কী ddকরবে তা নিশ্চিত করার আর একটি সম্ভাব্য উপায় হ'ল ১ টি ব্লকের আকার পাস করা Then তারপরে আপনি বলতে পারবেন যে ব্লক গণনা থেকে কয়টি বাইট অনুলিপি করা হয়েছিল, যদিও আমি নিশ্চিত না যে readপ্রথমটি পড়ার আগে কোনও ব্যত্যয় ঘটলে কী হবে বাইট (যা অনুশীলনে খুব সম্ভবত না তবে ঘটতে পারে)। তবে এটি কার্যকর হলেও এটি খুব ধীর very
ব্যবহার ddসম্পর্কে সাধারণ পরামর্শটি ব্যবহার করবেন নাdd । যদিও ddডিভাইসগুলিতে অ্যাক্সেসের জন্য প্রায়শই নিম্ন-স্তরের কমান্ড হিসাবে বিজ্ঞাপন দেওয়া হয় তবে এটি আসলে তেমন কোনও বিষয় নয়: সমস্ত যাদুটি ডিভাইস ফাইলে (দ্য /dev/…) অংশে ঘটে থাকে , ddএটি কেবলমাত্র একটি সাধারণ সরঞ্জাম যা অপব্যবহারের উচ্চ সম্ভাবনার সাথে ডেটা ক্ষতিগ্রস্থ হয় resulting । বেশিরভাগ ক্ষেত্রে, কমপক্ষে লিনাক্সে আপনি যা চান তার করার একটি সহজ এবং নিরাপদ উপায় রয়েছে।
উদাহরণস্বরূপ, কোনও ফাইলের শুরুতে নির্দিষ্ট সংখ্যক বাইট পড়ার জন্য, কেবল কল করুন head:
head -c 1000000m </dev/urandom >file
আমি আমার মেশিনে একটি দ্রুত বেঞ্চমার্ক তৈরি করেছি এবং ddএকটি বৃহত ব্লকের আকার এবং এর মধ্যে কোনও পারফরম্যান্সের পার্থক্য লক্ষ্য করি নি head।
আপনি কি আবার গোড়া কিছু বাইট লাফালাফি করার প্রয়োজন হলে, নল tailমধ্যে head:
dd if=input of=output count=C bs=B seek=S
<input tail -c +$((S*B+1)) | head -c $((C*B)) >output
আপনি যদি অগ্রগতি দেখতে চান lsofতবে ফাইলটি অফসেট দেখতে কল করুন। এটি কেবল একটি নিয়মিত ফাইল (আপনার উদাহরণের আউটপুট ফাইল) এ কাজ করে, কোনও অক্ষর ডিভাইসে নয়।
lsof -a -p 1234 -d 1
cat /proc/1234/fdinfo/1
পাইপলাইনে অতিরিক্ত আইটেম ব্যয়ে আপনি pvঅগ্রগতি প্রতিবেদন ( dd'এর চেয়ে ভাল ) পেতে কল করতে পারেন (পারফরম্যান্স-ভিত্তিক, এটি সবেমাত্র অনুধাবনযোগ্য)।