tmux是一款优秀的终端复用软件,它可以在一个ssh连接中,把窗口分隔成几块,在ssh断线时,可以保存现场,尤其适用在远程ssh时使用.
tmux结构
tmux是典型的c/s结构,它的结构如下.
tmux由session、window、panel组成,tmux里会有许多session,每个session里又有许多个window,每个window由多个panel组成.
当第一个session创建时,tmux server就开始在后台运行,直接最的一个session断开为止.
安装
mac
brew install tmux
ubuntu
sudo apt-get install tmux
开始使用
启动tmux
tmux
tmux里的所有操作都要先按一个激活键,类似于vi里的esc,默认的激活键是ctrl+b.输入ctrl+b,然后再输入?,即可查询所有的键位设置
session操作
c-b s 查看/切换session
c-b d 离开(detach)session
c-b $ 重命名当前session
tmux ls 列出会话
tmux attach -t session 进入某个会话
tmux -r 连接上个断开的session
tmux new -s session -d 在后台建立会话
窗口操作
c-b c 创建一个新窗口
c-b & 关闭当前窗口
c-b p 切换到上一个窗口
c-b n 切换到下一个窗口
c-b , 重命名当前窗口
c-b w 列出所有窗口
c-b 0~9 选择0~9对应的窗口
c-b opt+方向键 调整panel的大小(一次调整5%)
c-b ctrl+方向键 调整panel的大小(一次调整1%)
panel操作
c-b % 水平分割窗口
c-b " 竖直分割窗口
c-b h 将焦点移入左侧的panel
c-b j 将焦点移入下方的panel
c-b l 将焦点移入上方的panel
c-b k 将焦点移入右方的panel
c-b q 显示panel的编号
c-b o 切换到下一个panel
c-b } 与下一个panel交换位置
c-b { 与上一个panel交换位置
复制模式(滚屏)
滚屏需要进入copy-mode,然后就可以用方向键来滚动屏幕,可以配置成vi快捷键的模式,非常方便
c-b [ 进入复制模式
space 选择要复制的内容
c-b ] 粘贴
q 退出复制模式
配置
tmux的配置文件在~/.tmux.conf,修改后可以通过重启tmux或者source-file ~/.tmux.conf来导入配置
默认的激活键ctrl+b之间太远,有许多人建议改成ctrl+a,但这样会和emacs的快捷键冲突,所以用ctrl+w应该会更好些
其他的配置这时就不仔细说了,可以参数网上的配置:
#设置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
#设置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-interval 60
set -g status-justify centre
#开启window事件提示
setw -g monitor-activity on
set -g visual-activity on
高级功能
- tmux可以在启动时设置各种参数,如指定session/window的名字,或者指定启动时要执行的命令,如
tmux new-session -s work -n mysql -d ‘mysql’
- tmux可以把同一条命令发给多个终端,比如在多台相同环境的机器上,只用输入一次命令即可,首先在一个窗口中开两个面板,并分别连到几个机器,然后执行下面的命令开/关panel的同步模式,开启后,在一个面板中的命令,也会同步输入到另一个面板中
c-b :set synchronize-panes
要关闭同步输入,只需要再次输入这个命令就可以了
- 永不断线
可以在一台服务器上创建一个tmux进程,然后远程连接操作tmux,通过tmux来进行操作,这样在ssh重连之后,attach tmux就可以了
也可以在跳板机上搞一个tmux,再通过这个tmux来连接其他的机器.这样做的缺点是,一段时间没有操作,tmux到服务器的ssh会自动断掉