Програми послідовних консолей¹, які ви використовуєте на іншому кінці з'єднання, мають певний спосіб надіслати файл у віддалену сторону. Як саме ви вирішите це, залежить від того, які ресурси у вас є у віддаленій системі.
У мене є 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може поводитися по-різному.