why tmux ?
一个软件或者工具,使用的人很多,一定是因为这个软件或者工具解决了用户的一个或多个痛点。有需求才有市场,tmux 也不例外。那么 tmux 到底解决了我们的哪些痛点呢?
你有没有遇到过以下几种情况,
使用 SecureCRT 或者 XShell 等远程连接到一台服务器,然后运行需要一段时间才能跑完的程序,突然内急,想上厕所,二话不说,按下待机按键,疾奔而去。等到你舒服的回来,打开电脑一看,我擦,我的ssh超时断开了,悲了个剧,程序还需要重新跑一遍。
在一个终端中编译或者运行一个程序,没有完成,但是又想干其他事情,通常的做法是再启动一个终端或者一个tab来做(我以前一直都是这么干的。。),但是有没有更好的方式呢?
每天上班远程连接到服务器开始工作后,前一天未完成的的工作现场什么都没了,一切都要整理头绪继续开始,每次ssh后都要重新打开各种窗口或者cd到各种文件夹下,是不是很烦躁。
如果你遇到过以上几种情况,并愁于如何解决,那么恭喜你,tmux 非常适合你。下面我们就来看看,应用tmux 如何解决上述问题。
几个概念
介绍如何解决上述问题之前,我们需要先来了解几个概念。
session:会话,一个会话就是我们在 tmux 服务中启动的一个多窗口容器。
window:窗口,隶属于 session,一个 session 中可以存在多个 window。每个窗口类似于iTerm2中的每个tab。
pane:面板,隶属于 window,一个 window 中可以包含多个 pane。类似于iTerm2中的pane。
三者之间的关系如下图所示:
解决ssh断开后程序终止问题
tmux 中的 session 可以 attach 和 detach,detach 可以理解为将当前的 terminal 隐藏到后台运行,attach 就是打开我们隐藏到后台的 terminal。当ssh连接突然断开时,tmux 会默认将当前terminal detach到后台,但并不会终止我们在当前 terminal 上运行的程序,我们只需要再次ssh连接到服务器,然后 attach 找回之前正在工作的 terminal 即可。
一切如初,是不是很爽!
创建一个session
$ tmux
执行tmux后,我们将启动一个默认名称为“ 0 ”的session。如果我们想指定名称,执行下面的命令
$ tmux new -s <name-of-session>
如何attach到已存在的session呢?
$ tmux attach
默认会attach到最早创建的session中,假如我们创建了多个session,也可以通过指定名称来指定打开某个session,
$ tmux attach -t <name-of-session>
如何查看已经存在的session列表呢?
$ tmux list-session #等价于tmux ls
解决减少tab数量问题
假如平常你需要同时打开多个tab,那么tmux的pane也许更加适合你。它将一个window分成了多个部分,每个部分就是一个pane,你可以随时切换pane进行工作。
如下图所示,我们将一个window分成了三个pane。
总结
tmux 适用于那些经常需要连接到远程服务器来进行工作的人。这样无论你身处何处,只要你连接上远程服务器 attach 后,可以马上继续之前的工作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。