tmux的作用在于终端复用。
1. 在server上启动一个bash。并在里面执行tmux
2. 通过ssh远程登录server,执行tmux attach,就会切换到server上的那个bash中,接下来的操作都是在bash中了
3. 此时能够打开很多其它的窗体,这样在远程就能够像在本地一样同一时候使用多个一样的bash

假设要发送命令。例如以下:
tmux send -t checkpoint ls ENTER
注:checkpoint是你已经用tmux创建好的session的名字(tmux new -s checkpoint)。ls是shell命令;加上ENTER才干在checkpoint这个session中执行ls命令。


这样你就不用手动tmux attach到那个session中。再手动执行ls命令。这对使用脚本是有优点的。
假设这个session有多个窗体:
tmux send -t checkpoint:0 ‘mongoose -t 2’ ENTER
0代表第一个窗体。

 

结合parallel-ssh就能够远程使用服务器的bash环境来执行命令。

这种场景是实用的。在一台server上用criu来对一个小程序进行checkpoint,须要criu和小程序都执行在bash中,而不是直接在ssh中,否则checkpoint得到的img文件就会包括与ssh终端相关联的信息(session id)。这样就不能在还有一台server上进行restore了,也就是实现不了migration。而假设都在bash中。就不会再有与ssh有关的信息了,在还有一台机器上就能够restore。

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  #顺时针旋转当前窗体的面板