tmux - 终端复用工具
Swift Lv6

当运行一个web应用时,我们希望在退出登录或关闭终端的时候,web应用仍然能够运行,这时候就要用到 nohupnohup 有个缺点就是它会将输出重定向到 nohup.out 文件,虽然也有其他方法能够在终端实时查看 nohup 输出,但重新登录服务器的时候,这些输出将会丢失。

同样的,当我们想在终端进行其他活动时,就必须打开一个新的终端,这显然不够greek。
基于上述两个痛点,tmux就派上用场了。tmux主要有如下三大功能:

  • 保护现场:即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。
  • 分屏:tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,非常灵活。
  • 会话共享:将tmux会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话。

session & window & pane

  • 一个tmux session(会话)可以包含多个window(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。
  • 一个window又可以包含多个pane(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。

最佳实践

安装

1
sudo yum install -y tmux

会话

新建会话

1
tmux new -s test # 新建一个名叫test的会话

断开当前会话

1
tmux detach

也可以使用快捷键,先按 ctrl + b ,再按 d

进入之前的会话

1
tmux a -t test # 进入名叫test的会话

关闭会话

1
2
tmux kill-session -t test # 关闭test会话
tmux kill-server # 关闭服务器,所有会话都将关闭

查看会话

1
tmux ls

也可以使用快捷键 ctrl + b + s ,此时tmux将打开会话列表。按上下键可切换会话,按左右键可收起或展开会话。

tmux快捷键

  • 系统指令
前缀 指令 说明
ctrl+b ? 显示快捷键帮助文档
ctrl+b d 断开当前会话
ctrl+b D 选择要断开的会话
ctrl+b ctrl+z 挂起当前会话
ctrl+b r 强制重载当前会话
ctrl+b s 显示会话列表用于选择并切换
ctrl+b : 进入命令行模式
ctrl+b [ 进入复制模式
ctrl+b ] 粘贴复制模式中复制的文本
ctrl+b ~ 列出提示信息缓存
  • 窗口(window)命令
前缀 指令 说明
ctrl+b c 新建窗口
ctrl+b & 关闭当前窗口
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 关闭当前面板
ctrl+b z 最大化当前面板,再重复一次按键后恢复正常
ctrl+b ! 将当前面板移动到新的窗口打开(原窗口中存在两个及以上面板有效)
ctrl+b ; 切换到最后一次使用的面板
ctrl+b q 显示面板编号,在编号消失前输入对应的数字可切换到相应的面板
ctrl+b { 向前置换当前面板
ctrl+b } 向后置换当前面板
ctrl+b ctrl+o 顺时针旋转当前窗口中的所有面板
ctrl+b 方向键 移动光标切换面板
ctrl+b o 选择下一面板
ctrl+b space 在自带的面板布局中循环切换
ctrl+b alt+方向键 以5个单元格为单位调整当前面板边缘
ctrl+b ctrl+方向键 以1个单元格为单位调整当前面板边缘(Mac下被系统快捷键覆盖)
ctrl+b t 显示时钟

关于tmux的高阶应用,如个性化配置、保存会话、会话共享等,请参照:

Powered by Hexo & Theme Keep
Unique Visitor Page View