Ai đó có thể giải thích lệnh rsync này cho tôi không?


11

Ai đó có thể cho tôi biết những gì nó làm?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

Liệu nó xóa bkp01offbk2và gửi một bản ghi để offbkp01.log?


Anh ấy không thể đọc trang người đàn ông. Điều gì khiến bạn nghĩ rằng anh ấy đang đọc câu trả lời ở đây? XD
Twinkles

2
Ai cần trang người đàn ông khi bạn có explainshell.com/... ?!
Tom

Câu trả lời:


33

Để chia phần này thành nhiều phần, có hai phần chính, theo sau là phần tóm tắt và ghi chú:

  • Các rsynclệnh:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • chuyển hướng đầu ra được thực hiện bởi shell chạy lệnh rsync:
    rsync-command > ~/offbkp01.log

rsync chỉ huy:

Lệnh cơ sở:

  • rsync - Tôi cho rằng điều này không cần giải thích (nhưng sẽ cung cấp nếu được yêu cầu).

Tùy chọn lệnh:

  • -uva - Một tập hợp các tùy chọn ký tự đơn, hiện tại (dạng ngắn rồi dài hiển thị):

    • -u --update- Thông báo cho rsync rằng tất cả các sửa đổi chỉ nên áp dụng cho các tệp trên đích có cùng độ tuổi (và kích thước khác nhau) hoặc cũ hơn các tệp trên nguồn. Đó là, rsync chỉ nên chuyển các thay đổi từ nguồn sẽ cập nhật đích, nhưng nó không nên thực hiện bất kỳ thay đổi nào làm cho tệp đích trở thành phiên bản cũ hơn.

      Có một số trường hợp ngoại lệ. Sự khác biệt về loại (ví dụ: một là tệp, tệp kia là thư mục) sẽ gây ra cập nhật bất kể ngày nào. Symlinks và các tập tin đặc biệt khác bỏ qua tùy chọn này. Và quan trọng là, điều này không ảnh hưởng đến tập tin nào bị xóa.

    • -v --verbose- Tăng số lượng thông tin rsync in ra trong khi thực hiện. Không có cái này, rsync sẽ in (gần như?). Với tùy chọn này, rsync sẽ cho bạn biết tập tin nào đang được chuyển và đặt một bản tóm tắt ở cuối. Nhiều vthông tin hơn làm tăng thông tin được in, mặc dù trang man nói rằng vchỉ nên sử dụng nhiều hơn hai giây khi gỡ lỗi.
    • -a --archive- Điều này tương đương với một số tùy chọn khác ( -rlptgD) được đóng gói cùng nhau. Như tên dài cho thấy, đây là cách nhanh chóng để đặt nhiều tùy chọn phổ biến để lưu trữ tệp và thư mục. Nó sẽ:
      • -r --recursive- Yêu cầu rsync sao chép thư mục đệ quy. Nếu không có -d --dirstùy chọn này hoặc tùy chọn cụ thể hơn , rsync sẽ đơn giản bỏ qua mọi thư mục mà nó gặp phải (và cho bạn biết về nó trong đầu ra của nó).
      • -l --links- Khi nguồn là một liên kết tượng trưng, ​​hãy tạo một liên kết tượng trưng trên đích. Tùy thuộc vào các tùy chọn khác, các liên kết tượng trưng có thể được bỏ qua hoặc tạo thành một bản sao hoàn toàn riêng biệt (nghĩa là một thư mục thực sự có nội dung (hoặc một bản sao khác của tệp) thay vì liên kết tượng trưng).
      • -p --perms - Đặt quyền của các tệp đích giống như các tệp nguồn.
      • -t --times- Đặt thời gian sửa đổi của các tệp đích giống như các tệp nguồn. Vì việc giữ các thời gian này đồng bộ làm cho thuật toán rsync hiệu quả hơn, bạn thường luôn muốn điều này được sử dụng, rõ ràng hoặc ngầm định.
      • -g --group- Đặt thuộc tính nhóm của đích đến giống như nguồn. Liên kết theo tên theo mặc định, nhưng sẽ quay trở lại số ID nhóm trong một số trường hợp. Nếu rsync nhận không chạy dưới dạng siêu người dùng (hoặc giả mạo với nó --fake-super), chỉ những nhóm mà người dùng đã gọi rsync ở phía bên nhận mới có thể được đặt thành viên. Nếu không, nhóm sẽ chỉ được đặt thành nhóm mặc định của cùng một người dùng được đề cập trước đó.
      • -D- Tương đương với các tùy chọn --devices--specialscùng nhau. Họ có nghĩa là:
        • --devices- Các tập tin nhân vật và khối thiết bị được chuyển. Không có tác dụng nếu rsync nhận không chạy dưới dạng siêu người dùng (hoặc giả mạo nó --fake-super).
        • --specials - Các tập tin đặc biệt (như ổ cắm) được chuyển (nếu không thì không được).
  • --delete- Yêu cầu rsync xóa các tệp đang ở đích, nhưng không phải trên nguồn. Điều này KHÔNG bị ảnh hưởng bởi tùy chọn cập nhật được đặt ở trên (thực sự, làm thế nào có thể vì hầu hết các hệ thống tệp sẽ không giữ lại dữ liệu cần thiết để xem hành động nào mới hơn?). Tùy chọn này hoạt động trên các nguồn sau khi mở rộng ký tự đại diện / toàn cầu, vì vậy dir / * không giống như dir /. Một số lưu ý quan trọng:
    • Điều này rõ ràng là nguy hiểm. Bạn có thể nên thử nó với --dry-runtùy chọn trước, sẽ thực hiện chuyển khoản giả vờ cho phép bạn đảm bảo không có thay đổi ngoài ý muốn được thực hiện.
    • Nếu có bất kỳ lỗi I / O (đầu vào / đầu ra) nào - nghĩa là, nếu có bất kỳ lỗi nào xảy ra khi chuyển, đọc hoặc viết thay đổi - xóa sẽ bị bỏ qua kể từ thời điểm đó. Điều này có thể được ghi đè bằng --ignore-errorstùy chọn, mặc dù bạn có thể không muốn / không muốn làm điều đó.
    • Có một số biến thể trên thuật toán xóa, trong đó bạn có thể đọc thêm trong trang man. Khi rsync nhận là phiên bản 3.0.0 hoặc mới hơn (tại thời điểm viết bài này), --delete-duringthuật toán được sử dụng. Nếu người nhận cũ hơn, sau đó --delete-befoređược sử dụng. Nếu điều quan trọng là các tệp duy trì một loại nhất quán nhất định sẽ xảy ra lỗi (chẳng hạn như không xóa bất cứ điều gì cho đến khi tất cả các thay đổi khác được thực hiện), bạn nên sử dụng một tùy chọn cụ thể hơn so với mặc định.

