一、Tmux 是什么?
1. 会话与进程
命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称 “窗口”),在里面输入命令。用户与计算机的这种临时的交互,称为一次 “会话”(session) 。
会话的一个重要特点是,窗口与其中启动的进程是连在一起的。打开窗口,会话开始;关闭窗口,会话结束,会话内部的进程也会随之终止,不管有没有运行完。
一个典型的例子就是,SSH 登录远程计算机,打开一个远程窗口执行命令。这时,网络突然断线,再次登录的时候,是找不回上一次执行的命令的。因为上一次 SSH 会话已经终止了,里面的进程也随之消失了。
为了解决这个问题,会话与窗口可以 “解绑”:窗口关闭时,会话并不终止,而是继续运行,等到以后需要的时候,再让会话 “绑定” 其他窗口。
二、Tmux 的作用
Tmux 就是会话与窗口的 “解绑” 工具,将它们彻底分离。
- 它允许在单个窗口中,同时访问多个会话。这对于同时运行多个命令行程序很有用。
- 它可以让新窗口 “接入” 已经存在的会话。
- 它允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 它还支持窗口任意的垂直和水平拆分。
类似的终端复用器还有 GNU Screen。Tmux 与它功能相似,但是更易用,也更强大。
三、基本用法
1 安装
# Ubuntu系统
sudo apt-get install tmux
# CentOS
$ sudo yum install tmux
# Mac
$ brew install tmux
2 启动与退出
安装完成后,键入tmux
命令,就进入了 Tmux 窗口。
tmux
上面命令会启动 Tmux 窗口,底部有一个状态栏。状态栏的左侧是窗口信息(编号和名称),右侧是系统信息。
按下 Ctrl+d
或者显式输入 exit
命令,就可以退出 Tmux 窗口。
exit
3. 常用操作指令及快捷键
# 查看有所有tmux会话
指 令:tmux ls
快捷键:Ctrl+b s
# 切换窗口
ctrl+b c: 创建一个新窗口(状态栏会显示多个窗口的信息)
ctrl+b p: 切换到上一个窗口(按照状态栏的顺序)
ctrl+b n: 切换到下一个窗口
ctrl+b w: 从列表中选择窗口(这个最好用)
# 新建tmux窗口
指 令:tmux new -s <session-name>
# 重命名会话
指 令:tmux rename-session -t <old-name> <new-name>
快捷键:Ctrl+b $
# 分离会话
指 令:tmux detach 或者使用 exit(关闭窗口)
快捷键:Ctrl+b d
# 重新连接会话
指 令:tmux attach -t <session-name> 或者使用 tmux at -t <session-name>
#平铺当前窗格(个人很喜欢的快捷键,注意:平铺的是当前选中的窗格)
快捷键:Ctrl+b z (再次 Ctrl+b z 则恢复)
# 杀死会话
指 令:tmux kill-session -t <session-name>
# 切换会话
指 令:tmux switch -t <session-name>
# 划分上下两个窗格
指 令:tmux split
快捷键:Ctrl+b “
# 划分左右两个窗格
指 令:tmux split -h
快捷键:Ctrl+b %
# 光标切换到上方窗格
指 令:tmux select-pane -U
快捷键:Ctrl+b 方向键上
# 光标切换到下方窗格
指 令:tmux select-pane -D
快捷键:Ctrl+b 方向键下
# 光标切换到左边窗格
指 令:tmux select-pane -L
快捷键:Ctrl+b 方向键左
# 光标切换到右边窗格
指 令:tmux select-pane -R
快捷键:Ctrl+b 方向键右
四、常用命令
Ctrl+b激活控制台;此时以下按键生效!!!
举个例子:
帮助命令的快捷键是Ctrl+b ?
它的用法是:在 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 顺时针旋转当前窗口的面板
八、其他命令
# 列出所有快捷键,及其对应的 Tmux 命令
tmux list-keys
# 列出所有 Tmux 命令及其参数
tmux list-commands
# 列出当前所有 Tmux 会话的信息
tmux info
# 重新加载当前的 Tmux 配置
tmux source-file ~/.tmux.conf