
如果你经常要把本地文件传到 Linux 服务器或者把服务器上的日志拉到本地一定会遇到 rz 这个命令。rz 是 lrzsz 软件包里的上传命令基于 ZMODEM 协议必须配合支持该协议的终端工具使用。很多命令大全里会把它和 scp、sftp 放在一起但实际用起来差异很大。下面按实际落地顺序拆一遍先确认它解决什么问题再安装、跑通、调参最后说清楚哪些场景别用它。我一直觉得 rz 属于那种“看着简单但容易踩坑”的命令。最大的坑就是很多人执行 rz 之后半天没反应或者传完不知道文件去了哪。本文不会只列参数我会把安装、基本用法、目录位置、大小限制和排查链路一起讲清楚。1. 先用一句话理解 rz它解决的是“本地文件怎么进服务器”的问题1.1 rz 到底是什么和 scp、sftp 的差异在哪rz 不是服务器上的独立服务而是 lrzsz 软件包里的一个命令。它使用 ZMODEM 协议在已经建立 SSH 会话的终端里把你本地的文件传输到服务器当前目录。简单理解就是你在服务器上敲一个 rz终端会弹出一个本地文件选择窗口选中文件后开始传输。很多人会把 rz、scp、sftp 放在一起比较。它们确实都能传文件但使用方式不一样。scp 是从本地命令行发起的比如你在自己电脑的终端里执行一条 scp 命令把本地文件推送到服务器。它适合脚本自动化也适合大文件。但你得先记住服务器地址、用户名、目标路径这些信息写出来比较长。sftp 是交互式文件传输工具进入之后可以浏览服务器目录、上传下载。它比 scp 更适合临时查看远程目录但多了一步交互。rz 的思路是反过来的。你先已经登录到服务器然后直接在服务器上执行 rz文件从本地流向服务器。它不需要再指定 IP、端口、用户名因为当前 SSH 会话已经替你完成了身份认证。所以 rz 最适合的场景是你已经登录服务器临时要传一个小文件进去比如配置文件、Java 的 jar 包、脚本、日志。这种情况就不用退出当前会话也不用写一长串 scp 参数。在“Linux 命令大全”里rz 和 scp 经常被放在一起但真实项目里它们不冲突。我的做法是小文件用 rz大文件或自动化用 scp/rsync。1.2 rz 上传的文件去哪了很多新手都找错了每次遇到有人说“rz 上传的文件不在服务器上”我第一反应就是让他先pwd。rz 的默认工作目录是执行命令时所在的当前目录不是 /root不是 /tmp也不是某个固定路径。如果在 /home/app 目录下执行 rz上传的文件就在 /home/app如果在 /var/log 下执行上传的文件就在 /var/log。正确流程应该是cd /data/upload rz先切换到你真正想放置文件的目录再执行 rz。上传完成后用ls -l确认文件大小和时间用md5sum核对文件内容是否和本地一致。还有个容易忽略的问题如果当前目录已经存在同名文件rz 可能直接覆盖也可能提示你选择这取决于终端工具和 lrzsz 版本。很多初始化安装场景里旧配置就是这样被新文件不知不觉覆盖掉的。所以上传前先看一眼目录内容比较稳妥。2. 先检查环境rz 不是所有 Linux 都自带的命令2.1 安装 lrzsz各发行版包管理器命令很多 Linux 最小化安装默认不带 lrzsz。运行时会出现rz: command not found。先检查which rz有输出说明已经安装没有输出说明需要装。不同发行版安装命令不同。CentOS、RHEL 系列yum install -y lrzszUbuntu、Debian 系列apt-get update apt-get install -y lrzsz安装完继续验证which rz能显示 /usr/bin/rz 这类路径就说明安装成功。为什么第一步要确认环境因为 rz 无法独立工作它依赖 lrzsz 包、终端协议支持、当前会话三个条件。很多问题看起来是命令用错了实际上是环境没准备好。2.2 终端必须支持 ZMODEM不是所有 SSH 工具都行rz 能不能弹出文件选择窗口取决于你的 SSH 终端工具是否支持 ZMODEM 协议。Xshell、SecureCRT、MobaXterm、FinalShell 等常见终端工具默认或通过配置支持 ZMODEM。你在这些工具里登录服务器后执行 rz终端会识别到 ZMODEM 上传请求弹出本地文件选择框。但不是所有终端都支持。Windows 自带的 OpenSSH 客户端、部分纯命令行环境或者某些网页版终端执行 rz 后很可能没有任何反应甚至直接卡住。这不是 rz 命令坏了而是协议没有载体去响应。如果你遇到这种情况第一件事不是换参数而是换终端或者干脆改用 scp/sftp。我之前在自动化脚本里尝试过 rz发现很难落地。因为 rz 需要弹窗交互不是纯命令行输入输出。无人值守脚本里用 rz基本都会卡住。自动化分发场景下更合适的还是 scp 或 rsync。3. 从一次最简单的上传开始先跑通再谈效率3.1 单文件上传的最小流程不要一上来就研究一堆参数先走一次最简单流程。在服务器上执行cd /data/upload rz终端弹窗后选择本地一个文件比如 test.tar.gz确认上传。等进度条完成回到命令行。然后验证ls -l test.tar.gz md5sum test.tar.gz本地也计算一下 md5sum两边一致说明文件完整。这个流程能跑通说明环境没问题。后面再谈参数优化、批量上传和目录上传。注意权限问题。如果当前用户对 /data/upload 没有写权限rz 会失败或上传后文件不完整。可以先新建一个自己有权限的目录或者切换到有权限的用户。3.2 常用参数-y、-a、-b、-e 怎么选lrzsz 的 rz 支持一些参数常见的有参数作用使用建议-y同名文件自动覆盖要非常谨慎会覆盖旧文件-E同名文件跳过比 -y 安全-b二进制模式推荐用于压缩包、jar、war、图片等-a文本模式少用可能会转换换行符-e对控制字符转义特殊场景才用-v输出详细信息排查问题时有帮助-q静默模式不建议在脚本里依赖实际项目中上传 jar、war、tar.gz 这类二进制文件我一般用rz -b这样可以避免文本模式对文件内容做换行符转换防止二进制文件损坏。不要一上来就加-y。如果你不能确定当前目录没有同名文件-y可能会覆盖掉上一份还能用的配置或包。先用ls -l看一遍再决定是否覆盖。不同 lrzsz 版本对参数支持不完全一样记不住就执行rz --help以你环境里的实际输出为准。3.3 批量上传和目录上传rz 并不擅长传目录rz 支持一次选择多个文件上传。但在实际使用里多文件传输的弹窗交互并不方便文件名排序、选中状态也不直观。更重要的是rz 通常不支持直接传输整个目录。如果你把一个包含多层级文件的文件夹拖进弹窗很多终端会忽略目录结构或报错。正确的做法是把目录打包成一个文件再上传。本地打包tar czf app.tar.gz app/上传到服务器cd /data/app rz -b服务器上解压tar xzf app.tar.gz解压前先看看目标目录里已经有什么ls -la du -sh .这个习惯比任何命令都重要。很多人喜欢先来一句rm -rf 旧目录一旦路径写错数据就没了。我在项目里会先备份cp -r app app.bak_$(date %Y%m%d)确认新包正常后再决定是否清理旧备份。4. 开发运维里的高频组合rz 不是孤立命令4.1 Java 开发、Tomcat 配置和上传 war/jar在实际开发中Java 后端工程师经常要把 jar 包、war 包、配置文件上传到测试或生产服务器。这时候 rz 特别常用。比如调整 Tomcat 运行内存项目里常会配置 setenv.sh里面写上 CATALINA_OPTS 之类的参数。你把本地修改好的 setenv.sh 上传到服务器覆盖旧文件后重启 Tomcat。但要注意文件上传成功不等于服务能启动。最近遇到过一个 casesetenv.sh 用 rz 上传后systemctl 启动 Tomcat 失败。排查到最后才发现文件属主是 root而 Tomcat 服务以普通用户运行根本没有读取权限。解决办法是调整属主和权限chown tomcat:tomcat /data/tomcat/bin/setenv.sh chmod 750 /data/tomcat/bin/setenv.sh所以 rz 传完文件后别急着重启服务。先看日志确认权限、属主、格式都没问题。上传 war 或 jar 包时我建议保留一份旧包cp app.jar app.jar.bak然后用 rz 上传新包用 md5sum 做校验再启动服务。这样出问题可以快速回滚。4.2 配合系统信息、磁盘和目录检查rz 上传文件之前最好先确认服务器状态。查看磁盘剩余空间df -h查看某个目录占用大小du -sh /data/app查看系统架构确定下载的软件安装包是否对得上uname -m这些命令在 Linux 命令大全里很常见平时可能觉得简单但真正排查问题时非常有用。比如你本地有一个 2GB 的依赖包rz 传到一半卡住了。先看磁盘是不是满了df -h如果磁盘满了再怎么换参数都没用。删掉不必要的文件或者把包传到另一个盘符下。还有个小技巧想要把之前输入过的命令导出备份可以用history cmd_history.txt这个在做环境交接或写操作手册时很有用。4.3 日志排查和命令执行现场rz 和 sz 常常配合日志排查使用。服务器上的日志文件如果太大直接在终端里 tail 看会刷屏。这时候可以先用 sz 下载到本地sz /data/logs/app.log本地用文本编辑器打开检索关键字更方便。如果你负责多台服务器想同时看多台机器的状态 rz 就不合适了。因为它需要交互弹窗。这种情况可以用 xargs -P 或 pssh 并行执行命令但那是另一个话题。记住一点rz 是交互式命令不适合无人值守脚本。脚本里要传文件用 scp、rsync 或者自动化工具更可靠也方便留日志和重试。5. 传大文件或库文件容易中断先别急着怪 rz5.1 为什么 rz 传大文件会卡住或失败很多人在帖子或工作群里问“rz 传库文件老死掉”。这个现象不是偶发。rz 基于 ZMODEM 协议设计初衷偏向小文件、交互式传输。在会话稳定、网络质量好的情况下传几个文件很舒服。但当文件达到几百 MB 甚至 GB 级会暴露出几个问题。第一终端会话本身不稳定。SSH 会话如果因为网络波动断开传输会直接失败。第二中间网络设备的限制。有些办公网络出口设备会限制长连接或大包传输文件一大连接就被掐断。第三终端软件对 ZMODEM 的实现质量不一。某些终端实现只能处理有限大小超过阈值后表现不稳定。中断后的文件有时看起来大小接近但 md5 对不上。这时候如果不校验就直接解压或替换服务会出各种奇怪问题。所以我处理大文件时不会把希望寄托在 rz 上。5.2 更稳的长传方案scp、rsync 和打包迁移如果文件超过 100MB或者要传整个目录我更推荐用 scp 或 rsync。scp 简单直接从本地发起scp app.tar.gz userserver_ip:/data/app/这个命令在本地终端执行需要填写服务器地址和用户名。rsync 更强的地方在于它可以断点续传适合大文件或弱网环境rsync -avP app.tar.gz userserver_ip:/data/app/-P 参数表示显示进度并且支持断点续传。如果你只需要单次传输大文件rsync 比 scp 更稳。要传整个目录时先把目录打包成 tar.gz能减少文件数量提高传输稳定性tar czf app.tar.gz app/然后再用 scp 或 rsync 传输。不同场景的工具选择我习惯这样判断场景推荐工具单个小配置文件已登录服务器rz下载服务器日志到本地sz100MB 以上的单文件scp 或 rsync多文件目录需要断点续传rsync多台服务器自动化分发pssh、rsync、自动化平台6. 常见报错与排查顺序遇到问题按这个链路看6.1 从现象到处理一张表说清常见问题rz 的问题看起来五花八门但大部分可以归到几类。现象优先检查处理方式command not found是否安装 lrzsz安装 lrzsz执行 rz 没弹窗当前终端是否支持 ZMODEM换终端或用 scp/sftp传完找不到文件执行 rz 时的当前目录用 pwd 和 ls -l 确认同名文件被覆盖目录里是否已有同名文件上传前备份或用 -E 跳过文件乱码或损坏是否用了文本模式改用 rz -b 二进制模式传输到一半中断磁盘空间、网络、文件大小df -h换 scp/rsync上传后没权限文件属主、目录权限chown、chmod 或换目录6.2 推荐排查步骤遇到问题不要乱猜按顺序排查最省时间。第一步先确认命令存在command -v rz第二步确认当前目录pwd第三步确认磁盘空间df -h第四步确认文件是否真的到了ls -l第五步确认内容是否完整md5sum 文件名第六步看终端工具本身是否支持 ZMODEM。如果你用的终端不支持直接换工具。这套顺序看起来简单但非常有效。我见过太多人上来就改参数结果文件根本没传上去问题出在目录不对。7. 让 rz/sz 在项目里用得更顺手7.1 常见配置和别名如果你经常需要把文件传到固定目录可以在服务器上定义别名。比如新建一个上传目录mkdir -p /data/upload然后在 ~/.bashrc 里写alias rucd /data/upload rz -b alias sdcd /data/logs sz保存后执行source ~/.bashrc之后想上传文件直接输入 ru 就会进入目录并启动 rz想下载日志输入 sd 就会进入日志目录并弹出下载窗口。这样能给日常操作省一点时间但不要把所有希望寄托在别名上。生产环境里传文件最好还是用可记录、可重试的 scp 或 rsync。另外不要在有密码明文的地方写死自动上传逻辑。轻量交互用 rz 没问题但可靠性要求高的场景必须有日志、校验和回滚。7.2 一次完整的上传发布流程示例最后给一个我在项目里常用的发布流程虽然不是标准答案但能体现 rz 的合理用法。本地先打包tar czf app.tar.gz app/切换到目标目录并上传cd /data/app rz -b校验文件md5sum app.tar.gz备份旧目录cp -r app app.bak_$(date %Y%m%d)解压新包tar xzf app.tar.gz重启服务并看日志systemctl restart your-service tail -f /data/logs/app.log这套流程里rz 只负责“把文件弄到服务器上”这个动作其他步骤都用专门的命令。这样拆分之后每一步都可以验证出问题也知道卡在哪。踩过几次之后我发现很多问题不是 rz 命令本身不行而是前置条件没确认终端不支持、目录不对、磁盘满了、文件太大。遇到问题先按顺序排查比反复换参数有效。更稳妥的做法是小文件用 rz大文件用 scp 或 rsync自动化用脚本工具。把边界看清楚rz 其实很好用。