Vị trí chỉ huy:

  • /srv/bkp01- Tập tin nguồn hoặc thư mục. Có một số quy tắc chi tiết về ý nghĩa của nó nếu có / không có dấu gạch chéo ở cuối thư mục và nếu thư mục khác tồn tại. Bạn có thể xem phần USAGE của trang man để biết chi tiết, nhưng ở đây thiếu dấu gạch chéo có nghĩa là thư mục này sẽ được sao chép vào đích, thay vì nội dung của thư mục này được sao chép vào đích. Tương tự nếu đây là một tập tin chứ không phải là một thư mục.
  • /srv/offbk2/- Thư mục đích. Nói chung, đây sẽ luôn là mục cuối cùng được liệt kê trong phần lệnh rsync trừ khi một tùy chọn được sử dụng để chỉ định nó ở nơi khác trong lệnh.

Chuyển hướng đầu ra của Shell:

Lệnh Shell:

  • >- Điều này chuyển hướng thiết bị xuất chuẩn (đầu ra tiêu chuẩn) từ bất cứ thứ gì ở bên trái sang tệp bên phải, trở thành nội dung của nó và tạo tệp (nếu có thể) nếu nó chưa tồn tại. Một số lưu ý:
    • Bạn cũng có thể chuyển hướng stderr (đầu ra lỗi tiêu chuẩn) sang cùng một tệp bằng cách thêm 2>&1vào cuối của lệnh trên. Thứ tự là quan trọng, vì vậy hãy cẩn thận khái quát nơi để đặt đó. Các con số kỳ diệu 1đề cập đến stdout, 2đề cập đến stderr, &là (cơ bản) "địa chỉ của", và các phương tiện đoạn đầy đủ lệnh "chuyển hướng đầu ra của stderr vào trong dòng stdout".
    • Nếu bạn muốn nối vào tệp nhật ký thay vì thay thế nó, bạn có thể sử dụng >>thay thế. Phương pháp để chuyển hướng stderr đến cùng một vị trí vẫn giữ nguyên.
    • Bạn có thể gửi thiết bị xuất chuẩn và thiết bị xuất chuẩn đến những nơi khác nhau bằng cách sử dụng 1> stdout_file 2> stderr_file. Bạn cũng có thể sử dụng >>thay vì >trong lệnh đó để làm như vậy bằng cách nối thêm thay vì thay thế.

