macOS必备,sz命令传文件技巧

在 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 是什么? szrz 命令并不是 macOS 系统自带的,它们属于一个名为 lrzsz 的开源软件包,你需要先安装这个包才能在 macOS 上使用这些命令。
  • Zmodem 协议是什么? 这是一种在串行连接(如早期的拨号 Modem)上高效传输文件的协议,它支持断点续传、错误检测和纠正,在现代使用中,它通过终端模拟器(如 macOS 自带的 Terminal 或 iTerm2)在 SSH 连接上工作。

第一步:在 macOS 上安装 lrzsz

由于 macOS 不自带 sz/rz,安装 lrzsz 是必须的,推荐使用 Homebrew 这个 macOS 上强大的包管理器,安装过程简单可靠:

  1. 安装 Homebrew (如果尚未安装):
    打开 终端 (在 /应用程序/实用工具/ 文件夹中),粘贴并运行以下命令:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

    按照屏幕提示完成安装,安装完成后,运行 brew doctor 检查是否配置正确。

  2. 使用 Homebrew 安装 lrzsz:
    在终端中运行以下命令:

    brew install lrzsz

    Homebrew 会自动下载、编译并安装 lrzsz 及其依赖。

  3. 验证安装:
    安装完成后,运行以下命令检查 sz 是否可用:

    sz --version

    或者

    which sz

    如果看到版本信息或路径(如 /usr/local/bin/sz),说明安装成功。

第二步:配置终端模拟器以支持 Zmodem

仅仅安装了 lrzsz 还不够,你的终端程序需要知道当远程服务器触发 Zmodem 传输时,应该调用本地的 szrz 程序来处理,macOS 自带的 Terminal.app 默认支持 Zmodem,你需要使用支持 Zmodem 的终端或进行配置。

推荐方案:使用 iTerm2

iTerm2 是 macOS 上一个功能强大且免费的终端替代品,它原生支持 Zmodem 协议,配置非常简单:

  1. 下载并安装 iTerm2
  2. 安装完成后,无需额外配置,iTerm2 默认就能识别并正确处理 Zmodem 传输请求。

备选方案:配置 macOS 自带 Terminal.app (较复杂)

如果你坚持使用原生 Terminal,需要手动添加触发器(Triggers)来捕获 Zmodem 的启动信号并调用 sz/rz,这相对繁琐且容易出错,不如直接使用 iTerm2 方便,这里不详细展开,因为 iTerm2 是更优选择。

第三步:使用 sz 命令发送文件到远程服务器

假设你已经通过 SSH 登录到了远程 Linux 服务器(ssh user@remote.server.com),并且该服务器也安装了 lrzsz 包(大多数 Linux 发行版默认安装或可通过包管理器如 yum install lrzszapt install lrzsz 轻松安装)。

  1. 在远程服务器的终端会话中:
    导航到你想要接收文件的目录(cd /tmp)。

  2. 在远程服务器的终端会话中,启动接收:
    输入命令:

    rz

    或者更常用的是使用 -y 选项(覆盖已存在文件)和 -e 选项(转义控制字符):

    rz -ye

    执行此命令后,远程服务器会进入等待接收文件的状态,并通常会显示一个类似 **B00000000000000 的提示符(具体样式可能因系统而异)。不要在远程终端输入任何其他命令。

  3. 在你的 macOS 本地:

    • 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 接收请求(rz),并立即弹出一个文件选择对话框。
    • 在弹出的对话框中,浏览并选择你想要从 macOS 发送到远程服务器的一个或多个文件
    • 点击 OpenSend 按钮。
  4. 传输过程:
    文件传输将开始,你会在终端中看到传输进度(百分比、速度等),传输完成后,远程服务器的 rz 命令会自动退出,你将回到正常的 shell 提示符,文件已经保存在你执行 rz 命令时所在的远程目录中。

第四步:使用 sz 命令从远程服务器接收文件到 macOS

  1. 在远程服务器的终端会话中:
    导航到包含你想要发送的文件的目录(cd /path/to/files)。
    使用 sz 命令跟上你要发送的文件名(支持通配符 发送多个文件):

    sz file1.txt backup.tar.gz *.log

    同样,常用 -y-e 选项:

    sz -ye file1.txt backup.tar.gz *.log
  2. 在你的 macOS 本地:

    • 如果你使用的是 iTerm2,它会自动检测到远程发起的 Zmodem 发送请求(sz),并立即弹出一个对话框让你选择在 macOS 上保存文件的位置
    • 在弹出的对话框中,选择你想要保存文件的本地目录
    • 点击 SaveOK 按钮。
  3. 传输过程:
    文件传输将开始,你会在终端中看到传输进度,传输完成后,远程服务器的 sz 命令会自动退出,你将回到正常的 shell 提示符,文件已经保存到你选择的 macOS 本地目录中。

