نصب دستور rsync در لینوکس اوبونتو، دبیان، CentOS و فدورا
اگر به دنبال یک راهکار سریع و کارآمد برای انتقال فایل و دایرکتوری بین دو سیستم لینوکس هستید و دوست دارید به جای روش های سنتی برای کپی کردن فایل ها از تکنیک همگام سازی فایل ها بین سیستم مبدا و مقصد استفاده کنید، دستور rsync در لینوکس همان ابزاری است که دنبالش هستید.
دستور Remote Sync با مخفف Rsync، یک ابزار همه کاره است که نه تنها همگام سازی فایل ها را آسان تر می کند بلکه پروسه انتقال فایل ها را هم بهینه می سازد. برخلاف دستورات سنتی کپی در لینوکس، rsync به کمک الگوریتم دلتا، فقط تفاوت های بین فایل های مبدا و مقصد را همگام یا کپی می کند و این کار باعث صرفه جویی در زمان و پهنای باند می شود.
این دستور دارای ویژگی های قدرتمند دیگری است که در ادامه همه آنها را مورد بررسی قرار می دهیم. فقط این را بدانید که فرقی نمی کند یک کاربر لینوکس حرفه ای هستید یا مبتدی، یادگیری نحوه انتقال و مدیریت فایل ها با دستور rsync پایانی برای تمام دردسرهای ناشی از کپی کردن فایل ها بین سیستم محلی و سیستم ریموت لینوکس است.
مخصوصاً اگر برای اجرای پروژه یا راه اندازی وبسایت خود تصمیم به خرید سرور مجازی لینوکس (Linux VPS Hosting) دارید و همگام سازی فایل ها بین سیستم محلی و سرور مجازی، یکی از بایدهای کارهای شماست، خبر خوبی که داریم این است که دستور rsync در لینوکس از انتقال امن فایل با SSH پشتیبانی میکند و اینجاست که با استفاده از این دستور می توانید یک نفس راحت بکشید.
در حالت کلی، به خاطر بهره مندی از ویژگی های عالی برای انتقال، همگام سازی، کپی کردن، پشتیبان گیری و انعکاس (mirorring) فایل ها و داده ها، به یک جایگزین عالی برای دستورات پرکاربرد لینوکس مثل scp، sftp و cp تبدیل شده است. اکنون هم وقت آن است که نحوه نصب و استفاده از این دستور را یاد بگیرید و شروع به استفاده از آن کنید.
دستور rsync در لینوکس
بیایید با یک مثال شروع کنیم:
فرض کنید قصد انتقال وبسایت به یک سرور جدید را دارید و می خواهید تمام فایل های موجود در فولدر اصلی سایت را به فولدر اصلی موجود در سرور جدید منتقل کنید. این فولدر حاوی تمام فایل های مربوط به وبسایت شما است و اگر سرور جدید شما دارای فایل هایی مثل html و css است که می خواهید آنها را بر اساس فایل های سرور قبلی آپدیت کنید یعنی صرفاً فقط تغییرات لازم را در فایل های موجود در سرور جدید اعمال کنید، به یک ابزار پیشرفته تر برای انتقال و همگام سازی فایل ها بین سرور مبدا و مقصد نیاز دارید و این ابزار چیزی نیست جز دستور rsync در لینوکس.
دستور Rsync (Remote Sync) رایج ترین دستور برای کپی و همگام سازی فایل ها و دایرکتوری ها به صورت محلی یا ریموت است.
روش کار این دستور به این صورت است که به جای کپی کل فایل، فقط تغییرات بین دو فایل را شناسایی و آنها را کپی می کند و این کار را هم با استفاده از الگوریتم checkrq و انتقال دیتا انجام می دهد. استفاده از این الگوریتم ها باعث صرفه جویی در حجم داده انتقالی، سرعت و پهنای باند شبکه می شود و این همان چیزی است که شما به عنوان کاربر لینوکس دنبالش هستید.
این دستور تمام کارهای انتقال و همگام سازی فایل ها را طی ۳ مرحله جلو می برد:
۱) تشخیص تغییرات بین فایل های مبدا و مقصد (محتوا، اندازه و …) با استفاده از checksum ها
۲) تعیین بخش های تغییریافته بین فایل های مبدا و مقصد یا فایل های جدید و ایجاد یک نقشه انتقال
۳) انتقال بخش های تغییریافته به جای ارسال کل فایل یا کپی فایل های جدید
البته، در ادامه به آپشن های مهم دستور rsync هم می پردازیم که اضافه کردن هر کدام از آنها می توانید رفتار این دستور را تغییر دهد.
ولی در کل، ابزار rsync به خاطر ویژگی ها و مزایای زیر است که به این درجه از محبوبیت رسیده است:
- انتقال و همگام سازی کارآمد فایل ها با استفاده از الگوریتم انتقال دلتا
- امکان همگام سازی فایل های محلی و ریموت از طریق SSH
- پشتیبان گیری موثرتر به خاطر انتقال فایل های جدید و تغییریافته (نه فایل های تکراری)
- حفظ ویژگی های مختلف فایل های انتقالی مثل مجوزها، مالکیت ها، تایم استمپ ها و لینک های نمادین
- امکان کنترل میزان مصرف پهنای باند با روش فشرده سازی فایل ها موقع ارسال و دریافت داده ها
- انتقال همگام سازی سریع تر فایل ها مخصوصاً فایل های بزرگ موجود در سیستم مقصد
- پشتیبانی از انواع آپشن ها برای سفارشی سازی رفتار دستور
- امکان همگام سازی دقیق ساختار دو دایرکتوری یا همان mirroring
- همگام سازی فایل ها به صورت سلسله مراتبی یا بازگشتی
- امکان ایجاد یک سری فیلترهای خاص برای انتقال فایل ها
- امکان حذف فایل های اضافی موجود در مقصد
- امکان انتقال فایل از یک سرور به سرور دیگر
- عدم نیاز به امتیازات sudo
- امکان انتقال فایل ها به صورت پیپ برای به حداقل رساندن هزینه تاخیر
- پشتیبانی از دیمون های rsync ناشناس یا تایید شده
- سازگاری با اکثر توزیع های لینوکس
- …
به لطف این ويژگی ها است که rsync به یک ابزار موثر و قدرتمند برای انتقال و همگام سازی فایل ها در سیستم های لینوکس تبدیل شده است.
نحوه نصب دستور rsync در انواع توزیع های لینوکس
با اینکه دستور rsync به طور پیش فرض در اکثر توزیع های لینوکس و مک نصب شده است ولی اگر موقع اجرای rsync متوجه شدید که سیستم شما مجهز به این دستور نیست، اصلاً جای نگرانی نیست. کافیست متناسب با توزیع سیستم خود، یکی از دستورات زیر اجرا کنید:
نصب دستور rsync در اوبونتو و دبیان
sudo apt install rsync
نصب rsync در Centos
sudo yum install rsync
در توزیع های مبتنی بر ردهت مثل فدورا
sudo dnf install rsync
در توزیع های مبتنی برا آرچ لینوکس
sudo pacman -S rsync
در توزیع های مبتنی بر SUSE مثل openSUSE
sudo zypper install rsync
در توزیع های مبتنی بر Alpine Linux
apk add rsync
البته، نصب این دستور نیاز به امتیازات مدیریتی دارد به همین دلیل در صورت نیاز باید دستور sudo را هم در ابتدای دستور نصب قرار دهید.
بعد از اجرای هر کدام از دستورات بالا، مدیر بسته تمام پکیج ها و وابستگی ها دستور rsync را از مخازن نصب اسختراج و نصب می کند تا شما از این ابزار برای همگام سازی و انتقال فایل ها بهره مند شوید.
سینتکس و آپشن های دستور rsync
حالا که از وجود ابزار rsync در سیستم لینوکس خود مطمئن شدید، وقت آن است که با سینتکس و گزینه های مختلف این دستور آشنا شوید.
سینتکس پایه دستور rsync به صورت زیر است:
rsync [OPTIONS] SOURCE DESTINATION
OPTIONS همان گزینه هایی هستند که با اضافه کردن آنها می توانید رفتار دستور rsync را تعیین کنید.
SOURCE، دایرکتوری یا فایل موجود در سیستم مبدا است که می خواهید آن را کپی یا همگام سازی کنید.
DESTINATION هم دایرکتوری یا فایل موجود در سیستم مقصد است که می خواهید داده های تعیین شده مبدا را در آن کپی کنید یا اینکه با فایل یا دایرکتوری تعیین شده در مبدا، همگام سازی کنید.
آپشن های مختلف دستور rsync لینوکس
a یا archive : حالت آرشیو را فعال می کند تا امکان کپی فایل ها به صورت بازگشتی فراهم باشند و همچنین، لینک های نمادین، مجوزهای فایل ها، مالکیت ها و استمپ های زمانی هم حفظ شود.
b یا backup : در حین پروسه انتقال داده ها، یک نسخه پشتیبان تهیه می کند.
e : به rsync دستور می دهد که برای انتقال فایل از پروتکل SSH استفاده کند.
u یا update : اگر فایل های موجود در مقصد جدیدتر هستند، فایل ها را از مبدا به مقصد کپی نمی کند.
delete : با این آپشن، دستور rsync تمام فایل های اضافی موجود در دایرکتوری مقصد را حذف می کند که این کار برای mirroring مفید است.
n یا dry-run : یک نسخه آزمایشی ( بدون انتقال و همگام سازی) از دستور rsync اجرا می کند.
r : داده هار را به صورت بازگشتی کپی می کند ولی لینک های نمادین، مجوزهای فایل ها، مالکیت ها و استمپ های زمانی را حفظ نمی کند.
z : فایل های انتقالی را فشرده سازی می کند تا حجم کمتری داشته باشند.
v : اطلاعات دقیق تری را در مورد پروسه انتقال فایل ها ارائه می دهد.
P : نحوه پیشرفت انتقال فایل ها و دایرکتوری ها را نمایش می دهد.
h : اعداد موجود در خروجی را در یک قالب خواناتر نشان می دهد.
q : پیام های بدون خطا را نشان نمی دهد و صرفاً جهت حذف اطلاعات غیرضروری از خروجی پروسه انتقال استفاده می شود.
البته، آپشن های دیگری نیز وجود دارند که می توانید متناسب با هدف و کاربرد خود از آنها استفاده کنید. برای مشاهده لیست کامل آپشن های دستور rsync می توانید از دستورات زیر استفاده کنید:
rsync --help
man rsync
info rsync
کاربردهای دستور rsync در لینوکس (همراه مثال های عملی)
حالا دیگر وقت آن است که به صورت عملی جلو برویم و کاربرد این دستور را با استفاده از مثال های مختلف بررسی کنیم:
آپشن های v (نمایش جزئیات)، h (نمایش اعدادی مثل حجم انتقالی) و z (فشرده سازی فایل های انتقالی) برای درک بهتر خروجی و افزایش سرعت انتقال مفید هستند، پس سعی کنید این ۳ آپشن را در دستورات rsync لحاظ کنید.
کپی یک فایل به یک دایرکتوری دیگر در سیستم محلی
rsync -zvh backup.tar.gz /tmp/backups/
کپی چند فایل در دایرکتوری موجود در سیستم محلی
rsync -v /home/test/Desktop/sample.txt /home/test/Desktop/sample2rs.txt /home/test/Desktop/rsync
کپی محتویات یک دایرکتوری در یک دایرکتوری دیگر موجود در سیستم محلی
rsync -zvh /root/rpmpkgs /tmp/backups/
کپی دایرکتوری از سیستم محلی در دایرکتوری ریشه سیستم ریموت
rsync -zvh /root/rpmpkgs [email protected]:/root/
استفاده از SSH در داخل دستور rsync
اگر به فکر امنیت بیشتری هستید و می خواهید انتقال داده را با SSH انجام دهید،باید از آپشن e استفاده کنید.
rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
به عنوان مثال، اگر SSH سیستم ریموت به پورت دیگری به جز ۲۲ گوش می دهد، می توانید شماره پورت را به صورت زیر در دستور لحاظ کنید:
rsync -a -e "ssh -p 2322" /opt/media/ remote_user@remote_host_or_ip:/opt/media/
کپی یک فایل از سیستم محلی در سیستم ریموت با ssh
rsync -vzhe ssh backup.tar.gz [email protected]:/backups/
همگام سازی یک دایرکتوری از سیستم ریموت با دایرکتوری موردنظر از سیستم محلی
rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms
استفاده از آپشن a برای همگام سازی به صورت بازگشتی و حفظ اطلاعاتی مثل مجوزها و دسترسی ها ضروری است.
اگر حفظ ویژگی هایی مثل مجوزها و مالکیت ها مهم نیست و صرفاً قصد همگام سازی یا کپی فایل ها و دایرکتوری ها به صورت بازگشتی را دارید، از آپشن r استفاده کنید.
rsync -rvzh [email protected]:/root/rpmpkgs /tmp/myrpms
همگام سازی محتویات یا فایل های دو فولدر
rsync -av original/ duplicate/
همگام سازی فایل های خاص دو فولدر
برای اینکار کافیست فرمت فایل موردنظر را در دایرکتوری مبدا مشخص کنید:
rsync -av original/*.txt duplicate/
همگام سازی دو فولدر به جز یک زیرفولدر یا فایل خاص
برای اینکه یک زیرفولدر یا پوشه خاص را از همگام سازی جدا نگه دارید، باید از آپشن exclude استفاده کنید.
rsync -r --exclude=tmp original/ duplicate/
rsync -av --exclude=example.txt original/ duplicate/
همگام سازی فایل های دو فولدر به جز انواع خاصی از فایل ها
این بار هم باید از آپشن exclude استفاده کنید، منتها باید به جای اسم زیرفولدر، فرمت فایل ها (مثلاً txt) را مشخص کنید.
rsync -av --exclude='*.txt' original/ duplicate/
نادیده گیری فایل های موجود در مقصد موقع انتقال فایل
به عنوان مثال اگر قصد بکاپ گیری دارید و می دانید که بعضی از این فایل ها در سیستم یا دایرکتوری مقصد وجود دارد، می توانید آنها را در این پروسه انتقال نادیده بگیرید و حجم فایل انتقالی را کاهش دهید:
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/
انتقال یا همگام سازی چند فایل خاص بین دو فولدر
برای اینکار باید دو آپشن exclude و include را با هم ترکیب کنید. به عنوان مثال، اگر فقط می خواهید فایل هایی که با m شروع می شوند را انتقال دهید و سایر فایل ها در این پروسه، نادیده بگیرید، باید دستور rsync را به صورت زیر اجرا کنید:
rsync -av --include='m*' --exclude='*' original/ duplicate/
استفاده از محدودیت سایز برای انتقال فایل ها
اگر می خواهید برای پروسه همگام سازی فایل ها یک سایز مشخص در نظر بگیرید تا فقط فایل هایی که کمتر یا بیشتر از آن هستند کپی یا همگام شوند، می توانید از آپشن max-size یا min-size استفاده کنید.
rsync -av --max-size=10M original/ duplicate/
یا
rsync -av --min-size=10k --max-size=10M original/ duplicate/
تعیین محدودیت مصرف پهنای باند برای انتقال فایل ها
اگر میزان مصرف پهنای باند برای شما مهم است و می خواهید این فاکتور را بر حسب KB/s محدود کنید، می توانید به صورت زیر عمل کنید:
rsync -avP --bwlimit=50 /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync/
انتقال فایل های حجیم در یک ترمینال جدا به صورت جلسه screen
برای اینکه انتقال فایل های حجیم، مانع استفاده از ترمینال نشود، می توانید با استفاده از آپشن P یک جلسه ترمینال جدا برای آن باز کنید و به کارهای دیگر خود ادامه دهید:
rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/
حذف فایل ها یا دایرکتوری های اضافی در مقصد موقع همگام سازی
اگر قصد همگام سازی کامل دو دایرکتوری را دارید و هدفتان از این همگام سازی، تطابق کامل دو فولدر از لحاظ ساختاری است، می توانید از آپشن delete برای حذف فولدرها یا فایل های اضافی موجود در دایرکتوری مقصد استفاده کنید:
rsync -av --delete original/ duplicate/
بکاپ گیری از فایل های انتقالی
یکی از ایده های عالی برای کاهش حجم داده های انتقال و جلوگیری از بازنویسی فایل ها موقع همگام سازی این است که از فایل های انتقالی یک بکاپ تهیه کنید.
rsync -av --backup --backup-dir=/path/to/backup/ original/ duplicate/
حذف خودکار فایل ها از سیستم یا دایرکتوری مبدا بعد از انتقال
فرض کنید که یک سرور وب اصلی و یک سرور پشتیبان دارید. هر روز از وب سرور بکاپ ایجاد می کنید و آن را با سرور بکاپ همگام سازی می کنید ولی بعد از آن، نمی خواهید نسخه بکاپ موجود در وب سرور را نگه دارید. اینجاست که می توانید از آپشن remove-source-files کمک بگیرید.
rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/
در حالت کلی، آپشن های زیادی وجود دارند که می توانید با ترکیب آنها به کاربردهای جدیدتر و مفیدتری از دستور rsync برسید. مهم این است که متناسب با نیاز خود، رفتار دستور را شخصی سازی کنید و از قدرت آن برای انجام کارهای مختلف بهره ببرید.
سخن آخر
دستور rsync در لینوکس یکی از قدرتمندترین ابزارهای انتقال و همگام سازی فایل است که با استفاده از آن می توانید کیفیت و سرعت عملیات کپی و انتقال را بالا ببرید. ما در این مقاله سعی کردیم که تمام اطلاعات و کاربردهای مربوط به این دستور را به صورت عملی در اختیار شما قرار دهیم تا نحوه کار کردن با آن را یاد بگیرید اما از این به بعد این شما هستید که باید وارد صحنه شوید و متناسب با نیازهای خود، آپشن های مناسبی را در دستور لحاظ کنید و عملیات کپی، انتقال یا همگام سازی فایل ها در سیستم های لینوکس را به نحو احسن انجام دهید.
از اینکه تا انتهای مقاله با ما همراه بودید، از شما متشکریم. امیدواریم که مطالعه این مقاله برای شما مفید واقع شده باشد. در صورت داشتن هرگونه سوال، درخواست و نیاز به راهنمایی، می توانید با ثبت نظر خود، با ما وارد ارتباط شوید تا هر چه زودتر به شما پاسخ دهیم.