Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Làm chủ Linux rsync: Lệnh, Cú pháp & Ví dụ thực tế – Hướng dẫn hoàn chỉnh

Lệnh rsync (remote synchronization) là công cụ copy file đồng bộ file giữa ổ cục bộ và qua mạng.

Nó phổ biến vì rất tốt. Thường dùng backup file, giữ file server cập nhật lẫn nhau, deploy code và asset web app lên server.

rsync copy gần như mọi file nhìn thấy và đồng bộ dựa trên kích thước file và ngày sửa để xác định gì thay đổi cần cập nhật.

Lệnh rsync RẤT LỚN, chúng ta sẽ bắt đầu với ứng dụng thực tế bao phủ các tình huống phổ biến nhất trong hướng dẫn này.

Cú pháp

rsync TUY_CHON NGUON DICH

Lưu ý:

  • TUY_CHON là danh sách tùy chọn từ danh sách dưới, cách nhau dấu cách
  • NGUON là đường dẫn file/thư mục nguồn đồng bộ, có thể kèm chi tiết remote host
  • DICH là đường dẫn đích đồng bộ, có thể kèm chi tiết remote host
  • NGUON và DICH phải đúng thứ tự!

Tùy chọn

Các tùy chọn thường dùng cho rsync, từ manual:

Chọn gì copy:

-r, --recursive Đệ quy vào thư mục -R, --relative Dùng đường dẫn tương đối --exclude=PATTERN Loại trừ file khớp PATTERN --exclude-from=FILE Đọc pattern loại trừ từ FILE -I, --ignore-times Không loại trừ file khớp độ dài và thời gian --size-only Chỉ dùng kích thước file quyết định có truyền hay không --modify-window=NUM Cửa sổ timestamp (giây) cho khớp file (mặc định=0) --include=PATTERN Không loại trừ file khớp PATTERN --include-from=FILE Đọc pattern include từ FILE 

Cách copy:

-n, --dry-run Chạy thử không thay đổi -l, --links Copy symlink như symlink -L, --copy-links Biến symlink thành file/thư mục tham chiếu --copy-unsafe-links Chỉ symlink "unsafe" bị biến đổi --safe-links Bỏ qua link ngoài cây đích --munge-links Làm symlink an toàn hơn -H, --hard-links Giữ hard link --devices Giữ device file (chỉ super-user) --specials Giữ file đặc biệt -D, --devices --specials Giữ device (super-user) +files -g, --group Giữ group -o, --owner Giữ owner (super-user) -p, --perms Giữ quyền --remove-source-files Sender xóa file đã sync (không phải thư mục) -t, --times Giữ thời gian -S, --sparse Xử lý sparse file hiệu quả -x, --one-file-system Không vượt giới hạn filesystem -B, --block-size=SIZE Buộc block-size checksum cố định (mặc định 700) -e, --rsh=LENH Chỉ định thay thế rsh --rsync-path=DUONG_DAN Chỉ định đường dẫn rsync trên máy remote --numeric-ids Không map uid/gid theo tên user/group --timeout=GIAY Đặt IO timeout giây -W, --whole-file Copy toàn file, không kiểm tra tăng dần 

Tùy chọn đích:

-a, --archive Chế độ archive = -rlptgoD (không -H,-A,-X) -b, --backup Tạo backup (xem --suffix & --backup-dir) --backup-dir=DIR Tạo backup vào thư mục này -z, --compress Nén dữ liệu khi truyền -c, --checksum Bỏ qua dựa trên checksum, không phải mod-time & size -C, --cvs-exclude Tự bỏ qua file như CVS --existing Chỉ cập nhật file đã tồn tại --delete Xóa file không tồn tại phía gửi --delete-excluded Cũng xóa file excluded phía nhận --delete-after Receiver xóa sau transfer, không lúc transfer --force Buộc xóa thư mục ngay cả khi không rỗng --ignore-errors Xóa dù có lỗi IO --max-delete=SOLUONG Không xóa quá SOLUONG file --log-file-format=FMT Log transfer theo format --partial Giữ file transfer một phần --progress Hiển thị tiến trình -P Tương đương --partial --progress --stats Thống kê transfer -T --temp-dir=DIR Tạo file tạm trong DIR --compare-dest=DIR So sánh file đích liên quan đến DIR -u, --update Chỉ cập nhật (không ghi đè file mới hơn) 

