首页 Tmux工具基本使用
文章
取消

Tmux工具基本使用

Tmux介绍

Tmux是一个终端多路复用器,允许一个终端在几个程序之间进行切换。支持在终端进行分离会话,附加会话,切换会话等等操作,是非常好用的开发工具。

类似的工具有GNU Screen, Byobu, Tmuxinator, Terminator, Dvtm。有兴趣可以了解别的工具,本篇文章主要介绍Tmux

基础概念

服务端和客户端

tmux保持它所有的状态在一个主进程中,被称为tmux服务。它运行在后台并且管理所有运行在tmux的程序,并且跟踪他们的输出。当tmux命令运行服务则自动启动,在没有任何运行的程序时会退出。

会话(session),窗口(windows) 和 窗格(pane)

一个会话中存在多个窗口,一个窗口中可以同时存在多个窗格,一个会话可以被一个或多个客户端连接,还可以无连接运行。

总结

描述
客户端用于连接一个tmux会话的终端
会话将一个或多个窗口分组在一起。
窗口将一个或多个窗格分组在一起,并与一个或多个会话相关联。
窗格包含一个终端和正在运行的程序,在一个窗口中显示。

为什么使用tmux

以下是tmux的主要使用方法:

  • 通过在tmux内部运行,保护远程服务器上正在运行的程序免受连接中断的影响。
  • 允许从多个不同的本地计算机访问在远程服务器上运行的程序。
  • 在一个终端中同时处理多个程序和shell,类似于窗口管理器。

使用场景例子如下:

  • 用户使用他们工作电脑上的xterm(1)通过ssh(1)连接到远程服务器,并运行多个程序,例如编辑器、编译器和几个shell。
  • 他们与这些程序进行交互工作,可能开始编译,然后使用tmux关闭xterm(1),回家结束一天的工作。
  • 然后,他们可以从家中连接到同一台远程服务器,附加到tmux,并继续之前的工作。

基本使用

安装

参考安装文档

这里列出文档中的快捷安装方式,如果有疑问则可以参考完整文档

操作系统安装命令
Arch Linuxpacman -S tmux
Debian or Ubuntuapt install tmux
Fedoradnf install tmux
RHEL or CentOSyum install tmux
macOS (using Homebrew)brew install tmux
macOS (using MacPorts)port install tmux
openSUSEzypper install tmux

基本操作

对于Tmux的基本操作需要掌握命令方式以及按键方式,因为在某一些情况下无法输入命令,例如程序运行中并且不断有输出的时候。由于Tmux的操作是有前置按键的概念,因此对于按键方式需要额外注意的部分是按键没有连接符(-)则代表是单独按键,有连接符(-)的情况下才是同时按下按键。

查看帮助

通常Tmux的配置文件在 ~/.tmux.conf中,在终端中可使用tmux lsk -N|more方式查看帮助,进入tmux中可使用 Ctrl+b ? 来查看帮助。

说明

默认的前缀键是C-b,意味着Ctrl键和b键。在tmux中,修饰键用C-表示控制键,用M-表示元键(通常是现代计算机上的Alt键),用S-表示Shift键。

创建会话

1
2
3
4
5
# 创建一个会话,并且在当前窗口中进入会话
tmux new

# 创建一个名称为sessionname会话,并且在当前窗口中进入会话
tmux new -s<sessionname>

附加会话

1
2
3
4
5
6
7
8
# 附加到一个已存在的会话中,没有参数会附加到最近使用并且没有被附加到别的终端的会话中
tmux attach

# 通过名称或者index进行附加
tmux attach -t<sessionidorname>

# 附加到一个会话不会分离已连接到同一会话的其他客户端,将会分离其他终端与此会话
tmux attach -dt<sessionidorname>

分离会话

1
2
3
4
5
6
7
8
# 分离当前会话
tmux detach

# 分离当前会话(按键方式)
C-b d

# 分离其他客户端与会话(按键方式)
C-b D

分离其他客户端与会话的界面中对应案件功能

按键功能
Enter分离当前选择客户端
d分离当前选择客户端,同 Enter
x分离当前选择客户端,并且停止由此客户端发起的命令

删除会话

1
2
# 删除当前会话,并且删除所有会话中所有窗口以及窗格
tmux kill-session

查看会话列表

1
tmux ls

停止所有tmux会话

1
tmux kill-server

创建新窗口

1
2
3
4
5
6
7
8
9
10
11
# 在session中创建新窗口(按键方式)
C-b c

# 在session中创建新窗口并且客户端切换到新创建的windows
tmux neww

# 在session中创建新窗口但是不显示在当前客户端中(-d),并且指定名字(-n)
tmux neww -dn<windowname>

# 在session中创建index为999的窗口
tmux neww -t999

切换窗口

1
2
3
4
5
6
7
# 可以使用select-window子命令

# 切换到窗口0(按键方式)
C-b 0

# 提示切换窗口(按键方式)
C-b '

删除窗口

1
2
# 删除当前窗口(按键方式)
C-b &

分离窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 水平分屏(按键方式)
C-b %

# 水平分屏
tmux split -h

# 垂直分屏(按键方式)
C-b "

# 垂直分频
tmux split -h

# 窗口最外侧下方分屏
tmux split -f

切换窗格

1
2
3
4
5
6
7
8
9
10
11
# 显示窗格序号(按键方式)
C-b q

# 切换窗格到指定序号(按键方式)
C-b q 1

# 下一个窗格(按键方式)
C-b o

# 上一个窗格(按键方式)
C-b b

删除窗格

1
2
# 删除当前活动窗格(按键方式)
C-b x

选择会话,窗口,窗格

1
2
3
4
5
# 选择会话(按键方式)-- 树形展示
C-b s

# 选择会话以及窗口(按键方式) -- 树形展示
C-b w

在以上选择模式下的按键功能如下:

按键功能
Enter改变会话,当前窗口或者活动窗格
Up上一项
Down下一项
Right展开项
Left折叠项
x删除项
q退出树形模式
本文由作者按照 CC BY-NC-SA 4.0 进行授权

[译]每个软件开发人员都必须知道的Unicode和字符集的绝对最低要求(不能有任何借口!)

[译]CNCF Operator 白皮书 - 最终版本