目录
  1. 1. 安装
  2. 2. 基础概念
  3. 3. 会话(session)操作
  4. 4. 窗口(window)操作
  5. 5. 面板(pane)操作
  6. 6. VI模式的面板(pane)间移动
  7. 7. 复制模式
  8. 8. 重启保持会话(session)
  9. 9. SSH Tips
  10. 10. tmux配置

tmux是一款优秀且好用的终端复用工具,有点类似screen。之所以说好用是因为它支持全键盘操作,连屏幕复制都能直接通过键盘完成,以下是平时的一点使用记录。

安装

1
2
Ubuntu:sudo apt-get install tmux
CentOS:yum install tmux

基础概念

 要用好tmux,需要先了解有关tmux的几个基础概念——会话(session)、窗口(window)和面板(pane)

  • 会话(session):直接输入tmux命令即创建了一个会话
  • 窗口(window): window为session的终端,一个session可以包含多个window
  • 面板(pane): 面板为一个窗口分隔出的若干小终端,一个window可以包含多个pane
  • 前缀操作(prefix):tmux的所有键盘操作都必须以前缀操作开始即prefix + command,默认的前缀操作prefix为Ctrl + b(可根据个人习惯更改)

 会话(session)、窗口(window)、面板(pane)之间的关系

1
2
3
4
5
6
session1{
window1{pane1,pane2,...},
window2{pane1,pane2,...},
window3{pane1,pane2,...},
...
}

会话(session)操作

快捷键 操作
tmux ls 列出所有session
tmux attach -t session_name 重新进入指定的session
prefix d 离开session
prefix $ 重命名session
prefix s 查看/切换session
prefix t 查看时间

窗口(window)操作

快捷键 操作
prefix c 新建窗口
prefix , 重命名窗口
prefix & 关闭窗口
prefix 窗口号 切换到窗口号
prefix n 移动到下一个窗口
prefix p 移动到上一个窗口
prefix l 移动到上一次活动的窗口
prefix w 列出所有窗口,并进行选择切换
prefix f 搜索窗口名

面板(pane)操作

快捷键 操作
prefix “ 水平分隔出一个pane
prefix % 垂直分隔出一个pane
prefix 方向键 在所有pane中移动
prefix o 移动到下一个pane
prefix 空格 循环变换pane布局
prefix q 显示pane编号
prefix x 关闭当前pane
prefix ! 将当前pane置于一个新建窗口中
prefix z 临时最大化当前pane/恢复pane原大小
prefix ; 切换到上次使用的pane
prefix { 向前置换当前pane
prefix } 向后置换当前pane

VI模式的面板(pane)间移动

 面板的移动默认都是通过prefix oprefix 方向键来实现,但习惯使用vim的用户会想通过hjkl来移动,可以通过以下配置实现
 配置完后通过prefix hjkl在各面板间移动

1
2
3
4
5
#pane hjkl移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

复制模式

 进入复制模式可以非常方便的复制粘贴屏幕的内容,有点类似与VIM的Ctrl-v模式,首先要在配置文件~/.tmux.conf添加如下配置:

1
2
3
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

  • prefix [进入选择模式
  • v进入vi选择模式
  • 移动选择需要复制的行,可用vim的移动快捷方式
  • y将选择的行复制到tmux的剪贴板中
  • prefix ]粘贴到光标所在处

 或者按行复制

  • prefix [进入复制模式
  • space(空格键),复制每行
  • Enter复制到tmux剪贴板中并退出复制模式
  • prefix ]粘贴到光标所在处

 假若像我这样平时以Ubuntu系统作为桌面系统,还可将tmux粘贴板里的内容复制到系统粘贴板上,只需绑定prefix o快捷键并调用命令即可。
 如下配置完后,如上面prefix [所示操作选择需要复制内容,最后一步并非按prefix ]而是按prefix o既可将tmux粘贴板上的内容复制到系统粘贴板上

1
bind o run-shell "tmux saveb - | xsel -i -b"

重启保持会话(session)

 tmux自身有会话保存功能,只要机器不重启就能保存会话,一旦机器重启会话便会丢失。如果想重启仍保持会话则需要额外的插件,这里使用的是tmux-resurrecttmux-continuum。使用此插件tmux版本需要在1.9以上,Ubuntu14.04默认安装的是1.8版本,所以先对tmux进行升级。也可自行进行编译安装,tmux下载地址

####Ubuntu14.04升级tmux到2.0版本

1
2
3
4
5
6
7
8
sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common
sudo add-apt-repository -y ppa:pi-rho/dev
sudo apt-get update
sudo apt-get install -y tmux=2.0-1~ppa1~t

#查看tmux版本
tmux -V

####安装tmxu-resurrect插件
 此插件是用来保存tmux的会话,安装后按快捷键prefix+Ctrl+s保存会话,tmux-resurrect会将会话以文本方式保存在~/.tmux/resurrect目录中。按prefix+Ctrl+r还原。

1
2
3
mkdir ~/.tmux && cd ~/.tmux
git clone https://github.com/tmux-plugins/tmux-resurrect.git
echo 'run-shell ~/.tmux/tmux-resurrect/resurrect.tmux' >> ~/.tmux.conf

