Lệnh 'nc' và 'pv' - Chuyển tập tin giữa hai máy tính

Xin chào các bạn đọc Linux thân mến, tôi mang đến cho bạn một bài viết tuyệt vời khác từ loạt bài viết Linux Tips and Tricks của chúng tôi, lần này chúng tôi sẽ sử dụng hai tiện ích Linux ít được biết đến mà bạn nên biết.

Bài viết này sẽ giải thích cách bạn truyền tệp giữa hai máy tính Linux bằng cách sử dụng các lệnh nc (tiện ích mạng) và pv (pipe viewer), trước khi tiếp tục hãy để tôi giải thích cả hai lệnh này.

Transfer Files Between Linux Servers

nc viết tắt của Netcat và thường được coi là “Swiss Army knife” là một công cụ mạng được sử dụng cho việc gỡ lỗi và điều tra mạng và cũng được sử dụng để tạo kết nối mạng sử dụng TCP hoặc UDP, quét cổng, truyền tệp tin và nhiều hơn nữa. Nó được tạo thành một phần mềm sau và đặc biệt được sử dụng trong các chương trình và kịch bản, vì nó có thể tạo ra gần như bất kỳ loại kết nối mạng nào và có một số tính năng tích hợp sẵn.

pv viết tắt của Pipe Viewer là một công cụ dựa trên terminal để giám sát tiến trình gửi dữ liệu qua pipeline, nó cho phép người dùng xem tiến trình dữ liệu với thanh tiến trình, hiển thị thời gian đã trôi qua, phần trăm đã hoàn thành, tốc độ truyền hiện tại, tổng dung lượng dữ liệu đã truyền và Thời gian ước tính để hoàn thành quá trình.

Cách giám sát tiến trình dữ liệu sử dụng lệnh pv (Pipe Viewer)

Bây giờ chúng ta hãy tiếp tục và xem làm thế nào chúng ta có thể kết hợp cả hai lệnh để truyền tệp giữa hai máy tính Linux, cho mục đích của bài viết này, chúng ta sẽ sử dụng hai máy tính Linux như sau:

Machine A with IP : 192.168.0.4
Machine B with IP : 192.168.0.7

Lưu ý: Tôi khuyên bạn nên không sử dụng netcat để gửi và nhận dữ liệu qua mạng công cộng, vì nó không sử dụng bất kỳ đăng nhập hoặc xác thực nào, yêu cầu duy nhất là địa chỉ IP của khách hàng và số cổng lắng nghe và dữ liệu gửi qua mạng không được bảo mật, do đó, luôn luôn dành cho người dùng Linux nâng cao và ưu tiên sử dụng trên mạng cục bộ bảo vệ.

Trong các tình huống mà bảo mật dữ liệu quan trọng hơn, luôn luôn sử dụng rsync qua SSH hoặc scp qua SSH.

Bây giờ hãy bắt đầu với một ví dụ dễ dàng sử dụng lệnh nc và pv, nhưng trước khi làm điều đó, cả hai tiện ích này phải được cài đặt trên hệ thống, nếu không hãy cài đặt chúng bằng công cụ quản lý gói phân phối tương ứng của bạn như được đề xuất:

# yum install netcat pv        [On RedHat based systems]
# dnf install netcat pv        [On Fedora 22+ versions]
# apt-get install netcat pv    [On Debian and its derivatives]

Làm thế nào để truyền tệp giữa hai máy tính Linux?

Hãy giả sử rằng bạn muốn gửi một tệp lớn có tên CentOS-7-x86_64-DVD-1503.iso từ máy tính A đến B qua mạng, cách nhanh nhất để làm điều này là sử dụng nc một tiện ích mạng được sử dụng để gửi tệp qua mạng TCP, pv để giám sát tiến trình dữ liệu và tiện ích tar để nén dữ liệu để cải thiện tốc độ truyền.

Trên máy tính Linux A

Đăng nhập vào máy ‘A‘ với địa chỉ IP 192.168.0.4 và chạy lệnh sau.

# tar -zcf - CentOS-7-x86_64-DVD-1503.iso | pv | nc -l -p 5555 -q 5
Netcat Command To Send Files

Hãy để tôi giải thích các tùy chọn được sử dụng trong lệnh trên:

  1. tar -zcf = tar là một tiện ích lưu trữ băng được sử dụng để nén/giải nén tệp tin lưu trữ và các đối số -c tạo một tệp tin .tar mới, -f xác định loại tệp tin lưu trữ và -z lọc tệp tin lưu trữ qua gzip.
  2. CentOS-7-x86_64-DVD-1503.iso = Xác định tên tệp tin để gửi qua mạng, có thể là tệp tin hoặc đường dẫn đến một thư mục.
  3. pv = Pipe Viewer để giám sát tiến trình dữ liệu.
  4. nc -l -p 5555 -q 5 = Công cụ mạng được sử dụng để gửi và nhận dữ liệu qua giao thức tcp và đối số -l được sử dụng để lắng nghe một kết nối đến, -p 555 xác định cổng nguồn sử dụng và -q 5 đợi một số giây rồi thoát.

Trên máy tính Linux B

Bây giờ đăng nhập vào máy ‘B‘ với địa chỉ IP 192.168.0.7 và chạy lệnh sau.

# nc 192.168.1.4 5555 | pv | tar -zxf -
Transfer Data Using nc and pv command

Đó là nó, tệp đã được truyền đến máy tính B, và bạn sẽ có thể xem xét các hoạt động thực hiện nhanh chóng như thế nào. Còn nhiều cách khác để sử dụng nc (chưa được nêu trong bài viết này, nhưng chúng tôi sẽ viết về nó sớm) và pv (chúng tôi đã đề cập chi tiết về nó ở đây), nếu bạn biết bất kỳ ví dụ nào, hãy cho chúng tôi biết qua ý kiến ​​phản hồi!