tmux初体验

A useful terminal tool.

Posted by 刘知安 on 2020-10-02
文章目录
  1. tmux初体验
    1. 1. 什么是tmux?
    2. 2. tmux可以干什么?
    3. 3. tmux 上手
      1. 3.1 基本概念
      2. 3.2 基本操作
      3. 3.3 会话分享演示
    4. 4. 总结
    5. 5. 参考

tmux初体验

1. 什么是tmux?

TMUX stands for terminal multiplexer, which is a program runs in a terminal and allows other program to be run inside it. 也就是说,tmux是一个管理终端程序的程序,即所谓终端复用程序。

2. tmux可以干什么?

  • 多窗口管理应用程序(当然,这个很多软件都可以完成,比如iTerm);
  • 通过某种会话程序(例如ssh)连接到server端时,防止因为session的关闭而导致程序中断,甚至,我们可以再new一个session,在那个session中重新恢复tmux中的程序,相当于保护现场的作用;
  • 会话共享,将 tmux 会话的地址分享给他人,这样他们就可以通过 SSH 接入该会话,很适合结对编程或者code review啥的。

好吧,这些也是我在网上看到关于tmux的介绍,至于我为什么要学习一下这个工具的使用,主要是我要用我的mac通过openVPN去访问实验室的机器,然后我又不想一直让这个终端always stays there。于是,罗宇成同学给我安利了这个神器。

3. tmux 上手

首先肯定是安装了,老夫上来就是brew install tmux一把梭,完事。。

3.1 基本概念

下面这段来源于louiszhai的分享:

tmux采用C/S模型构建,输入tmux命令就相当于开启了一个服务器,此时默认将新建一个会话,然后会话中默认新建一个窗口,窗口中默认新建一个面板。会话、窗口、面板之间的联系如下:

一个tmux session(会话)可以包含多个window(窗口),窗口默认充满会话界面,因此这些窗口中可以运行相关性不大的任务。

一个window又可以包含多个pane(面板),窗口下的面板,都处于同一界面下,这些面板适合运行相关性高的任务,以便同时观察到它们的运行情况。

3.2 基本操作

先开启一个新的会话,如下:

1
$ tmux new -s demo # 新建一个名称为demo的会话

1

这时候,如果我们想关掉这个界面,并希望下次还能接着运行当前会话,那就用detach命令:

1
$ tmux detach

然后就回到了刚才新建会话时的那个界面了,当然,这个detach也是有快捷键的,即Ctrl + b, d,也就是先按下 ctrl加b,然后同时松开这两个键,再按下d键。

如果我想再次回到刚才的会话,咋办?

1
2
$ tmux a # 默认进入第一个会话
$ tmux a -t demo # 进入到名称为demo的会话

除了上述基本操作,还有就是如何关闭会话咯!用tmux kill命令来完成即可。针对基本概念中的4种不同概念,就对应有4种kill命令,kill-panekill-serverkill-sessionkill-window

但是我的记性不大好使,我先查看一下所有的会话:

1
$ tmux ls

3

如果我们当前正处于会话中,那可以用快捷键Ctrl + b, s,然后用上下键移动,左右键展开,如下:

2

ok,现在我想关闭这个名字叫demo的会话:

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

4

删除完后,我们发现后台其实还是运行着2个会话的,名字分别为1和openvpn_window。

让某个程序在后台运行的操作总结:

  1. 新建一个session,via $ tmux s -t <sesion_name>;
  2. 在这个session中开启你的程序,whatever command;
  3. detach the current session we just created, via $ tmux detach,快捷键是Ctrl + b, d;
  4. attach to a specific session, via $ tmux -a t <sesion_name>;
  5. [optional] Kill the server/session/window/plane, via $ tmux kill-<server|session|window|plane> -t <name>

3.3 会话分享演示

tmux的会话分享使得结对编程变得可能,tmatetmux的管理工具,它可以轻松的创建tmux会话,并且自动生成ssh链接

先安装,$ brew install tmate

然后,用tmate创建一个tmux会话,via $ tmate

5

这里可以看到当前会话的共享访问链接,可以通过web或者ssh的方式,可以是只读的方式或者是可读性的方式。咱们后续也可以通过命令$ tmate show-message命令来显式地显示这些链接。

6

咱们不妨来试试,先测试一下web的方式,输入上述的https链接,可以看到如下的界面,可读共享时,我们是无法从键盘输入的:

7

再试试ssh方式访问,如下:

8

在ssh客户端窗口输入的命令也会实时地显示在“server端”的界面中。。就是。。我感觉有点延迟。

4. 总结

tmux还是很强大的,这次只是简单地用了一下session中的基本功能,window和plane的很多功能也还没用到,以后用到再查吧,$ man tmux也是很言简意赅的文档。

感谢hxd罗宇成的VPN分享和tmux工具的安利,哈哈。

5. 参考