tmux是linux中一种管理窗口的程序。当执行多任务时,不用开启多个客户端来回使用Alt + Tab
切换,开一个客户端即可。而且,所有的状态都可以保存。
这里的状态,包括:
- 当前的窗口内容。例如,左边窗口使用
VI
编辑代码,右边是调试信息。当关闭客户端,重新连接时,左右的窗口保持不变。 - 当前的窗口的工作状态。尤其是多任务时的状态,此状态不收客户端连接Session状态的干扰,不管是前台Job还是后台Job(使用
[commander] &
执行命令)。省去了我们遗忘使用nohup
或者at
指令时,客户端异常断掉带来的麻烦。
tmux的基本概念
- Session:连接。是一组Window的集合。
- Window:单个可见窗口。类似一个标签页。是一组Pane的组合。
- Pane:窗格。可以理解为一个分屏。
三个元素在tmux的具体展现如下图,盗取自伯乐在线。
tmux的安装
一般采用网络直接安装的方式。版本为1.8。1
# yum install tmux
或者1
$ sudo apt-get install tmux
tmux的常用命令
以注释的方式解释命令的含义。1
2
3
4
5
6
7$ tmux # 开启一个新的Session
$ tmux ls # 查看各个Session的信息,详细命令为tmux list-session
0: 2 windows (created Mon Jul 20 14:08:12 2015) [191x45]\ (attached) # Session的编号(或名称)为0,有2个Window,当前连接(attached)状态。
$ tmux a -t 0 # 连接编号为0的Session,可简写为tmux attach-session -t 0
$ tmux kill-session -t 0 # 关闭编号为0的session,session的所有状态都会删除。不加-t则删除全部session
$ tmux kill-serser # 关闭tmux服务
$ tmux start # 或start-server 重启tmux服务,重新读取配置文件
其他关于Session、Window和pane的操作,建议使用快捷键以及配置操作。
tmux的快捷键
本章prefix表示Ctrl + b
。下一章介绍如何更换prefix。
- 有关Session的快捷键。
快捷键 | 操作 |
---|---|
prefix s | 查看/切换Session |
prefix d | 离开Session |
prefix $ | 重命名当前Session |
- 有关Window的快捷键
快捷键 | 操作 |
---|---|
prefix c | 创建Window |
prefix & | 关闭Window |
prefix n | 切换到下一个Window |
prefix p | 切换到上一个Window |
prefix Window号 | 切换Window号 |
prefix w | 查看/切换Window |
- 有关Pane的快捷键
快捷键 | 操作 |
---|---|
prefix % | 垂直拆分一个Pane |
prefix “ | 水平拆分一个Pane |
prefix q | 显示Pane编号 |
prefix o | 切换到下一个Pane |
prefix z | 切换Pane的全屏 |
prefix Alt + 方向 | 调整Pane的大小 |
tmux的基本配置
编辑$HOME/.tmux.conf
文件,配置内容如下。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# 设置Prefix为Ctrl+x
set-option -g prefix C-x
unbind C-b
bind C-x send-prefix
# 使用hjkl进行Pane的选择
bind-key k select-pane -U
bind-key j select-pane -D
bind-key h select-pane -L
bind-key l select-pane -R
# 开启窗口的UTF8支持
# set-window-option -g utf8 on # 2017.01.19: Deprecated
# 复制模式中的默认键盘布局;可以设置为vi或emacs
set-window-option -g mode-keys vi
# 使用快捷键r重新读取配置文件
bind r source-file ~/.tmux.conf\; display "Reloaded!"
# 设置Window和Pane开始编号为1
set-option -g base-index 1
set-window-option -g pane-base-index 1
tmux的复制粘贴
本章介绍的Buffer类似加强版剪贴板,可以显示并选择多个剪贴内容。
- 有关复制粘贴快捷键
快捷键 | 操作 |
---|---|
prefix [ | 开启复制模式 |
prefix ] | 粘贴 |
prefix = | 显示并选择Buffers(q退出) |
prefix # | 仅显示Buffers |
prefix - | 删除编号为0的Buffers |
开启复制模式后,可以用VI的移动快捷键HJKL
移动到需要复制的位置,按空格键
开启复制,移动到复制结束的位置,按Enter
键确认,按Esc
键取消。
按Esc
推出复制模式。
tmux的显示配置
以下配置可让tmux显示的更加漂亮,参考1。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# 显示
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
setw -g window-status-current-fg white
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green
set -g pane-border-bg black
set -g pane-active-border-fg white
set -g pane-active-border-bg yellow
set -g message-fg white
set -g message-bg black
set -g message-attr bright
# set -g status-utf8 on # 2017.01.19: Deprecated
set -g status-interval 60
set -g status-left-length 20
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-justify centre
tmux的问题
Buffer和系统剪贴板无法共享
如果是使用PuTTY链接到远程Server,使用tmux时,鼠标拖动复制是大麻烦。因为会连同其他窗格的内容一起拖动进来。
解决方法:(A) 重新开启一个窗口,开启VIM
,在编辑模式下进行粘贴,然后再用鼠标拖动复制。(B) PuTTY使用Alt+鼠标
进行复制。不支持滚屏
当需要查看当前显示之前的内容,直接滚动鼠标滚轴不会得到我们想要的结果。
解决方法:开启复制模式prefix [
,使用PageUP
和PageDown
进行翻页操作。
如果是登录系统界面开启Terminal使用tmux,可以增加如下配置,增强鼠标操作。
2015.12.25更新:最新版本(v2.1)的tmux有可能弃用了下面的鼠标支持设置。1
2
3
4
5# 鼠标支持 -- v2.1已弃用 Deprecated
set -g mouse-resize-pane on # 鼠标调整Pane大小
set -g mouse-select-pane on # 鼠标选择Pane
set -g mouse-select-window on # 鼠标选择Window
set -g mode-mouse on # 鼠标选择和滚动直接开启复制模式
2015.12.25更新:如果启动tmux时出现unknow option
的字样时,请更新鼠标支持配置。1
2
3# 鼠标支持
#set -g mouse-utf8 on # V2.3已弃用 Deprecated
set -g mouse on
tmux的源码安装
2015.08.03更新本章。
CentOS6.X的yum源没有tmux,需要源码编译安装。
A. 安装编译环境1
# yum groupinstall -y 'Development Tools'
B. 安装ncurses-devel1
# yum install -y ncurses-devel
C. 下载libevent,并编译安装。1
2
3# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
# tar xzvf libevent-2.0.21-stable.tar.gz && cd libevent-2.0.21-stable
# ./configure && make && make install
D. 下载tmux,并编译安装。1
2
3# wget http://downloads.sourceforge.net/tmux/tmux-1.8.tar.gz
# tar xzvf tmux-1.8.tar.gz && cd tmux-1.8
# ./configure && make && make install
E. 配置库路径
执行cat
命令,并输入如下内容,Ctrl+d
退出1
2
3
4cat - >> /etc/profile.d/libpath.sh
# Initialization script for bash and sh
# necessary for tmux
export LD_LIBRARY_PATH="/usr/local/lib"
使配置文件生效。1
2echo "source /etc/profile.d/libpath.sh" >> ~/.bashrc
source ~/.bashrc
至此,tmux
可正常运行。
如果本文对你有所帮助,请小额赞助。
~~ EOF ~~