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.