Có rất nhiều công cụ để di chuyển các tệp tin giữa hai máy tính thông qua dòng lệnh Linux, nhưng các lệnh scp và rsync là hai lựa chọn phổ biến nhất, đáp ứng hầu hết mọi trường hợp sử dụng. Bài viết này sẽ hướng dẫn bạn cách và thời điểm nên sử dụng lệnh scp và rsync trong môi trường Linux.
Sự khác biệt giữa scp và rsync là gì?
Cả scp và rsync đều có thể hỗ trợ di chuyển 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 ở mục đích mà là cách thức chúng thực hiện công việc.
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 là giữa hai máy tính. "secure" trong trường hợp này đề cập đến SSH, giao thức mà lệnh 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 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 công việc tương tự, nhưng có cách tiếp cận tinh tế hơn. Sự khác biệt đến ngay từ tên gọi. 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, việc vận hành nó 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 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 tác vụ yêu cầu truyền lượng dữ liệu lớn.
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.
Cách chuyển file 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:
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:
scp foo.txt kris@some-computer:/home/kris/
Để sử dụng lệnh scp nhằm sao chép tập tin đó trở lại máy tính của mình (vì một lý do nào đó), bạn có thể sử dụng lệnh sau:
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 đơn giản với scp như với lệnh cp chuẩn. Chỉ cần truyền flag -r để sao chép một thư mục theo cách đệ quy:
scp -r dotfiles kris@some-computer:/home/kris/
Hoặc để sao chép thư mục đệ quy từ một máy tính từ xa, hãy sử dụng lệnh sau:
scp -r kris@some-computer:/home/kris/dotfiles
Cách chuyển file bằng rsync
rsync có nhiều chức năng tích hợp sẵn, giúp xử lý các các vụ 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:
rsync <local-filename> user@remotehost:<remote-filename>
Để 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:
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ẽ hỏi bạn 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:
rsync kris@some-computer:/home/kris/foo.txt .
Tất nhiên, thực hiện 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 lệnh. rsync có nhiều flag để thiết lập các tùy chọn khác nhau, nhưng một flag mà bạn sẽ muốn sử dụng là -a hoặc "--archive". Kết hợp một vài tùy chọn, rsync có thể 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 nhu cầu sử dụng rsync của phần lớn người dùng, flag -a là trường hợp thường gặp. Ví dụ, để đồng bộ hóa một thư mục với máy tính từ xa:
rsync -av ~/dotfiles kris@some-computer:/home/kris/dotfiles
Flag thứ hai trong lệnh trên là “-v” - “-verbose”. Flag 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 kết nối internet, 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 flag -z:
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 tác vụ thường xuyên như tập lệnh sao lưu hoặc những công việc khác mất nhiều thời gian.
Khi nào 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ể tham khảo để xem 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, việc sử dụng scp sẽ tốt hơn. Lệnh này đơn giản và dễ hiểu hơn, và có lẽ bạn đã ít nhất quen thuộc với các flag 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, thì rsync có thể là lựa chọn tốt nhất. Lệnh này xử lý tốt hơn các sự cố mạng bất ngờ và bản chất đồng bộ hóa sâu sơn hơn nghĩa là lệnh này 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à đều hữu ích khi có trong bộ công cụ các lệnh Linux thiết yếu của bạn.