Linux学习笔记(二): Tmux 学习笔记
- 概述
- 使用方法
1. 概述
首先说 Tmux 的应用场景:
- 需要运行很多终端,如果直接建立多个终端,或者多个对服务器的连接,管理起来会很乱
- 需要保证一个非守护进程在终端关闭之后依旧运行(不会直接随着终端停止而停止)
也就是说需要一个对终端的管理器,也就是 Tmux
类似的工具还有 screen,其也确实可以解决上述问题
但是 Tmux 支持划分一个窗口为多个 panel,使得同时处理多个终端.
而 screen 不支持(所以不够 zhuangbi).
放一张网上的效果图吧(其实并没有这么拉风哈哈哈哈)
2. 使用方法
比较好的教程
Tmux 使用手册 | 路易斯的博客(非常详细,甚至有点过于复杂,基于 github pages 搭建,需要梯子)
手把手教你使用终端复用神器 Tmux | PegasusWang | 知乎(腾讯大佬写的,比较基础,有视频教程)
网上的教程比较多,所以仅进行简单的总结,更加细节的操作可以参考其他教程(比如第一个推荐教程)和 man 手册
2.1 基本概念
Tmux 使用 C/S 模型构建,也就是说 Tmux 本身是一个本地服务器
也就是说在输入 tmux 命令之后,Tmux 会建立一个服务器
Tmux 对终端的管理分为三级:
- session: 一个会话就是一个连接,即一个真实终端连接的目标单位
- windows: 每个会话中会有很多 windows,窗口是显式的基本单位(真实终端必须显示一个且只能显示一个 windows)
- panel: 每个 windows 可以切分为多个 panel,panel 中为一个被管理的终端
示意图如下,图片来源: 手把手教你使用终端复用神器 Tmux
我们用可以使用 Tmux 建立 session/windows/panel 并启动不同的服务
在断开服务器或者暂时离开的时候,将其离线(detach)
此时这些服务并没有停止,通过重新连接(attach)就可以重新恢复环境
这些服务没有停止也就是说启动的服务依旧在服务器上运行
2.2 基本操作
2.2.1 基本操作
Tmux 有两种操作方式:
- 命令操作:
如果能接触到 bash,可以直接输命令
如果不能,可以先进入 tmux 命令提示符模式 (tmux-prefix+:)
命令操作即通过标准的 Tmux 命令进行操作- 快捷键:
任何时候都能操作
首先输入 tmux-prefix(默认为 ctrl-b),表明接下来的输入是快捷键
然后输入快捷键
命令操作说明:
tmux 命令很长…
但是有很多命令都有别名
此外很方便的一点是,只要输入的字符足以确定是哪个命令
tmux 就可以自动执行,而不必输入完整的命令如下 l 开头的命令有很多
其各自有自己的缩写形式
在输入部分不足以确定命令的时候会报错(有歧义的命令)
输入完整命令的一部分和缩写都可以执行命令
快捷键操作说明:
ctrl-b 表示按下 ctrl 的同时按下 b
ctrl-b d 表示按下 ctrl 的同时按下 b,然后全部松开,然后按下 d
ctrl-b ctrl-x 表示按下 ctrl 的同时按下 b,然后全部松开,然后按下 ctrl 的同时按下 x
2.2.2 session 级操作
session 是真实终端进行连接的单位,一个真实终端同一时间只能连接一个 session
建立新的 session(并连接)
session 有具名 session 和匿名 session 两种
匿名 session 仅可以通过其被分配的默认的编号来操作(从 0 开始)
具名 session 可以使用其名字来操作1
2
3
4
5
6建立匿名session并连接
tmux new
建立具名session并连接
tmux new -s name
建立session命令完整参数
就像开头说的,具体各参数的含义可以参考man手册和其他教程,这里只做简单总结连接已有 session
连接 session 时基本都连具名 session,也就需要输入名字
session 名字和命令一样,也可以只输一部分,但必须足以确认 session 是哪一个1
2
3
4
5
6连接具名session
tmux attach -t name
连接匿名session
tmux attach -t 分配的编号
(tmux a会连到不知道哪里去,可能是最近使用的吧,懒得试了,最好 加上-t参数)
完整命令见man手册从 session 中退出来
1
2
3
4
5
6使用命令退出
tmux detach
使用快捷键退出(默认情况的快捷键,下面不再重复此说明)
ctrl-b d
暂时离开式退出,输入fg命令可以直接返回当前session
ctrl-b c-z删除 session
1
tmux kill-session -t name/默认分配的编号
查看所有 session
1
2
3
4使用命令
tmux ls
使用快捷键(必须已经在一个session中的终端中)
ctrl-b s测试是否有某个 session
1
tmux has -t name/默认分配的编号
在 session 中切换至其他 session
1
2
3
4使用快捷键(必须已经在一个session中的终端中)
ctrl-b s
然后使用上下方向键选中session,enter切换
在选择界面,左右方向键可以展开合并该session下的windows 列表以选择进入哪一个windows2.2.3 windows 级操作
_windows 是真实终端显示的单位,一个真实终端同一时间必须且只能显示一个 windows_
新建 window
1
2
3
4
5在建立新session的时候会自动创建一个windows
在-n参数后面可以对其命名
tmux new -s session -n name
在session中新建windows
ctrl-b c关闭 windows
1
2需要输入y/n进行确认
ctrl-b &切换 window
1
2
3
4
5
6
7
8
9
10切换至上一个窗口
ctrl-b p
切换至下一个窗口
ctrl-b n
切换至指定编号窗口
ctrl-b [0-9]
打开窗口列表进行选择
ctrl-b w
通过名字快速定位到指定窗口
ctrl-b f重命名 window
1
ctrl-b ,
重编号 window
1
ctrl-b .
2.2.4 panel 级操作
_panel 是被控制终端的单位,每个 panel 内有一个被控制的终端_
创建 panel
1
2
3
4上下切分panel
ctrl-b "
左右切分panel
ctrl-b %删除 panel
1
ctrl-b x
布局 panel
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18最大化当前panel,重复输入后还原
ctrl-b z
把当前panel创建为新windows
ctrl-b !
向前置换panel
ctrl-b {
向后置换panel
ctrl-b }
顺时针旋转所有panel
ctrl-b ctrl-o
在自带布局中循环
ctrl-b space
以5个单元格为单位调整边框
ctrl-b alt-方向键
以一个单元格为单位 调整边框
ctrl-b ctrl-方向键
```切换 panel
1
2
3
4
5
6
7
8切换至最后使用的panel
ctrl-b ;
显示所有panel编号,在编号消失前输入编号可以切换panel
ctrl-b q
切换至下一panel
ctrl-b o
切换panel
ctrl-b 方向键2.3 定制化 Tmux
2.3.1 自己配置
懒得写了,详细请参考
Tmux 使用手册 | 路易斯
的博客
tmux: Productive Mouse-Free Development
2.3.2 使用开源配置文件
或者使用大佬配置好的配置文件[.tmux | github]
但是建议先看一下自己配置的教程,了解哪些东西可以被配置,可以怎么改动
同时有一个需要注意的点:
大佬文件中把 ctrl-a 绑定为第二 prefix,这和终端中的全选冲突(可以通过设置把终端中的热键关闭)
同时如果键盘有 CapsLk-Ctrl 互换功能,那自然是极爽的,如果没有,可以手动把 CapsLk-a 作为第二 prefix
快捷键 | 功能 |
---|---|
prefix e | 编辑配置文件 |
prefix r | 重新加载配置 |
C-l | 清空屏幕和 tmux 历史 |
prefix C-c | 创建一个新 session |
prefix C-f | 根据名字快速切换 session |
prefix C-h | 切换至左 windows |
prefix C-l | 切换至右 windows |
prefix Tab | 切换至最近使用 windows |
prefix - | 上下切分屏幕 |
prefix _ | 最优切分屏幕 |
prefix h/j/k/l | 切换 panel |
prefix H/J/K/L | 设置 panel 大小 |
prefix </> | 交换 panel |
prefix + | 设置当前 panel 为 windows |
prefix m | 打开/关闭 鼠标模式 |
prefix Enter | 进入复制模式 |
prefix b | 列出粘贴板缓存 |
prefix p | 粘贴粘贴板第一个缓存 |
prefix P | 选择粘贴 |
粘贴模式
按键 | 功能 |
---|---|
v | 开始复制/可视模式 |
C-v | 切换快可视模式与可视模式 |
H | 跳转至行首 |
L | 跳转至行尾 |
y | 复制至粘贴板首 |
esc | 放弃操作 |