tmux使用参考


tmux源于OpenBSD,用于替代GNU的screen,tmux=terminal multiplexer。即使非正常掉线也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失。
tmux使用C/S模型构建,主要包括以下单元模块:
server:服务器:输入tmux命令时就开启了一个服务器。
session:会话:一个服务器可以包含多个会话。
window:窗口:一个会话可以包含多个窗口。
pane:面板:一个窗口可以包含多个面板。

tmux命令启动一个服务
一个服务可以有多个session
一个session有以多个窗口
一个窗口有多个pane
tmux的结构包括会话(session)、窗口(window)、窗格(pane)三部分,会话实质是伪终端的集合,每个窗格表示一个伪终端,多个窗格展现在一个屏幕上,这一屏幕就叫窗口。基本的操作无非就是对会话、窗口、窗格进行管理,包括创建、关闭、重命名、连接、分离、选择等等。一般使用命令和快捷键进行操作,可在系统shell终端和tmux命令模式(类似vim的命令模式)下使用命令,或者在tmux终端使用快捷键。tmux默认的快捷键前缀是ctrl+b(下文用prefix指代),按下前缀组合键后松开,再按下命令键进行快捷操作,比如使用prefix d分离会话(应该写作prefix d而不是prefix+d,因为d键不需要与prefix同时按下)。

