布道一下tmux

今天下午部门里showcase,我介绍了tmux。

原先我们部门里部分人不用这些终端会话管理软件,部分人用screen。后来志旭那边从screen转向了tmux,感觉很不错,就让我研究下,然后在部门里介绍。这次showcase非常满意,感觉比以前说的好多了,一方面是因为我确实花了很多时间来研究它,包括在网上搜各种资料,所以在介绍时也非常轻松;另一方面也是这个软件确实比screen强大多了,深深的吸引了我。

说起screen,我记得是大部分linux发行版里自带的软件(不是很确定),确实简单且方便,线上环境一般也会配置screen。但是也因为简单,导致功能不是很强大。就比如我写代码时,需要左右分屏,但是screen只有水平分屏的功能,只有ubuntu下有patch可以补充左右分屏功能,但是不是很好用;再者screen的配置没那么灵活强大,我看过screen的man手册,不过第一感觉就是头大了,然而当我折腾tmux并看他的man手册时,并没有任何不适应,介绍的非常有条理。

我2年前最开始使用vps时,看到网上的lnmp安装介绍时就提到了screen,但是当时对会话管理软件没有一个直观的认识,且那篇文章只说运行screen可以保持会话,但是在没有任何配置下时,运行screen命令并没有看到和原来有什么区别,这也导致刚开始不知道这玩意是干嘛的。后来来到公司,转向linux下开发,当时用的ubuntu,于是找到了byobu这个软件,不过后来换过其他几个发行版本,以及不再使用GUI,都是putty连接终端来开发,所以也就没装byobu了。当时再次接触到screen,这个好像也是志旭给我推荐的,包括现有的配置,感觉非常好用且简洁。期间也听说过tmux,并尝试过,不过因为没有静下心来好好去尝试,导致用了几天就换回screen了。

说起来这次非常巧,前几天实在容忍不了无法左右分屏,再次尝试换成tmux了,正好当天志旭就让我研究下这个然后给大家介绍,我就索性好好的去了解这款软件。当时志旭和我提到了tmux的一大亮点:脚本化,所以在研究时就着重了解了这块,不得不说,确实牛逼!

其实有些人不用这些会话管理软件,他们认为大不了就是多开几个putty就行了,这样也不是不行,只是显而易见不方便,谁看着window下方的任务栏里这么多Tab也受不了。最直接的方法,换MTPutty,全称Multi-Tabbed PuTTY,这是丹哥以前给我介绍的软件,现在我也一直在用着在。可以看出这是一个多Putty管理器,相当于putty加了一个外壳,然后可以通过一些快捷键在多个putty间切换,再更进一步的方法,就是使用上面提到的这类会话管理软件,开多个windows只是这类软件的功能之一,另外一个功能就是保存会话,可以在其他地方登录这台机器时直接恢复会话,乃至多人协作都行!什么是保存会话?你用putty登录线上系统,运行一个任务需要很久,当你关闭putty时,相当于退出shell,任务也会退出,而会话管理就会保持这个会话常驻。当然也可以用nohup,但是哪种方式方便显而易见。

虽然常说不要过于依赖软件,但是不得不说,有些软件确实提高了开发效率,就比如我为何使用vim,就是因为掌握了他的快捷键,再配合强大的各种插件,确实让我的开发变得非常简单,导致我现在写博客都只想在vim里写了,所以近期特别想从wordpress叛逃到octopress。再比如markdown,简洁的markup语法,能让写作编程一种享受,这在我用富文本编辑器时是感觉不到的。所以有些工具,可能前期上手需要花一些时间,但是后期的开发过程中,节省的时间将是不可估量的。

具体的介绍就不在这个博客里写了,我直接发到我的wiki里,传送门

下面先给出一张截图,是我使用脚本直接控制tmux一键生成这样的开发环境:

 

PS:前段时间看了《布道之道》,在多看上买的电子书,确实不错,在这里推荐下。我这篇文章的标题也用了"布道"这个词,挺有意思的一个词。

发布者

Tanky Woo

Tanky Woo,[个人主页:https://tankywoo.com] / [新博客:https://blog.tankywoo.com]

《布道一下tmux》有11个想法

  1. tmux是很好,但是由于下面的问题,还是用回screen了。
    >>> os.getlogin()
    Traceback (most recent call last):
    File “”, line 1, in
    OSError: [Errno 2] No such file or directory

      1. 是的,tmux下的会话中,python中的os.getlogin()函数会抛出异常。在screen下却是正常的。
        google过一下,tmux会话下,who am i命令也返回空,好像是utmp的问题。

        1. 这个问题应该应该不大.

          Python Manual里写了:
          “For most purposes, it is more useful to use the environment variable LOGNAME to find out who the user is, or pwd.getpwuid(os.getuid())[0] to get the login name of the currently effective user id.”

          我搜到一篇涉及你说的这个问题的帖子, 你应该看得也是这篇吧? https://github.com/keithw/mosh/issues/201

发表评论

电子邮件地址不会被公开。 必填项已用*标注