rsync، یک ابزار خط فرمان سریع و همه کاره برای همگام‌سازی فایل‌ها و دایرکتوری‌ها بین دو سیستم از طریق shell ریموت یا از/به یک Rsync daemon ریموت است. این ابزار، انتقال بسیار سریع فایل را با انتقال تنها تفاوت‌ها بین مبدا و مقصد فراهم می‌کند.

Rsync را می‌توان به منظور انعکاس داده‌ها، پشتیبان گیری افزایشی، کپی کردن فایل‌ها بین سیستم‌ها و به عنوان جایگزینی برای دستورات scp ،sftp و cp استفاده کرد.

در این مقاله، نحوه استفاده از rsync به همراه نمونه‌های کاربردی و رایج‌ترین گزینه‌های آن شرح داده شده است.

 

 

نصب Rsync

ابزار rsync به صورت پیش فرض، روی اکثر توزیع‌های لینوکس و macOS نصب شده است. با این حال، اگر rsync را روی سیستم خود نصب ندارید، شما می‌توانید به راحتی آن را با استفاده از مدیر بسته توزیع خود نصب نمایید.

 

نصب Rsync روی اوبونتو و دبیان

sudo apt install rsync

 

نصب Rsync روی CentOS و Fedora

sudo yum install rsync

 

ساختار دستور Rsync

قبل از اینکه به نحوه استفاده از دستور rsync بپردازیم، بیایید با بررسی ساختار اولیه دستور شروع کنیم.

ساختار اولیه دستور rsync به شکل زیر است:

Local to Local:  rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... [USER@]HOST:DEST
Remote to Local: rsync [OPTION]... [USER@]HOST:SRC... [DEST]

OPTION: گزینه‌های rsync.

SRC: دایرکتوری منبع.

DEST: دایرکتوری مقصد.

USER: نام کاربری ریموت.

HOST: نام میزبان یا آدرس IP ریموت.

 

rsync تعدادی گزینه را ارائه می‌دهد که نحوه رفتار دستور را کنترل می‌نماید. پرکاربردترین گزینه‌ها عبارتند از:

a، --archive-: حالت آرشیو، معادل rlptgoD-. این گزینه به rsync می‌گوید که دایرکتوری‌ها را به صورت بازگشتی همگام‌سازی کند، دستگاه‌های خاص را انتقال دهد و مسدود نماید، لینک‌های symbolic، زمان‌های ویرایش، گروه‌ها، مالکیت و مجوزها را حفظ کند.

z، --compress-: این گزینه، rsync را مجبور می‌کند تا داده‌ها را هنگام ارسال به دستگاه مقصد فشرده کند. تنها در صورتی از این گزینه استفاده نمایید که اتصال به دستگاه ریموت کند باشد.

-P، معادل partial --progress--. هنگامی‌که از این گزینه استفاده می‌شود، rsync نوار پیشرفت را در حین انتقال نشان می‌دهد و فایل‌های نیمه منتقل شده را نگه می‌دارد. این گزینه، هنگام انتقال فایل‌های بزرگ از طریق اتصالات شبکه کند یا ناپایدار کاربردی است.

delete--. هنگامی‌که از این گزینه استفاده می‌شود، rsync فایل‌های اضافی را از محل مقصد حذف می‌کند. این گزینه، هنگام نیاز به انعکاس داده (mirroring) کاربردی است.

q، -- quiet-. اگر می‌خواهید پیام‌های غیر از خطا را حذف نمایید، از این گزینه استفاده کنید.

e-. این گزینه، به شما امکان می‌دهد shell ریموت متفاوتی را انتخاب نمایید. به طور پیش فرض، rsync برای استفاده از ssh پیکربندی شده است.

 

استفاده پایه‌ای Rsync

ابتدایی‌ترین موارد استفاده از rsync، کپی کردن یک فایل از یک مکان به مکان محلی دیگر است. به عنوان مثال:

rsync -a /opt/filename.zip /tmp/

 