Biến Shell / ký hiệu đặc biệt:

  • ~ - Đây là tốc ký cho thư mục chính của người dùng hiện tại và tạo thành một phần của bit tiếp theo.

Địa điểm cấp vỏ:

  • ~/offbkp01.log- tệp offbkp01.log bên trong thư mục chính của người dùng hiện tại. Đây là nơi đầu ra của lệnh rsync sẽ được đặt vì chuyển hướng với >.

Tóm lược:

Tóm lại, lệnh này sẽ:

  • Sao chép tất cả các tệp thông thường, thư mục, liên kết tượng trưng, ​​tệp đặc biệt và tệp thiết bị
  • cũng như hầu hết, nếu không phải tất cả, các thuộc tính tệp quan trọng ,
  • từ /srv/bkp01 ,
  • để /srv/offbk2/bkp01 ,
  • và nó sẽ xóa bất cứ thứ gì /srv/offbk2/không/srv/bkp01 có trong các điều kiện sau:

    • Nếu một thường xuyên tập tin, thư mục, hoặc liên kết tượng trưng (?) Có một thời gian chỉnh sửa trên /srv/offbk2/ đó là mới hơn so với thời gian sửa đổi của nó vào /srv/bkp01, nó sẽ không được cập nhật , nếu cả hai mục vẫn là cùng loại (thường xuyên tập tin, thư mục, hoặc liên kết tượng trưng (? )).
  • Ngoài ra, rsync sẽ in ra một số thông tin về những gì nó đang làm (cụ thể, những tệp nào đang được chuyển và một bản tóm tắt cuối cùng ), mà shell sẽ ghi vào tệp ~/offbkp01.log . Tệp nhật ký đó sẽ được tạo lại nếu nó chưa tồn tại và sẽ bị ghi đè nếu nó đã tồn tại.


NB: --fake-superlà một tùy chọn được sử dụng để gây ra rsync để mô phỏng các hoạt động siêu người dùng. Nó thực hiện điều này bằng cách sử dụng các thuộc tính mở rộng của tệp để lưu trữ các thuộc tính mà nó không thể đặt mà không có các đặc quyền lớn hơn. Phiên bản thực của mỗi thuộc tính được đặt thành bất kỳ ý nghĩa nào được cung cấp tùy chọn và các đặc quyền có sẵn. Mặc dù điều này giúp thuận tiện để tạo một số bản sao lưu ngay cả khi bạn không có đặc quyền siêu người dùng, nhưng bạn cũng cần lưu ý rằng nó có thể gây ra rủi ro bảo mật lớn hơn so với việc sử dụng rsync nói chung, vì các thuộc tính bảo mật thực sự có thể không được đặt đúng, mặc dù thông tin về họ đã được sao lưu.


