Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Lệnh, cú pháp và ví dụ của Linux rsync [Hướng dẫn]

rsync ( r biểu tượng cảm xúc đồng bộ hóa ) command là một công cụ sao chép tệp có thể đồng bộ hóa tệp trên các đĩa lưu trữ cục bộ cũng như qua mạng.

Nó phổ biến vì nó rất tốt. Nó thường được sử dụng để sao lưu tệp, giữ cho các máy chủ tệp được cập nhật với nhau và để triển khai mã và nội dung cho ứng dụng web tới máy chủ.

rsync có thể và sẽ sao chép mọi tệp mà nó có thể thấy và sẽ đồng bộ hóa dựa trên kích thước tệp và ngày sửa đổi để xem những gì đã thay đổi và những gì cần được cập nhật.

rsync lệnh là BIG và chúng tôi sẽ giúp bạn bắt đầu với một số ứng dụng thực tế sẽ bao gồm các tình huống sử dụng phổ biến nhất trong hướng dẫn này .

Cú pháp

rsync OPTIONS SOURCE DESTINATION

Lưu ý rằng:

  • OPTIONS là danh sách các tùy chọn từ danh sách bên dưới, được phân tách bằng dấu cách
  • SOURCE là đường dẫn đến nguồn của tệp hoặc thư mục để đồng bộ hóa và có thể bao gồm thông tin chi tiết về máy chủ lưu trữ từ xa
  • DESTINATION là đường dẫn đến đích mà bạn muốn đồng bộ hóa tệp hoặc thư mục và có thể bao gồm thông tin chi tiết về máy chủ lưu trữ từ xa
  • SOURCE và DESTINATION phải theo thứ tự!

Tùy chọn

Dưới đây là các tùy chọn thường được sử dụng cho rsync , ngay từ hướng dẫn sử dụng:

Nội dung cần sao chép:

-r, --recursive             Recurse into directories
-R, --relative              Use relative path names
    --exclude=PATTERN       Exclude files matching PATTERN
    --exclude-from=FILE     Read exclude patterns from FILE
-I, --ignore-times          Don't exclude files that match length and time
    --size-only             Only use file size when determining if a file should be transferred
[email protected]  --modify-window=NUM     Timestamp window (seconds) for file match (default=0)
    --include=PATTERN       Don't exclude files matching PATTERN
    --include-from=FILE     Read include patterns from FILE

Cách sao chép:

-n, --dry-run               Perform a trial run with no changes made
-l, --links                 Copy symlinks as symlinks
-L, --copy-links            Transform symlink into referent file/dir
    --copy-unsafe-links     Only "unsafe" symlinks are transformed
    --safe-links            Ignore links outside the destination tree
    --munge-links           Munge symlinks to make them safer
-H, --hard-links            Preserve hard links
    --devices               Preserve device files (super-user only)
    --specials              Preserve special files
-D, --devices --specials    Preserve devices (super-user only) +files
-g, --group                 Preserve group
-o, --owner                 Preserve owner (super-user only)
-p, --perms                 Preserve permissions
    --remove-source-files   Sender removes synchronized files (non-dir)
-t, --times                 Preserve times
-S, --sparse                Handle sparse files efficiently
-x, --one-file-system       Don't cross filesystem boundaries
-B, --block-size=SIZE       Force a fixed checksum block-size (default 700)
-e, --rsh=COMMAND           Specify rsh replacement
    --rsync-path=PATH       Specify path to rsync on the remote machine
    --numeric-ids           Don't map uid/gid values by user/group name
    --timeout=SECONDS       Set IO timeout in seconds
-W, --whole-file            Copy whole files, no incremental checks

Tùy chọn điểm đến:

-a, --archive               Archive mode equals -rlptgoD (no -H,-A,-X)
-b, --backup                Make backups (see --suffix & --backup-dir)
    --backup-dir=DIR        Make backups into this directory
-z, --compress              Compress file data during the transfer
-c, --checksum              Skip based on checksum, not mod-time & size
-C, --cvs-exclude           Auto ignore files in the same way CVS does
    --existing              Only update files that already exist
    --delete                Delete files that don't exist on the sending side
    --delete-excluded       Also delete excluded files on the receiving side
    --delete-after          Receiver deletes after transfer, not during
    --force                 Force deletion of directories even if not empty
    --ignore-errors         Delete even if there are IO errors
    --max-delete=NUM        Don't delete more than NUM files
    --log-file-format=FMT   Log file transfers using specified format
    --partial               Keep partially transferred files
    --progress              Show progress during transfer
-P                          Equivalent to --partial --progress
    --stats                 Give some file transfer stats
-T  --temp-dir=DIR          Create temporary files in directory DIR
    --compare-dest=DIR      Also compare destination files relative to DIR
