【sx & sb & sz】Centos/Linux sx、sb、sz命令详细介绍

简介

系统版本:Centos7.6

软件版本:lrzsz 0.12.20

sx、sb、sz命令属于lrzsz程序的内容,是使用纠错协议(ZMODEM、YMODEM、XMODEM)通过拨号串行端口将一个或多个文件发送到在 PC-DOS、CP/M、Unix、VMS 及其他操作系统下运行的各种程序(如,Windows下的Xshell)。虽然 sz 比较强大,可以从 cu 调用,但很少系统的 cu 版本强大到可以允许 sz 正常工作。但是Professional-YAM 的 Unix 版本可用于此类应用程序的调用。

sz 使用 ZMODEM 协议发送一个或多个文件。与 XMODEM 相比,ZMODEM 极大地简化了文件传输。除了友好的用户界面,ZMODEM 还为个人计算机和其他用户提供了一种高效、准确和强大的文件传输方法和在应用程序之间提供了完整的端到端数据完整性的保证。ZMODEM 的 32 位 CRC 能够在安全等级更高的网络环境下,不触发警告从而捕抓错误信息。高级文件管理功能包括自动下载(无需用户干预自动启动文件下载)、显示单个和总文件长度以及传输时间估计、崩溃恢复、选择性文件传输以及精确的文件日期和长度的保留。来自另一个程序的输出可以通过管道传递给 sz 进行传输,将标准输入表示为"-":

bash 复制代码
> ls -l | sz -

程序输出以文件名 sPID.sz 进行传输,其中 PID 是 sz 程序的进程 ID。如果设置了环境变量 ONAME,则使用该变量。在这种情况下,Unix 命令:

bash 复制代码
将向 PC-DOS 控制台显示发送一个"文件"
> ls -l | ONAME=con sz -ay -
# -y 选项指示接收方无条件打开文件进行写入
# a 选项导致接收方将 Unix 换行符转换为 PC-DOS 回车符和换行符

sb 批量使用 YMODEM 或 ZMODEM 协议发送一个或多个文件。当接收方请求时,sb 支持带有"cbreak"tty 的模式、XON/XOFF 流控制以及中断字符设置为 CAN(^X)的 YMODEM-G。YMODEM-G(Professional-YAM 的 G 选项)通过不对每个传输的扇区进行确认,在无错误的通道(直接连接、X.PC 等)上提高了吞吐量。在 Unix 系统上,会传输有关文件的其他信息。如果接收程序使用此信息,则传输的文件长度控制写入输出数据集的确切字节数,并且相应地设置修改时间和文件模式。

sx 使用 XMODEM 或 XMODEM-1k 协议(有时误称为"YMODEM")发送单个文件。用户必须向发送和接收程序提供文件名。如果在设置了 $SHELL 且该变量包含字符串 rsh、rbash 或 rksh(受限 shell)的情况下调用 sz,将以受限模式运行。受限模式将路径名限制在当前目录和 PUBDIR(通常为 /usr/spool/uucppublic)及其子目录。

sz [-oqtv] -c COMMAND 以这种形式向 ZMODEM 接收器发送单个命令以执行。sz 以命令的返回值退出。如果命令包含空格或对 shell 特殊的字符,则必须引用它。

sz [-oqtv] -i COMMAND 以这种形式向 ZMODEM 接收器发送单个命令以执行。sz 在接收器正确接收命令后立即退出(在执行之前)。

sz -TT 以这种形式向终端输出所有 256 个代码组合。如果您在发送文件时遇到困难,此命令可查看操作系统正在吃掉哪些字符代码。

如果调用 sz 时 stdout 和 stderr 指向不同的数据集,则将 Verbose(-v 选项)设置为 2,导致逐帧进度报告发送到 stderr。这可以使用 -q 选项禁用。

基础语法

bash 复制代码
> sz [-+8abdefkLlNnopqTtuvyY] file ...
> sb [-adfkqtuv] file ...
> sx [-akqtuv] file
> sz [-oqtv] -c COMMAND
> sz [-oqtv] -i COMMAND
> sz -TT

选项介绍

选项 选项说明
-+,--append 将接收到的数据附加到现有文件中(仅限 ZMODEM)
-2,--twostop 若系统支持,该选项可使用两位的停止bit,使用该选项要谨慎
-8,--try-8k 尝试将块大小提升到 8KB,但这与标准的 ZMODEM 不兼容(仅限 ZMODEM)
--start-8k 以 8KB 的块大小开始读取,该选项类似于 --try-8k
-a,--ascii 将传输文件中的换行符(NL)转换为回车符/换行符(CR/LF)。对于 XMODEM 和 YMODEM,这由发送方完成;对于 ZMODEM,这由接收方完成
-b,--binary 仅限 ZMODEM,以二进制模式传输文件:传输文件时不进行任何转换
-B,--bufsize 后跟数字N。在将数据写入磁盘之前缓冲 N 个字节。默认值是 16384,在大多数情况下是足够的。如果您的机器运行缓慢,或者磁盘接口性能下降,或者存在其他硬件问题,导致传输速率较慢,适当增加缓冲区大小可能有助于提高传输效率。但如果您设置为 -1 或"auto",虽然会为整个文件分配足够大的缓冲区,但如果这导致计算机内存不足开始进行页面交换,反而可能会降低性能。使用此选项会关闭输入文件的内存映射。这会增加内存和 CPU 的使用
-c,--command 后跟其他命令COMMAND。向接收方发送命令以执行,并返回该命令的退出状态
-C,--command-tries 后跟数字N。发送时发生错误将重试发送命令 N 次,默认为11 次
-d,--dot-to-slash 在传输的路径名中,将所有的"."替换为"/"。因此,C.omenB0000(这对 MSDOS 或 CP/M 来说是不能识别的)会被传输为 C/omenB0000。如果结果文件名的主干部分超过 8 个字符,会插入一个".",最多允许总共 11 个字符。该选项应同时使用 --full-path 选项
--delay-startup 后跟数字N。在进行任何操作之前等待 N 秒钟
-e,--escape 在传输完成后执行退出命令,实现方式为强制发送方转义所有控制字符。通常,XON、XOFF、DLE、CR-@-CR 和 Ctrl - X (XON 用于继续传输、XOFF 用于暂停传输等)都会被转义。如果已经存在同名文件,将强制发送方对新文件进行重命名。
-f,--full-path 发送完整路径名。通常,在传输文件名时会去掉目录前缀。使用 --dot-to-slash 选项时,该选项也会开启
-h,--help 显示帮助
-i,--immediate-command 后跟其他命令COMMAND。向接收方发送 COMMAND 以执行,在接收程序成功接收后,sz 命令立即退出,无需等待
-k,--1k 在XMODEM和YMODEM中使用 1024 字节的块而不是默认的 128 字节的块来发送文件,1024 字节的数据包在高比特率下能加快文件传输速度。而 ZMODEM 会流式传输数据以获得最佳的吞吐量
-L,--packetlen 后跟数字N。使用长度为 N 的 ZMODEM 子数据包。N 值较大(32 <= N <= 1024)会使吞吐量稍高,N 值较小则会加快错误恢复速度。默认为低于 300 波特(Baud)时为 128,高于 300 波特(Baud)时为 256,高于 2400 波特(Baud)时为 1024
-m,--min-bps 后跟数字N。如果每秒字节数(BPS 速率)在特定时间内低于 N,则停止传输,具体请查看 --min-bps-time 选项说明
-M,--min-bps-time -M 后跟数字N。与 --min-bps 一起使用,默认值是 120(秒)
-l ,--framelen 后跟数字N。每发送 N(32 ≤ N ≤ 1024)个字符后等待接收方确认数据是否正确后再继续发送。当没有 XOFF 流控制时,这可用于避免网络溢出
-n,--newer 在ZMODEM中如果目标文件(接收方)不存在,则发送所有文件。如果源文件(发送方)比目标文件新,则覆盖目标文件
-N,--newer-or-longer 在ZMODEM中如果目标文件(接收方)不存在,则发送所有文件。如果源文件(发送方)比目标文件新或者比目标文件长,就覆盖目标文件
-o,--16-bit-crc 在ZMODEM中禁用 32 位 CRC 的自动选择
-O,--disable-timeouts 禁用读取超时处理代码。这会导致 lsz 在对方不发送任何内容时挂起,会有少量的性能提升并降低系统负载(系统调用次数减少约 50%),处理的任务是实时性要求很高的任务时,使用此选项时请小心
-p,--protect ZMODEM保护:如果目标文件已存在,则跳过该文件
-q,--quiet 静默模式,不显示传输进度和状态信息
-R,--restricted 进入更严格的限制模式。将路径名限制在当前目录和 PUBDIR(通常是 /usr/spool/uucppublic)以及其子目录中
-r,--resume 在ZMODEM中恢复中断的文件传输。如果源文件比目标文件长,传输将从源文件中与目标文件长度相等的偏移量处开始
-s,--stop-at 后跟HH:MM。在 HH 小时,MM 分钟时停止传输。另一种形式,使用 +N 而不是 HH:MM,会在 N 秒后停止传输
-S,--timesync 启用时间同步协议支持。该选项与标准的 ZMODEM 不兼容,使用时请谨慎
--syslog[=off] 打开或关闭系统日志记录。默认设置在配置时确定。如果在编译时未包含系统日志支持,此选项将被忽略。
-t,--timeout 后跟超时处理(TIM)时间。将超时时间更改为 TIM 的十分之一秒
-T,--turbo 不转义某些字符(如:^P、^P|0x80、telenet 转义序列 [CR + @])。这会使性能提高约 1%,在正常情况下不会报错,需要注意的是如果通过终端服务器连接,^P 可能会有用
--tcp 尝试发起一个 TCP/IP 连接。lsz 会要求接收端的 ZMODEM 打开一个 TCP/IP 连接。所有的握手操作(使用哪个地址/端口)都由 ZMODEM 程序完成。不推荐使用此选项,因为只有 lrzsz 是唯一能使用的 ZMODEM(私有扩展)程序。如果两个程序通过非标准的网络连接连接,可能会需要该选项。所以使用此选项会带来安全风险,在此期间可能会有其他人连接到该端口
--tcp-client 后跟 地址:端口 。作为一个 TCP/IP 客户端:连接到给定的端口。请查看"--tcp-server"以获取更多信息。
--tcp-server 作为服务端运行,将会创建一个套接字和打印出相关信息,等待客户端连接。不推荐使用此选项,因为只有 lrzsz 是唯一能使用的 ZMODEM(私有扩展)程序。但如果您必须使用 ZMODEM,并且不能使用 lsz 的 --tcp 选项(可能是因为您的 telnet 不允许生成一个本地程序,其标准输入/输出连接到远程端),您可能会想要使用此选项。如果您使用此选项,则必须使用 --tcp-client 选项启动 lsz 。lrz 在启动时会打印出地址和端口。使用此选项会带来安全风险,在此期间可能会有其他人连接到该端口
-u 在成功传输文件后断开连接
-U,--unrestrict 关闭限制模式(如果在受限的 shell 下运行,则无法实现此操作)
-w,--windowsize 后跟数字N,代表窗口尺寸。设置视窗尺寸为N
-v,--verbose 详细模式,操作过程会显示在窗口当中
-X,--xmodem 使用XMODEM协议
-y,--overwrite ZMODEM 接收到文件后,自动覆盖同名文件
-Y,--overwrite-or-skip ZMODEM 接收到文件后,自动覆盖同名文件,但会跳过在目标系统上具有相同路径名的文件
--ymodem 使用YMODEM协议
-Z,--zmodem 使用ZMODEM协议

基本用法

1、下载单个文件

bash 复制代码
> sz file

2、 下载多个文件

bash 复制代码
> sz file1 file2 file3

3、下载目录

bash 复制代码
> tar -czf folder.tar.gz folder/ # 压缩当前目录下的 folder 目录
> sz folder.tar.gz

安全事项

在受限模式下将路径名限制在当前目录和 PUBDIR(通常是 /var/spool/uucppublic)及其子目录中,并禁用远程命令执行。要使用更严格的限制模式,请设置环境变量 ZMODEM_RESTRICTED 或启用 -R 选项。如果 lsz 不是在受限的 shell 下运行,可以使用 -U 选项关闭限制模式。使用 --tcp-client 或 --tcp-server 选项会带来安全风险,因为可能会有其他人在您之前连接到该端口并获取您的数据。如果对更安全的模式有强烈需求,我可能会引入某种密码验证(例如,需要登陆账号才能连接或者输入密码才能连接)。

环境变量

1、ZNULLS:用于指定在 ZDATA 帧之前要发送的空字节的数量。

2、SHELL:如果此变量包含 rsh 或 rksh,lsz 会识别为受限的 shell。

3、ZMODEM_RESTRICTED:如果设置了此变量,lsz 会进入受限模式。

4、TMPDIR:如果设置了此环境变量,将用作放置对时间同步请求的应答文件的目录。TMP 如果未设置 TMPDIR,则使用 TMP。如果 TMPDIR 和 TMP 都未设置,则将使用 /tmp 。

注意事项

1、当程序没有正确编译是会显示"Caught signal 99",该信号的详细信息要查看 rbsb.c 中的"bibi(99)"。

2、从大多数系统版本的 cu 中调用 sz 不起作用,因为 cu 的接收进程会与 sz 争夺调制解调器的字符。

3、在至少一个 BSD 系统上,当 sz 接近文件末尾几千字节时,会挂起或退出。使用"-w 8192"标志解决了这个问题。真正原因未知,也许是内核 TTY 输出例程中的一个错误。

4、未正确使用指定文件传输协议(ZCOMM 或 Pro-YAM 等)的程序可能会导致 sz 的端口"挂起"一两分钟。

5、对于那些声称支持 YMODEM 但实际支持有偏差的程序,实际上只支持 1k 块的 XMODEM。

6、XMODEM 传输每个文件会累计最多 127 个垃圾字节。XMODEM-1k 和 YMODEM-1k 传输使用 128 字节的块以避免额外填充。

7、YMODEM 程序使用传输开始时发送的文件长度来将文件修剪到正确长度时,可能问题会发生在传输时,而源文件一直在增长。此问题与 ZMODEM 传输无关,ZMODEM 无条件保留确切的文件长度。

8、绝大多数 ZMODEM 选项仅传递给接收程序,但有些程序并未实现所有这些选项。

9、当输入来自管道时,应使用循环缓冲和 ZMODEM 滑动窗口,而不是每 1024 字节确认帧。如果无法打开文件,sz 会发送一个 ZMODEM 命令来反馈状况;超出重试设定值之前检查是否至少存在一个可访问的文件。测试模式会在接收系统上留下一个零长度的文件。

10、一些高速调制解调器存在固件错误,当高速传输方向反转时会丢失字符。环境变量 ZNULLS 可用于指定在 ZDATA 帧之前要发送的空字节数量。对于 4.77 MHz 的 PC,典型值为 101,对于 AT 则为 124。

相关推荐
九河云3 分钟前
如何选择适合的AWS EC2实例类型
服务器·云计算·aws
Tassel_YUE1 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
€☞扫地僧☜€1 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
hjjdebug1 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯1 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
斑布斑布1 小时前
【linux学习2】linux基本命令行操作总结
linux·运维·服务器·学习
紅色彼岸花2 小时前
第六章:DNS域名解析服务器
运维·服务器
Spring_java_gg2 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全