tmux是什么?
命令行的典型使用方式是,打开一个终端窗口,在里面输入命令,用户与计算机的这种临时的交互,称为一次"会话"(session)。
会话的一个重要特点是:窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,比如你在ssh登录远程计算机上运行下面这段代码,当你ssh退出时,该代码运行的进程也会结束掉。
#include <thread>
#include <iostream>
#include <chrono>
using namespace std;
int main()
{
while(1)
{
cout << "hello world" << endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
}
}
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。Tmux 就是会话与窗口的"解绑"工具,将它们彻底分离。
- 它允许在单个窗口中,同时访问多个会话,这对于同时运行多个命令行程序很有用。
- 它可以让新窗口"接入"已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
安装Tmux
- ubuntu
apt-get install -y tmux
- centos
Tmux 前缀键
Tmux 窗口有大量的快捷键。所有快捷键都要通过前缀键唤起,默认的前缀键是Ctrl+b
,即先按下Ctrl+b
,快捷键才会生效。
助命令的快捷键是Ctrl+b ?
。它的用法是,在 Tmux 窗口中,先按下Ctrl+b
,松开,再按下?
,就会显示帮助信息。
这里列个表格,说明一下其快捷键:
快捷键或者命令 | 功能 |
---|---|
tmux new -s demo |
新建名为demo会话 |
tmux kill-session -t demo |
杀死名为demo会话 |
tmux ls |
查看会话 |
tmux attach -t |
接入会话 |
Ctrl+b d |
分离会话 |
Ctrl+b c |
新建窗口 |
tmux new-window -n demo1 |
新建名为demo1的窗口 |
Ctrl+b n |
切换指定编码为n的窗口 |
Ctrl+b " |
划分上下2个窗格 |
Ctrl+b % |
划分左右2个窗格 |
Ctrl+b x |
退出当前窗格 |
Ctrl+b z |
当前窗格全屏显示,再使用一次会变回原来大小 |
会话管理
-
新建会话
tmux new -s <session name>
-
分离会话
快捷键:Ctrl+b d
tmux detach
上面命令执行后,就会退出当前 Tmux 窗口,但是会话和里面的进程仍然在后台运行。
-
查看会话
快捷键:Ctrl+b s
tmux ls # 列出所有会话。
-
接入会话
tmux attach -t 0 # 使用会话编号 tmux attach -t <session-name> # 使用会话名称
-
杀死会话
tmux kill-session -t 0 # 使用会话编号 tmux kill-session -t <session-name> # 使用会话名称
-
切换会话
tmux switch -t 0 # 使用会话编号 tmux switch -t <session-name> # 使用会话名称
-
重命名会话
快捷键Ctrl+b $
tmux rename-session -t 0 <new-name>
-
共享会话
窗格操作
Tmux 可以将窗口分成多个窗格(pane),每个窗格运行不同的命令。以下命令都是在 Tmux 窗口中执行。
-
划分窗格
- 划分上下两个窗格
快捷键:Ctrl+b %
tmux split-window
- 划分左右两个窗格
快捷键:Ctrl+b "
tmux split-window -h
- 划分上下两个窗格
-
退出当前窗格
快捷键:Ctrl+b x
-
移动光标
快捷键:Ctrl+b 方向键
tmux select-pane -U # 光标切换到上方窗格 tmux select-pane -D # 光标切换到下方窗格 tmux select-pane -L # 光标切换到左边窗格 tmux select-pane -R # 光标切换到右边窗格
-
交换窗格位置
快捷键:tmux swap-pane -U # 当前窗格上移 tmux swap-pane -D # 当前窗格下移
-
其他快捷键
-
Ctrl+b ;
:光标切换到上一个窗格。 -
Ctrl+b o
:光标切换到下一个窗格。 -
Ctrl+b z
:当前窗格全屏显示,再使用一次会变回原来大小。 -
Ctrl+b Ctrl+<arrow key>
:按箭头方向调整窗格大小。
-
窗口管理
除了将一个窗口划分成多个窗格,Tmux也允许新建多个窗口。
- 新建窗口
快捷键:Ctrl+b c
tmux new-window tmux new-window -n <window-name> # 新建一个指定名称的窗口
- 切换窗口
切换到上一个窗口(按照状态栏上的顺序):Ctrl+b p
切换到下一个窗口:Ctrl+b n
切换到指定编号的窗口,其中的<number>是状态栏上的窗口编号:Ctrl+b <number>
tmux select-window -t <window-number> # 切换到指定编号的窗口 tmux select-window -t <window-name> # 切换到指定名称的窗口
- 重命名窗口
快捷键:Ctrl+b ,
tmux rename-window <new-name>
窗口,窗格,会话关系
脚本化的tmux
tmux作为终端复用软件,支持纯命令行操作也是其一大亮点。你既可以启用可视化界面创建会话,也可以运行脚本生成会话。
- 创建会话
脚本中创建tmux会话时,由于不需要开启可视化界面,需要输入-d参数指定会话后台运行tmux_session_name="demo" tmux new -s "${tmux_session_name}" -d
- 创建窗口
tmux_session_name="demo" tmux_win_name="tmux_sh_demo1" tmux neww -a -n "${tmux_win_name}" -t "${tmux_session_name}"
- 窗口重命名
tmux_session_name="demo" tmux rename-window -t "${tmux_session_name}:0" "demo_init"
- 窗口重命名
- 窗口发送命令
tmux_session_name="demo" tmux_win_name="tmux_sh_demo1" cmd="cd /root/code/ln_shell && /bin/bash while_keep_loop.sh" tmux send -t "${tmux_session_name}:${tmux_win_name}" "${cmd}" Enter
参考资料
网友评论