####安装tmux-continuum插件
 此插件会自动完成保存和还原会话的功能,无需手动执行。默认每隔15分钟对会话进行一次保存。
 目前我还是选择手动保存和恢复会话,暂时没有使用此插件

1
2
3
4
5
6
7
8
9
10
cd ~/.tmux
git clone https://github.com/tmux-plugins/tmux-continuum.git
echo 'run-shell ~/.tmux/tmux-continuum/continuum.tmux' >> ~/.tmux.conf
echo "set -g @continuum-restore 'on'" >> ~/.tmux.conf

#若想调整自动保存时间间隔,可将此设置添加到~/.tmux.conf下(改为60分钟自动保存一次)。更多设置查看项目网页
set -g @continuum-save-interval '60'

#若安装插件前已启用tmux,则需重载配置文件
tmux source-file ~/.tmux.conf

SSH Tips

 对于需要登录多台机器进行操作的用户来说,Windows有诸如Xshell等SSH连接管理工具,当远程登录多台机器的时候会有预先填好的标签方便识别每台机器。Linux平台上本来就可通过终端进行远程登录,所以这类软件较少,比较好用的是PAC Manager。但其实使用Tmux就可以完成类Xshell的便签功能,在SSH远程登录的时候修改Tmux的Window Name就能很好的用于识别多台机器。
 个人的做法是先配完SSH无密码登录,然后做alias别名命令,最后是修改Tmux的Window Name。可根据个人需求就行修改,在此仅说说我个人的做法。将tmux_rename_window函数写入到~/.bashrc并配置好alias命令。

1
2
3
4
5
6
7
8
9
10
11
12
tmux_rename_window() {
wname="$1"
sship=$(echo "$wname"|grep -Po "(\d+\.){3}\d+$")

if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window -t${TMUX_PANE} "${wname}"
command ssh root@${sship}
tmux set-window-option automatic-rename "on" 1>/dev/null
fi
}

alias nagios.192.16.1.1='tmux_rename_window nagios.192.16.1.1'

 当想登录192.168.1.1这台部署了nagiso的机器时,终端上输入nagios.192.16.1.1后会将Tmux的Window Name修改成nagios.192.16.1.1并SSH到192.168.1.1机器上去。

 当SSH远程登录多台机器后可以使用prefix w列出所有窗口方便按照Window Name进行快速选择机器进行操作。

tmux配置

 可通过以下命令查看所有终端的颜色:

1
for i in {0..255};do printf "\x1b[38;5;${i}mcolour${i}\n"; done

###我的tmux配置
 tmux的配置文件为~/.tmux.conf,以下是我参考网上修改的配置文件,因为终端颜色显示问题最好先执行此命令echo "alias tmux='tmux -2'" >> ~/.bashrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
##设置颜色
#set -g default-terminal "screen-256color"
#set -g default-terminal "xterm-256color"
set -g default-terminal "linux"
#set-window-option -g alternate-screen off

set-option -g display-time 5000
##设置windowlist背景前景色
set -wg mode-style bg=green,fg=black

##### 256 ######
# default statusbar colors
set-option -g status-bg colour235 #base02
set-option -g status-fg colour34 #purple
set-option -g status-attr default

# default window title colors
set-window-option -g window-status-fg colour244 #base0
set-window-option -g window-status-bg default

# active window title colors
set-window-option -g window-status-current-fg colour88 #red
set-window-option -g window-status-current-bg colour232 #black

# pane border
set-option -g pane-border-fg colour235 #base02
set-option -g pane-active-border-fg colour196 #base01

# message text
set-option -g message-bg colour235 #base02
set-option -g message-fg colour83 #green

# pane number display
set-option -g display-panes-active-colour colour33 #blue #001
set-option -g display-panes-colour colour166 #orange #141
set -g display-panes-time 5000

# clock
set-window-option -g clock-mode-colour colour64
set-option -g status-right "[#(hostname)] #(date +%H:%M' '%Y-%m-%d)"

#设置前缀
set -g prefix C-o
#解除Ctrl+b 与前缀的对应关系
unbind C-b

#复制
set-window-option -g mode-keys vi
bind-key -t vi-copy 'v' begin-selection
bind-key -t vi-copy 'y' copy-selection

#pane hjkl移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

#调整pane大小
bind -r C-k resizep -U 3
bind -r C-j resizep -D 3
bind -r C-h resizep -L 3
bind -r C-l resizep -R 3

#系统粘贴
#Ctrl+o将tmux粘贴板中的内容复制到系统剪切板中
bind o run-shell "tmux saveb - | xsel -i -b"

#鼠标操作
#1.8
#setw -g mouse-resize-pane on
#setw -g mouse-select-pane on
#setw -g mouse-select-window on
#setw -g mode-mouse on
#1.9 and above
#set-option -g mouse on


#绑定'prefix ;''跳转到上个活动的窗口处'
bind-key \; last-window


#窗口列表在状态栏居中
#set -g status-justify centre

#tmux-resurrect and tmux-continuum
run-shell ~/.tmux/tmux-resurrect/resurrect.tmux
#run-shell ~/.tmux/tmux-continuum/continuum.tmux
#set -g @continuum-restore 'on'

Powered: Hexo, Theme: Nadya remastered from NadyMain