Tùy chọn khác:

 --address=DIA_CHI Bind vào địa chỉ chỉ định --blocking-io Dùng blocking IO cho remote shell --bwlimit=KBPS Giới hạn băng thông I/O, KBytes/giây --config=FILE Chỉ định rsyncd.conf thay thế (daemon) --daemon Chạy như rsync daemon --no-detach Không tách khỏi parent (daemon) --password-file=FILE Lấy password daemon-access từ FILE --port=PORT Chỉ định port rsyncd thay thế -f, --read-batch=FILE Đọc batch file -F, --write-batch=FILE Ghi batch file --version In số phiên bản -v, --verbose Tăng verbosity -q, --quiet Giảm verbosity -4, --ipv4 Ưu tiên IPv4 -6, --ipv6 Ưu tiên IPv6 -h, --help Hiện màn hình giúp đỡ 

Xem danh sách đầy đủ tùy chọn trong manual rsync bằng lệnh:

man rsync

Ví dụ

Không lặp lại ý nghĩa tùy chọn dưới – tham khảo lại danh sách trên nếu không chắc – bạn không muốn chạy sai lệnh mất dữ liệu!

Cục bộ sang cục bộ (File đơn)

Đồng bộ file đơn từ thư mục này sang thư mục khác trên máy cục bộ:

rsync -zvh /duong/dan/toi/my-file.tar /duong/dan/dich/

Từ đây, ví dụ tập trung sync thư mục, vì đó là tình huống phổ biến nhất cho rsync

Cục bộ sang cục bộ (Thư mục)

Đồng bộ tất cả file từ thư mục nguồn sang thư mục đích trên cùng máy:

rsync -avzh /duong/dan/nguon /duong/dan/dich

-avzh là gì? Là gộp các tùy chọn -a -v -z -h để gõ nhanh

Cục bộ sang Remote (Thư mục)

Đồng bộ từ thư mục nguồn cục bộ sang đích trên máy remote qua mạng:

rsync -avz /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Lưu ý:

  • user là user trên hệ thống remote
  • /duong/dan/nguon/ đường dẫn thư mục nguồn máy cục bộ
  • 192.168.1.11 IP remote – dùng IP hoặc hostname
  • /duong/dan/dich/ đường dẫn filesystem remote
  • Đồng bộ dùng rsync daemon

Cục bộ sang Remote dùng SSH (Thư mục)

Tùy chọn -e chỉ định protocol rsync, cho phép dùng SSH an toàn:

rsync -avzh -e ssh /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Remote sang Cục bộ (Thư mục)

Đồng bộ từ thư mục nguồn remote sang đích cục bộ qua mạng:

rsync -avzh user@192.168.1.11:/duong/dan/nguon /duong/dan/dich

Lưu ý:

  • user user remote
  • 192.168.1.11 IP remote
  • /duong/dan/nguon đường dẫn filesystem remote
  • /duong/dan/dich đích máy cục bộ
  • Dùng rsync daemon

Remote sang Cục bộ dùng SSH (Thư mục)

rsync -avzh -e ssh user@192.168.1.11:/duong/dan/nguon /duong/dan/dich

Cũng sync file đơn local-remote, remote-local, dùng SSH như thư mục

Điều khác cần cân nhắc khi đồng bộ

Cân nhắc băng thông

Nếu sync qua Internet, có thể giới hạn băng thông để không làm chậm dịch vụ khác:

rsync -avz --bwlimit 512 /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Cân nhắc xóa file

Nếu file/thư mục bị xóa ở nguồn nhưng còn ở đích, có thể xóa ở đích để mirror chính xác nguồn. Luôn chắc chắn muốn xóa trước khi dùng tùy chọn này:

rsync -avz --delete /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Include/Exclude file

Include/exclude file theo pattern – nếu có file không muốn sync, bỏ qua:

rsync -avz -e ssh --exclude '*' --include 'keep*' /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Lệnh này chỉ sync file/thư mục bắt đầu bằng 'keep-' và exclude tất cả file khác (*).

Cân nhắc Dry Run

Dry run in ra file sẽ thay đổi nhưng không thực hiện gì – không file nào sync hoặc thay đổi, để test tùy chọn:

rsync -avz --dry-run /duong/dan/nguon/ user@192.168.1.11:/duong/dan/dich/

Kết luận

Khi di chuyển lượng lớn file trên hệ thống, hãy kiểm tra input trước Enter – không muốn sync ngược chiều và xóa file quan trọng!

Xem thêm bài lệnh shell Linux khác!