Tin tức và phân tích của tất cả các thiết bị di động

Hướng dẫn vẽ và 11 ví dụ sử dụng hiệu quả

Rsync là một công cụ dòng lệnh miễn phí cho phép bạn đồng bộ hóa các tệp cục bộ và từ xa. Với nó, bạn có thể chuyển các tập tin và thư mục.

Điều này làm cho nó rất hữu ích cho việc di chuyển, sao lưu và sao chép dữ liệu, giúp quản trị viên web và quản trị viên thực hiện các tác vụ truyền dữ liệu lặp đi lặp lại một cách tuyệt vời.

Bài viết này sẽ hướng dẫn chúng ta cách Rysnc hoạt động và đưa ra một số ví dụ hữu ích.

rsync hoạt động như thế nào?

Rsync là tiện ích dòng lệnh đồng bộ hóa từ xa dành cho các hệ thống giống Unix. Nó cung cấp cho người dùng khả năng chuyển/đồng bộ hóa các tập tin giữa các máy hoặc hai máy chủ một cách liền mạch.

Dưới mui xe, rsync sử dụng thuật toán chuyển delta. Thuật toán này liên quan đến việc sao chép sự khác biệt giữa hai tệp trên hai máy chủ (nguồn và đích). Nguồn và đích có thể là cục bộ hoặc từ xa. Lệnh rsync có thể thực hiện các tác vụ sao chép/đồng bộ hóa dữ liệu theo hai cách. Đó là:

  • Sử dụng ssh, rsh để sao chép/đồng bộ giữa hai máy chủ.
  • Sử dụng daemon TCP rsync để sao chép/đồng bộ hóa.

Vì nó được thiết kế để chạy trên các hệ thống giống Unix nên nó cũng hoạt động trên Linux.

Quá trình rsync từng bước sử dụng như sau:

  • Rsync sử dụng SSH để kết nối với máy chủ từ xa và yêu cầu nhập mật khẩu.
  • Sau khi được kết nối, rsync của máy chủ từ xa sẽ giao tiếp với nguồn.
  • Các chương trình này sau đó sẽ xác định các tập tin và thư mục cần được đồng bộ hóa. Nó sử dụng thuật toán chuyển delta để kiểm tra sự khác biệt giữa các tập tin.

Nếu lệnh rsync tìm thấy tệp trên điều khiển từ xa chứ không phải trên máy chủ, nó sẽ sao chép tệp đó và gửi đến hệ thống máy chủ. Tương tự, đối với các tệp đã có sẵn (cả máy chủ và từ xa), nó sẽ sao chép sự khác biệt giữa chúng (tức là các phần đã thay đổi). Cuối cùng, nó sẽ bỏ qua các tệp hiện có trên cả hai hệ thống mà không có bất kỳ sửa đổi nào.

Lệnh rsync thực hiện cập nhật gia tăng bằng cách lưu trữ sự khác biệt trong một tệp tạm thời trước khi đẩy nó đến đích.

Trước khi bạn bắt đầu:

  • Bạn phải có quyền root hoặc sudo
  • Có quyền truy cập thiết bị đầu cuối/dòng lệnh
  • Truy cập SSH để chạy các lệnh rsync một cách an toàn
  • Bạn cũng cần hai máy để thực hiện rsync.

Chúng tôi sẽ sử dụng Linux Mint 21 cho phần hướng dẫn.1 Vera. Bạn có thể dễ dàng làm theo hướng dẫn mà không gặp vấn đề gì khi sử dụng bất kỳ bản phân phối Linux nào khác.

Tại sao nên sử dụng rsync thay vì Scp?

Scp (bản sao an toàn) là một giao thức dòng lệnh phổ biến cho phép người dùng sao chép tệp. Điều này phù hợp với phương pháp sao chép tuyến tính. Tức là nó chỉ sao chép các tập tin từ nguồn tới đích. Để thực hiện việc này một cách an toàn, nó sử dụng SSH.

Cú pháp lệnh scp như sau:

scp option SOURCE DESTINATION

Nhưng câu hỏi vẫn là tại sao lại sử dụng rsync thay vì scp?

