استخدام الأمر rsync لمزامنة الملفات والدلائل [11 Examples]

rsync هي أداة سطر أوامر مجانية الاستخدام تتيح لك مزامنة الملفات محليًا وعن بُعد. باستخدامه ، يمكنك نقل الملفات والدلائل.
وهذا يجعلها مفيدة جدًا لترحيل البيانات وإجراء النسخ الاحتياطية والنسخ المتطابق ، مما يجعلها رائعة لمشرفي المواقع والمسؤولين لمهام نقل البيانات المتكررة.
ستعلمنا هذه المقالة كيفية عمل Rysnc وتعطي بعض الأمثلة المفيدة.
كيف يعمل rsync؟
rsync هي أداة سطر أوامر للمزامنة عن بُعد للأنظمة الشبيهة بنظام Unix. يمنح المستخدم القدرة على نقل / مزامنة الملفات بين الأجهزة أو مضيفين بسلاسة.
تحت الغطاء ، يستخدم rsync خوارزمية دلتا النقل. تتضمن هذه الخوارزمية نسخ الاختلافات بين الملفين عبر مضيفين (المصدر والوجهة). يمكن أن يكون المصدر والوجهة محليًا أو بعيدًا. يمكن لأمر rsync تنفيذ مهام نسخ / مزامنة البيانات بطريقتين. هؤلاء هم:
- استخدم ssh و rsh للنسخ / المزامنة بين مضيفين.
- استخدم البرنامج الخفي لـ TCP rsync للنسخ / المزامنة.
نظرًا لأنه مصمم للعمل في أنظمة تشبه Unix ، فهو يعمل أيضًا في Linux.
تستخدم عملية rsync خطوة بخطوة على النحو التالي:
- يستخدم Rsync SSH للاتصال بالمضيف البعيد ويطلب كلمة مرور.
- بمجرد الاتصال ، يتصل rsync الخاص بالمضيف البعيد بالمصدر.
- ستحدد هذه البرامج بعد ذلك الملفات والأدلة التي تحتاج إلى مزامنة. يستخدم خوارزمية delta-transfer للتحقق من الفرق بين الملفات.
إذا لم يعثر الأمر rsync على ملف على جهاز التحكم عن بُعد ولكن ليس على المضيف ، فسيتم نسخه ونقله إلى النظام المضيف. وبالمثل ، بالنسبة للملفات الموجودة بالفعل (سواء على المضيف أو البعيد) ، فسوف يقوم بنسخ الفرق بينهما (أي الأجزاء التي تم تغييرها). أخيرًا ، سيتجاهل الملفات الموجودة على كلا النظامين بدون تعديلات.
يحقق الأمر rsync تحديثات تدريجية من خلال تخزين الاختلاف في ملف مؤقت قبل دفعه إلى الوجهة.
قبل ان تبدا:
- أنت بحاجة إلى امتيازات الجذر أو sudo
- الوصول إلى سطر الأوامر / المحطة
- وصول SSH لتشغيل أوامر rsync بأمان
- تحتاج أيضًا إلى جهازين لعمل rsync.
في البرنامج التعليمي ، سنستخدم Linux Mint 21.1 Vera. يمكنك بسهولة اتباع الدليل دون مشاكل باستخدام أي توزيعة Linux أخرى.
لماذا استخدم rsync Over Scp؟
Scp (نسخة آمنة) هو بروتوكول سطر أوامر شائع يتيح للمستخدمين نسخ الملفات. يتبع نهج خطي للنسخ. هذا يعني أنه ببساطة يقوم بنسخ الملفات من المصدر إلى الوجهة. للقيام بذلك بشكل آمن ، فإنه يستخدم SSH.
صيغة الأمر scp كما يلي:
scp option SOURCE DESTINATION
ومع ذلك ، يبقى السؤال ، لماذا استخدام rsync على scp؟
حسنًا ، هناك فوائد متعددة لاستخدام rsync. تشمل هذه الفوائد:
- تنفيذ أسرع: rsync أسرع من scp لأنه يستخدم بروتوكول تحديث عن بعد. هذا يسمح لها بنقل الاختلافات فقط بدلاً من الملف بأكمله. لذلك ، إذا قمت بإعداد مزامنة منتظمة بمرور الوقت ، فأنت تحتاج فقط إلى عمل نسخة كاملة في المرة الأولى. من المرة التالية فصاعدًا ، يقوم فقط بنسخ الأجزاء المحدثة بمساعدة خوارزمية delta-transfer.
- استهلاك أقل لعرض النطاق الترددي: نظرًا لأن rsync لا يضطر إلى نسخ الملف بالكامل مرة أخرى ، فإنه يؤدي إلى تقليل استهلاك النطاق الترددي. علاوة على ذلك ، فإنه يستخدم أيضًا خوارزميات الضغط / إلغاء الضغط لتقليل حجم الملف أثناء النقل.
- المزيد من خيارات سطر الأوامر: يتفوق rsync أيضًا على scp في عدد خيارات سطر الأوامر. هذا يعني أنه يمكنك ضبط rsync أكثر من scp.
في الختام ، تعد rsync أداة مزامنة تدريجية ممتازة. أداة scp مفيدة أيضًا في نقل / مزامنة الملفات بأمان. في سيناريو العالم الحقيقي ، يعد scp مناسبًا للمهام اليومية إذا كنت تبحث عن نهج أكثر وضوحًا. ومع ذلك ، بالنسبة للمهام المتكررة ، استخدم rsync.
صيغة الأمر rsync
أمر rsync كالتالي:
هنا ، يتم تعريف المصطلحات أدناه:
- OPTION – هذه هي خيارات rsync
- المصدر – دليل المصدر
- DEST – دليل الوجهة
- المستخدم – اسم المستخدم البعيد
- HOST – اسم المضيف البعيد أو عنوان IP
الخيارات هي معلمات توفر وظائف إضافية للأمر. على سبيل المثال ، يمكنك مزامنة البيانات بشكل متكرر باستخدام الخيار -r. ومع ذلك ، لا يقوم الخيار -r بمزامنة الملكية للمجموعات والمستخدمين أو الطوابع الزمنية أو الإذن أو الروابط الرمزية. بدلاً من ذلك ، يمكنك استخدام الخيار -a ، الذي يقوم بتشغيل الأمر في وضع الأرشيف ، مما يضمن الاحتفاظ بجميع ملكية الملف ، والإذن ، والروابط الرمزية عند النسخ.
تشمل خيارات rsync الأخرى:
- -z: ضغط البيانات لتوفير المساحة
- -h: يوفر إخراج تنسيق يمكن قراءته من قبل الإنسان
- -b: إجراء النسخ الاحتياطي أثناء عملية مزامنة البيانات
- -e: استخدام بروتوكول SSH لنقل البيانات عن بعد
- -التقدم: عرض تقدم مزامنة البيانات
- -v: اطلب من rsync عرض إخراج مطول
- –n: تنفيذ التشغيل الجاف لاختبار الإعدادات والإعداد لمزامنة البيانات
- -q: قم بإيقاف إخراج أمر rsync وخياراته
تثبيت rsync
تأتي معظم أنظمة Unix و Linux مثبت عليها rsync. إذا لم يكن نظامك يحتوي على rsync ، فيمكنك تثبيته باستخدام الأمر (الأوامر) التالية.
لـ Debian / Ubuntu و Mint
sudo apt-get install rsync
بالنسبة إلى Arch Linux
pacman -S rsync
على Gentoo
emerge sys-apps/rsync
على CentOS / Fedora / REHL
sudo yum install rsync
على openSUSE
sudo zypper install rsync
نظرًا لأن لدينا Linux Mint ، فقد تم تثبيت rsync مسبقًا. لذلك يمكنك تشغيل الأمر rsync في المحطة لمعرفة ما إذا كان مثبتًا أم لا. سوف يشرح قدراته وخياراته ومعلومات حيوية أخرى إذا كانت موجودة.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
دعنا الآن نرى rsync قيد العمل مع حالات استخدام مختلفة.
بالنسبة للبرنامج التعليمي ، سنقوم بعمل دليلين.
- دليل المصدر
- دليل Dest
لذلك ، تحتاج إلى كتابة الأوامر التالية.
mkdir source-directory mkdir dest-directory
أيضًا ، سنحتاج إلى إنشاء ملفات لجعل rsync يعمل. لذلك دعونا ننشئ بعض ملفات الاختبار باستخدام الأمر أدناه.
touch source-directory/file{1..100}
يؤدي هذا إلى إنشاء 100 ملف فارغ في الدليل المصدر. يمكنك تأكيد ذلك عن طريق إدخال الأمر أدناه.
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory 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
ملاحظة: لقد أبقينا مجلد dest فارغًا.
نسخ الدلائل محليًا بشكل متكرر
على الرغم من أن rsync يهدف بشكل أساسي إلى نسخ الملفات بين خادم محلي وخادم بعيد ، إلا أنه مفيد أيضًا لنسخ الملفات محليًا.
في هذه الحالة ، سنستخدم صيغة rsync التالية.
خيار rsync المصدر الوجهة
انسخ الملفات الموجودة في دليل المصدر إلى المجلد dest عن طريق تشغيل الأمر التالي.
rsync -r source-directory/ dest-directory
هنا ، يقوم الأمر “بشكل متكرر” بنسخ الملفات من الدليل المصدر إلى الدليل المصدر.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory 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 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory 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
يؤدي هذا إلى نسخ كل ملف منفرد في الدليل المصدر إلى الدليل الوجهة.
نسخ ملف واحد محليًا
الآن بعد أن تعلمنا كيفية مزامنة دليلين ، سنتعلم كيفية نسخ ملف واحد.
لهذا الغرض ، سنقوم بتحرير الملف الفارغ file1 في الدليل المصدر ثم نقوم بمزامنته مع نفس الملف الموجود في المجلد dest.
لتحرير ملف ، اكتب الأمر التالي.
nano source-directory/file1
الآن انسخ والصق النص التالي في محرر nano.
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
إضافة محتوى إلى ملف
الآن ، أغلق الملف واحفظه.
لنقم الآن بنسخ الملف باستخدام rsync.
sudo rsync -v --existing source-directory/file1 /dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
كما لاحظت ، استخدمنا الخيار الحالي. هذا يقوم بتحديث الملفات الموجودة. إذا قمت بتشغيل الأمر بدون – موجود ، فلن يتم تحديثه ، على الرغم من أنه يعمل بنجاح.
إذا كان الملف الفردي الذي تنسخه غير موجود في المجلد الوجهة ، فأنت بحاجة إلى تشغيل الأمر التالي.
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
نسخ ملفات متعددة
إذا كنت تنوي نسخ ملفات متعددة ، فيجب عليك ذكر مسارات مصدر كلا الملفين ، متبوعًا بالدليل الهدف.
لهذا الغرض ، سننشئ ملفين جديدين: newfile2 و newfile3 ، في دليل المصدر. قم بتشغيل الأمر التالي للقيام بذلك.
touch source-directory/newfile{2..3}
الآن ، استخدم الأمر التالي لمزامنة ملفات متعددة.
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
نسخ ملف أو دليل من محلي إلى بعيد
بناء جملة rsync للنقل المحلي إلى البعيد كما هو موضح أدناه.
rsync option SOURCE [email protected]:DEST
كما ترى ، تحتاج إلى معرفة عنوان IP الخاص بالجهاز البعيد لإنجاز هذا العمل. تحتاج أيضًا إلى إضافة عنوان IP بعد الملف المصدر.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
قبل بدء النقل ، سيطلب كلمة المرور. أدخله للمتابعة. أيضًا ، إذا كان المستخدم مختلفًا في الجهاز البعيد ، فأنت بحاجة إلى ذكره قبل عنوان IP متبوعًا بـ @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
إذا كنت تنوي نسخ ملفات أو أدلة متعددة ، فأنت بحاجة إلى سرد الملفات أو مسارات الدليل. بناء الجملة لذلك أدناه.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
البروتوكولات الخاصة بالنقل البعيد
يتيح لك rsync تحديد بروتوكولات معينة لنقل الملفات. للقيام بذلك ، تحتاج إلى استخدام الخيار -e ، متبوعًا بالبروتوكول.
على سبيل المثال ، إذا كنت تريد استخدام بروتوكول ssh ، فيجب عليك إلحاق -e ssh بأمر rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
نسخ ملف أو دليل من بعيد إلى محلي
بناء جملة rsync للنقل المحلي إلى البعيد كما هو موضح أدناه.
sync option [email protected]:SRC DEST
هذا بمثابة طلب سحب. لذلك ، للحصول على الملفات / الدليل المطلوب من خادم بعيد إلى جهازك المحلي ، تحتاج إلى تشغيل الأمر التالي.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
يسحب الأمر الملفات الموجودة في دليل dest للجهاز البعيد إلى دليل مصدر الجهاز المحلي.
وبالمثل ، يمكنك سحب ملف معين من خلال ذكره من خلال مساره الكامل.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
لنسخ ملفات أو أدلة متعددة من محلي إلى بعيد ، تحتاج إلى تحديد المسار داخل الأقواس المتعرجة (مفصولة بفواصل) بعد عنوان IP للخادم.
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
وبالمثل ، يمكنك ذكر الملفات أيضًا.
إظهار التقدم المباشر أثناء النقل
إنها لفكرة جيدة أن ترى تقدمًا مباشرًا للنسخ الاحتياطية الأكبر للبيانات. لذلك ، تحتاج إلى استخدام علامة التقدم. قم بإلحاقه بأمر rsync ، ويمكنك رؤية سرعة النقل والوقت المتبقي وكمية البيانات المنقولة.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
احذف ملفات المصدر بمجرد اكتمال النقل
يمكنك استخدام علامة -remove-source-files لإزالة الملفات المصدر بعد النقل الكامل. يمكن أن يساعدك ذلك في العديد من السيناريوهات ، خاصة عندما يتعلق الأمر بتأمين ملفاتك دون ترك أي أثر أو استخدامها ببساطة لتحرير مساحة.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
تشغيل rsync الجاف
يتيح لك Rysnc أيضًا التقييم قبل إجراء تشغيل فعلي. يتيح لك التشغيل الجاف معرفة ما إذا كنت تفعل الشيء الصحيح. بعد كل شيء ، لا تريد تحديث الملفات عن طريق الخطأ أو حتى حذفها.
تحتاج إلى استخدام خيار التشغيل الجاف لإجراء تشغيل جاف. أضفه إلى الأمر ، متبوعًا بالمصدر والوجهة.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
الإخراج مشابه لكيفية تشغيلنا له من قبل. ومع ذلك ، ستلاحظ ذكر (DRY RUN) في نهاية الإخراج.
تعيين الحد الأدنى والحد الأقصى لحجم الملف
يتيح لك Rysnc أيضًا تعيين الحد الأدنى أو الحد الأقصى لحجم الملف أثناء النقل.
لذا ، إذا كنت تريد نقل بحجم 15 كيلوبايت كحد أدنى ، فأنت بحاجة إلى استخدام –min-size = 15K.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
سيقوم الأمر فقط بنسخ الملفات ذات الحد الأدنى لحجم الملف 15 كيلو بايت. إذا كان حجم الملف أقل من ذلك ، فسيتجاهله.
وبالمثل ، يمكنك استخدام علامة –max-size لتعيين الحد الأقصى لحجم الملف.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
هنا ، سيتجاهل rsync الملفات التي يزيد حجمها عن 450 كيلو بايت.
تعيين حد النطاق الترددي
إذا كنت تقوم بمهام أخرى كثيفة النطاق الترددي ، فيمكنك تعيين rysnc لتعيين حد النطاق الترددي للنقل. للقيام بذلك ، استخدم –bwlimit = KB / s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
هنا ، قمنا بتعيين النطاق الترددي على 100 كيلو بايت / ثانية أثناء النقل.
الكلمات الأخيرة
هذا يقودنا إلى نهاية دليل أوامر rsync الخاص بنا. لقد تعلمنا كيفية استخدام rysnc وقمنا بتغطية الكثير من الأوامر بفعالية.
ومع ذلك ، فإن rysnc يقدم طريقة أكثر مما قمنا بتغطيته. لهذا السبب قد ترغب أيضًا في تصفح صفحة رجل rsync ، حيث تتم تغطية كل جانب من جوانب rsync.
بعد ذلك ، تحقق من أوراق الغش في سطر الأوامر لأنظمة Windows و Linux و macOS.