一、lrzsz是什么?为什么运维需要它?
lrzsz(Long Receive/Send Zmodem)是Linux系统中开源的文件传输套件,核心功能通过两条命令实现:
rz(Receive Zmodem):从客户端接收文件到服务器;sz(Send Zmodem):从服务器发送文件到客户端。
它支持XMODEM(128字节/包,低速)、YMODEM(1024字节/包,批量传输)、ZMODEM(连续流传输,支持断点续传+32位CRC校验,效率最高)三种协议,尤其适合无网络环境(如嵌入式串口调试、隔离机房服务器维护)或轻量文件传输(配置文件、日志、小固件包)场景。
二、客户端兼容性:哪些终端能用?
lrzsz的传输依赖终端软件对ZMODEM协议的支持,运维人员需根据常用工具选择适配方案:
| 终端类型 | 兼容性 | 推荐指数 | 说明 |
|---|---|---|---|
| Xshell | 原生支持 | ★★★★★ | 配置简单:会话属性→终端→Zmodem→设置上传/下载路径,自动触发文件选择窗口。 |
| SecureCRT | 原生支持 | ★★★★☆ | 需在“Session Options→X/Y/Zmodem”中启用,支持批量传输。 |
| PuTTY | 需额外配置 | ★★☆☆☆ | 需安装pscp插件或通过lrzsz+plink组合实现,操作复杂。 |
| Windows Terminal | 不支持 | ★☆☆☆☆ | 微软官方终端暂未集成ZMODEM协议,需借助第三方工具(如WSL+Xshell转发)。 |
结论:优先选择Xshell或SecureCRT,避免在Windows Terminal中踩坑。
三、基础操作:从安装到文件传输
1. 安装lrzsz
大多数Linux发行版需手动安装,以Ubuntu/Arch/Fedora为例:
Bash# Ubuntu/Debian sudo apt-get update && sudo apt-get install lrzsz -y # Arch Linux sudo pacman -S lrzsz # Fedora sudo dnf install lrzsz
2. 终端配置(以SecureCRT为例)
连接目标Linux系统后,需启用ZMODEM支持:
- 菜单路径:
Options → Session Options → X/Y/Zmodem; - 设置上传/下载路径(如
/home/user/test); - 启用
Auto-start Zmodem(自动触发传输)。
3. 核心命令实战
lrzsz的核心命令是rz(接收)和sz(发送),以下是运维高频场景示例:
示例1:上传文件到Linux(rz命令)
需求:将本地Windows文件C:\test3.txt上传至服务器当前目录。 操作:
在服务器终端执行rz,SecureCRT/Xshell会自动弹出文件选择窗口;选择本地文件后,文件将保存至服务器当前目录。
Bash# 执行rz触发上传 rz # 传输完成后验证 ls /home/user/test # 应显示test3.txt
示例2:从Linux下载文件(sz命令)
需求:将服务器文件test1.txt下载至本地Windows。
操作:
在服务器终端执行sz test1.txt,终端软件弹出保存路径窗口;选择本地目录后,文件将保存至指定位置。
Bash# 执行sz触发下载 sz test1.txt # 传输完成后验证(本地) dir C:\Downloads # 应显示test1.txt
示例3:使用YMODEM协议批量传输
需求:发送多个文件(test1.txt和test2.bin)并覆盖接收端同名文件。 操作:
使用sz -y指定YMODEM协议并强制覆盖,rb表示YMODEM接收。
Bash# 服务器端发送(YMODEM) sz -y test1.txt test2.bin # 客户端接收(YMODEM) rb
示例4:ASCII模式传输(避免换行符乱码)
需求:传输Windows文本文件(含CRLF换行符)至Linux,需转换为LF格式。 操作:
使用-a参数启用ASCII模式,自动转换换行符。
Bash# 服务器端接收(ASCII模式) rz -a # 客户端发送(ASCII模式) sz -a test1.txt
示例5:详细输出(查看传输进度)
需求:监控文件传输速率、字节数等细节。
操作:
使用-v参数显示详细日志。
Bash# 服务器端接收(详细模式) rz -v # 客户端发送(详细模式) sz -v test2.bin
示例6:强制覆盖文件(谨慎使用)
需求:覆盖接收端已存在的同名文件(默认启用限制模式,防止误覆盖)。
操作:
使用-y参数强制覆盖。
Bash# 服务器端接收(强制覆盖) rz -y # 客户端发送(强制覆盖) sz -y test1.txt
四、常用选项与功能:分类速查表
lrzsz支持丰富的选项,覆盖传输控制、协议选择、安全性等场景,以下是高频选项分类说明:
🔍 传输控制选项
| 选项 | 描述 | 示例 |
|---|---|---|
-a | ASCII模式,转换换行符(CR/LF → LF) | rz -a |
-b | 二进制模式(默认),不转换文件内容 | sz -b test2.bin |
-y | 覆盖已有文件 | rz -y |
-v | 详细输出,显示传输进度、速率等 | sz -v test2.bin |
--min-bps N | 若传输速率低于N字节/秒,终止传输(防卡死) | sz --min-bps 100 test1.txt |
--delay-startup N | 启动前等待N秒(避免终端未就绪) | rz --delay-startup 3 |
📜 协议选择选项
| 选项 | 描述 | 示例 |
|---|---|---|
-X | 使用XMODEM协议 | rx(接收) |
--ymodem | 使用YMODEM协议 | rb(接收)/sz -y(发送) |
-Z | 使用ZMODEM协议(默认) | rz(接收)/sz(发送) |
🔐 安全性选项
| 选项 | 描述 | 示例 |
|---|---|---|
-R | 启用限制模式(默认),防止接收绝对路径或覆盖系统文件 | rz -R |
-U | 禁用限制模式(需谨慎,可能导致文件覆盖或命令注入) | rz -U |
-e | 转义控制字符(如XON/XOFF),避免特殊字符干扰传输 | rz -e |
五、高级用法:运维实战进阶
🛡️ 1. 串口文件传输(嵌入式开发场景)
场景:嵌入式设备通过串口(如/dev/ttyUSB0)连接服务器,需传输固件或配置文件。 准备:
- 授权串口设备读写权限:
sudo chmod 666 /dev/ttyUSB0; - 使用
screen作为串口终端:screen /dev/ttyUSB0 115200(波特率需与设备匹配)。
操作:
在screen中执行rz(接收)或sz(发送),传输文件。
Bash# 接收设备发送的配置文件 rz -b # 发送服务器固件至设备 sz -b firmware.bin
🔍 2. 自动化传输脚本(批量任务)
场景:每日凌晨批量下载服务器日志(/var/log/*.log)至本地备份目录。
脚本示例:
Bash#!/bin/bash LOG_DIR=/var/log LOCAL_DIR=/backup/logs # 切换至日志目录 cd $LOG_DIR # 批量发送日志文件(显示进度,间隔1秒防卡顿) for file in *.log; do sz -v "$file" sleep 1 done # 同步至本地备份目录(需提前挂载本地磁盘) cp /var/log/*.log $LOCAL_DIR
🔄 3. 远程命令执行(高风险,谨慎使用)
场景:通过文件传输触发远程命令执行(默认禁用,需接收端启用-C)。 操作:
Bash# 发送命令(需接收端支持-C选项) sz -c "echo 'Hello from lrzsz' > /tmp/test.txt"
⚡ 4. 性能优化(大文件传输)
场景:传输100MB以上大文件时,通过调整参数提升速度。 优化命令:
Bash# 启用Turbo模式(减少转义字符)+ 8KB缓冲区 sz -T --bufsize 8192 large_file.bin
🔐 5. 限制模式配置(防误操作)
场景:禁止传输绝对路径文件,避免安全风险。
操作:
设置环境变量ZMODEM_RESTRICTED=1,强制启用限制模式。
Bashexport ZMODEM_RESTRICTED=1 rz -R # 此时无法接收绝对路径文件
六、注意事项:避坑指南
- 终端兼容性:优先选择Xshell/SecureCRT,Windows Terminal需借助第三方工具转发ZMODEM协议。
- 串口权限:串口设备(如
/dev/ttyUSB0)需chmod 666授权,否则会报“Permission denied”。 - 安全风险:禁用限制模式(
-U)可能导致文件覆盖或命令注入,仅建议在可信环境使用。 - 波特率匹配:串口传输时,需确保终端软件波特率(如115200)与设备一致,否则传输失败。
- 大文件传输:大文件可能占用高CPU,建议调整
--bufsize(缓冲区大小)或--windowsize(窗口大小)。
总结
lrzsz是运维工具箱中“小而美”的存在,尤其在网络受限或轻量传输场景下,其高效、跨平台的特性无可替代。从嵌入式开发到远程服务器维护,从批量日志下载到自动化脚本集成,掌握rz/sz命令搭配Xshell等兼容终端,能让运维人员在应急场景中事半功倍。下次遇到无FTP环境的传输需求,不妨试试lrzsz!