tmux命令都具有一个前缀命令(PREFIX),默认的是ctrl+b,可以自行修改;如想改为ctrl+a,可 在~/.tmux.conf中加入如下行,没有~/.tmux.conf文件自己建立一个即可。
set -g prefix C-b
unbind C-b
任何命令前都需要ctrl+a,然后再按其他的键发出具体的操作命令,更多命令请看tmux参考手册。
主要的快捷键就是ctrl+b 了,最常用的功能总结如下:
tmux attach #恢复
tmux -2 # 以256终端运行
C-b d # 返回主 shell,tmux 依旧在后台运行,里面的命令也保持运行状态
tmux ls # 显示已有tmux会话(C-b s)
tmux attach-session -t 数字 # 选择tmux
tmux new-session -s session-name
tmux kill-session -t session-name
tmux attach -t session #进入某个会话
更多功能:
C-b ? // 显示快捷键帮助
C-b C-o //调换窗口位置
C-b 空格键 //采用下一个内置布局
C-b ! // 把当前窗口变为新窗口
C-b " // 模向分隔窗口
C-b % // 纵向分隔窗口
C-b q // 显示分隔窗口的编号
C-b o // 跳到下一个分隔窗口
C-b 上下键 // 上一个及下一个分隔窗口
C-b C-方向键 //调整分隔窗口大小
C-b & // 确认后退出 tmux
C-b c // 创建新窗口
C-b 0~9 //选择几号窗口
C-b c // 创建新窗口
C-b n // 选择下一个窗口
C-b l // 最后使用的窗口
C-b p // 选择前一个窗口
C-b w // 以菜单方式显示及选择窗口
C-b s // 以菜单方式显示和选择会话
C-b t //显示时钟
C-b [ //复制(空格开始)
C-b ] //粘贴(回车结束)
C-b , //给当前窗口改名
C-b d //挂起,临时断开会话
c-b x 关闭当前光标处的小窗口
c-b s 选择attach的会话
查看历史记录
因为一些命令执行的时候,显示结果总会超过一屏,可以使用以下指令向上翻页以看到前面的东西:
C-b pageup/pagedown
分割/切割视窗
C-b Ctrl按着 + 上下左右, 可以调整视窗大小
C-b s 横切
C-b v 直切 (或 C-b %)
C-b C-o 调换 切割视窗 的 位置
C-b 上下左右 跳到上下左右的分割视窗,切割视窗有些 Default Layout 可以用, 假设我已经切了四个分割视窗.
C-b Esc 1 直的切割视窗排列 (M-1)
C-b Esc 2 横的切割视窗排列 (M-2)
C-b Esc 3 上面一个大的横视窗 + 下面直的三个直视窗 (M-3)
C-b Esc 4 左面一个大的横视窗 + 右面直的三个直视窗 (M-4)
C-b Esc 5 四个视窗各 1/4 (M-5)
多人共同操作界面:screen 有多人可以一起登入看同一个画面的功能,用法:不需要做任何事情,只要每个人登入后,直接 tmux attach 进去,就是多人共同看到的界面,大家都可以操作同一界面。当然也可对tmux进行定制,可将相关的设置定义保存到其配置文件中,这样就不用每次使用时对其配置了。
将其放在用户主目录下'~/.tmux.conf'。
#设置PREFIX为Ctrl-a
set -g prefix C-a
#解除Ctrl-b与PREFIX的对应关系
unbind C-b
#copy-mode将快捷键设置为vi模式
setw -g mode-keys vi
#将r键设置为加载配置文件,并显示"reloaded!"信息
bind r source-file ~/.tmux.conf \; display "Reloaded!"
#设置终端颜色为256色
set -g default-terminal "screen-256color"
#开启status-bar uft-8支持
set -g status-utf8 on
#按键绑定
#选择分割的窗格,像vim那样操作
bind k selectp -U #选择上窗格
bind j selectp -D #选择下窗格
bind h selectp -L #选择左窗格
bind l selectp -R #选择右窗格
#重新调整窗格的大小
bind ^k resizep -U 10
bind ^j resizep -D 10
bind ^h resizep -L 10
bind ^l resizep -R 10
#交换两个窗格
bind ^u swapp -U
bind ^d swapp -D
bind ^a last
bind q killp
#设置pan前景色
set -g pane-border-fg green
#设置pane背景色
set -g pane-border-bg black
#设置活跃pane前景色
set -g pane-active-border-fg white
#设置活跃pane背景色
set -g pane-active-border-bg yellow
#设置消息前景色
set -g message-fg white
#设置消息背景色
set -g message-bg black
#设置消息高亮显示
set -g message-attr bright
#设置status-bar颜色
set -g status-fg white
set -g status-bg black
#设置窗口列表颜色
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
#设置当前窗口在status bar中的颜色
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
#设置状态行(status bar)格式
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
#set -g status-right "#[fg=cyan]%d %b %R"
set -g status-right "#[fg=yellow,bright][ #[fg=cyan]#W #[fg=yellow]]#[default] #[fg=yellow,bright]- %Y.%m.%d #[fg=green]%H:%M #[default]"
set -g status-right-attr bright
set -g status-interval 60
set -g status-justify centre
#开启window事件提示
setw -g monitor-activity on
set -g visual-activity on
面板-pane
如果用过vim,命令sp / vsp一定用的顺手吧,没事就把窗口切成多块。tmux的pane做类似的事情,可以试试下面的命令:
**ctrl+b+其它键:先按ctrl+b一下,然后再按其它键 **
":水平分割
%:竖直分割
x:关闭面板
方向键:选择面板
ctrl+方向键:1个单元格调整面板大小
Alt+方向键:5个单元格调整面板大小
q:显示面板编号
窗口
还记得痛苦的不停开ssh客户端做不同事情吗?干嘛不用窗口呢。所谓窗口就是tab啦,浏览器的tab,vim的tab,很熟悉吧。
c:创建新窗口
&:关闭窗口
,:改变窗口名字
数字键:选择窗口
w:按窗口列表选择窗口
f:在所有窗口中查找指定文本
会话-session
session是一个什么概念了,可以认为是一个工作环境的上下文。官方概念是窗口就是一个伪终端,而session就是一组窗口(伪终端)。
session的好处是:
1.如果客户端掉线了,session仍然保持着
2.多个客户端可以连到同一个session
如果你还对其它的2、3、4记忆犹新的话,那么session就派上用场了:
tmux new -s session-id #建立session
tmux ls #列出session
tmux attach -t session-d #attach session
ctrl+b+d #detach session
对问题4来说,开个session,然后告诉别人session-id。他人attach一下session-id,这样你所做的任何操作,他人都可以看到了。
会话管理
常用命令
tmux new:创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)
tmux new -s freeoasession:创建名为freeoasession的会话
tmux ls:显示会话列表
tmux a:连接上一个会话
tmux a -t freeoasession:连接指定会话
tmux rename -t s1 s2:重命名会话s1为s2
tmux kill-session:关闭上次打开的会话
tmux kill-session -t s1:关闭会话s1
tmux kill-session -a -t s1:关闭除s1外的所有会话
tmux kill-server:关闭所有会话
常用快捷键
prefix s:列出会话,可进行切换
prefix $:重命名会话
prefix d:分离当前会话
prefix D:分离指定会话
窗口管理
prefix c:创建一个新窗口
prefix ,:重命名当前窗口
prefix w:列出所有窗口,可进行切换
prefix n:进入下一个窗口
prefix p:进入上一个窗口
prefix l:进入之前操作的窗口
prefix 0~9:选择编号0~9对应的窗口
prefix .:修改当前窗口索引编号
prefix ':切换至指定编号(可大于9)的窗口
prefix f:根据显示的内容搜索窗格
prefix &:关闭当前窗口
窗格管理
prefix %:水平方向创建窗格
prefix ":垂直方向创建窗格
prefix Up|Down|Left|Right:根据箭头方向切换窗格
prefix q:显示窗格编号
prefix o:顺时针切换窗格
prefix }:与下一个窗格交换位置
prefix {:与上一个窗格交换位置
prefix x:关闭当前窗格
prefix space(空格键):重新排列当前窗口下的所有窗格
prefix !:将当前窗格置于新窗口
prefix Ctrl+o:逆时针旋转当前窗口的窗格
prefix t:在当前窗格显示时间
prefix z:放大当前窗格(再次按下将还原)
prefix i:显示当前窗格信息
其他命令
tmux list-key:列出所有绑定的键,等同于prefix ?
tmux list-command:列出所有命令
常见问题
1、防止tmux的window名称被意外修改
The tmux command for prefix + , can be seen in the list of command, which is displayed when you press prefix + ?
Default should look like this:
bind-key, command-prompt -I #W "rename-window '%%'"
Just cut off the -I #W part from there to get the empty value as default suggestion when renaming.
That is, put this line in your tmux.conf:
bind-key , command-prompt "rename-window '%%'"
and reload the tmux config/ restart the tmux. set-option -g allow-rename off in your .tmux.conf
There are two ways to disable automatic rename.
1. change .bashrc or .zshrc file and add this line
export DISABLE_AUTO_TITLE=true
2. or you can add this line to ~/.tmux.conf file
set-option -g allow-rename off
create it if it does not yet exist
Highly recommend the second option
Also you must reload the tmux config after changing the config.
This can be done either from within the tmux, by pressing Ctrl+B and then : to bring up a command prompt, and typing:
:source-file ~/.tmux.conf
Or simply from a shell:
$ tmux source-file ~/.tmux.conf
参考链接:
使用tmux
Tmux Cheat Sheet
tmux使用C/S模型构建,主要包括以下单元模块:
server:服务器:输入tmux命令时就开启了一个服务器。
session:会话:一个服务器可以包含多个会话。
window:窗口:一个会话可以包含多个窗口。
pane:面板:一个窗口可以包含多个面板。

tmux命令启动一个服务
一个服务可以有多个session
一个session有以多个窗口
一个窗口有多个pane
tmux的结构包括会话(session)、窗口(window)、窗格(pane)三部分,会话实质是伪终端的集合,每个窗格表示一个伪终端,多个窗格展现在一个屏幕上,这一屏幕就叫窗口。基本的操作无非就是对会话、窗口、窗格进行管理,包括创建、关闭、重命名、连接、分离、选择等等。一般使用命令和快捷键进行操作,可在系统shell终端和tmux命令模式(类似vim的命令模式)下使用命令,或者在tmux终端使用快捷键。tmux默认的快捷键前缀是ctrl+b(下文用prefix指代),按下前缀组合键后松开,再按下命令键进行快捷操作,比如使用prefix d分离会话(应该写作prefix d而不是prefix+d,因为d键不需要与prefix同时按下)。

tmux命令都具有一个前缀命令(PREFIX),默认的是ctrl+b,可以自行修改;如想改为ctrl+a,可 在~/.tmux.conf中加入如下行,没有~/.tmux.conf文件自己建立一个即可。
set -g prefix C-b
unbind C-b
此时并没有生效,重启tmux或者在命令模式(按PREFIX:)输入
source-file ~/.tmux.conf任何命令前都需要ctrl+a,然后再按其他的键发出具体的操作命令,更多命令请看tmux参考手册。
主要的快捷键就是ctrl+b 了,最常用的功能总结如下:
tmux attach #恢复
tmux -2 # 以256终端运行
C-b d # 返回主 shell,tmux 依旧在后台运行,里面的命令也保持运行状态
tmux ls # 显示已有tmux会话(C-b s)
tmux attach-session -t 数字 # 选择tmux
tmux new-session -s session-name
tmux kill-session -t session-name
tmux attach -t session #进入某个会话
更多功能:
C-b ? // 显示快捷键帮助
C-b C-o //调换窗口位置
C-b 空格键 //采用下一个内置布局
C-b ! // 把当前窗口变为新窗口
C-b " // 模向分隔窗口
C-b % // 纵向分隔窗口
C-b q // 显示分隔窗口的编号
C-b o // 跳到下一个分隔窗口
C-b 上下键 // 上一个及下一个分隔窗口
C-b C-方向键 //调整分隔窗口大小
C-b & // 确认后退出 tmux
C-b c // 创建新窗口
C-b 0~9 //选择几号窗口
C-b c // 创建新窗口
C-b n // 选择下一个窗口
C-b l // 最后使用的窗口
C-b p // 选择前一个窗口
C-b w // 以菜单方式显示及选择窗口
C-b s // 以菜单方式显示和选择会话
C-b t //显示时钟
C-b [ //复制(空格开始)
C-b ] //粘贴(回车结束)
C-b , //给当前窗口改名
C-b d //挂起,临时断开会话
c-b x 关闭当前光标处的小窗口
c-b s 选择attach的会话
查看历史记录
因为一些命令执行的时候,显示结果总会超过一屏,可以使用以下指令向上翻页以看到前面的东西:
C-b pageup/pagedown
分割/切割视窗
C-b Ctrl按着 + 上下左右, 可以调整视窗大小
C-b s 横切
C-b v 直切 (或 C-b %)
C-b C-o 调换 切割视窗 的 位置
C-b 上下左右 跳到上下左右的分割视窗,切割视窗有些 Default Layout 可以用, 假设我已经切了四个分割视窗.
C-b Esc 1 直的切割视窗排列 (M-1)
C-b Esc 2 横的切割视窗排列 (M-2)
C-b Esc 3 上面一个大的横视窗 + 下面直的三个直视窗 (M-3)
C-b Esc 4 左面一个大的横视窗 + 右面直的三个直视窗 (M-4)
C-b Esc 5 四个视窗各 1/4 (M-5)
多人共同操作界面:screen 有多人可以一起登入看同一个画面的功能,用法:不需要做任何事情,只要每个人登入后,直接 tmux attach 进去,就是多人共同看到的界面,大家都可以操作同一界面。当然也可对tmux进行定制,可将相关的设置定义保存到其配置文件中,这样就不用每次使用时对其配置了。
将其放在用户主目录下'~/.tmux.conf'。
#设置PREFIX为Ctrl-a
set -g prefix C-a
#解除Ctrl-b与PREFIX的对应关系
unbind C-b
#copy-mode将快捷键设置为vi模式
setw -g mode-keys vi
#将r键设置为加载配置文件,并显示"reloaded!"信息
bind r source-file ~/.tmux.conf \; display "Reloaded!"
#设置终端颜色为256色
set -g default-terminal "screen-256color"
#开启status-bar uft-8支持
set -g status-utf8 on
#按键绑定
#选择分割的窗格,像vim那样操作
bind k selectp -U #选择上窗格
bind j selectp -D #选择下窗格
bind h selectp -L #选择左窗格
bind l selectp -R #选择右窗格
#重新调整窗格的大小
bind ^k resizep -U 10
bind ^j resizep -D 10
bind ^h resizep -L 10
bind ^l resizep -R 10
#交换两个窗格
bind ^u swapp -U
bind ^d swapp -D
bind ^a last
bind q killp
#设置pan前景色
set -g pane-border-fg green
#设置pane背景色
set -g pane-border-bg black
#设置活跃pane前景色
set -g pane-active-border-fg white
#设置活跃pane背景色
set -g pane-active-border-bg yellow
#设置消息前景色
set -g message-fg white
#设置消息背景色
set -g message-bg black
#设置消息高亮显示
set -g message-attr bright
#设置status-bar颜色
set -g status-fg white
set -g status-bg black
#设置窗口列表颜色
setw -g window-status-fg cyan
setw -g window-status-bg default
setw -g window-status-attr dim
#设置当前窗口在status bar中的颜色
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
#设置状态行(status bar)格式
set -g status-left-length 40
set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
#set -g status-right "#[fg=cyan]%d %b %R"
set -g status-right "#[fg=yellow,bright][ #[fg=cyan]#W #[fg=yellow]]#[default] #[fg=yellow,bright]- %Y.%m.%d #[fg=green]%H:%M #[default]"
set -g status-right-attr bright
set -g status-interval 60
set -g status-justify centre
#开启window事件提示
setw -g monitor-activity on
set -g visual-activity on
面板-pane
如果用过vim,命令sp / vsp一定用的顺手吧,没事就把窗口切成多块。tmux的pane做类似的事情,可以试试下面的命令:
**ctrl+b+其它键:先按ctrl+b一下,然后再按其它键 **
":水平分割
%:竖直分割
x:关闭面板
方向键:选择面板
ctrl+方向键:1个单元格调整面板大小
Alt+方向键:5个单元格调整面板大小
q:显示面板编号
窗口
还记得痛苦的不停开ssh客户端做不同事情吗?干嘛不用窗口呢。所谓窗口就是tab啦,浏览器的tab,vim的tab,很熟悉吧。
c:创建新窗口
&:关闭窗口
,:改变窗口名字
数字键:选择窗口
w:按窗口列表选择窗口
f:在所有窗口中查找指定文本
会话-session
session是一个什么概念了,可以认为是一个工作环境的上下文。官方概念是窗口就是一个伪终端,而session就是一组窗口(伪终端)。
session的好处是:
1.如果客户端掉线了,session仍然保持着
2.多个客户端可以连到同一个session
如果你还对其它的2、3、4记忆犹新的话,那么session就派上用场了:
tmux new -s session-id #建立session
tmux ls #列出session
tmux attach -t session-d #attach session
ctrl+b+d #detach session
对问题4来说,开个session,然后告诉别人session-id。他人attach一下session-id,这样你所做的任何操作,他人都可以看到了。
会话管理
常用命令
tmux new:创建默认名称的会话(在tmux命令模式使用new命令可实现同样的功能,其他命令同理,后文不再列出tmux终端命令)
tmux new -s freeoasession:创建名为freeoasession的会话
tmux ls:显示会话列表
tmux a:连接上一个会话
tmux a -t freeoasession:连接指定会话
tmux rename -t s1 s2:重命名会话s1为s2
tmux kill-session:关闭上次打开的会话
tmux kill-session -t s1:关闭会话s1
tmux kill-session -a -t s1:关闭除s1外的所有会话
tmux kill-server:关闭所有会话
常用快捷键
prefix s:列出会话,可进行切换
prefix $:重命名会话
prefix d:分离当前会话
prefix D:分离指定会话
窗口管理
prefix c:创建一个新窗口
prefix ,:重命名当前窗口
prefix w:列出所有窗口,可进行切换
prefix n:进入下一个窗口
prefix p:进入上一个窗口
prefix l:进入之前操作的窗口
prefix 0~9:选择编号0~9对应的窗口
prefix .:修改当前窗口索引编号
prefix ':切换至指定编号(可大于9)的窗口
prefix f:根据显示的内容搜索窗格
prefix &:关闭当前窗口
窗格管理
prefix %:水平方向创建窗格
prefix ":垂直方向创建窗格
prefix Up|Down|Left|Right:根据箭头方向切换窗格
prefix q:显示窗格编号
prefix o:顺时针切换窗格
prefix }:与下一个窗格交换位置
prefix {:与上一个窗格交换位置
prefix x:关闭当前窗格
prefix space(空格键):重新排列当前窗口下的所有窗格
prefix !:将当前窗格置于新窗口
prefix Ctrl+o:逆时针旋转当前窗口的窗格
prefix t:在当前窗格显示时间
prefix z:放大当前窗格(再次按下将还原)
prefix i:显示当前窗格信息
其他命令
tmux list-key:列出所有绑定的键,等同于prefix ?
tmux list-command:列出所有命令
常见问题
1、防止tmux的window名称被意外修改
The tmux command for prefix + , can be seen in the list of command, which is displayed when you press prefix + ?
Default should look like this:
bind-key, command-prompt -I #W "rename-window '%%'"
Just cut off the -I #W part from there to get the empty value as default suggestion when renaming.
That is, put this line in your tmux.conf:
bind-key , command-prompt "rename-window '%%'"
and reload the tmux config/ restart the tmux. set-option -g allow-rename off in your .tmux.conf
There are two ways to disable automatic rename.
1. change .bashrc or .zshrc file and add this line
export DISABLE_AUTO_TITLE=true
2. or you can add this line to ~/.tmux.conf file
set-option -g allow-rename off
create it if it does not yet exist
Highly recommend the second option
Also you must reload the tmux config after changing the config.
This can be done either from within the tmux, by pressing Ctrl+B and then : to bring up a command prompt, and typing:
:source-file ~/.tmux.conf
Or simply from a shell:
$ tmux source-file ~/.tmux.conf
参考链接:
使用tmux
Tmux Cheat Sheet