重要提示与常见问题解答 (FAQ)

  1. -y-e 选项是必须的吗?

    • -y强烈建议使用,它表示如果目标位置存在同名文件,则直接覆盖,如果不加 -y,遇到同名文件时传输会中断并询问,在自动化或脚本中尤其不便。
    • -e建议使用,它对文件中的控制字符进行转义,对于传输文本文件(如日志)更安全,避免特殊字符引起问题,传输纯二进制文件(如图片、压缩包)时影响不大,但加上也无妨,养成 rz -yesz -ye 的习惯通常是最佳实践。
  2. 为什么我输入 szrz 后没反应/报错?

    • 本地未安装 lrzsz 确保你已在 macOS 上通过 Homebrew 成功安装了 lrzsz (brew install lrzsz)。
    • 终端不支持/未配置 Zmodem: 这是最常见的原因!确保你使用的是 iTerm2 或已正确配置了 Terminal.app 的 Zmodem 触发器(推荐使用 iTerm2)。
    • 远程服务器未安装 lrzsz 在远程服务器上运行 which szwhich rz 检查,如果没有,使用服务器的包管理器安装(如 sudo yum install lrzszsudo apt install lrzsz)。
    • 连接问题: 确保 SSH 连接稳定,Zmodem 对网络中断敏感。
    • 命令拼写错误: 确认输入的是 szrz,不是 lsz 或其他。
  3. 传输大文件可靠吗?
    Zmodem 支持断点续传,理论上对大文件传输有帮助。在实际的 SSH 连接中使用 Zmodem 传输大文件(尤其是几百MB或GB级别)并不是最可靠或最高效的方式。 SSH 连接本身的不稳定(如网络波动、超时)可能导致 Zmodem 会话中断且难以恢复,对于大文件,更推荐使用 scprsync 命令,它们基于 SSH 协议,专为文件传输设计,更稳定高效。

  4. 安全吗?
    Zmodem 协议本身没有内置强加密,它运行在你已经建立的 SSH 加密通道之上,只要你的 SSH 连接是安全的(使用密钥认证或强密码),文件传输过程就是通过这个加密隧道进行的,是安全的,不要在未加密的连接(如普通 Telnet)上使用 Zmodem 传输敏感文件。

  5. sz/rzscp/sftp/rsync 有什么区别?我该用哪个?

    • sz/rz (Zmodem):
      • 优点: 交互式操作极其简单直观(尤其是在终端会话中临时传个文件),无需记住复杂的命令语法或指定远程路径,特别适合快速传输少量小文件。
      • 缺点: 对大文件或网络不稳定环境支持不够好;依赖终端模拟器的特殊支持;不如 scp/rsync 灵活(如递归传输目录)。
    • scp/sftp/rsync:
      • 优点: 基于 SSH,安全可靠;专门为文件传输设计,效率高,尤其适合大文件和批量传输;rsync 支持增量同步(只传输变化部分)、断点续传、递归目录传输等高级功能;不依赖特定终端功能,在任何 SSH 客户端都能用。
      • 缺点: 需要记住命令语法和路径(本地路径和远程路径)。
    • 选择建议:
      • 临时在已打开的 SSH 会话中传一两个小文件?sz/rz 最快捷。
      • 传输大文件、大量文件、需要递归传输目录、需要自动化脚本?绝对首选 scprsync
      • 需要图形化界面?可以使用支持 sftp 的客户端(如 Cyberduck, FileZilla, Transmit)。
  6. 企业环境限制:
    一些严格管理的企业网络或服务器环境可能出于安全策略考虑,禁用了 Zmodem 协议(即禁止使用 sz/rz),如果你发现无法使用,请咨询你的系统管理员,并转而使用 scpsftp

szrz 命令通过 Zmodem 协议,为在 macOS 终端与远程 Linux 服务器之间交互式地传输小文件提供了一种极其便捷的方式,其核心步骤是:

  1. 在 macOS 上使用 Homebrew 安装 lrzsz (brew install lrzsz)。
  2. 使用支持 Zmodem 的终端模拟器,强烈推荐 iTerm2(开箱即用)。
  3. 在远程服务器上确保也安装了 lrzsz
  4. 在远程会话中:
    • 发送文件到本地 macOS:运行 sz -ye 文件名
    • 接收来自本地 macOS 的文件:运行 rz -ye
  5. 在本地 iTerm2 弹出的对话框中选择文件(发送时)或保存位置(接收时)。

虽然 sz/rz 在特定场景下非常方便,但请记住对于大文件传输或自动化任务,scprsync 是更强大、更可靠的选择,根据你的具体需求选择最合适的工具。


引用说明:

  • 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

(0)
酷番叔酷番叔
上一篇 1天前
下一篇 1天前

相关推荐

  • SDK命令行怎么快速打开?

    打开 SDK 命令提示符:在 Windows 开始菜单中找到 SDK 目录下的命令提示符快捷方式并点击;或手动打开命令提示符,导航至 SDK 安装目录(如 Android\Sdk\tools\bin)后执行命令(如 sdkmanager)。

    2025年6月20日
    1400
  • 如何访问AIX命令行?

    访问AIX命令行通常通过终端或控制台实现,本地用户可直接登录系统终端,远程用户则需使用SSH等安全协议连接,登录后输入有效用户名和密码即可进入命令行界面操作。

    1天前
    300
  • 如何命令行安全安装Atom?各系统指南

    Windows系统安装安装Chocolatey(推荐包管理器)以管理员身份打开PowerShell,执行:Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol……

    2025年6月28日
    900
  • 如何找回MySQL执行过的SQL命令?

    通过客户端历史记录文件查询MySQL命令行客户端(如mysql)会自动记录执行过的命令,保存在用户主目录的隐藏文件中:定位历史文件:Linux/macOS:~/.mysql_historyWindows:C:\Users\<用户名>\.mysql_history(需开启显示隐藏文件)查看历史命令:直……

    2025年7月9日
    1100
  • 文件操作慢?这些命令1秒搞定

    基础文件操作命令用于管理文件和目录,包括创建、查看、复制、移动、删除文件及目录,以及切换工作目录和执行位置操作,是操作系统交互的基本工具。

    2025年7月13日
    800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信