Rsync (Remote Sync) הוא הפקודה הנפוצה ביותר להעתקה וסנכרון של קבצים ותיקיות מרחוק וגם מקומית במערכות Linux/Unix.
עם עזרת הפקודה rsync, תוכל להעתיק ולסנכרן את הנתונים שלך מרחוק ומקומית בין תיקיות, דיסקים ורשתות, לבצע גיבויי נתונים ול שקוף בין שני מחשבי Linux.
מאמר זה מסביר 16 שימושים בסיסיים ומתקדמים של הפקודה rsync כדי להעביר את הקבצים שלך מרחוק ומקומית במכונות מבוססות Linux. אין צורך להיות משתמש root כדי להריץ את הפקודה rsync.
טבלת תוכן
יתרונות של פקודת Rsync
היא מציעה מספר יתרונות, כוללים:
- העברת קבצים יעילה – rsync משתמשת באלגוריתם העברת דלתא, שמשמעו העברה רק של השוניים בין קבצי המקור והיעד, מה שמפחית באופן משמעותי את כמות הנתונים שנשלחים, מה שהופך אותו ליעיל לסנכרון של קבצים או ספריות גדולות.
- סנכרון קבצים מרחוק – rsync תומך בהעברת קבצים גם מקומיים וגם מרחוק דרך SSH, מה שמאפשר סנכרון בין מערכות מקומיות ומרוחקות או ברמת ראי ספריות על מספר מכונות.
- גיבויים ברמות – rsync מתאימה באופן מיוחד לגיבויים ברמות, מאחר והיא יוצרת ומעדכנת גיבויים באופן יעיל על ידי העברת קבצים חדשים או מודפסים בלבד.
- שומר זכויות קובץ – rsync יכול לשמור על מאפייני קובץ שונים, כגון הרשאות, בעלות, חותמות זמן וקישורים סימבוליים, מה שמבטיח שהקבצים המעותפים ישמרו את המאפיינים המקוריים שלהם ביעד.
- בקרת רוחב פס – rsync מאפשר לך להגביל את שימוש ברוחב הפס במהלך העברת קבצים, מאחר והוא משתמש בשיטת דחיסה ופירוק במהלך שליחה וקבלה של נתונים בשני הקצוות.
- מהיר יותר – rsync יכול להיות מהיר יותר מ-scp (העתקה מאובטחת) להעברת קבצים, במיוחד כאשר סונכרן ספריות גדולות או בעת עיבוד קבצים שכבר הועברו חלקית או קיימים ביעד.
תחביר הפקודה rsync
הפקודה rsync עוקבת אחר התחביר הבא:
# rsync [OPTIONS] SOURCE DESTINATION
הנה הסבר על הרכיבים והאפשרויות השונות שמשמשים עם פקודות rsync:
-v
– פלט מפורט, מציג מידע מפורט על העברה.-r
– מעתיק נתונים באופן רקורסיבי (אך לא שומר חותמות זמן והרשאות במהלך העברת הנתונים.-a
– מצב ארכיון, המאפשר העתקת קבצים באופן רקורסיבי ושומר גם קישורים סימבוליים, הרשאות קובץ, בעלות משתמש וקבוצה, וחותמות זמן.-z
– דחיסת קבצים במהלך העברתם כדי להפחית את שימוש הרשת.-h
– קריאה להוות אנושית, פלט מספרים בתבנית שקולה לאדם.-P
– הצגה של התקדמות במהלך העברה.SOURCE
– מציין את הקובץ(ים) או התיקייה שיש להעביר, שיכולה להיות מקום מקומי או מרחוק.DESTINATION
– מציין את נתיב היעד שבו יועתקו הקבצים או התיקיות. כדומה למקור, זה יכול להיות נתיב מקומי או מרחוק.
התקנת Rsync במערכת Linux
ניתן להתקין את חבילת ה־rsync בעזרת מנהל החבילות הבא על פי ההפצה שלך ל־Linux.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. העתקת/סנכרון קובץ מקומית
כדי להעתיק או לסנכרן קובץ באופן מקומי, ניתן להשתמש בפקודה הבאה שתסנכרן קובץ יחיד במכונה מקומית ממקום אחד למקום אחר.
כאן בדוגמה זו, שם הקובץ backup.tar צריך להיות מועתק או מסונכרן לתיקיית /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
בדוגמה לעיל, ניתן לראות שאם היעד עדיין לא קיים rsync ייצור תיקייה אוטומטית עבור היעד.

2. העתקה / סנכרון תיקייה מקומית
הפקודה הבאה תעביר או תסנכרן את כל הקבצים מתיקייה אחת לתיקייה שונה באותו מחשב.
כאן בדוגמה זו, /root/rpmpkgs מכילה קבצי חבילות RPM ואתה רוצה שהתיקייה הזו תיעתק לתוך תיקיית /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. העתקת תיקייה מלוקלי לשרת רחוק
כדי להעתיק תיקייה משרת מקומי לשרת רחוק, ניתן להשתמש בפקודה הבאה, שתסנכרן תיקייה ממחשב מקומי למחשב רחוק.
לדוגמה, אם יש תיקייה במחשב המקומי שלך בשם "rpmpkgs" שמכילה חבילות RPM ואתה רוצה שתוכן התיקייה המקומית יישלח לשרת רחוק, תוכל להשתמש בפקודה הבאה.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. העתקת תיקייה משרת רחוק למקומי
פקודה זו תעזור לך לסנכרן תיקייה מרחוק לתיקייה מקומית. כאן בדוגמה, תיקייה /root/rpmpkgs שנמצאת על שרת רחוק מועתקת למחשב המקומי שלך בתיקייה /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync מעל SSH
rsync, אנו יכולים להשתמש ב־SSH (Secure Shell) להעברת נתונים, באמצעות פרוטוקול SSH במהלך ההעברה של הנתונים שלך תהיה מבטחת עם הצפנה כך שאף אחד לא יוכל לקרוא את הנתונים שלך במהלך ההעברה דרך האינטרנט.
גם כאשר אנו משתמשים ב־rsync אנו צריכים לספק את הסיסמה של המשתמש/root כדי להשלים את המשימה הספציפית הזו, לכן בשימוש באפשרות SSH תשלח את הכניסות שלך באופן מצופה כך שהסיסמה שלך תהיה בטוחה.
כדי להשתמש ב־rsync על SSH, תוכל להשתמש באפשרות -e
כדי לציין את פקודת מכסת המרחוק, שבדרך כלל היא ssh כמודגם.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. להעתיק קובץ משרת מרוחק לשרת מקומי עם SSH
כדי לסנכרן קובץ משרת מרוחק לשרת מקומי, תוכל לציין פרוטוקול עם rsync באמצעות האפשרות "-e" עם שם הפרוטוקול שתרצה להשתמש בו.
כאן בדוגמה זו, נשתמש ב־"ssh" עם האפשרות "-e" ונבצע העברת נתונים.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. להעתיק קובץ משרת מקומי לשרת רחוק באמצעות SSH
כדי לסנכרן קובץ משרת מקומי לשרת רחוק באמצעות SSH, ניתן להשתמש בפקודה הבאה כפי שמוצג.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. להציג התקדמות במהלך העברת נתונים עם Rsync
כדי להציג את התקדמות העברת הנתונים ממכונה אחת למכונה שונה, ניתן להשתמש באפשרות '--progress'
, שמציגה את הקבצים והזמן הנותר עד להשלמת ההעברה.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. כלול קבצים עם סיומת מסוימת עם Rsync
כדי לכלול קבצים או דפוסים מסוימים במהלך הפעולה של rsync, ניתן להשתמש באפשרות --include
עם סיומת המתאימה לכל הקבצים.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
בדוגמה שסופקה, rsync יכלול רק קבצים עם סיומת .txt
מהתיקיה /path/to/source/ במהלך ההעברה.
10. החלק קבצים עם סיומת מסוימת עם Rsync
באופן דומה, כדי להוציא בצורה מסוימה סיומת זו במהלך הפעולה של rsync, ניתן להשתמש באפשרות --exclude
עם דפוס מסולסל.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
11. כלול ואל תכלול קבצים עם rsync
כדי לכלול ולא לכלול קבצים או דפוסים מסוימים במהלך פעולת rsync, תוכל להשתמש באפשרויות --include
ו---exclude
עם דפוסי ג'וקר.
שתי האפשרויות הללו מאפשרות לנו לכלול ולא לכלול קבצים על ידי ציון פרמטרים שהאפשרות הזו מסייעת לנו לציין את הקבצים או התיקיות שברצונך לכלול בסנכרון שלך ולא לכלול קבצים ותיקיות אליהם לא רוצה להעביר.
כאן בדוגמה זו, פקודת rsync תכלול רק את הקבצים והתיקיות שמתחילים ב-'R'
ותוחלט לא לכלול את כל שאר הקבצים והתיקיות.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. שימוש באפשרות –delete עם rsync
אם קובץ או תיקייה אינם קיימים במקור, אך כבר קיימים ביעד, עשוי להיות רצוי למחוק את הקובץ/התיקייה הקיימים ביעד במהלך הסנכרון.
נוכל להשתמש באפשרות '--delete
' כדי למחוק קבצים שאינם קיימים בתיקיית המקור.
המקור והיעד מסונכרנים. כעת נוצר קובץ חדש test.txt ביעד.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
המטרה יש לקובץ החדש בשם test.txt כאשר מסנכרן עם המקור עם אפשרות "--delete
", הוא הסיר את הקובץ test.txt.

13. הגדרת מגבלת העברת קבצים עם Rsync
ניתן לציין את הגודל המרבי של הקובץ שיש להעביר או לסנכרן. ניתן לעשות זאת עם האפשרות "--max-size
". כאן בדוגמה זו, גודל הקובץ המרבי הוא 200k, כך שפקודה זו תעביר רק את הקבצים הקטנים או שווים ל- 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. מחיקת קבצי המקור אוטומטית לאחר העברה
עתה, נניח כי יש לך את השרת הראשי של האינטרנט ושרת גיבוי של נתונים, יצרת גיבוי יומי וסינכרנת אותו עם שרת הגיבוי שלך, אך כעת אינך רוצה לשמור את העותק המקומי של הגיבוי בשרת האינטרנט שלך.
אז, האם תמתין להשלמת העברה ואז תמחק את קובץ הגיבוי המקומי הזה באופן ידני? כמובן לא. ניתן לבצע מחיקה אוטומטית זו באמצעות אפשרות '--remove-source-files
'.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. ביצוע ריצת ניסיון יבש עם Rsync
אם אתה משתמש חדש ב-Rsync ולא יודע מה בדיוק הפקודה שלך הולכת לעשות. Rsync באמת יכול לערבב את הדברים בתיקיית היעד שלך ואז עשיית ביטול יכולה להיות משימה מעייפה.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. קביעת הגבול רוחב הפס והעברת קובץ
ניתן להגביל את רוחב הפס בזמן העברת נתונים ממכונה אחת למכונה אחרת בעזרת האפשרות '--bwlimit
'. אפשרות זו מסייעת לנו להגביל את רוחב הפס של פעילות הקלט/הפלט.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
בנוסף, ברירת המחדל של rsync היא לסנכרן רק בלוקים ובתים ששונו, אם ברצונך לסנכרן את הקובץ כולו באופן מפורש, אז תשתמש באפשרות '-W' עימו.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
מסקנה
כך מסתיימת הסקירה שלנו על rsync ועל היכולות שלו. למחקר נוסף של אפשרויותיו הרחבות ותכונותיו, אני ממליץ להפנות אל דפי המדריך המקיפים (דפי האדם) הזמינים.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/