Tmux入门指南

前言

很多时候我们需要通过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 选择0~9对应的窗口

窗格(Pane)管理

  • % 创建一个水平窗格
  • “ 创建一个竖直窗格
  • q 显示窗格的编号
  • o 在窗格间切换
  • } 与下一个窗格交换位置
  • { 与上一个窗格交换位置
  • ! 在新窗口中显示当前窗格
  • x 关闭当前窗格

其他

  • t 在当前窗格显示时间

参考文章

  1. Tmux 入门介绍
  2. Tmux:Linux 从业者必备利器
给我加个菜?