zoukankan      html  css  js  c++  java
  • tmux入门 : 3. 会话

     

    上一节我们已经将 tmux 安装好了,现在就可以通过以下命令来启动它:
    
    $ tmux
    启动之后,可以看到命令行最底部多了一条绿色的状态条,上面显示了一些信息,比如计算机名和时间等。 要退出 tmux,可以输入 exit 回车或者按下组合键 [Ctrl+d] 。
    
    其实刚才我们启动 tmux 之后,它已经自动创建了一个会话(Session),会话是 tmux 的最主要的功能,接下来我们将介绍会话的一些功能。
    
    新建会话
    
    启动 tmux 会自动创建会话,但并没有为会话命名。为了以后使用方便,我们来创建一个自己命名的会话,命令如下:
    
    $ tmux new-session -s <会话名称>
    现在我们来创建一个会话,取名为 dev ,命令为:
    
    $ tmux new-session -s dev
    创建完成之后,可以看到底部状态条左边标示出了当前的会话名为 dev 。
    
    这个命令还有一个缩写版本, new-session 缩写成 new ,也就是上述命令可以简写成:
    
    $ tmux new -s dev
    新建会话还可以带上一个初始命令:
    
    $ tmux new -s <会话名称> 初始命令
    比如创建一个名为 monitor 的会话,初始命令为 top :
    
    $ tmux new -s monitor top
    可以看到会话创建后,会自动运行 top 命令。但是一旦退出 top 程序 (按 [q] ),会话也会自动退出,所以在实际应用中,初始命令几乎不会用到。
    
    分离会话(detach)
    
    之前已经说过,退出 tmux 可以使用 exit 命令或者 [Ctrl+d] 组合键,退出 tmux 会把会话结束掉,就像平常关闭终端程序一样。但是在实际应用中,可能你并不希望这样,因为有些程序是要保持运行的,例如 rails 的测试服务、telnet连接远程服务器等等。
    
    这时候分离会话就可以派上用场了,分离后的会话并不会把运行中的程序结束掉,而是会保持运行,你还可以稍后重新连接上这些会话。
    
    分离会话之前,我们先来启动一个需要保持运行的程序,这里用 python 2.x 的 SimpleHTTPServer 为例, 当然你也可以选择启动 rails 或 django 的测试服务、telnet 连接或者更简单的 top 命令。
    
    先在之前创建的会话中运行一下命令来启动一个简单的 HTTP 服务:
    
    $ python -m SimpleHTTPServer
    Serving HTTP on 0.0.0.0 port 8000 ...
    这时候 HTTP 服务已经运行起来了,接下来就要做分离会话的操作了,快捷键是:
    
    [Ctrl+b] [d]
    
    也就是先按下组合键 [Ctrl+b] 然后再接着按 [d] 。d 代表了 detach,而 [Ctrl+b] 是一个命令前缀(官方称之为 prefix),这个命令前缀是告诉终端程序,接下来的命令是针对 tmux 使用的。在之后的描述中,都将采用 [前缀] 来代替 tmux 的命令前缀。
    
    可以看到,在按下快捷键之后,tmux 已经退出并回到平常的终端中,并带着 [detached] 字样的提示。
    
    这时候可以在浏览器访问一下刚才启动的 HTTP 服务 http://localhost:8000,确实可以正常访问,证明刚才的程序还在保持运行中,并没有被结束,甚至你还可以把整个终端程序关闭。
    
    可能有人会很不习惯这个默认的命令前缀,包括我自己在内,因为 [Ctrl+b] 是一个 Emacs 或 Vim 的快捷键,甚至是命令行本身的快捷键。在 Emacs 或者命令行中,它是后退一个字符的操作;而在 Vim 中,它是一个向上翻页的操作。不过不用担心,先忍耐忍耐,稍后的章节将讲述如何配置 tmux,那时就可以摆脱快捷键冲突的困扰了。
    
    连接会话(attach)
    
    被分离的会话,还可以重新连接上,就让我们来实践一下,命令为:
    
    $ tmux attach-session -t <目标会话名>
    简写为
    
    $ tmux attach -t <目标会话名>
    或
    
    $ tmux a -t <目标会话名>
    之前我们创建的会话名叫 dev ,所以命令就可以这样写:
    
    $ tmux a -t dev
    因为我们只创建了一个会话,所以可以忽略 -t 的参数,直接写成:
    
    $ tmux a
    如果不指定目标会话名,tmux 将会连接你上次使用的会话。连接上 dev 会话之后,可以看到程序还在运行中,而且终端里显示的内容跟会话分离前没什么两样,只是多了几行 HTTP 请求的日志。
    
    这时候,你还可以在多个终端,甚至是多台电脑通过 ssh 连接上同一个会话,可以实现共同操作,非常强大,具体的感受可以自己体会。
    
    接下来我们多创建几个 tmux 会话,在这之前先把当前会话分离掉:
    
    分离当前会话: [前缀] d
    新建一个名为 edit 的会话: $ tmux new -s edit
    分离 edit 会话: [前缀] d
    新建一个名为 telnet 的会话: $ tmux new -s telnet
    分离 telnet 会话: [前缀] d
    现在,会话已经足够多了,接下来登场的就是列出所有会话的命令:
    
    $ tmux list-sessions
    可以简写成
    
    $ tmux ls
    屏幕上将会显示出所有创建的会话,比如:
    
    dev: 1 windows (created Tue Jun 10 15:10:32 2014) [80x24]
    edit: 1 windows (created Tue Jun 10 16:26:20 2014) [80x24]
    telnet: 1 windows (created Tue Jun 10 16:26:53 2014) [80x24]
    这时候连接会话的 -t 参数就派上用场了,你可以选择连接到哪一个会话。
    
    如果没有创建会话或者会话都全已退出,那么列出所有会话的命令将会提示一个 failed to connect to server 的信息,可以看得出来 tmux 是有运行一个服务的,这个服务管理着所有的会话,并让他们持续运行。
    
    小结
    
    通过创建多会话,以及分离/连接的功能,还能实现多终端连接同一会话,已经完全可以轻松应付许多平常很以实现的功能。在下一章节中,我们将讨论 tmux 里窗口(Window)的功能。
  • 相关阅读:
    php 接口类与抽象类的实际作用
    php中的implements 使用详解
    swoole两种运行模式BASE和PROCESS的区别
    Java多线程总结
    Shell WordCount:一行shell命令统计固定格式单词词频
    收藏大数据相关写的比较好的博客
    Hive-SQL查询连续活跃登陆的用户
    Mysql触发器
    Python json字符串和字典相互转换
    MySQL基础之实现累加值
  • 原文地址:https://www.cnblogs.com/chjbbs/p/5687536.html
Copyright © 2011-2022 走看看