tmux终端复用和会话管理

2025-04-28 21:13:00
丁国栋
原创 71
摘要:本文介绍终端复用和会话管理的工具,tmux、secreen和nohup等。

通过ssh登录服务器后如何在一个窗口内划分多个窗口,比如把一个屏幕拆分成四块,这样就可以同时看四个命令行的交互结果

这种场景经常用于实时调试(例如边调试边查看日志输出或者性能情况)或者多任务操作(一个窗口内操作不同的服务)。

可以通过以下几种方法在 SSH 登录后实现一个窗口内划分多个终端窗口(pane, 窗格)的效果:


方法 1:使用终端复用工具(推荐) 1. tmux(最灵活)

tmux:功能强大,适合长期维护的会话。

  • 安装 tmux:

    sudo apt install tmux # Debian/Ubuntu sudo yum install tmux # CentOS/RHEL
  • 基本操作:

    • 启动新会话:tmux

    • 横向分割:Ctrl + B 后按 %

    • 纵向分割:Ctrl + B 后按 "(双引号)

    • 切换窗口:Ctrl + B + 方向键

    • 创建新窗口:Ctrl + B + c

    • 滚动查看历史:Ctrl + B + [,按 q 退出

    • 退出会话(后台运行):Ctrl + B + d

    • 列出会话:tmux ls 或者 tmux list-sessions

    • 重新连接会话:tmux attachtmux attach -t 0,0 就是会话1

  • 进阶技巧:

    • 支持自定义布局(如四宫格),通过 tmux split-window 命令组合实现。

    • 配置文件(~/.tmux.conf)可绑定快捷键。

2. screen(传统工具)

  • 安装:

    sudo apt install screen
  • 分割窗口:

    • Ctrl + A + |:垂直分割

    • Ctrl + A + S:水平分割(需大写)

    • 切换区域:Ctrl + A + Tab

    • 关闭当前区域:Ctrl + A + X


方法 2:SSH 客户端自带分屏 部分 SSH 客户端支持本地分屏(无需服务器配置):

  • Windows:

    • MobaXterm:直接拖拽标签页分栏。

    • Tabby:支持面板分割(快捷键 Ctrl + Shift + P)。

  • macOS/Linux:

    • iTerm2(macOS):Cmd + D(垂直分割),Cmd + Shift + D(水平分割)。

    • Terminator(Linux):Ctrl + Shift + E(垂直),Ctrl + Shift + O(水平)。


tmux如果有多个会话,如何恢复连接至某个特定的会话?

tmux 中,如果有多个会话(session),可以通过以下方法恢复连接到特定的会话:


1. 查看所有会话列表 首先,列出当前存在的所有 tmux 会话:

tmux list-sessions

或简写:

tmux ls

输出示例:

session1: 1 windows (created Tue Oct 10 14:00:00 2023) session2: 2 windows (created Tue Oct 10 15:00:00 2023)
  • 每行显示一个会话的名称、窗口数量及创建时间。

2. 连接到指定会话 方法 1:通过会话名称连接

tmux attach -t <session-name>

示例:

tmux attach -t session2
  • -t 表示目标(target),后接会话名称。

方法 2:通过会话编号连接 如果会话没有自定义名称(默认以数字编号),可以用编号连接:

tmux attach -t 0 # 连接到第一个会话

3. 在已连接的 tmux 中切换会话 如果已处于某个 tmux 会话中,无需退出即可切换:

  1. 按下前缀键(默认 Ctrl + B),然后输入 : 进入命令模式。
  2. 输入以下命令:

    switch-client -t <session-name>

    示例:

    switch-client -t session2

4. 会话管理常用命令

命令 作用
tmux new -s <name> 创建新会话并命名
tmux rename-session -t <old-name> <new-name> 重命名会话
tmux kill-session -t <name> 终止指定会话
tmux kill-server 终止所有会话(慎用)

5. 实用技巧 自动连接常用会话~/.bashrc~/.zshrc 中添加别名快速连接:

alias tmux-session1="tmux attach -t session1"

之后只需输入 tmux-session1 即可快速恢复。

会话持久化 即使关闭终端或断开 SSH,tmux 会话仍会在后台运行。重新登录后直接 attach 即可恢复工作环境。


总结

  • 恢复会话:tmux attach -t <name>

  • 切换会话:Ctrl + B + : + switch-client -t <name>

  • 管理会话:tmux ls(查看)、tmux kill-session(删除)

掌握这些操作后,可以轻松在多个 tmux 会话间自由切换!

假设使用tmux分割了4个窗口,如何使用tmux将一个窗口最大化,然后再恢复到之前的四分窗口或者切换到另一个窗口?

tmux 中,如果你已经将窗口(Window)分割成 4 个窗格(Panes),可以通过以下方法最大化当前窗格,然后恢复原布局或切换到其他窗格:


1. 最大化当前窗格(Zoom In)

  • 快捷键:

    • 先按 Ctrl + B(前缀键),然后按 z(Zoom)。

    • 效果:当前窗格会全屏显示,其他窗格暂时隐藏。

  • 命令行方式(在 tmux 会话内输入):

    :resize-pane -Z

2. 恢复原布局(Zoom Out)

  • 快捷键:

    • 再次按 Ctrl + B + z(Zoom)。

    • 效果:恢复之前的 4 分窗格布局。

  • 命令行方式:

    :resize-pane -Z

    (和最大化是同一个命令,按一次放大,再按一次恢复)


3. 切换到其他窗格

  • 快捷键:

    • Ctrl + B + 方向键(上下左右箭头切换相邻窗格)。

    • Ctrl + B + q:显示窗格编号,然后按数字键快速切换。

  • 命令行方式:

    :select-pane -U # 切换到上方窗格 :select-pane -D # 下方 :select-pane -L # 左侧 :select-pane -R # 右侧

4. 补充技巧 临时查看其他窗格内容(不切换焦点)

  • Ctrl + B + {:将当前窗格与上一个窗格交换位置。

  • Ctrl + B + }:将当前窗格与下一个窗格交换位置。

调整窗格大小

  • Ctrl + B + Alt + 方向键:按方向键调整窗格大小(需在配置中启用)。

  • 或手动输入命令:

    :resize-pane -L 10 # 向左扩展 10 格 :resize-pane -R 10 # 向右扩展 10 格

5. 配置优化(可选)~/.tmux.conf 中添加以下配置,让操作更流畅:

# 启用鼠标支持(点击切换窗格、拖动调整大小) set -g mouse on # 简化窗格切换快捷键(省略前缀键) bind -n C-h select-pane -L # Ctrl+h 切换到左侧窗格 bind -n C-j select-pane -D # Ctrl+j 切换到下方窗格 bind -n C-k select-pane -U # Ctrl+k 切换到上方窗格 bind -n C-l select-pane -R # Ctrl+l 切换到右侧窗格

(修改后需重载配置:tmux source-file ~/.tmux.conf


总结

操作 快捷键 命令
最大化当前窗格 Ctrl + B + z :resize-pane -Z
恢复原布局 Ctrl + B + z :resize-pane -Z
切换窗格 Ctrl + B + 方向键 :select-pane -方向

注:nohup command & 也可以实现后台运行,终端退出也不会结束,但没有多窗口管理功能。

--

发表评论
博客分类