איך להשתמש בפקודת Rsync בלינוקס: 16 דוגמאות מעשיות

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 ייצור תיקייה אוטומטית עבור היעד.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/