Các chương trình bàn điều khiển nối tiếp - bạn sẽ sử dụng ở đầu kia của kết nối sẽ có một số cách để gửi tệp đến phía xa. Làm thế nào chính xác bạn đi về nó phụ thuộc vào những tài nguyên bạn có sẵn trên hệ thống từ xa.
Tôi có lrzsz
hoặc kermit
ở phía xa
Trường hợp dễ nhất là nếu bạn có một chương trình truyền tệp nhị phân vững chắc được cài đặt ở phía xa như lrzsz
hoặc kermit
. Điều này đã từng phổ biến hơn ngày nay, nhưng hệ thống cụ thể của bạn vẫn có thể có một trong số đó.
Chương trình bảng điều khiển nối tiếp mà bạn đang sử dụng ở phía cục bộ gần như chắc chắn có cách thực hiện tải lên Zmodem hoặc Kermit, cho phép bạn gửi bất cứ thứ gì bạn cần trực tiếp.
Trong trường hợp của Zmodem, chỉ cần gõ rz
trên hệ thống từ xa, nó sẽ gửi một chuỗi đặc biệt mà thiết bị đầu cuối nối tiếp cục bộ sẽ hiểu, khiến nó bật lên hộp thoại chọn tệp.
Kermit là một giao thức đơn giản hơn, vì vậy bạn phải bắt đầu chuyển giao thủ công trong trường hợp đó.
Tôi không có Chương trình chuyển tệp nhị phân, nhưng tôi có uuencode
/base64
Có một số lợi thế khi sử dụng chương trình truyền tệp nhị phân thích hợp như lrzsz
hoặc kermit
: hiệu quả, kiểm tra lại, tự động thử lại, hủy bỏ chuyển tiếp, chuyển nhiều tệp, v.v., nhưng đây là những điều xa xỉ . Nếu bạn chỉ cần gửi một tệp hoặc hiếm khi gửi tệp, bạn có thể thoát khỏi tải lên ASCII.
Bởi vì các giao thức đầu cuối diễn giải nhiều giá trị byte xảy ra trong tệp dữ liệu nhị phân, bạn không thể gửi tệp trực tiếp qua cùng một kết nối; nếu bạn làm như vậy, mã mô phỏng đầu cuối ở một trong hai đầu sẽ cố gắng diễn giải một số dữ liệu, làm hỏng dữ liệu và có thể gây nhầm lẫn cho mã xử lý thiết bị đầu cuối.
Bạn giải quyết vấn đề này bằng cách mã hóa dữ liệu nhị phân thành một tập hợp con an toàn của ASCII ở phía cục bộ, sau đó biến nó trở lại thành dữ liệu nhị phân thô ở phía xa. Đây là những gìuuencode
và base64
các chương trình làm, chỉ khác nhau trong các lựa chọn thuật toán nhỏ.
Trên hệ thống cục bộ, bạn mã hóa tệp: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Sau đó, bạn nhập lệnh này trên hệ thống từ xa và gửi tệp bằng tính năng "tải lên ASCII" của bảng điều khiển nối tiếp cục bộ:
$ cat | uudecode
Khi quá trình tải lên tệp kết thúc, nhấn Ctrl-C để thoát ra cat
. Bây giờ bạn có tệp giải mã của bạn trên hệ thống từ xa, như bạn muốn.
Nhưng tôi có nhiều tệp để gửi và mã hóa ASCII có thể in được là một nỗi đau!
Không khó để tự khởi động bản thân với trình độ công nghệ cao hơn. Nếu hệ thống từ xa có trình biên dịch C, bạn có thể sử dụng kỹ thuật trước đó để gửi cho hệ thống từ xa một bản sao củalrzsz
mã nguồn. Về phía địa phương:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Sau đó, trên hệ thống từ xa, nhập cái này qua chương trình bàn điều khiển nối tiếp:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Sau khi bạn bắt đầu lệnh đầu tiên, hãy thực hiện "tải lên ASCII" của lrzsz.tgz.uue
tệp vào hệ thống từ xa. Đường ống chấp nhận dữ liệu uuencoding và giải mã nó thành tarball nhị phân cho bạn, bạn có thể giải nén và xây dựng.
Nhưng tôi không có trình biên dịch C trên hệ thống từ xa
Nếu bạn thậm chí không có một trình biên dịch trên hệ thống từ xa, bạn có thể vượt qua biên dịch các rz
chương trình (hoặc bất kỳ) trên hệ thống địa phương và gửi nó vào hệ thống từ xa bằng cách sử dụng kỹ thuật nói trên.
Chú thích:
minicom , picocom , PuTTY , VanDyke CRT ...
Bạn phải đặt tên tệp đầu vào cho phiên bản này của uuencode
hai lần, một lần để đặt tên cho nguồn dữ liệu đầu vào và một lần nữa để khai báo hệ thống từ xa sẽ gọi tệp khi giải mã dữ liệu thành tệp đầu ra. Bạn có thể hình dung muốn hệ thống từ xa có một tên khác cho tệp đầu ra của nó.
Phiên bản địa phương của bạn uuencode
có thể cư xử khác nhau.