Cách chuyển tập tin giữa các hệ thống bằng scp và rsync

Tác giả Starlink, T.M.Một 16, 2024, 11:53:47 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 3 Khách đang xem chủ đề.

Cả hai lệnh này đều cho phép bạn truyền tệp giữa các máy tính một cách an toàn, nhưng đều có lý do chính đáng để biết cả hai.

  • Cả scp và rsync đều có thể truyền tệp một cách an toàn, nhưng rsync tốt hơn cho việc truyền tệp theo lịch trình thường xuyên và xử lý các sự cố mạng.
  • Sử dụng scp để chuyển tập tin thủ công; rsync phù hợp hơn với các tập lệnh và công việc cron có các tùy chọn nâng cao như nén.
  • Cả hai đều yêu cầu SSH để bảo mật, nhưng rsync cũng cần được cài đặt trên cả hai máy tính để có thể sử dụng.


Có rất nhiều công cụ để chuyển tệp giữa hai máy tính trên dòng lệnh Linux, nhưng các lệnh scp và rsync sẽ giải quyết hầu hết mọi trường hợp sử dụng. Sau đây là cách thức và thời điểm sử dụng chúng.

1. Sự khác biệt giữa scp và rsync là gì?

Cả hai lệnh scp và rsync đều di chuyển các tệp giữa hai máy tính và cả hai đều có thể thực hiện rất an toàn. Sự khác biệt chính giữa hai lệnh này không nằm ở những gì chúng làm mà là cách chúng thực hiện.

Lệnh scp là viết tắt của "secure copy" và theo nhiều cách, nó hoạt động giống như lệnh unix cp hoặc "copy" chuẩn, nhưng giữa hai máy tính. "secure" trong tên trong trường hợp này ám chỉ SSH, giao thức mà nó sử dụng để giao tiếp với máy tính từ xa.

Lệnh này đơn giản như tên gọi của nó, đọc các tệp từ một máy tính và ghi chúng vào máy tính khác. Sự đơn giản này phù hợp với triết lý UNIX là "làm tốt một việc".

Lệnh rsync cũng thực hiện tốt một việc, nhưng nó có cách tiếp cận tinh tế hơn. Sự khác biệt nằm ở tên gọi. Trong khi rsync sẽ sao chép một tệp sang máy tính khác nếu tệp đó chưa có, bất kỳ thao tác nào trong tương lai sẽ chỉ so sánh sự khác biệt giữa các tệp trên mỗi máy tính.

Nếu bạn chỉ di chuyển một tệp nhỏ, sự khác biệt này sẽ không đáng chú ý lắm. Tuy nhiên, nếu bạn sử dụng rsync như một phần của tập lệnh sao lưu, chỉ vận hành trên các tệp đã thay đổi có thể tiết kiệm rất nhiều thời gian và băng thông. Tất nhiên, điều này yêu cầu phải cài đặt rsync trên cả máy tính cục bộ và từ xa, trong khi lệnh scp chỉ cần cài đặt trên máy tính đang chạy lệnh.

Đây không phải là sự khác biệt duy nhất. Lệnh rsync cũng có phần bền bỉ hơn và có thể thiết lập lại kết nối nếu nó bị ngắt giữa chừng khi đang truyền dữ liệu. Kết hợp với khả năng chỉ truyền các dữ liệu khác biệt, điều này làm cho nó phù hợp hơn nhiều với các lần truyền dữ liệu lớn hơn.

Nói như vậy, rsync cũng có điểm tương đồng với scp. Ví dụ, nó cũng có thể kết nối qua SSH và bạn có thể sử dụng khóa SSH để kết nối với máy từ xa bằng bất kỳ lệnh nào.

2. Cách chuyển tập tin bằng scp

Sử dụng công cụ scp để di chuyển các tệp đơn giữa các máy tính rất đơn giản. Lệnh có thể cơ bản như sau:

Mã nguồn [Chọn]
scp <filename> username@remotehost:/path/to/directory
Để sao chép tệp "foo.txt" vào máy tính từ xa, bạn có thể sử dụng lệnh dưới đây:

Mã nguồn [Chọn]
scp foo.txt kris@some-computer:/home/kris/
Để sử dụng lệnh scp để sao chép tập tin đó trở lại máy tính của tôi (vì một lý do nào đó), tôi có thể sử dụng lệnh sau:

Mã nguồn [Chọn]
scp kris@some-computer:/home/kris/foo.txt
Tất nhiên, trong nhiều trường hợp, bạn sẽ muốn di chuyển toàn bộ thư mục tệp giữa các máy tính. May mắn thay, điều này cũng đơn giản với scp như với lệnh cp chuẩn. Chỉ cần truyền cờ -r để sao chép một thư mục theo cách đệ quy:

Mã nguồn [Chọn]
scp -r dotfiles kris@some-computer:/home/kris/
Hoặc để sao chép một thư mục đệ quy từ một máy tính từ xa, hãy sử dụng lệnh sau:

Mã nguồn [Chọn]
scp -r kris@some-computer:/home/kris/dotfiles
Để biết thêm thông tin chi tiết về mọi thứ bạn có thể làm với lệnh này, hãy xem hướng dẫn sử dụng lệnh scp trên Linux của chúng tôi.

