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 Linux | pacman -S tmux |
Debian or Ubuntu | apt install tmux |
Fedora | dnf install tmux |
RHEL or CentOS | yum install tmux |
macOS (using Homebrew) | brew install tmux |
macOS (using MacPorts) | port install tmux |
openSUSE | zypper 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
|
查看会话列表
停止所有tmux会话
创建新窗口
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
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 | 退出树形模式 |