rsync یک ابزار خط فرمان قدرتمند، سریع و همهکاره برای کپی و همگامسازی فایلها است که در سیستمهای مبتنی بر لینوکس و یونیکس بهطور گسترده استفاده میشود . این ابزار به دلیل الگوریتم انتقال تفاضلی (delta-transfer) خود مشهور است که با ارسال تنها تفاوتهای بین فایلهای مبدأ و مقصد، حجم دادههای ارسالی در شبکه را به حداقل میرساند. همین ویژگی، rsync را به گزینهای ایدهآل برای کارهایی مانند تهیه نسخه پشتیبان، آینهسازی (mirroring) وبسایتها، و مهاجرت دادهها تبدیل کرده است .
نصب rsync
rsync معمولاً بهصورت پیشفرض روی اکثر توزیعهای لینوکس نصب است، اما در صورت نیاز میتوان آن را با استفاده از مدیر بسته نصب کرد :
برای دبیان یا اوبونتو:
sudo apt install rsync
برای توزیعهای مبتنی بر RHEL مانند CentOS، AlmaLinux یا Rocky Linux:
sudo dnf install rsync
برای بررسی نصب بودن و دیدن نسخه:
rsync --version
سینتکس کلی
ساختار اصلی دستور rsync به شکل زیر است:
rsync [OPTIONS] SOURCE [DEST]
SOURCE و DEST میتوانند مسیرهایی روی سیستم محلی، یک سیستم راهدور از طریق شل (مثل SSH)، یا یک سرور rsync راهدور باشند .
تفاوت rsync با scp و sftp
درک تفاوت rsync با ابزارهای مشابهی که در بخش قبل معرفی شدند، به انتخاب درست کمک میکند:
| ویژگی | rsync | scp | sftp |
|---|---|---|---|
| نحوه انتقال | افزایشی (فقط تفاوتها) | کپی کامل فایلها | انتقال فایل در یک جلسه تعاملی |
| کارایی برای فایلهای زیاد | بسیار بالا | پایین | متوسط |
| ادامه انتقال قطعشده | پشتیبانی میکند | پشتیبانی نمیکند | پشتیبانی میکند |
| کاربرد اصلی | همگامسازی، بکآپ، آینهسازی | انتقالهای ساده و یکباره | مدیریت تعاملی فایلها |
| سادگی | پیچیدهتر، با گزینههای زیاد | ساده و سرراست | متوسط |
گزینههای پرکاربرد
گزینههای زیادی برای سفارشیسازی رفتار rsync وجود دارند . در جدول زیر مهمترین آنها را میبینید:
| گزینه | توضیح |
|---|---|
-v, --verbose | افزایش جزئیات خروجی |
-a, --archive | حالت آرشیو؛ ترکیبی از چند گزینه برای حفظ ویژگیهای فایل و کپی بازگشتی |
-r, --recursive | کپی بازگشتی دایرکتوریها |
-z, --compress | فشردهسازی دادهها حین انتقال برای کاهش مصرف پهنای باند |
--delete | حذف فایلهای مقصد که در مبدأ وجود ندارند (برای آینهسازی دقیق) |
-n, --dry-run | اجرای آزمایشی بدون هیچ تغییری، برای تست دستور |
--progress | نمایش پیشرفت انتقال |
-e, --rsh=COMMAND | مشخص کردن شل راهدور (معمولاً برای استفاده از SSH) |
--exclude=PATTERN | حذف فایلها یا دایرکتوریهای منطبق با الگو از انتقال |
--log-file=FILE | ذخیره لاگ انتقال در یک فایل مشخص |
سناریوهای کاربردی و مثالها
۱. کپی محلی
برای کپی کردن محتویات یک دایرکتوری به دایرکتوری دیگر روی همان سیستم:
rsync -av /source/directory/ /destination/directory/
استفاده از
/در انتهای مسیر مبدأ باعث میشود که محتویات دایرکتوری کپی شوند، نه خود دایرکتوری .
۲. انتقال به سیستم راهدور (Push)
برای ارسال یک فایل یا دایرکتوری از سیستم محلی به یک سرور راهدور از طریق SSH:
rsync -avz /local/directory/ user@remote_host:/remote/destination/
در اینجا گزینه -z دادهها را فشرده میکند و گزینه -e ssh بهصورت پیشفرض برای امنیت استفاده میشود .
۳. دریافت از سیستم راهدور (Pull)
برای دریافت یک دایرکتوری از سرور راهدور و کپی آن روی سیستم محلی:
rsync -avz user@remote_host:/remote/source/ /local/destination/
۴. همگامسازی و پاکسازی (Mirroring)
برای اینکه دایرکتوری مقصد دقیقاً تصویر دایرکتوری مبدأ باشد (یعنی فایلهای اضافی در مقصد حذف شوند)، از گزینه --delete استفاده کنید:
rsync -avz --delete /local/directory/ user@remote_host:/remote/destination/
۵. استفاده از پورت غیر پیشفرض SSH
اگر سرور SSH روی پورتی غیر از ۲۲ کار میکند، از گزینه -e استفاده کنید:
rsync -avz -e "ssh -p 2264" /local/directory/ user@remote_host:/remote/destination/
۶. انتقال با قابلیت ادامه (Resume)
برای انتقال فایلهای بزرگ که ممکن است قطع شوند، از گزینه --partial یا --append-verify استفاده کنید تا از ابتدا شروع نشود .
۷. حذف فایلهای مبدأ پس از انتقال
اگر میخواهید فایلهای مبدأ پس از انتقال موفق حذف شوند (مشابه عمل mv)، از گزینه --remove-source-files استفاده کنید:
rsync -av --remove-source-files /local/file.txt user@remote_host:/remote/destination/
۸. حذف فایلها یا دایرکتوریها از انتقال
گاهی لازم است برخی فایلها (مثلاً فایلهای موقت یا لاگ) در فرایند همگامسازی شرکت نکنند. برای این کار از گزینه --exclude استفاده میشود :
rsync -av --exclude '*.log' --exclude 'temp/' /source/ /destination/
برای حذف چندین الگو، میتوان آنها را در یک فایل لیست کرده و با --exclude-from اعمال کرد:
rsync -av --exclude-from='exclude-list.txt' /source/ /destination/
۹. استفاده از rsync بهعنوان دیمن (Daemon)
rsync را میتوان بهعنوان یک سرویس (rsyncd) روی پورت ۸۷۳ اجرا کرد تا به کلاینتها اجازه اتصال و همگامسازی بدهد. این روش در سناریوهایی که نیاز به یک سرور متمرکز برای بکآپ دارید، کاربرد دارد . برای این کار، فایل کانفیگ /etc/rsyncd.conf و ماژولهای مربوطه در /etc/rsyncd.d/ تنظیم میشوند. برای نمونه، یک ماژول backup به شکل زیر تعریف میشود:
[backup] path = /var/backup comment = Our backup target
سپس کلاینتها میتوانند با دستور زیر به آن متصل شوند:
rsync -avz /local/data/ user@rsync_server::backup
نکات مهم و هشدارها
-
تفاوت تأثیر اسلش (
/): وجود یا عدم وجود/در انتهای مسیر مبدأ، تأثیر مستقیمی روی نحوه کپی کردن دارد.rsync -av /src /destکل دایرکتوریsrcرا درdestکپی میکند، اماrsync -av /src/ /destفقط محتویات داخلsrcرا درdestکپی میکند . -
گزینه
--deleteخطرناک است: این گزینه فایلها را از مقصد حذف میکند. همیشه پیش از استفاده از آن، با گزینه--dry-runیک تست انجام دهید تا از نتیجه کار مطمئن شوید. -
اتصال از طریق SSH: برای انتقال از طریق شبکه، استفاده از SSH (که بهصورت پیشفرض فعال است) برای رمزگذاری دادهها ضروری است تا امنیت ارتباط تأمین شود . برای اتصالات بدون نیاز به رمز عبور، بهتر است از کلید SSH استفاده کنید .
-
مصرف منابع: برای دایرکتوریهای بسیار بزرگ با میلیونها فایل، خودِ پروسه مقایسه و شناسایی تفاوتها میتواند مصرف پردازنده و حافظه قابلتوجهی داشته باشد .
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات