持っているものがシリアルコンソールだけである場合(たとえば、ターミナルサーバーを介したTelnet経由)、どのような方法でホストシステムとファイルを送受信できますか?
切り取り/貼り付けは、小さい/印刷可能なコンテンツで機能します。印刷できないコンテンツを処理するためにuuencode / uudecodeの組み合わせ(gzipを使用)を使用しましたが、これはすべて非常に制限的です。
ベストアンサー1
接続のもう一方の端で使用するシリアルコンソールプログラムには、ファイルをリモート側に送信する方法があります。進行方法は、リモートシステムで利用可能なリソースによって異なります。
私が持っているかlrzsz
遠いkermit
側に
最も簡単な場合は、リモート側に信頼できるバイナリファイル転送プログラムがインストールされている場合です。lrzsz
またはkermit
。これは今日よりも一般的でしたが、特定のシステムにはまだこれらのいずれかがある可能性があります。
ローカルで使用するシリアルコンソールプログラムでは、ZmodemまたはKermitアップロードを実行する方法がほとんど確実であるため、必要なものを直接送信できます。
Zmodemを使用すると、リモートシステムに入力するだけで、システムrz
はローカルシリアル端末が理解する必要がある特別な文字列をエクスポートするため、ファイルセレクタダイアログボックスが表示されます。
Kermitはより簡単なプロトコルなので、この場合は手動で転送を開始する必要があります。
バイナリファイル転送プログラムはありませんがuuencode
/はあります。base64
lrzsz
適切なバイナリファイル転送プログラム(or)を使用すると、kermit
効率性、チェックサム、自動再試行、中断された転送リカバリ、複数ファイル転送などのいくつかの利点がありますが、これは次のとおりです。贅沢。ファイルを1つだけ送信する必要がある場合、またはファイルをほとんど送信しない場合は、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
最初のコマンドを実行した後、ファイルをlrzsz.tgz.uue
リモートシステムに「ASCIIアップロード」します。パイプラインはuuencodedデータを受け取り、解凍してビルドできるバイナリtarballにデコードします。
しかし、リモートシステムにCコンパイラはありません。
リモートシステムでコンパイラが利用できない場合は、次のことができます。クロスコンパイルrz
(またはその他)ローカルシステムでプログラムし、上記の技術を使用してリモートシステムに送信します。
脚注: