
你可能早就用過rz也見過它在終端里打印出rz waiting to receive.***B0100000023be50這樣的握手信息。但很多人第一次用它時都會有同一個困惑文件明明顯示上傳成功去服務器目錄里卻找不到不知道它到底傳到哪去了。要回答這個問題需要把rz的協議原理、依賴環境、工作目錄規則和常見報錯串成一條鏈路來理解。這篇內容會從 Zmodem 協議講起給出 lrzsz 的安裝方法、常用參數、最小實操、完整校驗流程再落到排查步驟和生產選型建議上。1. 先理解rz命令Zmodem 協議與文件傳輸場景1.1 rz 和 sz一對基于 Zmodem 的上傳下載命令rz并不是一個獨立的軟件它來自lrzsz軟件包。這個軟件包提供了兩個核心命令rz接收文件對應英文 Receive。sz發送文件對應英文 Send。這里的“接收”和“發送”要站在服務器視角來理解。你在本地終端里通過 SSH 登錄到遠端 Linux 服務器然后在服務器上執行rz表示服務器準備接收來自本地終端的文件。終端軟件看到 Zmodem 握手后會彈出本地文件選擇窗口你選中文件后文件就從本地機器傳到服務器。反過來你在服務器上執行sz 文件名終端會彈出另存為窗口把服務器文件下載到本地。二者都基于 Zmodem 協議。Zmodem 是早期調制解調器時代誕生的文件傳輸協議支持錯誤檢測、斷點續傳和批量文件傳輸。SSH 時代并不直接需要它來做加密因為文件內容是走 SSH 會話通道傳輸的終端軟件只是把 Zmodem 的控制序列嵌入到終端輸出里再由本地端響應。也就是說整個鏈路可以寫作本地終端Xshell/SecureCRT 等 | | SSH Zmodem 控制序列 v 遠端 Linux 服務器lrzsz 提供 rz/sz 命令這個模型解釋了為什么rz的使用不像scp那么“純命令式”它依賴本地終端軟件配合而不是只靠一條命令完成全部操作。1.2 rz 解決什么場景不解決什么場景rz最合適的場景是臨時上傳幾個小文件。你正在終端里處理配置、排查問題突然需要把一個.sql腳本或.tar.gz包傳到服務器又不愿意切換到 SFTP 客戶端這時rz是最順手的選擇。它不需要額外開通端口不需要記住遠端路徑文件會直接落到你當前所在的目錄。但rz不適合以下場景上傳大量目錄結構比如整個前端構建產物幾百個文件分布在多個子目錄里。無人值守的腳本任務rz依賴交互式終端和本地文件選擇窗口腳本里執行很容易卡住。對可審計性、可回滾要求嚴格的發布流程生產環境不建議依賴終端軟件的人工選擇。理解這一點很重要。rz本質上是給人用的交互式工具不是給腳本用的自動化接口。2. 環境準備安裝 lrzsz 并確認終端支持 Zmodem 協議2.1 lrzsz 軟件包的安裝方法絕大多數 Linux 發行版都可以通過包管理器安裝lrzsz。Debian/Ubuntu 系統使用 aptsudo apt update sudo apt install lrzsz -yCentOS/RHEL 7 或 8 使用 yumsudo yum install lrzsz -yCentOS/RHEL 9、Rocky Linux、Fedora 等使用 dnfsudo dnf install lrzsz -y安裝完成后先驗證命令是否存在which rz which sz rz --version sz --version正常輸出里會包含類似rz (lrzsz) 0.12.20的版本信息。如果執行rz提示command not found不要急著懷疑命令不存在先確認是不是漏裝了軟件包。2.2 終端對 Zmodem 的支持程度這是最容易踩坑的一步。遠端服務器安裝了 lrzsz只意味著服務器端有了 Zmodem 接收能力本地終端還必須能識別 Zmodem 控制序列并把文件選擇窗口彈出來整個流程才能跑通。不同終端軟件的支持情況差異很大可以參考下表終端軟件是否原生支持 Zmodem實際使用說明Xshell支持連接屬性里可以配置上傳下載的默認本地目錄SecureCRT支持Zmodem 集成比較成熟使用穩定FinalShell支持同時提供圖形化文件管理但 rz 也可用MobaXterm支持不同版本實現有差異遇到問題先確認版本PuTTY原生不支持默認不能彈出 Zmodem 文件選擇框Windows Terminal WSL原生不支持直接執行 rz 會卡在 waiting 狀態如果你使用 Window 系統推薦先用 Xshell、SecureCRT 或 FinalShell 這類帶 Zmodem 支持的客戶端。這樣在學習階段可以減少終端層面的干擾把注意力放在命令本身。2.3 安裝完成后如何驗證在服務器執行cd /tmp rz如果本地終端彈出文件選擇窗口說明 Zmodem 鏈路正常。如果窗口沒有彈出終端一直停留在rz waiting to receive狀態就需要回到本地終端的 Zmodem 配置上去排查而不是繼續在服務器端調試。3.rz命令常用參數和交互行為詳解3.1 基礎命令格式和啟動流程rz的基礎用法非常簡單rz執行后終端輸出rz waiting to receive.***B0100000023be50這行輸出不是錯誤而是 Zmodem 接收方的握手提示。支持 Zmodem 的終端會攔截這串序列并彈出本地文件選擇框選完文件后開始傳輸。如果這不是你要的效果檢查本地終端是否真正支持 Zmodem而不是糾結為什么這里沒有文件路徑。3.2 常用參數速查表rz的參數不算多但每個參數的選擇會影響文件完整性和使用體驗。常用參數如下參數作用使用建議-y自動覆蓋同名文件常用但生產環境要確認不會覆蓋重要文件-b二進制傳輸模式推薦用于壓縮包、可執行文件、庫文件-aASCII 傳輸模式適合純文本可能轉換換行符-e對所有控制字符轉義和-b搭配使用更穩定-E遇到重名文件時自動跳過或重命名不同版本語義有差異落地前要實測-q安靜模式日志輸出場景可用-v詳細模式排錯時使用參數組合時可以直接連寫比如rz -be rz -by rz -ey這里要特別注意不同版本的 lrzsz 對某些參數的處理略有差異尤其是-E。你不需要死記所有參數把它當成一個備查表即可等真正遇到問題再回來查。3.3 rz -y 的覆蓋機制rz -y的-y表示在遇到同名文件時直接覆蓋不再等待用戶確認。這個參數能加快操作但后果是原文件被替換后沒有自動恢復機制。很多人因為習慣性輸入rz -y上傳時不小心覆蓋了服務器上的同名文件等到發現時已經找不到原始內容了。建議的做法是上傳前在目標目錄執行ls -l先確認同名文件情況。重要目錄不要直接傳先傳到臨時目錄再移動覆蓋。如果必須覆蓋上傳完整后立刻做一次校驗而不是等到業務報錯才發現。3.4 -a、-b、-e 的選擇邏輯-a是 ASCII 模式傳輸純文本時會把換行符轉換成適合目標系統的格式。Windows 和 Linux 的換行符不同-a會做自動轉換所以文本文件在-a模式下通常更友好。-b是二進制模式不做任何轉換字節原樣傳輸。對.tar.gz、.zip、.jar、.so、數據庫備份文件一定使用-b否則二進制內容可能被換行符轉換破壞傳上去的文件打不開。-e是對控制字符做轉義降低終端把文件內容誤認為控制序列的風險。實際項目中如果你不確定文件類型或者要傳輸比較大、比較復雜的文件直接用rz -be這樣既保證二進制原樣傳輸又減少控制字符干擾比裸rz更穩妥。不過也要說明-e會略微增加傳輸數據量但在現代網絡環境下這點開銷通常可以忽略。4. 最小實操用rz上傳文件并校驗完整流程4.1 準備目標目錄和文件在服務器上創建一個專門用于上傳的目錄并進入目錄mkdir -p /tmp/upload cd /tmp/upload pwd這一步的目的是讓上傳行為可控。如果你一登錄就執行rz文件會落到用戶主目錄時間久了目錄會變得雜亂。先在臨時目錄里操作至少能確認文件被傳到了哪里。4.2 執行 rz 并選擇文件在/tmp/upload目錄下執行rz -be本地終端彈出文件選擇窗口后選擇需要上傳的文件比如app.tar.gz。等待終端提示傳輸完成。如果本地文件比較大傳輸過程可能會持續一段時間不要中途關閉終端窗口。如果你確定目標目錄沒有同名文件或者希望直接覆蓋舊文件可以使用rz -be -y4.3 用命令驗證上傳結果傳輸完成后不要只看“成功”提示要用命令確認落盤文件和文件完整性。先查看文件是否存在ls -l /tmp/upload再用file命令判斷文件類型file /tmp/upload/app.tar.gz最后計算校驗值md5sum /tmp/upload/app.tar.gz在本地機器上執行對應的 md5 計算對比兩邊的摘要值。如果一致說明文件確實完整傳輸網絡或終端沒有引入損壞。校驗這一步是排查問題的關鍵技巧之后遇到rz傳完打不開的文件第一個反應就應該是對比哈希值。5. “上傳的文件去哪了”工作目錄、查找方法和落盤驗證5.1 當前工作目錄決定落盤位置這是搜索熱度非常高的問題rz上傳的文件在哪。答案很簡單rz把文件保存到執行命令時所在的當前工作目錄而不是某個固定目錄也不保留本地文件路徑信息。你本地文件在D:\project\config\application.yml傳到服務器后它會變成服務器當前目錄下的application.yml而不是自動創建config子目錄。這個行為對很多人來說是反直覺的但它就是 Zmodem 接收器的默認工作方式。驗證方式pwd rz你在哪個目錄執行rz文件就在哪個目錄。終端提示上傳成功后立刻用ls -lt | head查看最近修改的文件一般都能找到。5.2 文件找不到時從哪個路徑查當你上傳后找不到文件按下面的順序排查執行pwd查看當前工作目錄。如果剛登錄服務器沒有執行過cd文件一般在用戶主目錄下root 用戶是/root普通用戶是/home/用戶名。檢查是否在多個終端窗口里執行過命令會不會上傳到了另一個窗口對應的會話目錄。查找最近 10 分鐘內修改過的文件find ~ -maxdepth 3 -mmin -10 -type f -exec ls -lh {} \;這條命令會列出用戶主目錄三層以內最近 10 分鐘生成的文件通常能快速定位剛上傳的文件。5.3 重名文件的后綴行為不帶-y參數時如果目標目錄已經存在同名文件rz會詢問怎么處理有的版本會生成類似file.0、file_1的重名文件有的版本會提示選擇“覆蓋”或“跳過”。這個行為受終端和 lrzsz 版本雙重影響不統一也不要在腳本里依賴它。更可靠的做法是在上傳前主動控制目錄狀態清空臨時目錄或者把同名文件先改名。這樣無論參數行為如何你都能預判文件最終叫什么。6. 常見失敗現象、原因與排查路徑6.1 命令不存在現象-bash: rz: command not found原因服務器沒有安裝 lrzsz 軟件包。處理按第 2 節安裝對應發行版的包安裝后重新執行rz --version驗證。6.2 終端卡在 waiting 狀態現象rz waiting to receive.***B0100000023be50然后一直沒有任何反應本地也不彈文件選擇窗口。原因本地終端不支持 Zmodem或者終端的 Zmodem 功能被禁用了。檢查方式確認使用的終端軟件是否支持 ZmodemPuTTY 和 Windows Terminal 原生不支持。查看 Xshell、SecureCRT 的連接屬性或文件傳輸配置看 Zmodem 相關選項是否被關閉。處理方式更換支持 Zmodem 的終端或者放棄rz改用scp。6.3 庫文件、大文件傳輸失敗或中斷現象上傳.so庫文件、幾十 MB 以上的安裝包時傳輸中途卡住或者傳完后文件無法使用終端提示傳輸失敗。原因使用了 ASCII 傳輸模式二進制內容被換行符轉換破壞。本地終端對 Zmodem 大文件的緩沖和超時設置不合適。網絡不穩定Zmodem 重傳超時后客戶端沒有正確處理。服務器磁盤空間不足或 inode 耗盡。檢查方式df -h df -i處理方式使用rz -be重試。大文件先壓縮再傳或者拆分成多個分片。生產環境直接使用scp或rsync不要依賴終端 Zmodem 傳輸大文件。6.4 上傳后文件為空或亂碼現象文件傳上去了也有正確文件名但打開內容是亂碼或者file命令識別不出類型。原因rz使用了-aASCII 模式把二進制文件里的部分字節轉換掉了。Windows 和 Linux 的 CRLF 換行差異是常見觸發因素。處理刪除服務器上的文件使用rz -b重新上傳然后對比兩端md5sum。6.5 權限不足導致的寫入失敗現象上傳時提示 permission denied或者傳輸結束后目標位置沒有出現文件。原因當前用戶沒有目標目錄的寫權限。檢查方式ls -ld /tmp/upload處理方式切換到有權限的目錄或者調整目錄權限。如果你使用 sudo 執行rz要注意 sudo 會把當前工作目錄帶到 root 環境實際落盤位置可能變成/root。更好的寫法是sudo bash -c cd /目標目錄 rz這樣可以保證文件進入預期目錄同時以 root 權限完成寫入。6.6 排查順序清單遇到rz相關問題時建議按這個順序排查確認rz命令是否存在。確認終端是否支持 Zmodem。確認pwd明確當前工作目錄。確認目標目錄有寫權限。確認文件沒有損壞使用file和md5sum。檢查磁盤空間、網絡穩定性、終端傳輸配置。如果問題依舊換scp或rsync先保證業務能繼續。7. 什么時候不該用rz選型對比和生產建議7.1 rz/sz 與 scp、sftp、rsync 的對比工具交互性適合場景主要限制rz/sz交互式小文件臨時上傳下載依賴終端支持難以自動化scp命令式單文件、多文件直接傳輸不支持增量同步和斷點續傳sftp交互式/命令式文件管理、上傳下載比 rz 通用適合腳本集成rsync命令式大量文件、目錄同步上手成本略高但適合生產rz的優勢是方便劣勢則是自動化能力弱。你在終端里操作時它很好用但一旦要放到 CI/CD 流水線、定時任務或無人值守腳本里rz就基本不適合了。7.2 生產環境的上傳推薦生產環境上傳文件時優先考慮以下方式一次性發布包使用scp上傳例如scp app.tar.gz userserver:/data/release/。大量文件同步使用rsync -avz --progress --partial支持斷點續傳和增量同步。需要批量交互使用sftp腳本可用-b參數指定命令文件。涉及對象存儲或云環境使用云廠商 CLI 工具把文件先傳到 OSS/S3再從服務器端拉取。這些方式比rz更適合記錄日志、控制權限和接入流水線。學習rz的目的是理解它在方便場景下的價值而不是把它當成生產環境的萬能上傳工具。7.3 自動化腳本中的 rz 注意事項不要在無人值守腳本里直接執行rz。rz依賴交互式 TTY 和本地終端的 Zmodem 支持腳本環境下它通常卡在waiting to receive直到超時既不完成傳輸也不退出。如果腳本確實需要從本地傳輸文件到服務器改寫為scp或rsync更可靠。例如scp -i ~/.ssh/id_rsa app.tar.gz deploytarget:/opt/app/如果用rsyncrsync -avz --partial app.tar.gz deploytarget:/opt/app/這樣的命令可記錄、可重試、可監控也方便接入日志系統。7.4 安全審計和文件完整性建議即使你選擇使用rz也要注意幾點不要讓用戶直接在業務目錄執行rz最好先上傳到專用臨時目錄比如/tmp/upload確認文件名和校驗值后再移動到目標位置。上傳后執行sha256sum或md5sum與本地比對避免只憑“傳輸成功”提示做判斷。對上傳目錄的權限進行控制避免所有用戶都能寫入尤其是 web 服務可讀寫目錄防止文件被替換。不要把rz包裝成無人值守服務來使用它本來就是終端交互工具不適合作為系統級上傳通道。8. 擴展閱讀從rz延伸到常用 Linux 命令的學習方法rz只是眾多 Linux 命令中的一條但它能反映出一個學習思路一條命令不是一個孤立的單詞而是由協議、依賴、參數、目錄規則和替代方案組成的一整條鏈路。學習rz時你會接觸到 lrzsz 軟件包、Zmodem 協議、終端支持程度、pwd目錄定位、md5sum校驗、scp/rsync文件傳輸對比這些知識在運維和日常開發中都會反復使用。如果你打算繼續深入可以按下面路徑練習在測試服務器上執行rz -be和rz --help把參數表過一遍。上傳一個文本文件和一個二進制文件分別觀察-a與-b的區別。用md5sum和file驗證上傳結果。用scp和rsync完成同樣的文件傳輸對比使用體驗。把兩條命令放進腳本確認rz在非交互環境下確實不適用而scp和rsync可以穩定運行。對初學者來說最重要的不是背下所有選項而是養成“命令執行后如何驗證”的習慣。以后無論使用rz、scp還是rsync都會先考慮文件最終落在哪、權限是否正確、內容有沒有損壞、日志能不能追蹤到。這就是比記住一條命令更有價值的工程能力。