Linux进阶01:tmux

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的问题

  1. Buffer和系统剪贴板无法共享
    如果是使用PuTTY链接到远程Server,使用tmux时,鼠标拖动复制是大麻烦。因为会连同其他窗格的内容一起拖动进来。
    解决方法:(A) 重新开启一个窗口,开启VIM,在编辑模式下进行粘贴,然后再用鼠标拖动复制。(B) PuTTY使用Alt+鼠标进行复制。

  2. 不支持滚屏
    当需要查看当前显示之前的内容,直接滚动鼠标滚轴不会得到我们想要的结果。
    解决方法:开启复制模式prefix [,使用PageUPPageDown进行翻页操作。

如果是登录系统界面开启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-devel

1
# 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
4
cat - >> /etc/profile.d/libpath.sh
# Initialization script for bash and sh
# necessary for tmux
export LD_LIBRARY_PATH="/usr/local/lib"

使配置文件生效。

1
2
echo "source /etc/profile.d/libpath.sh" >> ~/.bashrc
source ~/.bashrc

至此,tmux可正常运行。

如果本文对你有所帮助,请小额赞助
~~ EOF ~~