2015-04-26 wcdj
摘要:在前文《UNIX环境下使用screen在虚拟终端复用窗口的方法》介绍了GNU screen的使用方法,本文继续介绍screen的升级版工具OpenBSD tmux,因为tmux的功能更强大。
0 tmux的介绍
关于tmux的介绍,在Ubuntu(apt-get安装)上的效果如下图所示,Mac OS X上使用brew install tmux安装,Linux上源码安装方法如下:
tar zxvf libevent-2.0.21-stable.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable' && make && make install
tar zxvf ncurses-5.9.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/ncurses/install/ncurses-5.9/' && make && make install
tar zxvf tmux-1.9a.tar.gz
./configure --prefix='/data/home/gerryyang/LAMP/tmux/install/tmux-1.9a' CFLAGS='-I/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/include' LDFLAGS='-L/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/lib' && make && make install
最后再在.bashrc下添加如下两行配置
# tmux
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/home/gerryyang/LAMP/libevent/install/libevent-2.0.21-stable/lib
alias tmux='/data/home/gerryyang/LAMP/tmux/install/tmux-1.9a/bin/tmux'
看完此图是不是有一种非常hack的感觉,tmux除了支持screen的会话管理之外,最直观的还提供了窗口分割的功能,除此之外还有很多优点(摘抄参考[2]的总结):
- 垂直分割窗口,当然水平也是可以的
- vi 或 emacs 按键绑定模式
- 有多个粘贴缓冲,可完全由按键进行选取、复制、以及粘贴操作
- 配置很容易,尤其是状态行
- 脚本化,通过脚本可以方便的控制 tmux 会话
- 有预设布局,可搜索窗口,自动命名窗口名称
- 文档清晰、详尽
mux使用C/S模型构建,主要包括以下单元模块:(理解下面几个模块的含义,有助于对tmux的使用)
server | 服务器。输入tmux命令时就开启了一个服务器。 |
session | 会话。一个服务器可以包含多个会话。 |
window | 窗口。一个会话可以包含多个窗口。 |
pane | 面板。一个窗口可以包含多个面板。 |
1 tmux的使用场景
使用 tmux 创建一个新会话,在新的会话中使用 ctrl-b + c 可以继续创建新的window(窗口),输入 exit (或者使用 ctrl-b + &)就会关闭当前的window (窗口)。而在 tmux 创建的新会话中输入 ctrl-b + d/D 则会退出会话。此时如果再输入 tmux 则会再重新创建一个新的会话(与之前的第一个会话并列),当然也可以输入 tmux attach 再次attach到最近退出的那个会话。如果之前存在多个会话,在attach到会话后,可以通过输入 ctrl-b + s 然后通过上下键来选择要切换的会话,如下图所示。
也可以在进入tmux会话之前查看tmux会话有哪些,然后attach到某一个会话。
tmux ls
0: 1 windows (created Mon Apr 27 22:47:22 2015) [210x62] (attached)
1: 1 windows (created Mon Apr 27 22:52:15 2015) [210x62] (attached)
tmux at -t 0
2 tmux的常用配置
类似各种平铺式窗口管理器,tmux使用键盘操作,常用快捷键包括:
Ctrl+b | 激活控制台;此时以下按键生效 | |
系统操作 | ? | 列出所有快捷键;按q返回 |
d | 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 | |
D | 选择要脱离的会话;在同时开启了多个会话时使用 | |
Ctrl+z | 挂起当前会话 | |
r | 强制重绘未脱离的会话 | |
s | 选择并切换会话;在同时开启了多个会话时使用 | |
: | 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器 | |
[ | 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出 | |
~ | 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息 | |
窗口操作 | c | 创建新窗口 |
& | 关闭当前窗口 | |
数字键 | 切换至指定窗口 | |
p | 切换至上一窗口 | |
n | 切换至下一窗口 | |
l | 在前后两个窗口间互相切换 | |
w | 通过窗口列表切换窗口 | |
, | 重命名当前窗口;这样便于识别 | |
. | 修改当前窗口编号;相当于窗口重新排序 | |
f | 在所有窗口中查找指定文本 | |
面板操作 | “ | 将当前面板平分为上下两块 |
% | 将当前面板平分为左右两块 | |
x | 关闭当前面板 | |
! | 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板 | |
Ctrl+方向键 | 以1个单元格为单位移动边缘以调整当前面板大小 | |
Alt+方向键 | 以5个单元格为单位移动边缘以调整当前面板大小 | |
Space | 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled | |
q | 显示面板编号 | |
o | 在当前窗口中选择下一面板 | |
方向键 | 移动光标以选择面板 | |
{ | 向前置换当前面板 | |
} | 向后置换当前面板 | |
Alt+o | 逆时针旋转当前窗口的面板 | |
Ctrl+o | 顺时针旋转当前窗口的面板 |
3 tmux的配置
tmux的系统级配置文件为/etc/tmux.conf,用户级配置文件为~/.tmux.conf。配置文件实际上就是tmux的命令集合,也就是说每行配置均可在进入命令行模式后输入生效。
4 Refer
[1] http://en.wikipedia.org/wiki/Tmux
[2] https://linuxtoy.org/archives/from-screen-to-tmux.html
[3] https://wiki.freebsdchina.org/software/t/tmux
[4] http://tmux.sourceforge.net/