بررسی دستور dd
با استفاده از dd میتونیم یک فایل رو کپی کنیم، به یک فرمت دیگه تبدیل کنیم، فایل های سیستمی (پارتیشن های فلش مموری، هارد دیسک و...) رو فرمت کنیم؛ دستور dd در لینوکس مخفف data definition است.
فرم کلی:
dd if="path_to_source_file" of="path_to_destination_file"
در بالا مقدار if مسیر فایل مبدأ است و مقدار of مسیر مقصد یعنی جاییه که فایل میخوایم کپی بشه یا اصطلاحا مسیر خروجیمونه.
آرگومان if مخفف input file و آرگومان of مخفف output file است.
اگه اندازه ی فایل بزرگ باشه میتونیم از آرگومان bs استفاده کنیم که مخفف buffered size است؛ این آرگومان، مقداری که در حین انجام عملیات هر سری از فایل مبدأ میخونه و در فایل مبدأ می نویسه رو مشخص می کنه. (مقدار پیشفرض 512 بایت است).
در مثال زیر مقدار bs رو برابر 2 مگابایت قرار دادیم.
dd if="path_to_source_file" of="path_to_destination_file" bs=2M
با آرگومان status میتونیم از روند کپی با خبر بشیم.
آرگومان status دارای سه مقدار none، noxfer و progress است که none فقط پیغام های خطا رو نمایش میده، noxfer وضعیت کپی بعد از پایان کار رو نمایش میده و progress روند کپی حین انجام کپی رو نمایش میده.
dd if="path_to_source_file" of="path_to_destination_file" bs=1M status=progress
با استفاده از آرگومان iflag و آرگومان oflag میتونیم مقادیر ثابتی رو که در dd وجود دارن رو به ترتیب برای if (input file) و of (output file) تعریف کنیم.
در مثال زیر مقادیر nonblock و sync رو برای iflag و oflag تعریف کردیم.
dd if="path_to_source_file" of="path_to_destination_file" bs=4M status=progress iflag=nonblock,sync oflag=nonblock,sync
مقادیر ثابت مختلفی برای oflag و iflag وجود دارن که در مثال قبل به دوتا از اونا پرداختیم.
تغییر فرمت یک فایل
برای تغییر فرمت یک فایل با دستور dd کافیه پسوند فایل رو در مسیر مقصد تغییر بدیم.
فرض کنید یک فایل ویدیویی با پسوند mp4 در مسیر /home/username/myVideo.mp4 داریم و فرمتشو به mkv تغییر بدیم.
dd if="/home/username/myVideo.mp4" of="/home/username/myVideo.mkv" bs=4096 status=progress iflag=sync,nonblock oflag=sync,nonblock
فرمت فایل های سیستمی
برای فرمت فایل های سیستمی (پارتیشن های فلش مموری، هارد دیسک و...) با استفاده از dd در لینوکس یک مسیر پیش فرض /dev/zero در لینوکس وجود داره که به عنوان مقدار آرگومان if قرار میدیم و مسیر پارتیشن مورد نظر رو به عنوان مقدار of قرار میدیم.
dd if="/dev/zero" of="path_to_partition" bs=2M status=progress iflag=sync oflag=sync
خلاصه
- با استفاده از دستور dd در لینوکس میتونیم یک فایل رو کپی کنیم، فرمت فایل رو تغییر بدیم و یا فایل های سیستمی رو فرمت کنیم؛ دستور dd مخفف data definition است.
- با استفاده از آرگومان bs میتونیم مقداری که هرسری از فایل میخونه و در فایل مینویسه رو تعیین کنیم.
- با استفاه از آرگومان status میتونیم روند پیشرفت عملیات رو ببینیم.