Nguồn: rất nhiều thời gian làm việc với rsync và đọc trang con người của nó .


8
Đó là một bài viết đầu tiên ấn tượng. Hy vọng bạn dính xung quanh!
terdon

Tôi thứ hai @terdon .. Chết tiệt! Anh ấy đang bốc cháy. Giữ thành người bạn đời tốt công việc. Đây thực sự là một câu trả lời ấn tượng.
AzkerM

Câu trả lời có vẻ giống như "sherlock holmes", tôi thích phong cách giải thích của bạn ..
Rahul Patil

9

Từ hướng dẫn:

--xóa bỏ

Điều này nói với rsync để xóa các tệp không liên quan khỏi phía nhận (những tệp không ở phía gửi), nhưng chỉ đối với các thư mục đang được đồng bộ hóa. Bạn phải bỏ rsync để gửi toàn bộ thư mục (ví dụ: "dir" hoặc "dir /") mà không sử dụng ký tự đại diện cho nội dung của thư mục (ví dụ: "dir / *") vì ký tự đại diện được mở rộng bởi shell và do đó rsync được yêu cầu để chuyển các tệp riêng lẻ, không phải thư mục mẹ của tệp. Các tệp bị loại trừ khỏi quá trình chuyển cũng bị loại trừ khỏi bị xóa trừ khi bạn sử dụng tùy chọn loại trừ --delete hoặc đánh dấu các quy tắc là chỉ khớp với bên gửi (xem phần sửa đổi bao gồm / loại trừ trong phần LỌC LỌC).

Vì vậy, nó sẽ xóa các tệp khỏi đích không phải là một phần của thư mục gốc nếu bạn không sử dụng ký tự đại diện.

Thư mục nguồn:

1.txt
2.txt
3.txt

Danh mục nơi nhận:

4.txt

4.txt sẽ biến mất sau rsync và 1.txt, 2.txt và 3.txt sẽ đến đích.


Về những thứ khác:

uva
  • cập nhật tập tin
  • verbose: echo kết quả đến thiết bị đầu cuối (nghĩa là chuyển hướng nó đến tệp nhật ký của bạn để có cho câu hỏi cuối cùng)
  • lưu trữ: chế độ lưu trữ; bằng -rlptgoD (không -H, -A, -X)

Nguồn:man rsync
Sammitch

3

Không, nó chỉ xóa các tập tin không liên quan từ bkp01thư mục.

Cũng thế:

  • -u, --update- bỏ qua các tệp mới hơn trên máy thu
  • -v, --verbose- tăng tính dài dòng
  • -a, --archive- chế độ lưu trữ; bằng -rlptgoD (không -H, -A, -X)

Đầu ra của rsync -uva --delete /srv/bkp01 /srv/offbk2/lệnh được gửi đến ~/offbkp01.logtệp bằng toán tử chuyển hướng ( >) thay vào đó sẽ được in trong thiết bị đầu cuối của bạn. Nếu tập tin không tồn tại, nó sẽ được tạo. Nếu tập tin tồn tại, nội dung cũ nó sẽ bị xóa.

Xem man rsyncđể biết thêm.


3
Nó không xóa bất cứ thứ gì từ bkp01. Nó chỉ xóa các tệp không liên quan - tức là các tệp không tồn tại trong nguồn - khỏi đích.
Matt Nordhoff

Không có tập tin sẽ bị xóa khỏi bkp01.
Xavier

1
rsync 

Sao chép tệp từ xa - Đồng bộ hóa cây tập tin trên các đĩa, thư mục cục bộ hoặc qua mạng.

-u update 

-v verbose

-a archive


--delete --> delete

Ở đây nó sẽ xóa các tập tin bên trong offbk2 .

Sau đó, đầu ra của kết quả (thành công hay không) sẽ được chuyển hướng đến tệp nhật ký đó.


Không có tập tin sẽ bị xóa khỏi bkp01.
Xavier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.