آموزش دستور rsync در لینوکس
Rsync یک دستور معروف لینوکس است که میتوان از آن برای کپی و همگامسازی فایلها و پوشهها از طریق دسترسی ریموت یا به صورت لوکال استفاده کرد. استفاده از دستور Rsync امکان میدهد کارهای مختلف مرتبط با دادهها مانند همگام سازی، کپی کردن و تهیه بکاپ را انجام دهیم.
چگونه از Rsync در لینوکس استفاده کنیم؟
چه ادمین باشید یا یک کاربر معمولی، به احتمال زیاد از فایلهای خود بکاپ تهیه میکنید یا آنها را بین چندین سیستم سینک (sync) مینمائید. اگر این کار نیاز به بازنویسی همه فایلها در هر دفعه داشته باشد، به ویژه در فایلهای سنگین و حجیم، کسل کننده و زمان بر خواهد بود. اینجاست که ابزار لینوکس Rsync به کمک شما می آید. این راهنما شما را با مفیدترین دستورات Rsync آشنا می کند و به شما امکان می دهد از ویژگی های سریع و ایمن آن استفاده کنید.
فایده و مزیت Rsync چیست؟
Remote Sync (Rsync) یک دستور معروف لینوکس است که میتوانید از آن برای کپی و همگامسازی فایلها و پوشهها از طریق دسترسی ریموت یا به صورت لوکال استفاده کنید. استفاده از دستور Rsync امکان میدهد کارهای مختلف مرتبط با دادهها مانند همگام سازی، کپی کردن و تهیه بکاپ را انجام دهید. علاوه بر این، می توانید سیستم لینوکس خود را mirror سیستم دیگری کنید.
ایده اصلی استفاده از Rsync به سرور ریموت این است که از انتقال سریع فایل آن استفاده کنید. برای انتقال داده ها بین دو سرور، فقط تفاوتهای بین آنها را در نظر می گیرد. به عبارت دیگر، استفاده از دستور Rsync به شما کمک می کند تا از تلف وقت و منابع برای انتقال دادههای بیهوده جلوگیری کنید زیرا فقط تفاوتهای بین دو سیستم لینوکس را در نظر می گیرد.
برای آشنایی با اتصال از طریق SSH سرور لینوکس، پیشنهاد میکنم این مقاله را مطالعه نمائید . اتصال به سرور مجازی لینوکس از طریق putty هم در این مقاله آموزش داده شده است.
چرا از Rsync استفاده کنیم؟
همانطور که می دانید، ابزارهای مختلف پشتیبان گیری برای استفاده در دسترس هستند. سوال این است که چه چیزی ابزار Rsync را در مقایسه با سایر ابزارها یا دستورات منحصر به فرد می کند؟
به طور مثال، می توان از پروتکل FTP یا SCP برای داشتن یک نسخه از وب سایت در لوکال استفاده کرد. با این حال، هر دو با اشکالاتی همراه هستند FTP شامل رمزگذاری داده نمی شود که ایدهآل ما نیست و SCP که مشکل انتقال رمزگذاری نشده مانند FTP ندارد، زمان بیشتری برای انتقال نیاز دارد چون یک تانل برای انجام این کار ایجاد می کند.
بنابراین، به عنوان یک راه حل جایگزین برای این مسائل، میتوانیم از Rsync برای سرور ریموت با رمزگذاری مبتنی بر کلید که Rsync SSH یا Rsync over SS نامیده میشود استفاده کنیم که از ارسال دادههای تکراری جلوگیری نموده و از یک کلید SSH استفاده میکند. همچنین باید توجه داشته باشید که Rsync از فشرده سازی و رفع فشرده سازی برای دریافت و ارسال داده استفاده می کند که منجر به استفاده کمتر از پهنای باند هم می شود.
Rsync از الگوریتم انتقال دلتا استفاده می کند تا فقط تفاوت بین فایل های منبع و فایل های موجود را به مقصد ارسال کند. Rsync از داده های کمتری در شبکه برای حفظ پهنای باند استفاده می کند.
ابزار rsync می تواند بیشتر کارها را برای شما انجام دهد و در عین حال ویژگی های فوق العاده ای را برای صرفه جویی در وقت اضافه می کند. حتی اگر در حین انتقال، اتصال شبکه را قطع کنید، این ابزار پس از برقراری مجدد اتصال، دقیقا از جایی که متوقف شده است، ادامه خواهد داد.
Rsync معمولا برای پشتیبانگیری از مقادیر زیادی داده یا انتقال داده بین دو کامپیوتر استفاده میشود. Rsync از همگام سازی فایل های لوکال به لوکال، لوکال به ریموت و ریموت به لوکال پشتیبانی می کند. با این حال، همگام سازی فایل ریموت به ریموت پشتیبانی نمی شود.
قوانین نوشتاری (Syntax) پایه
سینتکس ابتدایی برای rsync به شرح زیر عمل می کند:
rsync [optional modifiers] [SRC] [DEST]
چند راه مختلف برای استفاده از rsync وجود دارد. در این مثال، [optional modifiers] اقداماتی را که باید انجام شوند، [SRC] سرور یا دایرکتوری مبدا و [DEST] سرور یا دایرکتوری مقصد را نشان میدهند.
سینتکس ابتدایی برای Remote Shell
هنگام استفاده از remote shell، مانند SSH یا RSH، سینتکس rsync کمی متفاوت است.
برای دسترسی به ریموت شِل (PULL) از دستور rsync استفاده کنید:
rsync [optional modifiers] [USER@]HOST:SRC [DEST]
برای دسترسی به ریموت شِل (PUSH) از دستور rsync استفاده کنید:
rsync [optional modifiers] SRC [USER@]HOST:[DEST]
چگونه نسخه Rsync را بررسی کنیم؟
Rsync با بسیاری از توزیعهای لینوکس از پیش نصب میشود. برای بررسی اینکه آیا rsync روی دستگاه شما نصب شده است یا خیر، دستور زیر را اجرا کنید:
rsync -version
در توزیع اوبونتو، دستور خروجی زیر را تولید کرد:
rsync version 3.1.3 protocol version 31
این بدان معناست که نسخه rsync 3.1.3 از قبل روی دستگاه ما موجود است.
چگونه rsync را نصب کنیم؟
اگر روی دستگاه یا سرور شما rsync از قبل نصب نشده، می توانید آن را به صورت دستی در عرض چند دقیقه نصب نمائید. در توزیع های مبتنی بر دبیان مانند اوبونتو، می توانید این کار را با استفاده از دستور زیر انجام دهید:
apt-get install rsync
در توزیع های مبتنی بر rpm مانند Fedora و CentOS از دستور زیر استفاده کنید:
yum install rsync
در MacOS از دستور زیر استفاده کنید:
brew install rsync
حالا Linux rsync آماده همگام سازی داده ها، انجام انتقال فایل ها و حذف فایل ها است. می توانید با استفاده از دستور ذکر شده قبلی بررسی کنید که آیا نصب با موفقیت انجام شده است:
rsync -version
چگونه از دستورات Rsync استفاده کنیم؟
برای این آموزش، دو دایرکتوری روی دسکتاپ لینوکس خود با نامهای original و duplicate ایجاد کنید. دایرکتوری original دارای سه فایل است در حالی که نسخه duplicate خالی است. حال بیایید ببینیم که چگونه rsync راه جدیدی برای افزایش بهرهوری ایجاد میکند.
برای ایجاد دو دایرکتوری تستی از دستورات زیر استفاده کنید:
cd ~
mkdir original
mkdir duplicate
touch original/file{1..3}
اگر میخواهید دوباره چک کنید، از دستور ls برای فهرست کردن همه فایلهای داخل دایرکتوری استفاده کنید:
ls original
خروجی شبیه به این خواهد بود:
اگر از دستور ls با دایرکتوری duplicate استفاده می کنید، خروجی باید خالی باشد.
اکنون که پوشهها ایجاد شده، بیایید چند دستور دیگر را امتحان کنیم.
دستور زیر تمام فایل های دایرکتوری original را در دایرکتوری duplicate کپی یا سینک می کند.
rsync original/* duplicate/
استفاده از * موجب میشود که rsync همه چیز را در فهرست original با نسخه duplicate همگام کند.
اگر تصویر یا فایل جدیدی را در پوشه اصلی قرار دهیم و همان دستور را دوباره اجرا کنیم، فقط تصویر جدید در مقصد کپی می شود.
این ویژگی زمانی مفید است که فایل ها را از طریق شبکه ای با پهنای باند محدود کپی می کنید.
بیش از ۵۰ گیگابیت ظرفیت شبکه - نصب رایگان سیستم عامل های لینوکس، ویندوز و مجازی ساز
با سرور اختصاصی سفارشی، پردازنده و نسل سرور را انتخاب کرده و حافظه متناسب با نیاز خود را سفارش دهید.
رایج ترین دستورات Rsync کدام است؟
در ادامه لیستی از رایج ترین دستورات مورد استفاده با rsync آمده است:
فعال کردن حالت آرشیو
-a, --archive
ایجاد یک خروجی بصری و نمایش پیشرفت
-v, --verbose
نمایش خروجی در قالبی قابل خواندن توسط انسان
-h, --human-readable format
فشرده سازی دادهها در حین انتقال
-z, --compress
کپی کردن دادهها به صورت بازگشتی
-r
نحوه استفاده از دستورات Rsync با زیر شاخهها
به خاطر داشته باشید که دستور بالا فقط فایل ها را از دایرکتوری original پوشه اصلی کپی می کند و نه هیچ یک از زیر شاخه ها.
اگر می خواهید زیر شاخه ها را نیز کپی کنید، باید از این دستور استفاده کنید:
rsync -r original/ duplicate/
گزینه -r (–recursive) به rsync میگوید که همه چیز، از جمله زیر شاخهها و فایلها را از پوشه original کپی کند.
علامت / که بعد از original استفاده می شود، به rsync دستور می دهد تا محتویات دایرکتوری original را در پوشه duplicate کپی کند.
نحوه همگام سازی فایل ها
اگر میخواهید فایلها را همگامسازی کنید، یعنی فایلهایی را که در پوشه مقصد هستند، اما به صورت اصلی نیستند، با پوشه original کپی کنید، از دستور زیر استفاده کنید:
rsync -r original duplicate/
با این دستور میتوان مطمئن بود که هم پوشههای original و هم پوشههای duplicate همه فایلهای یکسانی را شامل میشوند.
نحوه ترکیب دستورات Rsync
یکی دیگر از گزینه های مفید a– یا (–archive) است زیرا می توان آن را با بسیاری از دستورات دیگر ترکیب کرد. این بدان معناست که نه تنها فایلها بلکه مجوزها، زمانهای ویرایش و هر تاریخ دیگری را نیز کپی میکند.
افزودن گزینه -a با -v شبیه به این خواهد بود:
rsync -av --dry-run original/ duplicate/
نگران نباشید، دستور کمی پیچیده به نظر می رسد. بیایید آن را تحلیل کنیم.
این دستور فقط فایل هایی را که کپی می شوند را بدون ایجاد تغییر واقعی نمایش می دهد. با این دستور می توانید لیستی از فایل هایی که کپی می شوند را دریافت کنید.
اگر همه فایلهایی هستند که میخواهید کپی شوند، دستور را بدون —dry-run دوباره اجرا کنید.
—dry-run (یا -n) باعث می شود rsync یک اجرای آزمایشی را انجام دهد که هیچ تغییری ایجاد نمی کند.
گزینه های دیگر برای دستورات Rysnc
هنگامی که گزینه -a را به گزینه -v اضافه می کنیم، ساخت -av در دستور ما، پرصدا (لاگگیری) را افزایش می دهد. در اینجا چیزی است که باید به نظر برسد:
rsync -av original/ duplicate/
اگر میخواهید دو پوشه را همگامسازی کنید و موارد موجود در پوشه duplicate را که در پوشه original وجود ندارند حذف کنید، گزینه –delete را مانند زیر اضافه کنید:
rsync -av --delete original/ duplicate/
همچنین میتوانید هنگام همگامسازی دو پوشه، فایلها یا زیر شاخههای خاصی را حذف کنید. این کار را با اضافه کردن -exclude= انجام دهید. اگر نیاز به تعیین بیش از یک فایل دارید، آنها را با کاما از هم جدا کنید.
rsync -av --exclude=file1,file2 original/ duplicate/
همچنین میتوانید هنگام همگامسازی، فایلها یا زیرشاخههای خاصی را اضافه کرد. این کار را با افزودن -include= انجام دهید. همچنین می توانید از گزینه -exclude= استفاده کنید. مثال زیر شامل فایل هایی است که با حرف L شروع می شوند و همه فایل های دیگر را حذف می کند:
rsync -av --include=L* --exclude=* original/ duplicate/
با استفاده از Rsync، می توانید اندازه فایل قابل همگام سازی را نیز مشخص کنید. برای این کار از گزینه –max-size استفاده کنید:
rsync -av --max-size=10k original/ duplicate/
استفاده از گزینه -z (–compress) فایل هایی را که از طریق شبکه منتقل می شوند یکپارچه می کند.
بیایید نحوه انتقال از سرور منبع به سرور دیگر را ببینیم. دستور به شکل زیر خواهد بود:
rsync -az ~/Desktop/Original parsdev@192.168.21.70:~/tmp/
همانطور که قبلا ذکر شد -z فایل ها را فشرده می کند، -a یا فقط اضافه کردن یک به -z، اطمینان حاصل می کند که تمام مجوزها نیز کپی می شوند.
~/Desktop/Original مبدا و یک دایرکتوری لوکال است،دایرکتوری که در دستگاهی که وارد آن شده اید وجود دارد،
parsdev@192.168.21.70:~/tmp/ مقصد را نشان می دهد. parsdev@192.168.21.70 آدرس سرور ریموت مقصد است، در حالی که :~/tmp/ به یک پوشه خاص در آن دستگاه اشاره می کند
نحوه اضافه کردن نوار پیشرفت (Progress Bar)
علاوه بر دستورات بالا، می توانید -P را استفاده کرد که گزینه های –progress و –partial را با هم ترکیب می کند. یک نوار پیشرفت برای فایلهای در حال انتقال میدهد و همچنین امکان میدهد هر گونه انتقال فایل قطع شده را از سر بگیرید.
rsync -azP [SRC] [DEST]
خروجی شبیه به این خواهد بود:
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/3)
file2
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/3)
file3
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/3)
سپس اگر دوباره دستور را اجرا کنیم، خروجی کوتاه تری را مشاهده خواهیم کرد. به این دلیل که هیچ تغییر جدیدی ایجاد نشده است. خروجی شبیه به این خواهد بود:
sending incremental file list
send 26 bytes received 5 bytes 1200.00 bytes/sec
total size is 0 speedup is 0.00
اگر فقط می خواهید فایل های خاصی را انتقال دهید، می توانید با دستور زیر مشخص کنید:
touch original/file{1..5}
rsync -azP [SRC] [DEST]
این خروجی مشابه دستور قبلی را می دهد، اما فقط با فایل های مشخص شده بین آکولاد
نحوه ایجاد یک نسخه پشتیبان Rsync
دستور مهم دیگر ایجاد یک نسخه بکاپ Rsync است. این کار را با ترکیب –backup با دستور –dir انجام دهید تا بتوانید محل ذخیره فایل های پشتیبان را مشخص کنید.
rsync -a --delete --backup --backup-dir=/path/to/backup /path/to/SRC [DEST]
مثال های Rsync
در اینجا 12 مثال عملی از دستور Rsync در سیستم های یونیکس/لینوکس آورده شده است.
کپی/همگام سازی فایل ها و دایرکتوریها local-to-local
Rsync امکان همگام سازی فایل ها بین دایرکتوریها در سیستم لوکال را فراهم میکند. به عنوان مثال، من چند فایل پشتیبان در ماشین لوکال خود در زیر پوشه /mnt/backup دارم و می خواهم تمام فایل ها را در درایو USB که در /mnt/disk1 نصب شده است کپی/همگام سازی کنم. از دستور زیر برای همگام سازی همه فایل ها و دایرکتوری ها از /opt/backup به /mnt/disk1 استفاده کنید.
rsync -avhz /opt/backup /mnt/disk1/
sending incremental file list
backup/
backup/parsdev.22May2023.sql
backup/parsdev.22May2023.tar.gz
backup/parsdev.23May2023.sql
backup/parsdev.23May2023.tar.gz
sent 1.09G bytes received 96 bytes 23.39M bytes/sec
total size is 1.47G speedup is 1.35
کپی/همگام سازی فایل ها و دایرکتوریها local-to-remote
با استفاده از rsync، می توانیم به سرعت فایل ها را از سیستم های لوکال به ریموت کپی/همگام سازی کنیم. به عنوان مثال، من باید یک وب سایت را به یک سرور جدید منتقل کنم. به محتوای وب سایت نیاز داریم تا یک کپی از آن در سیستم ریموت داشته باشیم. از دستور زیر برای کپی کردن همه فایل ها از دایرکتوری /var/www/html لوکال به دایرکتوری سیستم ریموت (192.168.1.70) /var/www/html استفاده کنید.
rsync -avhz /var/www/html root@192.168.1.70:/var/www/html/
دستور بالا برای یک مدیر سیستم که فایل ها را بین دو سیستم به طور منظم کپی می کند مفید است.
کپی/همگام سازی فایل ها و دایرکتوریها remote-to-local
در دستور Rsync مبدا میتواند یک دایرکتوری ریموت باشد، که در این صورت مقصد باید لوکال باشد. به عنوان مثال، باید تمام فایل های پشتیبان ذخیره شده در پوشه /backups در ریموت را در پوشه لوکال /opt/backups کپی کنم.
rsync -avhz root@192.168.1.70:/backups /opt/backups
استفاده از Rsync روی SSH
Rsync با استفاده از دیمِن Rsync مستقیما از طریق TCP به سیستم های ریموت متصل می شود. میتوان به rsync دستور داد که از SSH برای اتصال سیستم های ریموت به جای ایجاد اتصال TCP استفاده کند.
از گزینه -e برای تعیین remote shell استفاده کنید. دستور زیر از ssh به عنوان یک remote shell استفاده می کند:
rsync -avhz -e ssh /src root@192.168.1.70:/dest/
نادیده گرفتن فایل ها و دایرکتوری هایی که از قبل در مقصد وجود داشت
از دستور Rsync با گزینه --ignore-existing برای نادیده گرفتن همه فایل هایی که از قبل در مقصد وجود دارند استفاده کنید. به عنوان مثال، می خواهید یک اسکریپت بکاپ را برنامه ریزی کنید تا همه فایل ها را روزانه را بر روی دیسک پشتیبان کپی کنید. در این صورت، شما نمی خواهید همه فایل ها را بارها و بارها کپی کنید. این گزینه فایل هایی را کپی می کند که در مقصد موجود نیستند.
rsync -avhz --ignore-existing /opt/backups /mnt/disk1
به روزرسانی فایل فقط در صورتی که مبدا جدیدتر باشد
از گزینه --update برای به روز رسانی فایل ریموت استفاده کنید فقط در صورتی که نسخه جدیدتر لوکال وجود داشته باشد. اگر Rsync وجود نداشته باشد، یک فایل در مقصد ایجاد می کند
rsync --update -avhz /opt/backups /mnt/disk1/
حذف فایل از مبدا پس از همگام سازی
از گزینه --remove-source-files برای حذف یک فایل از مبدا پس از انتقال موفقیت آمیز به مقصد استفاده کنید. به عنوان مثال، شما باید یک نسخه بکاپ از فایل های گزارش را در سیستم ریموت برنامه ریزی کنید. همچنین، می خواهید فایل را پس از کپی موفقیت آمیز در ریموت از سیستم لوکال حذف کنید. این به ادعای فضای دیسک کمک می کند.
rsync --remove-source-files -avhz /var/log root@192.168.1.70:/backup/logs/
فایل یا دایرکتوری خاص را با Rsync حذف کنید
می توانید یک فایل یا الگو را با گزینه --exclude=PATTERN برای حذف از rsync مشخص کنید.
rsync -avh --exclude '*.zip' --exclude '*.log' /src user@remote.host:/dest
شامل فایل های خاص با Rsync
Rsync پیشفرض شامل تمام فایلهای زیر شاخه مبدا میشود. اکنون باید فقط فایلهای خاصی را برای همگامسازی با مقصد اضافه کنید.
در اینجا میتوانید --include=PATTERN را برای گنجاندن فایلهای خاص و حذف همه فایلها با * تعیین کنید.
rsync -avhz -include '*.jpg' --include '*.txt' --exclude '*' /src user@remote.host:/dest
مجوزها (permissions) فایل را با Rsync تغییر دهید
میتوانید به Rsync دستور دهید تا مالک فایل و صاحبان گروه را در مقصد تغییر دهید. از گزینه --chown=USER:GROUP با Rsync برای تغییر مجوز فایل استفاده کنید.
rsync -avh --chown=USER:GROUP /src user@remote.host:/dest
به طور مشابه، می توانید از گزینه –chmod=CHMOD برای تغییر مجوزهای فایل یا دایرکتوری در مقصد استفاده کنید.
rsync -avh --chmod=755 /src user@remote.host:/dest
اجرای خشک دستور Rsync
برای اجرای خشک فقط از گزینه --dry-run استفاده کنید. نتایج مشابه دستور اصلی را به شما نشان می دهد اما هیچ چیز در مقصد به روز نمی شود. اساسا، میتوانیم از این برای بررسی اینکه Rsync چه چیزی را قبل از اجرای واقعی بهروزرسانی میکند، استفاده کنیم.
rsync -avh --dry-run /src user@remote.host:/dest