B.2. ASCII 上传和 cat

cat 命令在所有类 UNIX 系统上都可用。 它将从键盘接收的数据复制到一个文件。 Minicom 和其他终端仿真器具有 “ASCII 上传” 功能,该功能会通过串行链路发送文件,就像手动键入一样。

remote bash$ cat > upload.txt
Alt-S Upload ascii
[ascii upload - Press CTRL-C to quit]

等待上传完成…

ASCII upload of "upload.txt"
10.0 Kbytes transferred at 3900 CPS... Done.
READY: press any key to continue...
Ctrl-D
remote bash$

在没有硬件流控制的情况下,ASCII 上传可能会丢失偶尔的字符。

要上传二进制文件,需要将它们编码为 ASCII,上传它们,然后再将它们解码回二进制格式。

localhost bash$ uuencode upload.bin < upload.bin > upload.txt
Alt-S Upload ascii
[ascii upload - Press CTRL-C to quit]

等待上传完成…

ASCII upload of "upload.txt"
10.0 Kbytes transferred at 3900 CPS... Done.
READY: press any key to continue...
Ctrl-D
remote bash$
remote bash$ uudecode < upload.txt

您可以使用校验和程序(例如 sumcksummd5sum)来检测传输错误。 在从本地计算机发送文件之前和在远程计算机上接收文件之后,打印文件的校验和。

localhost bash$ cksum upload.bin
1719761190 76 upload.bin
remote bash$ cksum upload.bin
1719761190 76 upload.bin

有许多校验和程序。 sum 命令应谨慎使用,因为存在 BSDSystem V UNIX 版本,它们会给出不同的结果。 cksumPOSIX 标准开发者为纠正这种混乱局面所做的尝试:它在所有 POSIX 机器上对于同一文件给出相同的结果。

如果原始文件和上传文件的校验和不匹配,则必须重新上传该文件。 如果链路嘈杂且文件很大,那么您可能永远无法成功上传。 在这种情况下,需要将文件分成许多小部分,上传一部分,检查其校验和,如果校验和正确,则继续下一部分。

这听起来像是应该自动化的操作。 这时,Xmodem 协议登场了。