Tmux
的优点:任意分屏、保存工作、可以让代码在后台运行、可以远程批量操作的shell脚本。
在使用SSH或telnet远程连接服务器时,可能都遇到为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。例如,由于实验室的网实在是不稳定,所以经常遇到跑了好几个小时的代码快要出结果的时候却断网了,导致与服务器的连接中断,代码也就自然而然的停止运行了(至于其中的具体原因可以自行百度)。这点真的让人很苦恼。同时,当你的ssh在执行一个代码时,你如果不新建一个连接,你在这个连接中是无法干其他的事情的,这一点也很不好。于是,考虑可以把代码放到服务器后台运行。
使用tmux打开一个终端窗口,可以在窗口里执行一个长时间运行的交互式命令操作,令其一直在后台跑着,并且在按键ctrl-b-d后,可以无感知的退出窗口,而退出后窗口不会关闭,即窗口里执行的交互命令也不会结束。
tmux的厉害之处还在与它支持批量的管理你的任务,在创建窗口的同时,可以同时在窗口终端里连续执行两个或多个命令,而不必每个窗口只执行一个任务的命令了。
tmux中的最重要的三个概念:会话,窗口,pane的使用方法涵盖了它的基本框架,足以应付大多数工作。另外tmux还有一些高级用法,例如可以个性化的配置其组合键(官方默认的ctrl+b组合键按起来不太方便可以修改,UI设置,鼠标支持,复制粘贴等)。
安装
brew install tmux #mac
sudo apt install tmux #Debian/Ubuntu
sudo yum install tmux #CentOS
美化
cd
git clone https://github.com/gpakosz/.tmux.git
ln -s -f .tmux/.tmux.conf
cp .tmux/.tmux.conf.local .
关于字体最好使用 nerd fonts
这里推荐一款我一直在使用的 nerd font
Droid Sans Mono Nerd Font Complete Mono.otf
同时修改 ~/.tmux.conf.local
153-156 行,删除前面的#
tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline
tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with
tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone
tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see README.md
使用
tmux 采用 C/S 模型构建,输入 tmux 命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下: 一个 tmux
session
(会话)可以包含多个window
(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。 一个window
又可以包含多个pane
(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。
Tmux 会话命令(常用的,敲重点了)
#新建会话
tmux # 新建一个会话
tmux new -s docker # 新建一个会话为docker
#断开当前会话
tmux detach # 断开当前会话,会话在后台服务器上运行
#进入之前的会话
tmux a # 默认进入第一个会话
tmux a -t docker # 进入到名称为docker的会话
#关闭会话
tmux kill-session -t docker # 关闭docker这个会话
tmux kill-server # 关闭tmux服务器,所有的tmux会话都将关闭
#查看所有会话
tmux list-session # 查看所有会话
tmux ls # 查看所有会话,提倡使用简写形式
切换会话也可以使用 ctrl b
+ w
/s
查看会话列表,按上下键 (⬆︎⬇︎) 或者鼠标滚轮,可选中目标会话,按左右键(⬅︎➜)可收起或展开会话的窗口,选中目标会话或窗口后,按回车键即可完成切换。
Tmux的其它快捷指令
# 常用指令
tmux new -s "name" #创建session
tmux attach -t #重新连接session
ctrl b % #横向分屏
ctrl b " #纵向分屏
ctrl b o #选择窗格
ctrl d #关闭
ctrl b d #隐藏所有session
ctrl b s/w #选择session
ctrl b m #打开/关闭鼠标控制
ctrl b [ #面板鼠标滚动回查,按 q 退出
sudo fdisk -l #查看硬盘分区情况
ls -l /dev/sd* #查看硬盘
系统指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | ? | 显示快捷键帮助文档 |
Ctrl+b | d | 断开当前会话 |
Ctrl+b | D | 选择要断开的会话 |
Ctrl+b | Ctrl+z | 挂起当前会话 |
Ctrl+b | r | 强制重载当前会话 |
Ctrl+b | s | 显示会话列表用于选择并切换 |
Ctrl+b | : | 进入命令行模式,此时可直接输入 ls 等命令 |
Ctrl+b | [ | 进入复制模式,按 q 退出 |
Ctrl+b | ] | 粘贴复制模式中复制的文本 |
Ctrl+b | ~ | 列出提示信息缓存 |
窗口(window)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | c | 新建窗口 |
Ctrl+b | & | 关闭当前窗口(关闭前需输入 y or n 确认) |
Ctrl+b | 0~9 | 切换到指定窗口 |
Ctrl+b | p | 切换到上一窗口 |
Ctrl+b | n | 切换到下一窗口 |
Ctrl+b | w | 打开窗口列表,用于且切换窗口 |
Ctrl+b | , | 重命名当前窗口 |
Ctrl+b | . | 修改当前窗口编号(适用于窗口重新排序) |
Ctrl+b | f | 快速定位到窗口(输入关键字匹配窗口名称 |
面板(pane)指令
前缀 | 指令 | 描述 |
---|---|---|
Ctrl+b | " | 当前面板上下一分为二,下侧新建面板 |
Ctrl+b | % | 当前面板左右一分为二,右侧新建面板 |
Ctrl+b | x | 关闭当前面板(关闭前需输入 y or n 确认) |
Ctrl+b | z | 最大化当前面板,再重复一次按键后恢复正常(v1.8 版本新增) |
Ctrl+b | ! | 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效) |
Ctrl+b | ; | 切换到最后一次使用的面板 |
Ctrl+b | q | 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板 |
Ctrl+b | { | 向前置换当前面板 |
Ctrl+b | } | 向后置换当前面板 |
Ctrl+b | Ctrl+o | 顺时针旋转当前窗口中的所有面板 |
Ctrl+b | 方向 | 键 移动光标切换面板 |
Ctrl+b | o | 选择下一面板 |
Ctrl+b | 空格 | 键 在自带的面板布局中循环切换 |
Ctrl+b | Alt + 方向键 | 以 5 个单元格为单位调整当前面板边缘 |
Ctrl+b | Ctrl + 方向键 | 以 1 个单元格为单位调整当前面板边缘(Mac 下被系统快捷键覆盖) |
Ctrl+b | t | 显示时钟 |