Програми послідовних консолей¹, які ви використовуєте на іншому кінці з'єднання, мають певний спосіб надіслати файл у віддалену сторону. Як саме ви вирішите це, залежить від того, які ресурси у вас є у віддаленій системі.
У мене є lrzsz
або kermit
на віддаленій стороні
Найпростіший випадок, якщо на віддаленій стороні встановлена міцна програма передачі бінарних файлів, наприклад, lrzsz
або kermit
. Це було колись частіше, ніж сьогодні, але у вашій конкретній системі все ж може бути одна з таких.
У програмі послідовних консолей, яку ви використовуєте на локальній стороні, майже напевно є спосіб зробити завантаження Zmodem або Kermit, що дозволяє безпосередньо надсилати все, що вам потрібно.
Що стосується Zmodem, просто введіть rz
у віддалену систему, яка надсилає спеціальну рядок, який повинен розуміти локальний послідовний термінал, і спричиняє появу діалогового вікна вибору файлів.
Kermit - це більш простий протокол, тому в цьому випадку вам доведеться розпочати передачу вручну.
У мене немає програми передачі бінарних файлів, але я маю uuencode
/base64
Є кілька переваг використання належної бінарної програми передачі файлів , як lrzsz
і kermit
: ефективність, контрольні суми, автоматичні повторні спроби, перервана передачі відновлення, множинну передача файлів і т.д., але це розкіш . Якщо вам потрібно надіслати лише один файл, або ви надсилаєте файли рідко, ви можете піти з завантаженнями ASCII.
Оскільки термінальні протоколи інтерпретують багато значень байтів, які зустрічаються у файлі двійкових даних, ви не можете надіслати файл безпосередньо через те саме з'єднання; якщо ви це зробите, код емуляції терміналу на будь-якому кінці намагатиметься інтерпретувати деякі дані, пошкоджуючи дані та, ймовірно, також плутати код обробки терміналу.
Ви можете обійти це, кодуючи бінарні дані в безпечний підмножина ASCII на локальній стороні, а потім перетворюючи їх на неочищені бінарні дані на віддаленій стороні. Це те, що uuencode
і base64
роблять програми, що відрізняються лише незначними варіантами алгоритму.
У локальній системі ви кодуєте файл: ²
$ uuencode -o sbf.uue some-binary-file.gz some-binary-file.gz
Потім ви вводите цю команду у віддалену систему та надсилаєте файл за допомогою функції "ASCII завантаження" локальної послідовної консолі:
$ cat | uudecode
Коли завантаження файлу закінчиться, натисніть, Ctrl-Cщоб вийти cat
. Тепер у вас є декодований файл у віддаленій системі, як ви хотіли.
Але у мене є багато файлів для надсилання, а друк ASCII Перекодування - це біль!
Завантажити себе на більш високий рівень технології не важко. Якщо у віддаленій системі є компілятор C, ви можете скористатися попередньою технікою для надсилання віддаленій системі копії lrzsz
вихідного коду. З місцевого боку:
$ uuencode -o lrzsz.tgz.uue lrzsz-0.12.20.tar.gz lrzsz-0.12.20.tar.gz
Потім на віддаленій системі введіть це через програму послідовних консолей:
$ cat | uudecode
^C
$ tar xvf lrzsz-0.12.20.tar.gz
...build lrzsz normally
Після запуску першої команди виконайте "завантаження ASCII" lrzsz.tgz.uue
файлу у віддалену систему. Конвеєр приймає дані, кодовані uuencoded, і розшифровує їх до двійкового тарболу для вас, який ви можете розпакувати та створити.
Але у мене немає компілятора C у віддаленій системі
Якщо ви навіть не компілятор на віддаленій системі, ви можете перетнути скомпілювати в rz
програму (або будь-який інший ) на локальній системі і відправити його на віддаленій системі , використовуючи описану вище техніку.
Виноски:
minicom , picocom , PuTTY , VanDyke CRT ...
Ви повинні надати ім'я вхідного файлу цій версії uuencode
двічі, один раз, щоб назвати джерело вхідних даних, і знову оголосити, що віддалена система повинна викликати файл, коли він декодує дані у вихідний файл. Можна, можливо, хочете, щоб віддалена система мала інше ім'я для свого вихідного файлу.
Ваша локальна версія uuencode
може поводитися по-різному.