0%

Linux tmux终端复用神器

简介

Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。
使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;
是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。

功能

  • 提供了强劲的、易于使用的命令行界面。
  • 可横向和纵向分割窗口。
  • 窗格可以自由移动和调整大小,或直接利用四个预设布局之一。
  • 支持 UTF-8 编码及 256 色终端。
  • 可在多个缓冲区进行复制和粘贴。
  • 可通过交互式菜单来选择窗口、会话及客户端。
  • 支持跨窗口搜索。
  • 支持自动及手动锁定窗口。

使用

进入tmux面板后,一定要先按ctrl+b,然后松开,再按其他的组合键才生效。

新建会话

第一个启动的 Tmux 窗口,编号是0,第二个窗口的编号是1。
使用编号区分会话,不太直观,更好的方法是为会话起名。
使用下面的指令即可:

1
$ tmux new -s <session-name>

查看会话

查看当前所有的 Tmux 会话

1
2
3
$ tmux ls
# or
$ tmux list-session

分离会话

这个是最常用的方法了,按下Ctrl+b d或者输入tmux detach命令,就会将当前会话与窗口分离。
而此时会话里面的进程依然在后台执行。

参考查看会话来查看所有的会话。

接入会话

attach命令用于重新接入某个已存在的会话,可以通过编号或者会话名来接入

1
2
3
4
5
# 使用会话编号
$ tmux attach -t 0

# 使用会话名称
$ tmux attach -t <session-name>

杀死会话

可以通过tmux kill-session命令用于杀死某个会话,与attach类似,可以通过会话编号与session名来kill

1
2
3
4
5
# 使用会话编号
$ tmux kill-session -t 0

# 使用会话名称
$ tmux kill-session -t <session-name>

切换会话

tmux switch命令用于切换会话。

1
2
3
4
5
# 使用会话编号
$ tmux switch -t 0

# 使用会话名称
$ tmux switch -t <session-name>

重命名会话

tmux rename-session命令用于重命名会话。

1
$ tmux rename-session -t 0 <new-name>

上面命令将0号会话重命名。

最简操作流程

综上所述,以下是 Tmux 的最简操作流程。

  1. 新建会话tmux new -s session_name
  2. 在 Tmux 窗口运行所需的程序
  3. 按下快捷键Ctrl+b d将会话分离
  4. 下次使用时,重新连接到会话tmux attach-session -t session_name

窗格操作

Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。

划分窗格

tmux split-window命令用来划分窗格。

1
2
3
4
5
# 划分上下两个窗格
$ tmux split-window

# 划分左右两个窗格
$ tmux split-window -h

移动光标

tmux select-pane命令用来移动光标位置。

1
2
3
4
5
6
7
8
9
10
11
# 光标切换到上方窗格
$ tmux select-pane -U

# 光标切换到下方窗格
$ tmux select-pane -D

# 光标切换到左边窗格
$ tmux select-pane -L

# 光标切换到右边窗格
$ tmux select-pane -R

交换窗格位置

tmux swap-pane命令用来交换窗格位置。

1
2
3
4
5
# 当前窗格上移
$ tmux swap-pane -U

# 当前窗格下移
$ tmux swap-pane -D

窗口管理

除了将一个窗口划分成多个窗格,Tmux 也允许新建多个窗口。

新建窗口

tmux new-window命令用来创建新窗口。

1
2
3
4
$ tmux new-window

# 新建一个指定名称的窗口
$ tmux new-window -n <window-name>

切换窗口

tmux select-window命令用来切换窗口。

1
2
3
4
5
# 切换到指定编号的窗口
$ tmux select-window -t <window-number>

# 切换到指定名称的窗口
$ tmux select-window -t <window-name>

重命名窗口

tmux rename-window命令用于为当前窗口起名(或重命名)。

1
$ tmux rename-window <new-name>

七、其他命令
下面是一些其他命令。

列出所有快捷键,及其对应的 Tmux 命令

$ tmux list-keys

列出所有 Tmux 命令及其参数

$ tmux list-commands

列出当前所有 Tmux 会话的信息

$ tmux info