Chà, có rất nhiều lợi ích khi sử dụng rsync. Những lợi ích này bao gồm:

  • Thực thi nhanh hơn: Rsync nhanh hơn scp vì nó sử dụng giao thức cập nhật từ xa. Điều này chỉ cho phép tải lên các khác biệt chứ không phải toàn bộ tệp. Vì vậy, nếu bạn thiết lập đồng bộ hóa thời gian thông thường, bạn chỉ cần thực hiện sao lưu toàn bộ trong lần đầu tiên. Từ lần sau nó chỉ sao chép các phần được cập nhật bằng thuật toán chuyển delta.
  • Sử dụng ít băng thông hơn: Vì rsync không phải sao chép lại toàn bộ tệp nên điều này dẫn đến việc sử dụng ít băng thông hơn. Ngoài ra, nó còn sử dụng thuật toán nén/giải nén để giảm thiểu kích thước tệp trong quá trình tải lên.
  • Nhiều tùy chọn dòng lệnh hơn: Rsync cũng đánh bại scp về số lượng tùy chọn dòng lệnh. Điều này có nghĩa là bạn có thể điều chỉnh rsync nhiều hơn scp.

Nói chung, rsync là một công cụ tuyệt vời để đồng bộ hóa gia tăng. Tiện ích scp cũng hữu ích trong việc truyền/đồng bộ hóa các tệp một cách an toàn. Trong tình huống thực tế, scp phù hợp cho các công việc hàng ngày nếu bạn đang tìm kiếm một cách tiếp cận đơn giản hơn. Tuy nhiên, đối với các tác vụ lặp đi lặp lại, hãy sử dụng tiện ích rsync.

Cú pháp lệnh Rsync

Lệnh rsync như sau:

Ở đây các điều kiện được xác định dưới đây:

  • TÙY CHỌN – Đây là các tùy chọn rsync
  • NGUỒN – Thư mục nguồn
  • DEST – Thư mục đích
  • NGƯỜI DÙNG – Tên người dùng từ xa
  • HOST – Tên máy chủ hoặc địa chỉ IP từ xa

Tùy chọn là các tham số cung cấp chức năng bổ sung cho lệnh. Ví dụ: dữ liệu có thể được đồng bộ hóa đệ quy bằng tùy chọn -r. Tuy nhiên, tùy chọn -r không đồng bộ hóa quyền sở hữu nhóm và người dùng, dấu thời gian, quyền hoặc liên kết tượng trưng. Thay vào đó, bạn có thể sử dụng tùy chọn -a, tùy chọn này chạy lệnh ở chế độ lưu trữ, đảm bảo rằng tất cả quyền sở hữu, quyền và liên kết tượng trưng của tệp đều được giữ nguyên khi sao chép.

Các tùy chọn rsync khác bao gồm:

  • -z: nén dữ liệu để tiết kiệm dung lượng
  • -h: Cung cấp đầu ra ở định dạng mà con người có thể đọc được
  • -b: thực hiện sao lưu trong quá trình đồng bộ hóa dữ liệu
  • -e: sử dụng SSH để truyền dữ liệu từ xa
  • -progress: hiển thị tiến trình đồng bộ hóa dữ liệu
  • -v: yêu cầu rsync hiển thị toàn bộ đầu ra
  • -n: Thực hiện chạy thử để kiểm tra cài đặt và cấu hình đồng bộ hóa dữ liệu của bạn
  • -q: Loại bỏ các tùy chọn và đầu ra lệnh rsync

Cài đặt rsync

Hầu hết các hệ thống Unix và Linux đều được cài đặt rsync. Nếu hệ thống của bạn không có rsync, bạn có thể cài đặt nó bằng các lệnh sau.

Dành cho Debian/Ubuntu và Mint

sudo apt-get install rsync

Dành cho Arch Linux

pacman -S rsync

Trên Gentoo

emerge sys-apps/rsync

Trên CentOS/Fedora/REHL

sudo yum install rsync

Trên openSUSE

sudo zypper install rsync

Vì chúng tôi có Linux Mint nên rsync đã được cài đặt sẵn. Vì vậy, bạn có thể chạy rsync trong terminal để xem nó đã được cài đặt chưa. Nó sẽ giải thích các khả năng, lựa chọn và thông tin quan trọng khác nếu có.

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.

Bây giờ hãy xem rsync hoạt động với nhiều trường hợp sử dụng khác nhau.