3. Cách chuyển tập tin bằng rsync

Mặc dù rsync có nhiều chức năng tích hợp sẵn, nhưng nó giúp xử lý các chuyển giao cơ bản khá đơn giản. Lệnh cơ bản để sao chép tệp vào máy tính từ xa như sau:

Mã nguồn [Chọn]
rsync <local-filename> user@remotehost:<remote-filename>
Vì vậy, để sao chép cùng một tệp "foo.txt" từ ví dụ scp ở trên, bạn sẽ sử dụng lệnh sau:

Mã nguồn [Chọn]
rsync foo.txt kris@some-computer:foo.txt
Ở chế độ nền, rsync sẽ cố gắng sử dụng kết nối SSH và sẽ yêu cầu bạn nhập tên người dùng và mật khẩu. Sau khi bạn được xác thực, quá trình chuyển sẽ bắt đầu.

Ngược lại, việc sao chép tệp trở lại máy tính cục bộ của bạn cũng đơn giản như vậy:

Mã nguồn [Chọn]
rsync kris@some-computer:/home/kris/foo.txt.
Tất nhiên, hoạt động theo cách này không thực sự tận dụng hết sức mạnh của rsync và các tùy chọn khác nhau của nó. Trong khi rsync có nhiều cờ để thiết lập các tùy chọn khác nhau, một cờ mà bạn sẽ muốn làm quen là cờ -a hoặc "--archive". Điều này kết hợp một vài tùy chọn, trong số những thứ khác, khiến rsync quét đệ quy các thư mục, bảo toàn quyền sở hữu và quyền, và sao chép các liên kết tượng trưng dưới dạng liên kết tượng trưng.

Với các trường hợp sử dụng rsync thường được triển khai, việc đưa các tùy chọn này vào một cờ dễ truy cập là hợp lý. Đối với phần lớn việc sử dụng rsync của bạn, bạn có thể muốn sử dụng cờ -a. Ví dụ, để đồng bộ hóa một thư mục với máy tính từ xa:

Mã nguồn [Chọn]
rsync -av ~/dotfiles kris@some-computer:/home/kris/dotfiles
Cờ thứ hai trong lệnh trên là "-v" cho "--verbose", cờ này sẽ cung cấp cho bạn thông tin chi tiết hơn về tiến trình của lệnh khi lệnh chạy.

Tùy thuộc vào tốc độ kết nối internet của bạn (và có thể tùy thuộc vào chính xác những gì bạn đang truyền), bạn có thể tăng tốc độ truyền bằng cách nén dữ liệu trong quá trình truyền. Điều này giúp dữ liệu không bị nén trên cả máy cục bộ và máy từ xa của bạn, nhưng nén dữ liệu trong khi truyền. Để thực hiện việc này, hãy sử dụng cờ -z:

Mã nguồn [Chọn]
rsync -azv ~/dotfiles kris@some-computer:/home/kris/dotfiles
Một lần nữa, điều này không đảm bảo sẽ tăng tốc độ truyền dữ liệu, nhưng vẫn đáng để xem xét, đặc biệt là đối với các công việc thường xuyên như sao lưu tập lệnh hoặc các công việc khác mất nhiều thời gian.

Đây chỉ là cái nhìn thoáng qua về sức mạnh của lệnh rsync. Để biết thêm ý tưởng, chúng tôi có một số ví dụ hữu ích về lệnh rsync đang hoạt động.

4. Khi nào bạn nên sử dụng scp hoặc rsync?

Cả lệnh scp và rsync đều có điểm mạnh và điểm yếu riêng, nhưng trong quá trình sử dụng hàng ngày, việc xác định lệnh nào tốt nhất thường phụ thuộc vào cách bạn sử dụng chúng. Có một quy tắc chung khá đơn giản mà bạn có thể sử dụng để giúp nhớ lệnh nào nên sử dụng trong một tình huống nhất định.

Nếu bạn sử dụng lệnh thủ công để di chuyển các tệp, nhìn chung, bạn sẽ dễ dàng hơn khi sử dụng lệnh scp. Lệnh này đơn giản và dễ hiểu hơn, và có lẽ bạn đã quen thuộc với các cờ cơ bản khi sử dụng lệnh cp.

Mặt khác, nếu bạn đang viết một tập lệnh hoặc chạy một công việc cron, lệnh rsync có thể là lựa chọn tốt nhất của bạn. Nó xử lý tốt hơn các sự cố mạng bất ngờ và bản chất đồng bộ hóa nhiều hơn của nó có nghĩa là nó có nhiều tùy chọn mạnh mẽ hơn so với công cụ scp tương đối đơn giản.

Cả hai lệnh đều đáng để biết và cả hai đều hữu ích khi có trong bộ công cụ các lệnh Linux thiết yếu của bạn. Rốt cuộc, bạn không bao giờ biết khi nào bạn có thể bị kẹt với quyền truy cập chỉ vào một trong các lệnh. Trong trường hợp đó, tốt nhất là biết ít nhất những điều cơ bản của cả hai.