tmux 在生物信息项目中的妙用 —— 尤其是搭配 Claude Code 时
为什么生物信息分析离不开 tmux
生物信息分析很少是"点一下就出结果"的事。一个典型的流程可能是:
- 在服务器上跑 k-mer 计数(几个小时)
- 同时查看中间结果或日志
- 提交另一个任务到不同节点
- 随时要回来看看跑完了没有
- 中间网络断了,但不想从头再来
如果你用过 SSH 直连跑任务,一定遇到过这样的场景:网络波动一下,几个小时的运算白费,终端输出全部丢失。tmux 就是解决这个问题的。
tmux 是什么
tmux 是一个终端复用器(terminal multiplexer)。简单说,它让你在 SSH 登录后启动一个"会话"(session),这个会话里的所有程序不依赖于你的 SSH 连接。即使你关掉电脑、切换网络、或者不小心点了关闭终端,会话里的程序依然在后台继续运行。
对比nohup和screen:
| 方案 | 持久性 | 多窗口 | 分割面板 | 恢复能力 |
|---|---|---|---|---|
nohup | ✅ | ❌ | ❌ | ❌ |
screen | ✅ | ✅ | 有限 | ✅ |
| tmux | ✅ | ✅ | ✅ | ✅ 最强 |
tmux + Claude Code = 绝配
场景一:任务分屏监控
生物信息项目最常见的需求:一边跑流程,一边看日志,一边写下一步脚本。
┌───────────────────────────────┐ │ [0] zsh — SSH to server │ ├───────────────────────────────┤ │ [1] tail -f profiling.log │ ← 实时监控 ├───────────────┬───────────────┤ │ [2] vim │ [3] bash │ │ collect.sh │ du -sh * │ └───────────────┴───────────────┘一个 tmux 窗口,分三四个面板,右下角跑命令,右上角看输出,左边写代码。不需要来回切标签页,不需要反复 SSH 登录。
场景二:先断开,后回来
这是最常用的功能。登录服务器:
sshuser@server tmux new-ssurvey# 创建一个名为 survey 的会话然后在里面跑任务。想断开时,直接关掉终端或按Ctrl+B d。
等你回来:
sshuser@server tmux attach-tsurvey# 一切照旧无论过了多久、网络断了多少次,屏幕上的输出、运行的进程、打开的 vim 编辑器,都在原来的位置等着你。
场景三:Claude Code 的"一对一"会话模式
Claude Code 是交互式 AI 编程助手,它的交互模式是对话式的。这意味着:
- 它会耗时—— 生成代码、分析项目、跑脚本都需要时间
- 上下文很重要—— 前一轮的对话、文件修改、命令执行结果都依赖当前会话
- 不能断—— 断了就丢了上下文
这就导致一个很尴尬的情况:Claude Code 正在帮你分析数据、写一个复杂的脚本,你不敢关终端去吃饭。去接杯水回来,发现 SSH 超时了,一切得重来。
tmux 完美解决了这个问题。
sshserver tmux new-sclaude-work claude# 启动 Claude Code# ... 开始分析项目 ...# Ctrl+B d 断开,放心去吃饭# 回来 ssh + tmux attach -t claude-work# 对话还在、结果还在、进度还在更妙的是,你可以同时开多个 Claude Code 会话:
tmux new-sclaude-survey# 做基因组 surveytmux new-sclaude-assembly# 分析组装结果tmux new-sclaude-hic# 处理 HiC 数据每个会话独立运行一个 Claude Code,互不干扰。在tmux ls里一目了然。
场景四:长时间任务 + Claude Code 协同
生物信息最常见的工作模式:
- 用 Claude Code 写一个批量处理脚本
- 在另一个 tmux 面板里
nohup bash script.sh & - 用 Claude Code 分析脚本输出、调整参数
- 一边看
tail -f监控进度
所有这些都在一个 tmux 窗口的不同面板里完成。Claude Code 可以看到日志输出,可以分析报错信息,可以实时调整下一步的参数。这种"写代码 → 运行 → 看结果 → 调整"的闭环,在 tmux 的分屏模式下极其流畅。
常用 tmux 命令速查
会话管理
tmux new-s<name># 创建新会话(命名)tmuxls# 列出所有会话tmux attach-t<name># 重新连接到会话tmux kill-session-t<name># 杀掉会话快捷键(前缀Ctrl+B)
| 快捷键 | 作用 |
|---|---|
Ctrl+B d | 断开当前会话(detach) |
Ctrl+B c | 创建新窗口(window) |
Ctrl+B n/p | 切换下一个/上一个窗口 |
Ctrl+B , | 重命名当前窗口 |
Ctrl+B % | 垂直分割面板 |
Ctrl+B " | 水平分割面板 |
Ctrl+B 方向键 | 在面板间移动焦点 |
Ctrl+B z | 全屏/还原当前面板 |
Ctrl+B [ | 进入滚动模式(可翻页看历史输出) |
q | 退出滚动模式 |
Ctrl+B s | 可视化选择会话/窗口 |
tmux 配置推荐
在~/.tmux.conf中加入:
# 设置前缀为 Ctrl+A(更方便) set -g prefix C-a unbind C-b bind C-a send-prefix # 开启鼠标支持(可点击切换面板、滚动) set -g mouse on # 增大滚动缓冲区 set -g history-limit 50000 # 状态栏美化 set -g status-bg colour235 set -g status-fg white set -g status-left '#[fg=green](#S) ' set -g status-right '#[fg=yellow]%Y-%m-%d %H:%M '开启鼠标支持后,你可以直接用鼠标点击切换面板、滚动查看历史输出,非常直观。
一个完整的工作示例
# 1. SSH 到服务器sshbioinfo-server# 2. 创建一个名为 project 的会话tmux new-sproject# 3. 分割窗口(Ctrl+B % 或 Ctrl+B ")# 左边面板:启动 Claude Codeclaude# 4. 右边面板再分上下(Ctrl+B ")# 上面:实时查看日志tail-fprofiling.log# 下面:查看磁盘watch-n10df-h# 5. Claude Code 帮你写了脚本后,在下面面板运行bashcollect_stats.sh# 6. 断开去吃午饭# Ctrl+B d# 7. 回来继续tmux attach-tproject# 一切都在老地方,Claude Code 的对话还停留在你离开前小结
对于生物信息分析这种耗时、多任务、依赖上下文的工作模式,tmux 不是"锦上添花",而是基础设施。尤其是和 Claude Code 这样的交互式 AI 工具搭配时——tmux 的持久化会话和灵活的分屏能力,直接把"能跑"变成了"跑得舒服"。
- ✅ 任务持久化:断网不丢进度
- ✅ 多任务并行:一个窗口管理所有任务
- ✅ Claude Code 会话保持:对话上下文完整保留
- ✅ 分屏监控:同时看日志、跑命令、写代码
如果你还在用nohup配合反复 SSH 登录,试试 tmux,体验会完全不同。
