在 macOS 上,首先通过 Homebrew 安装 lrzsz:运行
brew install lrzsz
,安装后,在终端使用sz 文件名
发送文件,接收端需支持 ZMODEM 协议。
如果你需要在 macOS 终端(Terminal)和远程服务器(通常是 Linux 服务器)之间方便地传输文件,特别是小文件,sz
命令(以及它的搭档 rz
)是一个非常经典且实用的工具,它利用 Zmodem 协议实现快速、简单的文件传输,本文将详细介绍如何在 macOS 上安装、配置和使用 sz
命令。
核心概念:lrzsz
与 Zmodem 协议
sz
命令是什么?sz
(Send Zmodem) 命令用于从你的本地 macOS 电脑发送文件到远程服务器。rz
命令是什么?rz
(Receive Zmodem) 命令用于从远程服务器接收文件到你的本地 macOS 电脑。lrzsz
是什么?sz
和rz
命令并不是 macOS 系统自带的,它们属于一个名为lrzsz
的开源软件包,你需要先安装这个包才能在 macOS 上使用这些命令。- Zmodem 协议是什么? 这是一种在串行连接(如早期的拨号 Modem)上高效传输文件的协议,它支持断点续传、错误检测和纠正,在现代使用中,它通过终端模拟器(如 macOS 自带的 Terminal 或 iTerm2)在 SSH 连接上工作。
第一步:在 macOS 上安装 lrzsz
由于 macOS 不自带 sz
/rz
,安装 lrzsz
是必须的,推荐使用 Homebrew 这个 macOS 上强大的包管理器,安装过程简单可靠:
-
安装 Homebrew (如果尚未安装):
打开 终端 (在/应用程序/实用工具/
文件夹中),粘贴并运行以下命令:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
按照屏幕提示完成安装,安装完成后,运行
brew doctor
检查是否配置正确。 -
使用 Homebrew 安装
lrzsz
:
在终端中运行以下命令:brew install lrzsz
Homebrew 会自动下载、编译并安装
lrzsz
及其依赖。 -
验证安装:
安装完成后,运行以下命令检查sz
是否可用:sz --version
或者
which sz
如果看到版本信息或路径(如
/usr/local/bin/sz
),说明安装成功。
第二步:配置终端模拟器以支持 Zmodem
仅仅安装了 lrzsz
还不够,你的终端程序需要知道当远程服务器触发 Zmodem 传输时,应该调用本地的 sz
或 rz
程序来处理,macOS 自带的 Terminal.app 默认不支持 Zmodem,你需要使用支持 Zmodem 的终端或进行配置。
推荐方案:使用 iTerm2
iTerm2 是 macOS 上一个功能强大且免费的终端替代品,它原生支持 Zmodem 协议,配置非常简单:
- 下载并安装 iTerm2。
- 安装完成后,无需额外配置,iTerm2 默认就能识别并正确处理 Zmodem 传输请求。
备选方案:配置 macOS 自带 Terminal.app (较复杂)
如果你坚持使用原生 Terminal,需要手动添加触发器(Triggers)来捕获 Zmodem 的启动信号并调用 sz
/rz
,这相对繁琐且容易出错,不如直接使用 iTerm2 方便,这里不详细展开,因为 iTerm2 是更优选择。
第三步:使用 sz
命令发送文件到远程服务器
假设你已经通过 SSH 登录到了远程 Linux 服务器(ssh user@remote.server.com
),并且该服务器也安装了 lrzsz
包(大多数 Linux 发行版默认安装或可通过包管理器如 yum install lrzsz
或 apt install lrzsz
轻松安装)。
-
在远程服务器的终端会话中:
导航到你想要接收文件的目录(cd /tmp
)。 -
在远程服务器的终端会话中,启动接收:
输入命令:rz
或者更常用的是使用
-y
选项(覆盖已存在文件)和-e
选项(转义控制字符):rz -ye
执行此命令后,远程服务器会进入等待接收文件的状态,并通常会显示一个类似
**B00000000000000
的提示符(具体样式可能因系统而异)。不要在远程终端输入任何其他命令。 -
在你的 macOS 本地:
- 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 接收请求(
rz
),并立即弹出一个文件选择对话框。 - 在弹出的对话框中,浏览并选择你想要从 macOS 发送到远程服务器的一个或多个文件。
- 点击 Open 或 Send 按钮。
- 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 接收请求(
-
传输过程:
文件传输将开始,你会在终端中看到传输进度(百分比、速度等),传输完成后,远程服务器的rz
命令会自动退出,你将回到正常的 shell 提示符,文件已经保存在你执行rz
命令时所在的远程目录中。
第四步:使用 sz
命令从远程服务器接收文件到 macOS
-
在远程服务器的终端会话中:
导航到包含你想要发送的文件的目录(cd /path/to/files
)。
使用sz
命令跟上你要发送的文件名(支持通配符 发送多个文件):sz file1.txt backup.tar.gz *.log
同样,常用
-y
和-e
选项:sz -ye file1.txt backup.tar.gz *.log
-
在你的 macOS 本地:
- 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 发送请求(
sz
),并立即弹出一个对话框让你选择在 macOS 上保存文件的位置。 - 在弹出的对话框中,选择你想要保存文件的本地目录。
- 点击 Save 或 OK 按钮。
- 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 发送请求(
-
传输过程:
文件传输将开始,你会在终端中看到传输进度,传输完成后,远程服务器的sz
命令会自动退出,你将回到正常的 shell 提示符,文件已经保存到你选择的 macOS 本地目录中。
重要提示与常见问题解答 (FAQ)
-
-y
和-e
选项是必须的吗?-y
:强烈建议使用,它表示如果目标位置存在同名文件,则直接覆盖,如果不加-y
,遇到同名文件时传输会中断并询问,在自动化或脚本中尤其不便。-e
:建议使用,它对文件中的控制字符进行转义,对于传输文本文件(如日志)更安全,避免特殊字符引起问题,传输纯二进制文件(如图片、压缩包)时影响不大,但加上也无妨,养成rz -ye
和sz -ye
的习惯通常是最佳实践。
-
为什么我输入
sz
或rz
后没反应/报错?- 本地未安装
lrzsz
: 确保你已在 macOS 上通过 Homebrew 成功安装了lrzsz
(brew install lrzsz
)。 - 终端不支持/未配置 Zmodem: 这是最常见的原因!确保你使用的是 iTerm2 或已正确配置了 Terminal.app 的 Zmodem 触发器(推荐使用 iTerm2)。
- 远程服务器未安装
lrzsz
: 在远程服务器上运行which sz
或which rz
检查,如果没有,使用服务器的包管理器安装(如sudo yum install lrzsz
或sudo apt install lrzsz
)。 - 连接问题: 确保 SSH 连接稳定,Zmodem 对网络中断敏感。
- 命令拼写错误: 确认输入的是
sz
或rz
,不是lsz
或其他。
- 本地未安装
-
传输大文件可靠吗?
Zmodem 支持断点续传,理论上对大文件传输有帮助。在实际的 SSH 连接中使用 Zmodem 传输大文件(尤其是几百MB或GB级别)并不是最可靠或最高效的方式。 SSH 连接本身的不稳定(如网络波动、超时)可能导致 Zmodem 会话中断且难以恢复,对于大文件,更推荐使用scp
或rsync
命令,它们基于 SSH 协议,专为文件传输设计,更稳定高效。 -
安全吗?
Zmodem 协议本身没有内置强加密,它运行在你已经建立的 SSH 加密通道之上,只要你的 SSH 连接是安全的(使用密钥认证或强密码),文件传输过程就是通过这个加密隧道进行的,是安全的,不要在未加密的连接(如普通 Telnet)上使用 Zmodem 传输敏感文件。 -
sz
/rz
和scp
/sftp
/rsync
有什么区别?我该用哪个?sz
/rz
(Zmodem):- 优点: 交互式操作极其简单直观(尤其是在终端会话中临时传个文件),无需记住复杂的命令语法或指定远程路径,特别适合快速传输少量小文件。
- 缺点: 对大文件或网络不稳定环境支持不够好;依赖终端模拟器的特殊支持;不如
scp
/rsync
灵活(如递归传输目录)。
scp
/sftp
/rsync
:- 优点: 基于 SSH,安全可靠;专门为文件传输设计,效率高,尤其适合大文件和批量传输;
rsync
支持增量同步(只传输变化部分)、断点续传、递归目录传输等高级功能;不依赖特定终端功能,在任何 SSH 客户端都能用。 - 缺点: 需要记住命令语法和路径(本地路径和远程路径)。
- 优点: 基于 SSH,安全可靠;专门为文件传输设计,效率高,尤其适合大文件和批量传输;
- 选择建议:
- 临时在已打开的 SSH 会话中传一两个小文件?
sz
/rz
最快捷。 - 传输大文件、大量文件、需要递归传输目录、需要自动化脚本?绝对首选
scp
或rsync
。 - 需要图形化界面?可以使用支持
sftp
的客户端(如 Cyberduck, FileZilla, Transmit)。
- 临时在已打开的 SSH 会话中传一两个小文件?
-
企业环境限制:
一些严格管理的企业网络或服务器环境可能出于安全策略考虑,禁用了 Zmodem 协议(即禁止使用sz
/rz
),如果你发现无法使用,请咨询你的系统管理员,并转而使用scp
或sftp
。
sz
和 rz
命令通过 Zmodem 协议,为在 macOS 终端与远程 Linux 服务器之间交互式地传输小文件提供了一种极其便捷的方式,其核心步骤是:
- 在 macOS 上使用 Homebrew 安装
lrzsz
(brew install lrzsz
)。 - 使用支持 Zmodem 的终端模拟器,强烈推荐 iTerm2(开箱即用)。
- 在远程服务器上确保也安装了
lrzsz
。 - 在远程会话中:
- 发送文件到本地 macOS:运行
sz -ye 文件名
。 - 接收来自本地 macOS 的文件:运行
rz -ye
。
- 发送文件到本地 macOS:运行
- 在本地 iTerm2 弹出的对话框中选择文件(发送时)或保存位置(接收时)。
虽然 sz
/rz
在特定场景下非常方便,但请记住对于大文件传输或自动化任务,scp
和 rsync
是更强大、更可靠的选择,根据你的具体需求选择最合适的工具。
引用说明:
lrzsz
项目信息可参考其历史仓库或相关文档 ( https://ohse.de/uwe/software/lrzsz.html – 注意:原主页可能已变更,Homebrew 是其当前在 macOS 上的主要维护来源)。- Zmodem 协议规范可参考相关 RFC 和文档 (RFC 1598 等,但技术性较强)。
- iTerm2 官方网站: https://iterm2.com/
- Homebrew 官方网站: https://brew.sh/
scp
,sftp
,rsync
命令的用法可通过man scp
,man sftp
,man rsync
在终端查看手册页。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/7934.html