tmux和screen可让长耗时拷贝任务在SSH断开后持续运行:需在复用器会话中启动任务,再用Ctrl+b d(tmux)或Ctrl+a d(screen)detach;二者均提供完整终端上下文,优于nohup。

直接用 tmux 或 screen 挂起长耗时拷贝(比如 rsync、cp -r、scp),核心就两点:任务必须在复用器会话里启动,然后主动 detach——不是靠 Ctrl+Z 或 & 后台化,而是让整个终端环境“持续存活”。下面分场景说明。
用 Tmux 挂起拷贝任务
Tmux 更推荐,尤其对新用户,默认行为更可靠,窗口管理也更直观。
- 新建命名会话:
tmux new -s copy_job(名字建议带用途,如copy_logs) - 在会话中运行拷贝命令,例如:
rsync -av --progress /large/data/ user@remote:/backup/ - 确认命令已开始执行后,按 Ctrl+b 松开 → 再按 d(detach),你会看到提示
[detached] - 此时 SSH 断开、笔记本合盖、甚至本地关机,都不影响 rsync 继续跑
- 之后重连服务器,用
tmux a -t copy_job即可回到原界面,所有输出和进度都还在
用 Screen 挂起拷贝任务
Screen 更轻量,老系统上几乎默认存在,但操作和恢复稍易出错。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 新建命名会话:
screen -S copy_job - 运行拷贝命令,同上
- 按 Ctrl+a 松开 → 再按 d(注意不是 Ctrl+a+d 连按)
- 断开后,用
screen -ls查看会话状态;若显示12345.copy_job (Detached),说明挂起成功 - 恢复:用
screen -r copy_job;如果报错 “There is no screen to be resumed”,先screen -ls看是否残留 Dead 会话,再screen -wipe清理
为什么不能只用 nohup 或 &?
nohup 能保进程不死,但有明显短板:
- 看不到实时进度(
nohup rsync ... &后 stdout 被重定向到nohup.out,得手动tail -f nohup.out) - 无法交互:如果 rsync 中途需要输入密码或确认(比如首次 ssh 连接),nohup 下会卡住
- 没法随时切回去看日志、查进度、甚至中断重试——而 tmux/screen 提供完整终端上下文
小技巧:拷贝中想监控又不打断?
在 tmux 里可以边拷贝边监控:
- 按 Ctrl+b % 垂直分屏
- 下屏运行:
watch -n2 'nvidia-smi | head -10'(查 GPU)或htop(查 CPU/内存) - 按 Ctrl+b o 在窗格间切换,不用退出当前 rsync