-u, --update                Update only (don't overwrite newer files)

Các tùy chọn khác:

    --address=ADDRESS       Bind to the specified address
    --blocking-io           Use blocking IO for the remote shell
    --bwlimit=KBPS          Limit I/O bandwidth, KBytes per second
    --config=FILE           Specify alternate rsyncd.conf file (daemon)
    --daemon                Run as a rsync daemon
    --no-detach             Do not detach from the parent (daemon)
    --password-file=FILE    Get daemon-access password from FILE
    --port=PORT             Specify alternate rsyncd port number
-f, --read-batch=FILE       Read batch file
-F, --write-batch=FILE      Write batch file
    --version               Print version number
-v, --verbose               Increase verbosity
-q, --quiet                 Decrease verbosity
-4, --ipv4                  Prefer IPv4
-6, --ipv6                  Prefer IPv6
-h, --help                  Show this help screen

Để có danh sách đầy đủ các tùy chọn, hãy tham khảo rsync hướng dẫn sử dụng bằng cách chạy:

man rsync

Ví dụ

Tôi sẽ không nhắc lại ý nghĩa của từng tùy chọn bên dưới - hãy đảm bảo bạn tham khảo lại danh sách ở trên nếu bạn không chắc tùy chọn có nghĩa là gì - bạn không muốn chạy sai lệnh và mất bất kỳ dữ liệu nào!

Local to Local (Single File)

Dưới đây là cách đồng bộ hóa một tệp từ thư mục này sang thư mục khác trên máy cục bộ bằng rsync :

rsync -zvh /path/to/my-file.tar /path/to/destination/

Từ đây, tất cả các ví dụ sẽ tập trung vào việc đồng bộ hóa các thư mục, vì đó là trường hợp sử dụng phổ biến nhất cho rsync

Local to Local (Thư mục)

Đồng bộ hóa tất cả các tệp từ thư mục này sang thư mục khác trên cùng một máy:

rsync -avzh /path/to/source /path/to/destination

Điều -avzh là gì? Đó là một loạt các tùy chọn, được hợp nhất. Đó chỉ là một cách nhanh hơn để nhập -a -v -z -h

Local to Remote (Directory)

Đồng bộ hóa tất cả các tệp từ thư mục nguồn cục bộ đến đích trên máy tính từ xa qua mạng:

rsync -avz /path/to/source/ [email protected]:/path/at/destination/

Lưu ý rằng:

  • tên người dùng là người dùng trên hệ thống từ xa
  • / path / to / source / là đường dẫn đến thư mục nguồn trên máy tính cục bộ
  • 192.168.1.11 là địa chỉ IP của hệ thống từ xa - bạn có thể sử dụng địa chỉ IP hoặc tên máy chủ
  • / path / at / destination / là đường dẫn trên hệ thống tệp từ xa
  • Quá trình đồng bộ hoá sẽ diễn ra bằng cách sử dụng rsync daemon

Từ xa cục bộ đến từ xa bằng SSH (Thư mục)

-e cho phép bạn chỉ định giao thức được rsync, sử dụng cho phép chúng tôi chỉ định chúng tôi muốn chuyển tệp bằng SSH một cách an toàn:

rsync -avzh -e ssh /path/to/source/ [email protected]:/path/at/destination/

Từ xa đến cục bộ (Thư mục)

Đồng bộ hóa tất cả các tệp từ thư mục nguồn trên máy tính từ xa đến đích trên máy tính cục bộ qua mạng:

rsync -avzh [email protected]:/path/to/source /path/to/destination

Lưu ý rằng:

  • tên người dùng là người dùng trên hệ thống từ xa
  • 192.168.1.11 là địa chỉ IP của hệ thống từ xa - bạn có thể sử dụng địa chỉ IP hoặc tên máy chủ
  • / path / to / source là đường dẫn trên hệ thống tệp từ xa
  • / path / to / destination là đích trên máy tính cục bộ
  • Quá trình đồng bộ hoá sẽ diễn ra bằng cách sử dụng rsync daemon

Từ xa đến cục bộ bằng SSH (Thư mục)

rsync -avzh -e ssh [email protected]:/path/to/source /path/to/destination

Bạn cũng có thể đồng bộ hóa các tệp đơn lẻ từ cục bộ sang từ xa, từ xa đến cục bộ và sử dụng SSH, giống như chúng tôi đã hiển thị với các thư mục

Những điều khác cần xem xét khi đồng bộ hóa

Xem xét băng thông

Nếu bạn đang đồng bộ hóa qua Internet, bạn có thể muốn giới hạn băng thông được sử dụng để không làm chậm các dịch vụ khác trên mạng của mình:

rsync -avz --bwlimit 512 /path/to/source/ [email protected]:/path/at/destination/

Xem xét Xóa

Nếu một tệp hoặc thư mục đã bị xóa tại nguồn nhưng vẫn tồn tại ở đích, bạn có thể muốn xóa tệp hoặc thư mục tại đích để nó là bản sao chính xác của nguồn. Luôn đảm bảo rằng bạn chắc chắn rằng bạn muốn mọi thứ bị xóa trước khi sử dụng tùy chọn này:

rsync -avz --delete /path/to/source/ [email protected]:/path/at/destination/

Bao gồm hoặc Loại trừ Tệp

Bao gồm và loại trừ các tệp bằng cách đối sánh các mẫu tệp - nếu có những tệp bạn không muốn đồng bộ hóa, chúng có thể bị loại bỏ:

rsync -avz -e ssh --exclude '*' --include 'keep*' /path/to/source/ [email protected]:/path/at/destination/

Lệnh rsync này sẽ chỉ đồng bộ hóa các tệp và thư mục, bắt đầu bằng ‘keep-’ và loại trừ tất cả các tệp và thư mục khác (*).

Cân nhắc Chạy khô

A chạy khô sẽ in ra các tệp sẽ được thay đổi, nhưng nó sẽ không thực sự làm được mọi thứ - sẽ không có tệp nào được đồng bộ hóa hoặc thay đổi, vì vậy bạn có thể thử nghiệm với các tùy chọn khác nhau và xem các hiệu ứng:

rsync -avz --dry-run /path/to/source/ [email protected]:/path/at/destination/

Kết luận

Khi di chuyển một số lượng lớn tệp trên hệ thống của bạn, hãy đảm bảo bạn kiểm tra thông tin đầu vào của mình trước khi nhấn phím enter - bạn không muốn đồng bộ hóa sai hướng và xóa các tệp quan trọng!

Hãy xem các bài viết khác của chúng tôi về các lệnh Linux Shell!