MAC使用RZ SZ指令实现本地与远程服务器之间文件上传与下载

一、rz sz概念
我们知道用linux命令rz/sz可以通过一些终端软件如secureCRT等在linux服务器与本地windows之间传文件。在服务器上rz一下,在本地windows下就跳出一个窗口,选择文件后就传到了服务器上;而在服务器上用sz命令sz一个文件,在本地电脑硬盘上就有了这个文件。用起来是很方便,但是总感觉很神奇。 关于其可能的工作原理,之前猜测过,感觉是这样:用secureCRT等远程登录的时候,其实就是通过ssh方式,连接了远程主机上的sshd,也就是相当于用sshd-client 在于sshd 交互而已,而这个sshd-client就是secureCRT;这样,sz/rz工作的时候,也只能是通过这条通路。具体怎样通过这条通路传的,大概是这样:sz 一个文件的时候,就像是cat 一个文件一样,本来应该在本地窗口显示出一堆乱码,但是正巧这堆乱码符合某种格式(就是zModem这种sz/rz所采用的协议格式),被secureCRT识破了,认出了其实是sz命令发起的,于是保存成本地一个文件。换句话说,如果一个文件内容正好是这样的内容,那么cat出后,在本地也必然会保存出一个文件的。对于rz呢,也是同样的道理,rz 执行后直接往标准输出打印一些内容,这些内容格式古怪,正好被secureCRT所识别出来,然后弹窗,并把本地文件传过去,就像是用户的键入内容一样被rz命令接收。

rz可以批量上传文件,也可以上传单个文件。使用的协议是ZMODEM协议。 ZMODEM 协议的介绍 :https://blog.csdn.net/ligerendaqiu123/article/details/44964791。
下面简单说下ZModem协议的事情,先得从XMODEM协议(XMODEM Protocol)说起。XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数 据,并且每个块都使用一个校验和过程来进行错误检测。如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然 而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。  
使用循环冗余校验的与XMODEM相应的一种协议称为XMODEM-CRC。还有一种是XMODEM-1K,它以1024字节一块来传输数据。 YMODEM也是一种XMODEM的实现。它包括XMODEM-1K的所有特征,另外在一次单一会话期间为发送一组文件,增加了批处理文件传输模式。  
ZMODEM是最有效的一个XMODEM版本,它不需要对每个块都进行认可。事实上,它只是简单地要求对损坏的块进行重发。ZMODEM对按块 收费的分组交换网络是非常有用的。不需要认可回送分组在很大程度上减少了通信量。它是Xmodem 文件传输协议的一种增强形式,不仅能传输更大的数据,而且错误率更小。包含一种名为检查点重启的特性,如果通信链接在数据传输过程中中断,能从断点处而不 是从开始处恢复传输。

二、MAC 上使用rz、sz实现文件上传下载

环境:
Mac ox 10.12.3
iTerm2-3_1_5

1、安装iTerm2
建议去官网下载 http://www.iterm2.com/
也可以使用我提供的百度云链接 链接:http://pan.baidu.com/s/1geDTosj 密码:3rm2
安装方式和苹果的安装方式是一样的,解压双击 把他拖进application中就可以了。

2、安装rz sz
1.安装homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装成功后输入 brew 查看是否有提示信息

MacBook-Pro:~ $ brew
Example usage:
  brew search [TEXT|/REGEX/]
  brew (info|home|options) [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]

Troubleshooting:
  brew config
  brew doctor
  brew install -vd FORMULA

Developers:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]
  https://docs.brew.sh/Formula-Cookbook.html

Further help:
  man brew
  brew help [COMMAND]
  brew home

2、安装lrzsz

brew install lrzsz  

3、配置rz sz 进行上传下载
进入到/usr/local/bin 目录下,在/usr/loal/bin 目录下创建两个文件

cd  /usr/local/bin
vi iterm2-recv-zmodem.sh 【内容如下】
vi iterm2-send-zmodem.sh 【内容如下】
chmod  777 iterm2-*

iterm2-recv-zmodem.sh

#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required 
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
    FILE=`osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
else
    FILE=`osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose folder with prompt "Choose a folder to place received files in"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
fi

if [[ $FILE = "" ]]; then
    echo Cancelled.
    # Send ZModem cancel
    echo -e \\x18\\x18\\x18\\x18\\x18
    sleep 1
    echo
    echo \# Cancelled transfer
else
    cd "$FILE"
    /usr/local/bin/rz -E -e -b
    sleep 1
    echo
    echo
    echo \# Sent \-\> $FILE
fi

iterm2-send-zmodem.sh

#!/bin/bash
# Author: Matt Mastracci ([email protected])
# AppleScript from http://stackoverflow.com/questions/4309087/cancel-button-on-osascript-in-a-bash-script
# licensed under cc-wiki with attribution required 
# Remainder of script public domain

osascript -e 'tell application "iTerm2" to version' > /dev/null 2>&1 && NAME=iTerm2 || NAME=iTerm
if [[ $NAME = "iTerm" ]]; then
    FILE=`osascript -e 'tell application "iTerm" to activate' -e 'tell application "iTerm" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
else
    FILE=`osascript -e 'tell application "iTerm2" to activate' -e 'tell application "iTerm2" to set thefile to choose file with prompt "Choose a file to send"' -e "do shell script (\"echo \"&(quoted form of POSIX path of thefile as Unicode text)&\"\")"`
fi
if [[ $FILE = "" ]]; then
    echo Cancelled.
    # Send ZModem cancel
    echo -e \\x18\\x18\\x18\\x18\\x18
    sleep 1
    echo
    echo \# Cancelled transfer
else
    /usr/local/bin/sz "$FILE" -e -b
    sleep 1
    echo
    echo \# Received $FILE
fi 

3、iTerm2 配置添加rz sz 功能
1、点击 iTerm2 的设置界面 Perference-> Profiles -> Default -> Advanced -> Triggers 的 Edit 按钮

2、点击+ 新增如下两条记录

Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh

ok!到此为止我们的rz sz安装配置就可以了,接着我们介绍一下rz 和 sz 的使用
rz 上传功能
在bash中,也就是iTerm2终端输入rz 就会弹出文件选择框,选择文件 choose 就开始上传,会上传到当前目录
sz 下载功能
sz fileName(你要下载的文件的名字) 回车
会弹出窗体 我们选择要保存的地方即可。

你可能感兴趣的:(web,服务器,sz,rz)