Trong hướng dẫn này, chúng ta sẽ tạo hai thư mục.

  • thư mục nguồn
  • Danh mục nơi nhận

Đối với điều này, bạn cần phải nhập các lệnh sau.

mkdir source-directory
mkdir dest-directory

Ngoài ra, chúng tôi sẽ cần tạo các tệp để rsync hoạt động. Vì vậy, hãy tạo một số tệp thử nghiệm bằng lệnh bên dưới.

touch source-directory/file{1..100}

Điều này sẽ tạo ra 100 tệp trống trong thư mục nguồn. Bạn có thể xác nhận điều này bằng cách nhập lệnh bên dưới.

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

Lưu ý: chúng tôi để trống thư mục đích.

Sao chép thư mục cục bộ theo cách đệ quy

Mặc dù rsync chủ yếu được sử dụng để sao chép tệp giữa máy chủ cục bộ và máy chủ từ xa, nhưng nó cũng hữu ích không kém trong việc sao chép tệp cục bộ.

Trong trường hợp này, chúng tôi sẽ sử dụng cú pháp rsync sau.

tùy chọn rsync NGUỒN DESTINATION

Sao chép các tệp từ thư mục nguồn của chúng tôi sang thư mục đích bằng cách chạy lệnh sau.

rsync -r source-directory/ dest-directory

Ở đây, lệnh “đệ quy” sao chép các tệp từ thư mục nguồn sang thư mục đích.

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

Điều này sẽ sao chép từng tập tin từ thư mục nguồn vào thư mục đích.

Sao chép một tập tin cục bộ

Bây giờ chúng ta đã học cách đồng bộ hóa hai thư mục, chúng ta sẽ học cách sao chép một tệp duy nhất.

Để thực hiện việc này, chúng tôi sẽ sửa đổi file1 trống trong thư mục nguồn và sau đó đồng bộ hóa nó với cùng một tệp nằm trong thư mục đích.

Để chỉnh sửa tập tin, nhập lệnh sau.

nano source-directory/file1

Bây giờ sao chép và dán văn bản sau vào trình soạn thảo 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.

Thêm nội dung vào tập tin

Bây giờ hãy đóng và lưu tập tin.

Bây giờ hãy sao chép tệp bằng 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
$ 

Như bạn có thể nhận thấy, chúng tôi đã sử dụng tùy chọn – có sẵn. Điều này sẽ cập nhật các tập tin hiện có. Nếu bạn chạy lệnh mà không tồn tại thì nó sẽ không cập nhật dù chạy thành công.

Nếu tệp bạn đang sao chép không tồn tại trong thư mục đích, bạn cần chạy lệnh sau.

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

Sao chép nhiều tập tin

Nếu bạn định sao chép nhiều tệp, bạn phải chỉ định đường dẫn nguồn của cả hai tệp, theo sau là thư mục đích.

Để thực hiện việc này, chúng tôi sẽ tạo hai tệp mới: newfile2 và newfile3 trong thư mục nguồn. Chạy lệnh sau để làm như vậy.

touch source-directory/newfile{2..3}

Bây giờ sử dụng lệnh sau để đồng bộ nhiều tệp.

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
$ 

Sao chép tập tin hoặc thư mục từ cục bộ sang từ xa

Cú pháp rsync để chuyển từ cục bộ sang từ xa như sau.

rsync option SOURCE [email protected]:DEST

Như bạn có thể thấy, để tính năng này hoạt động, bạn cần biết địa chỉ IP của máy từ xa. Bạn cũng cần thêm địa chỉ IP sau tệp nguồn.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Nó sẽ yêu cầu mật khẩu trước khi bắt đầu chuyển. Vui lòng nhập nó để tiếp tục. Ngoài ra, nếu người dùng khác trên máy từ xa, bạn cần đề cập đến nó trước IP theo sau là @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Nếu bạn định sao chép nhiều tệp hoặc thư mục, bạn phải cung cấp danh sách các tệp hoặc đường dẫn thư mục. Cú pháp cho nó là dưới đây.

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Giao thức cụ thể truyền từ xa

Rsync cho phép bạn chỉ định các giao thức truyền tệp cụ thể. Để thực hiện việc này, bạn cần sử dụng tùy chọn -e theo sau là giao thức.