重新加载当前的 Tmux 配置

$ tmux source-file ~/.tmux.conf

常用到的几个组合键:

快捷键 说明
ctrl+b ? 显示快捷键帮助
ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示
Ctrl+b , 窗口重命名
ctrl+b ! 把当前窗口变为新窗口
ctrl+b “ 模向分隔窗口
ctrl+b % 纵向分隔窗口
Ctrl+b ; 光标切换到上一个窗格
Ctrl+b { 当前窗格与上一个窗格交换位置
Ctrl+b } 当前窗格与下一个窗格交换位置
ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示
ctrl+b ! 把当前窗口变为新窗口
ctrl+b “ 模向分隔窗口
ctrl+b % 纵向分隔窗口
ctrl+b q 显示分隔窗口的编号
ctrl+b o 跳到下一个分隔窗口。多屏之间的切换
ctrl+b 上下键 上一个及下一个分隔窗口
ctrl+b C-方向键 调整分隔窗口大小
ctrl+b & 确认后退出当前tmux
ctrl+b [ 复制模式,即将当前屏幕移到上一个的位置上,其他所有窗口都向前移动一个。
ctrl+b c 创建新窗口
ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
ctrl+b n 选择下一个窗口
ctrl+b l 最后使用的窗口
Ctrl+b o 光标切换到下一个窗格
ctrl+b n 选择下一个窗口
ctrl+b l 最后使用的窗口
ctrl+b p 选择前一个窗口
ctrl+b w 以菜单方式显示及选择窗口
ctrl+b s 以菜单方式显示和选择会话。这个常用到,可以选择进入哪个tmux
ctrl+b t 显示时钟。然后按enter键后就会恢复到shell终端状态
Ctrl+b q 显示窗格编号
Ctrl+b x 关闭当前窗格
Ctrl+b z 当前窗格全屏显示,再使用一次会变回原来大小
Ctrl+b 光标切换到其他窗格。是指向要切换到的窗格的方向键,比如切换到下方窗格,就按方向键↓
Ctrl+b Ctrl+o 所有窗格向前移动一个位置,第一个窗格变成最后一个窗格
Ctrl+b Alt+o 所有窗格向后移动一个位置,最后一个窗格变成第一个窗格
Ctrl+b Ctrl+ 按箭头方向调整窗格大小
Ctrl+b 切换到指定编号的窗口,其中的是状态栏上的窗口编号

基本概念

tmux有三个基本概念:

  • 会话(Session)
  • 窗口(Window)
  • 面板(Pane)

窗格(Pane)操作

  • % 左右平分出两个窗格
  • “ 上下平分出两个窗格
  • x 关闭当前窗格
  • { 当前窗格前移
  • } 当前窗格后移
  • ; 选择上次使用的窗格
  • o 选择下一个窗格,也可以使用上下左右方向键来选择
  • space 切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1 至 ⌥5来切换
  • z 最大化当前窗格,再次执行可恢复原来大小
  • q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格

窗口(window)操作

tmux 除了窗格以外,还有窗口(window) 的概念。依次使用以下快捷键来熟悉 tmux 的窗口操作:

  • c 新建窗口,此时当前窗口会切换至新窗口,不影响原有窗口的状态
  • p 切换至上一窗口
  • n 切换至下一窗口
  • w 窗口列表选择,注意 macOS 下使用 ⌃p 和 ⌃n 进行上下选择
  • & 关闭当前窗口
  • , 重命名窗口,可以使用中文,重命名后能在 tmux 状态栏更快速的识别窗口 id
  • 0 切换至 0 号窗口,使用其他数字 id 切换至对应窗口
  • f 根据窗口名搜索选择窗口,可模糊匹配

Session操作

刚说完flag就倒了,本地使用还好,SSH的时候session真的必不可少。

下面列出一些session的操作

启动新会话:

1
tmux [new -s 会话名 -n 窗口名]

恢复会话:

1
tmux at [-t 会话名]

列出所有会话:

1
tmux ls

关闭会话:

1
tmux kill-session -t 会话名

关闭所有会话:

1
tmux kill-server
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道