前言
很多时候我们需要通过SSH连接服务器进行一些操作,费了好长时间调好了程序,一顿饭的功夫SSH超时了(broken pipe),重新连上去正在运行的程序也都没了,一切又得从头再来。这个时候你就非常需要用到tmux了,用tmux在服务器上创建一个会话(Session),在该会话中进行操作,你可以随时随地断开和重新连接会话(Session),即便是SSH中断了你在远程服务器上的工作状态也可以持久化地保存。
简介
tmux 是一个优秀的终端复用器类自由软件,功能类似 GNU Screen,但使用 BSD 许可发布。用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个任务时非常方便。
功能特性:
- 一个虚拟终端可以管理多个会话,窗口和面板
- 支持分屏,同时处理多个操作
- 窗口、面板可以在会话间自由移动,切换
- 丰富灵活的状态行展示
- 支持自定义快捷键,依照个人习惯配置令操作更高效
- 不受断网影响,避免丢失重要工作进度
- 结对编程,方便演示与协作
- 自带复制粘贴缓冲区管理
- 脚本化配置,可配置多种操作环境
层次结构
tmux的主要元素分为三层:
- Session 一组窗口的集合,通常用来概括同一个任务。session可以有自己的名字便于任务之间的切换。
- Window 单个可见窗口。Windows有自己的编号,也可以认为和ITerm2中的Tab类似。
- Pane 窗格,被划分成小块的窗口,类似于Vim中 C-w +v 后的效果。
安装tmux
Linux安装
1 | sudo apt-get install tmux |
Mac OS安装
1 | brew install tmux |
基本操作
首先在tmux会话中使用的快捷键都需要一个前缀来激活,前缀默认为Ctrl+b(即:在按快捷键之前需要按一下前缀)。
查询所有会话(Session)
在命令行输入下列命令查询当前所有会话。
1 | tmux ls |
你会发现no server running on /private/tmp/tmux-501/default
,这是因为我们还没有创建会话(Session)。
创建会话(Session)
1 | tmux new -s session-name |
通过上述命令新建一个有特定名称的会话。
一般情况下我们不会使用下列命令创建不指定名字的会话。
1 | tmux new |
断开会话(Session)
使用下列命令断开当前会话(断开会话并不影响会话中运行的程序,断开后还可以重新连接)
1 | tmux detach |
或者使用tmux中的快捷键
1 | Ctrl+b d(即先使用Ctrl+b快捷键前缀,然后再按d) |
重新连接会话(Session)
在命令行输入tmux a
即可快速连接第一个所有会话中的第一个。
1 | tmux a |
或者通过会话名连接该一个会话
1 | tmux a -t session-name |
关闭会话
通过下列命令关闭会话后,会话中的程序也会全部关闭。
1 | tmux kill-session -t session-name |
当然你也可以通过直接按Ctrl+d
关闭会话、窗口或窗格。
tmux中的快捷键参考
注意以下快捷键适用于tmux会话中,使用前皆需要按下快捷键前缀Ctrl+b
。
帮助
- ? 获取帮助信息
会话(Session)管理
- s 列出所有会话
- $ 重命名当前的会话
- d 断开当前的会话
窗口(Window)管理
- c 创建一个新窗口
- , 重命名当前窗口
- w 列出所有窗口
- % 水平分割窗口
- “ 竖直分割窗口
- n 选择下一个窗口
- p 选择上一个窗口
- 0
9 选择09对应的窗口
窗格(Pane)管理
- % 创建一个水平窗格
- “ 创建一个竖直窗格
- q 显示窗格的编号
- o 在窗格间切换
- } 与下一个窗格交换位置
- { 与上一个窗格交换位置
- ! 在新窗口中显示当前窗格
- x 关闭当前窗格
其他
- t 在当前窗格显示时间