ابزار Rsync که عنوان آن مخفف عبارت “remote sync” است، یک ابزار هماهنگسازی فایل محلی و ریموت محسوب میشود. این ابزار با انتقال بخشهایی از فایل که دچار تغییر شدهاند، فرآیند کپی دادهها را بهینهسازی میکند.
در این مطلب آموزشی، برخی ویژگیهای پایه این ابزار قدرتمند را مرور میکنیم.
ابزار Rsync چیست؟
Rsync یک ابزار هماهنگسازی سازگار با شبکه و بسیار انعطافپذیر است. به علت همهگیر بودن این ابزار در سیستمهای لینوکس و یونیکس و همچنین محبوبیت آن برای اسکریپتهای سیستمی، Rsync در بسیاری از توزیعهای لینوکس به صورت پیشفرض در دسترس قرار میگیرد.
الگوی پایه
قالب پایه ابزار Rsync بسیار ساده و قابلفهم است و عملکردی مشابه ssh، scp و cp دارد.
ابتدا با استفاده از فرمانهای زیر دو دایرکتوری و تعدادی فایلهای آزمایشی ایجاد میکنیم.
cd ~ mkdir dir1 mkdir dir2 touch dir1/file{1..100}
حالا یک دایرکتوری با نام dir1 داریم که تعداد ۱۰۰ فایل خالی در آن قرار گرفتهاند.
ls dir1
خروجی
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
همچنین یک دایرکتوری خالی با نام dir2 خواهیم داشت. به منظور هماهنگسازی محتواهای dir1 با dir2 در همان سیستم داریم:
rsync -r dir1/ dir2
گزینه -r به معنای حالت بازگشتی است که برای هماهنگسازی دایرکتوریها موردنیاز خواهد بود.
در همین حال میتوانیم از گزینه -a نیز استفاده کنیم.
rsync -a dir1/ dir2
گزینه -a به صورت ترکیبی است و مخفف واژه «آرشیو» است. این گزینه هماهنگسازی را به صورت بازگشتی انجام میدهد و در همین حال، لینکهای سیمبلیک، فایلهای ویژه و دستگاهی، زمانهای ویرایش، گروه، مالک و مجوّزها را حفظ میکند. این گزینه معمولاً بیشتر از گزینه -r مورد استفاده قرار میگیرد و کارآیی بیشتری نیز دارد.
نکته مهم
شاید متوجه یک علامت اسلش (/) در پایان اولین آرگومان در فرمانهای بالا شدهاید.
rsync -a dir1/ dir2
این علامت برای اشاره به محتواهای dir است. در غیر این صورت و بدون استفاده از اسلش، دایرکتوری dir1 درون دایرکتوری dir2 قرار میگیرد.
~/dir2/dir1/[files]
همیشه قبل از اجرای یک فرمان rsync، به شرایط آرگومانها دقت کنید. ابزار Rsync با استفاده از یکی از گزینههای -n یا –dry-run این کار را برایتان انجام خواهد داد. همچین گزینه -v برای بهدست آوردن یک نتیجه مناسب ضروری است.
rsync -anv dir1/ dir2
خروجی
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .
این نتایج را با حالت عدماستفاده از اسلش مقایسه کنید.
rsync -anv dir1 dir2
خروجی
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .
در اینجا مشاهده میکنید که دایرکتوری انتقال پیدا کرده است.
نحوه استفاده از ابزار Rsync برای هماهنگسازی با یک سیستم ریموت
در صورتی که با ssh به یک سیستم ریموت دسترسی دارید و ابزار Rsync در هر دو طرف نصب است، بدیهی است که باید هماهنگسازی را با سرور ریموت انجام دهید. با استفاده از قالب زیر میتوانید فولدر نمونه dir1 را با یک کامپیوتر ریموت هماهنگ کندی. به خاطر داشته باشید که در اینجا میخواهیم دایرکتوری را واقعاً انتقال دهیم و بنابراین علامت اسلش را حذف کردهایم.
rsync -a ~/dir1 username@remote_host:destination_directory
به این فرمان “push” نیز گفته میشود؛ چرا که باعث انتقال یک دایرکتوری در سیستم محلی به سیستم ریموت میشود. برعکس این فرمان، “pull” نام دارد. چنین فرمانی برای هماهنگسازی یک دایرکتوری ریموت با سیستم محلی به کار میرود. در صورتی که dir1 به جای سیستم محلی، در سیستم ریموت قرار داشته باشد، قالب فرمان به صورت زیر خواهد بود.
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
همانند cp و ابزارهای مشابه، منبع همیشه اولین آرگومان است و مقصد در جایگاه دوم میآید.
گزینههای مفید برای Rsync
ابزار Rsync حاوی گزینههای متعددی برای تغییر عملکرد پیشفرض است. البته ما در سطور بالا اکثر گزینههای ضروری را مرور کردهایم.
در صورتی که فایلهای انتقالی شما از نوع فشرده نباشند (مانند فایلهای متنی)، میتوانید با گزینه -z و اضافهکردن فشردهسازی، از پهنای باند مصرفی در شبکه کم کنید.
rsync -az source destination
گزینه -P نیز بسیار مفید است و باعث ترکیب دو گزینه –progress و –partial میشود. گزینه –progress باعث اضافه شدن نوار وضعیت پیشرفت فرآیند انتقال میشود و گزینه –partial نیز به شما اجازه میدهد که انتقالهای مختلشده را دوباره از سر بگیرید.
rsync -azP source destination
خروجی
sending incremental file list ./ file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101) file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101) . . .
در صورتی که این فرمان را دوباره اجرا کنید، یک خروجی کوتاهتر دریافت خواهید کرد. چرا که در این حالت۷ هیچگونه تغییری ایجاد نمیشود. این قابلیت ابزار Rsync در استفاده از زمانهای ویرایش برای تشخیص انجام تغییرات است.
rsync -azP source destination
خروجی
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00
امکان بروزرسانی زمان ویرایش در برخی از فایلها وجود دارد و خواهیم دید که ابزار Rsync به شکلی هوشمندانه، تنها فایلهایی را که تغییر داده شدهاند، کپی میکند.
touch dir1/file{1..10} rsync -azP source destination
خروجی
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .
برای حفظ هماهنگی واقعی بین دو دایرکتوری، باید فایلهایی را که در منبع حذف شدهاند، حتماً از دایرکتوری مقصد نیز حذف شوند. ابزار Rsync به صورت پیشفرض، چیزی را از دایرکتوری مقصد حذف نمیکند.
میتوانیم با استفاده از فرمان –delete این رفتار را تغییر دهیم. قبل از استفاده از این گزینه، با کمک گزینه –dry-run آزمایشی کار کنید تا از دست رفتن دادهها جلوگیری شود.
rsync -a --delete source destination
اگر بخواهید برخی فایلها یا دایرکتوریهای خاص را درون دایرکتوری موردنظرتان برای هماهنگسازی حذف کنید، میتوانید آنها در قالب لیست با جداسازی علامت کاما وارد نمایید.
rsync -a --exclude=pattern_to_exclude source destination
اگر الگوی خاصی برای حذف دارید، میتوانید حذف فایلهای مطابق را با استفاده از گزینه –include= انجام دهید.
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
نهایتاً گزینه –backup در ابزار Rsync میتواند برای ذخیره نسخههای پشتیبان فایلهای مهم مورد استفاده قرار گیرد. این گزینه در کنار گزینه –backup-dir مورد استفاده قرار میگیرد که مشخصکننده دایرکتوری ذخیره فایلهای پشتیبان خواهد بود.
rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
جمعبندی
ابزار Rsync میتواند موجب سهولت انتقال فایل در ارتباطهای شبکهای و هماهنگسازی دایرکتوریهای محلی شود. انعطافپذیری Rsync آن را به گزینهای مناسب برای بسیاری از عملیاتها بر روی فایلها بدل میکند. ضمن اینکه، ابعاد گسترده عملکردهای این ابزار موجب میشود تا شما بتوانید عملیاتهای پیچیدهای برای پشتیبانگیری طراحی کنید و کنترل مناسب بر روی دادههای انتقالی داشته باشید.