Ví dụ: nếu bạn muốn sử dụng ssh, bạn cần thêm -e ssh vào lệnh rsync.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Sao chép một tập tin hoặc thư mục từ xa sang cục bộ

Cú pháp rsync để chuyển từ cục bộ sang từ xa như sau.

sync option [email protected]:SRC DEST

Điều này hoạt động như một yêu cầu kéo. Vì vậy, để tải các tệp/thư mục cần thiết từ máy chủ từ xa về máy cục bộ của bạn, bạn cần chạy lệnh sau.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Lệnh tải các tập tin từ thư mục đích của máy từ xa về thư mục nguồn của máy cục bộ.

Tương tự, bạn có thể tải xuống một tệp cụ thể bằng cách liệt kê tệp đó trong đường dẫn đầy đủ.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Để sao chép nhiều tệp hoặc thư mục từ cục bộ sang từ xa, bạn phải chỉ định đường dẫn trong dấu ngoặc nhọn (cách nhau bằng dấu phẩy) sau địa chỉ IP của máy chủ.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Tương tự, bạn cũng có thể đề cập đến các tập tin.

Hiển thị tiến trình trực tiếp trong quá trình chuyển

Bạn nên xem trực tiếp tiến trình để sao lưu dữ liệu lớn hơn. Bạn cần sử dụng cờ –progress cho việc này. Đưa nó vào lệnh rsync của bạn và bạn sẽ thấy tốc độ truyền, thời gian còn lại và lượng dữ liệu được truyền.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Xóa các tập tin nguồn sau khi tải lên hoàn tất

Bạn có thể sử dụng cờ -remove-source-files để xóa các tệp nguồn sau khi quá trình truyền hoàn tất. Điều này có thể hữu ích trong nhiều trường hợp, đặc biệt là khi cần bảo mật tệp mà không để lại bất kỳ dấu vết nào hoặc chỉ đơn giản là sử dụng chúng để giải phóng dung lượng.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Chạy thử Rsync

Rysnc cũng cho phép đánh giá trước khi thực hiện lần chạy thực tế. Việc dùng thử cho phép bạn kiểm tra xem bạn có làm đúng hay không. Rốt cuộc, bạn không muốn cập nhật nhầm tệp hoặc thậm chí xóa chúng.

Bạn phải sử dụng tùy chọn –dry-run để chạy thử. Thêm nó vào lệnh, sau đó là nguồn và đích.

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

Kết quả đầu ra tương tự như cách chúng tôi chạy nó trước đây. Tuy nhiên, bạn sẽ nhận thấy đề cập đến (DRY RUN) ở cuối đầu ra.

Đặt kích thước tệp tối thiểu và tối đa

Rysnc cũng cho phép bạn đặt kích thước tệp tối thiểu hoặc tối đa khi tải lên.

Vì vậy, nếu bạn muốn tải lên với kích thước tối thiểu là 15KB, bạn cần sử dụng –min-size=15K.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Lệnh sẽ chỉ sao chép các tệp có kích thước tối thiểu 15 KB. Nếu kích thước tệp nhỏ hơn, nó sẽ bỏ qua nó.

Tương tự, bạn có thể sử dụng cờ –max-size để đặt kích thước tệp tối đa.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ở đây, rsync sẽ bỏ qua các tệp có kích thước trên 450KB.

Đặt giới hạn băng thông

Nếu bạn đang thực hiện các tác vụ đòi hỏi nhiều băng thông khác, bạn có thể đặt Rysnc để đặt giới hạn băng thông cho quá trình truyền. Để thực hiện việc này, hãy sử dụng tùy chọn –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Ở đây chúng tôi đặt băng thông thành 100Kbps trong quá trình truyền.

những từ cuối

Điều này đưa chúng ta đến phần cuối của hướng dẫn về các lệnh rsync. Chúng tôi đã học cách sử dụng Rysnc và sử dụng nhiều lệnh một cách hiệu quả.

Tuy nhiên, Rysnc cung cấp nhiều hơn những gì chúng tôi đã đề cập. Do đó, bạn cũng có thể muốn xem trang rsync man nơi mọi khía cạnh của rsync được đề cập.

Sau đó kiểm tra bảng cheat dòng lệnh cho hệ thống WindowsLinux và macOS.