کاربری که این دستور را اجرا می‌کند، باید مجوزهای خواندن در منبع و مجوزهای نوشتن در مقصد را داشته باشد.

در صورتی که در این دستور، نام فایل را در بخش مسیر مقصد مشخص ننمایید، فایل با همان نام قبلی در مقصد قرار می‌گیرد. بنابراین، اگر می‌خواهید فایل را با نام دیگری در مقصد ذخیره کنید، آن نام را در قسمت مقصد مشخص نمایید:

rsync -a /opt/filename.zip /tmp/newfilename.zip

قدرت واقعی rsync هنگام همگام سازی دایرکتوری‌ها قابل مشاهده است. مثال زیر، نحوه ایجاد یک نسخه پشتیبان محلی از فایل‌های وب سایت را نشان می‌دهد:

rsync -a /var/www/domain.com/public_html/ /var/www/domain.com/public_html_backup/

اگر دایرکتوری مقصد وجود نداشته باشد، rsync آن را ایجاد می‌نماید.

شایان ذکر است که rsync به همراه یک اسلش (/) در انتهای مبدا یا مقصد، رفتار متفاوتی با دایرکتوری‌های منبع ارائه می‌دهد. بدین معنی که اگر دایرکتوری مبدأ دارای یک اسلش انتهایی باشد، دستور تنها محتویات دایرکتوری را در دایرکتوری مقصد کپی می‌کند. هنگامی‌که اسلش انتهایی حذف می‌شود، rsync کل دایرکتوری منبع را در دایرکتوری مقصد کپی می‌کند.

 

استفاده از rsync برای همگام سازی داده‌ها بین سیستم‌های ریموت

هنگام استفاده از rsync برای انتقال ریموت داده‌ها، باید ابزار rsync هم بر روی منبع و هم در دستگاه مقصد نصب شود. نسخه‌های جدید rsync برای استفاده از SSH به عنوان shell ریموت پیش فرض پیکربندی شده‌اند.

در مثال زیر، یک دایرکتوری محلی به یک سیستم ریموت منتقل می‌شود:

rsync -a /opt/media/ remote_user@remote_host_or_ip:/opt/media/

چنانچه ورود بدون رمز عبور SSH به دستگاه ریموت را تنظیم نکرده باشید، از شما خواسته می‌شود رمز عبور کاربر را وارد نمایید.

با دستور زیر، برای انتقال داده از یک سیستم ریموت به یک سیستم محلی، از مکان ریموت به عنوان منبع استفاده کنید:

rsync -a remote_user@remote_host_or_ip:/opt/media/ /opt/media/

اگر SSH در سیستم ریموت پورتی غیر از پورت پیش فرض 22 را شنود می‌کند، باید آن پورت را با استفاده از گزینه e- مشخص نمایید:

rsync -a -e "ssh -p 2322" /opt/media/ remote_user@remote_host_or_ip:/opt/media/

هنگام انتقال یک فایل بسیار بزرگ، توصیه می‌شود دستور rsync را در یک نشست screen اجرا کنید یا از گزینه P- استفاده نمایید:

rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/

 

حذف فایل‌ها و دایرکتوری‌ها

دو گزینه برای حذف فایل‌ها و دایرکتوری‌ها وجود دارد. اولین گزینه استفاده از آرگومان exclude-- و همراه آن مشخص کردن فایل‌ها و دایرکتوری‌های مورد نظر است.

در این روش، هنگام حذف فایل‌ها یا دایرکتوری‌ها، باید از مسیرهای نسبی آن‌ها نسبت به مکان منبع استفاده کنید.

در مثال زیر، نحوه حذف دایرکتوری‌های node_modules و tmp را نشان می‌دهد:

rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/

گزینه دوم این است که از گزینه exclude-from-- استفاده کرده و فایل‌ها و دایرکتوری‌های مورد نظر را در یک فایل مشخص نمایید.

rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
                           /exclude-file.txt
node_modules
tmp

 

 

 

منبع:

linuxize