会话(session)、窗口(window)、窗格(panel)的概念
参考资料:Tmux 使用教程 - 阮一峰的网络日志 (ruanyifeng.com)
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令。用户与计算机的这种临时的交互,称为一次"会话"(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以"解绑":窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话"绑定"其他窗口。
一个窗口中,可以继续划分为多个窗格,在多个窗格中执行命令。效果类似于Terminator。
Tmux和Oh my tmux介绍与安装
Tmux 是一个终端复用器(terminal multiplexer),可以将会话与窗口"解绑"。
(1)它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
(2) 它可以让新窗口"接入"已经存在的会话。
(3)它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
(4)它还支持窗口任意的垂直和水平拆分。
Oh my tmux用于美化并降低Tmux的配置难度,和Tmux的关系就像oh-my-zsh和zsh的关系一样。
安装Tmux
sudo apt install tmux
安装Oh my tmux
命令来自仓库:GitHub - gpakosz/.tmux: 🇫🇷 Oh my tmux! My self-contained, pretty & versatile tmux configuration made with ❤️
cd && git clone https://github.com/gpakosz/.tmux.git \
&& ln -s -f .tmux/.tmux.conf \
&& cp .tmux/.tmux.conf.local .
Tmux用法
命令与快捷键
Oh my tmux自带的所有快捷键见bindings
默认前缀快捷键<prefix>是 Ctrl
+ a
和 Ctrl
+ b
。有些快捷键是安装Oh my tmux后才有的。
下面列出常用的几个命令和快捷键。
常见操作
- 打开tmux(如果是ssh到服务器,想要在服务器后台运行,就要打开服务器的tmux)
tmux
- 执行需要后台运行的命令
xxxxxxx
- 使用快捷键
<prefix> d
切换到后台运行。或使用快捷键<prefix> c
新建一个窗口,然后执行命令:
tmux detach
- 下次想要回到正在运行命令的窗口时,执行命令
tmux attach
若正在运行的命令不在当前打开的窗口,使用快捷键(Oh my tmux的快捷键)<prefix> C-h
切换到上一个窗口,或<prefix> C-l
切换到下一个窗口。或执行命令:
tmux selectw -t 窗口编号
底线命令
正在执行命令时,想要执行tmux的命令,可以新建窗口再执行,或按下快捷键<prefix> :
鼠标模式
<prefix> m
打开或关闭鼠标模式
像平时使用终端那样复制终端内容的时候,需要关闭鼠标模式。
打开鼠标模式的时候,左键窗口可以切换,右键可以操作。
清除历史记录和屏幕
C-l
是Oh my tmux的快捷键,可以清除tmux history同时清屏
会话
创建会话
<prefix> C-c
创建一个新会话(C-c
表示Ctrl
+c
)。用于已经打开tmux后,再次创建新会话。
- 创建会话,名称由tmux自动命名为数字。不能在tmux中执行。
tmux
可以在底线命令下执行
new-session
- 创建名为session_name的会话。不能在tmux中执行。
tmux new-session -s session_name
可以在底线命令下执行
new-session -s session_name
切换会话
<prefix> s
打开会话预览窗口,方向键切换会话,回车进入会话
<prefix> C-f
按名称切换到另一个会话
- 通过编号或名称切换会话
tmux switch -t 0
tmux switch -t <session-name>
重命名会话
<prefix> $
重命名会话
- 重命名为new_name
tmux rename-session new_name
关闭会话
- 关闭指定会话
tmux kill-session -t 会话名称
- 关闭除指定会话外的所有会话
tmux kill-session -t 会话名称 -a
- 关闭tmux的客户端、会话、服务器
tmux kill-server
分离会话
分离会话后,命令就会在后台运行。
<prefix> d
分离会话
- 分离会话
tmux detach
列出会话
tmux ls
窗口
创建窗口
<prefix> c
创建一个窗口
- 创建窗口
tmux new-window
切换窗口
<prefix> C-h
切换到上一个窗口<prefix> C-l
切换到下一个窗口
<prefix> w
打开预览窗口,方向键切换会话,回车进入会话
重命名窗口
<prefix> ,
重命名窗口
- 重命名窗口
tmux rename-window new-name
关闭窗口
C-d
或命令exit
都可以关闭窗口。当一个会话的所有窗口都关闭后,这个会话也会关闭。
快捷键
列出所有快捷键
<prefix> ?
列出快捷键。按q
可以退出。
配置文件
安装Oh my tmux之后,修改配置文件时就要按照说明,修改Oh my tmux创建的配置文件,而不是直接修改tmux的配置文件:configuration
<prefix> e
打开配置文件<prefix> r
重新加载配置文件
在脚本中使用tmux
例如创建一个名称为session的会话,在这个会话中创建名称为window的窗口,然后在这个窗口中执行echo和tail命令。
需要使用:
- 参数-s设置会话名称
- -n设置窗口名称
- -d来让tmux后台运行
- send用于发送命令到tmux
- -t指定会话和窗口
- “”双引号中是要发送的命令
- ENTER表示执行命令
tmux new -s "session" -n "window" -d && tmux send -t "session:window" "echo 'hello world' && tail -f /dev/null" ENTER