终端复用工具 tmux 基本操做教程

简介html

  在 Linux 操做环境下,终端操做是发挥 Linux 强大命令功能的重要途径,但在本地主机操做中,针对不一样任务开启不一样的终端,在使用时进行频繁的终端切换在某些场合下是一种令人分心和疲惫的操做,而经过远程登陆使用远端服务器的功能时, ssh 等远程登陆服务提供的单一终端时常不能知足正常的使用需求,并且单一终端上执行的任务也会受到 ssh 链接断开等意外情况的影响,如因为远程登陆断开使得终端上执行的任务也直接中止等。本文主要记录一种 Linux 平台下进行终端复用的工具 tmux,其能够在单一的终端上实现多任务管理,经过简单的操做进行任务之间的切换,且任务的执行不受终端退出等意外状况的影响。linux

  在 tmux 环境下,用户主要经过会话( session )来管理多个不一样任务的终端界面控制,其中,每一个会话能够拥有多个窗口( window )用于相关任务的显示,每一个窗口则能够进一步被划分为多个面板( pane )每个面板为一个独立的伪终端,从而在单一的终端命令中实现终端复用,即便当前终端退出登陆,只要会话不被注销,会话中相关的任务就会继续获得执行。git

   本文主要记录在常规使用过程当中经常使用的 tmux 功能按键和操做,以供备忘和参考。github

  (另注:通常在服务器环境下,经过源码编译安装 tmux 的过程是比较繁琐的,故而在服务器端想要使用这样的工具并不容易,更好的选择是通常的 linux 服务器会提供的 screen 命令,其简单用法可见笔者的另外一篇博文。) shell

 

tmux 安装bash

  在具有 root 或 sudo 权限的我的机器上,用户可经过系统自带的包管理工具安装 tmux ,如 Ubuntu 环境下可经过 apt 安装。服务器

    sudo apt install tmux    //Ubuntu 环境下经过 apt 安装 tmux

  在不具有 root 权限的远端服务器上,通常经过源码编译的方式将用户所需的应用程序、so库等放置在用户的主目录下,在编译时须要经过编译指令指定编译所需的头文件、so库文件的存放位置。同时,在使用源码编译时,用户须要自行解决不一样软件之间的依赖关系,只有将某一程序所需的全部依赖程序均安装成功后,最后才能顺利安装该软件。关于源码安装的简单原理能够参考笔者的记录在远程登录的主机上经过命令行源码编译安装 GNU M四、autoconf、automake 等程序.网络

 

基本按键session

  在原始的 shell 环境下,通常经过 tmux [ action ][ args ] 的命令行方式启动和使用 tmux。而在 tmux 的( 会话 )界面中,其主要的功能均经过 <prefix> + 功能键 的按键操做来实现,从而避免与其余系统按键之间的冲突,默认条件下,tmux 设置的 <prefix> 为 Ctrl + b,即用户在使用 tmux 时,可先按 Ctrl + b ,再按对应功能键使用对应的功能。ssh

   tmux [ action ][ args ]     //原始终端中启动和使用 tmux
    <prefix> 功能键          //经过 <prefix> 功能键 的按键操做使用 tmux 的功能,tmux 默认 prefix 为 Ctrl + b

  下文关于会话中功能键的介绍记录的是用户在已经按下 <prefix> 键后,使用不一样功能所需进一步按下的功能键

 

会话管理

  经过 ssh 远程登陆至远端服务器或打开本地命令行终端时, 可供用户使用的操做工具仅为单一的终端窗口。tmux 使用会话( session )的概念在单一终端窗口上实现终端复用,每一个终端与一个会话对应,用户可在不一样会话中管理不一样的任务,不一样会话之间相互不产生干扰。用户可自由的进行会话的建立和销毁,进入( attach )和脱离( detach )会话等操做。

  建立会话

  用户经过 tmux 命令建立一个新的会话。不指定参数时,tmux 建立一个拥有单一窗口(名为 bash )的默认会话(名为 1 )。此时即已进入 tmux 建立的会话中,屏幕的左下角标记当前所处的会话和窗口名。

    tmux [ new -s session_name -n window_name ]    //建立并进入一个名为 session_name 的会话,其拥有一个名为 window_name 的窗口 

  例:用户可经过如下命令建立一个名为 yh 的会话,其拥有一个名为 yh 的窗口,在 tmux 建立的会话环境下,屏幕的左下角提示当前的会话和窗口信息,* 表示当前所在的窗口。

      

  离开会话

  在 tmux 提供的会话环境下,用户可经过 <prefix> + d 脱离 tmux 的会话,回到原始的 shell 终端界面。上述离开过程称为 detach ,对应的会话实际上一直在后台运行,而不受其余操做( 如远程登陆断开 )的影响。

    d        //在 tmux 会话中,经过 <prefix> + d 返回原始 shell 终端

  或者直接在当前会话提供的终端中输入 tmux detach

    tmux detach    //退出当前的会话

  查询会话

  用户可经过经过输入命令 tmux ls 查询目前存在的会话。

    tmux ls        //显示当前存在的全部会话

  进入会话

  当用户离开( detach )某个会话后,该会话实际在后台运行而不是被注销,可经过 tmux attach 命令从新进入某个会话。在不指定 -t 参数时,默认进入的是用户最近离开的会话。

    tmux attach [ -t session_name ]    //进入一个名为 session_name 的会话中,命令中可以使用 attach、at 或 a

  注销会话

  可经过命令行方式即 tmux kill-session 命令删除某个会话。可经过 kill-server 命令删除全部的会话。上述命令在 tmux 会话或原始终端中均有效。

    tmux kill-session -t session-name   //删除名为 session-name 的会话
    tmux kill-server    //删除全部的会话

  基本原理

  在 tmux 实现中,会话实际由 tmux 客户端( client )显示在屏幕上,而全部的会话均由一个惟一的 tmux 服务器( server )进行管理,当用户创建第一个 tmux 会话时,tmux server 即启动,而当全部的会话都被注销时,tmux server 则自动中止,从而退出 tmux。tmux client 和 server 均为独立的进程,它们之间经过一个位于 /tmp 目录下的 socket 进行交互。当用户从原始的终端经过 tmux 命令建立一个会话或从新 attach 一个会话时,tmux 即在当前终端下创建一个 tmux client,用于显示进入的 tmux 会话,当用户在 tmux 中进行会话切换时,实际是将当前的 tmux client 从新 attach 到新的会话中( 从而显示新的会话 ),而当用户选择 detach 当前会话时,实际是取消 tmux client 与当前会话的绑定( 从而再也不显示该会话 ),不管是上述哪种状况,实际上只是 tmux client 再也不显示某一个会话,而不是关闭会话,会话仍会在后台运行,由 tmux server 进行管理。当从 tmux 退出至原始的终端时,该终端下创建的 tmux client 即自动退出。

  

窗口管理

  进入 tmux 的会话后,用户实际处于当前会话的一个窗口中,一个会话( session )能够拥有多个窗口( window ),一个窗口则能够进一步被划分为更小的面板( pane ).用户可在窗口下直接进行会话管理,窗口管理以及对窗口的进一步划分等操做。在 tmux 窗口下的各类功能通常经过 <prefix> + 功能键 的按键操做方式使用。

  会话管理

  用户可在 tmux 提供的界面中经过 < prefix > + 功能键 的方式进行会话切换,退出会话从而返回原始的 shell 终端等操做。

    d        //退出当前会话
    s        //列出全部会话,经过 j 和 k ( ↑ 和 ↓ )进行上下选择,经过回车肯定切换至该会话
    
    D       //选择一个会话来
    (       //切换 attached client 至前一个 session//切换 attached client 至后一个 session
    $    //重命名当前会话

 

  窗口管理

   每一个会话可拥有多个不一样的窗口,用户可经过 tmux 进行窗口的建立、销毁和切换等操做。

    c        //新建一个窗口
    &        //删除当前窗口,会提示经过 y/n 进行确认
    n        //切换至下一窗口
    p        //切换至前一窗口
    0-9    //切换至数字索引对应的窗口
   ,     //重命名当前窗口

 

面板管理

  在 tmux 提供的会话窗口中,每个窗口能够被进一步被划分为不一样的面板,每一面板为一个独立的伪终端,可进行独立的操做。进行操做的快捷键一样为 < prefix > + 功能键。

    "        //将当前窗口(面板)划分为上下两部分
    %       //将当前窗口(面板)划分为左右两部分
    x        //关闭当前的面板
    !        //将当前窗口(面板)单独做为一个窗口独立显示出来
    o        //在当前窗口的不一样面板间进行切换
    Ctrl + o    //逆时针旋转当前的面板布局,即不一样的面板逆时针切换至其逆时针相邻的面板的位置
    Ctrl + ↑/↓/←/→    //调整当前面板的大小,每次大小改变1个 cell
    Alt + ↑/↓/←/→     //调整当前面板的大小,每次大小改变5个 cell

 

命令操做

  在 tmux 中,也能够经过命令的方式进行会话、窗口和面板的管理。用户可经过 < prefix > + : 调出 tmux 的指令提示符,进而能够直接使用 tmux 支持的命令进行管理。

    :            //经过 < prefix > + : 调出 tmux 命令提示符,用户可在其中执行 tmux 支持的指令

  下面介绍一些简单的 tmux 支持的命令,更多的命令用户可经过 man tmux 查看 tmux 的使用说明。

    new [ -s session_name ]        //新建一个会话,可经过 -s 指定会话名,完整命令名为 new-session
    attach [ -t session_name ]     //将当前的 client 与指定的 session 绑定,从而显示新会话的内容,完整命令名为 attach-session
    detach [ -s target_session ][ -t target_client ]    //将与 -s 指定的session 绑定的 tmux client 解除绑定,或将 -t 指定的终端解除与会话的绑定,完整的命令名为 detach-client
    kill-session  [ -t session_name ]            //结束某个会话( session )
    list-clients                        //显示当前全部的 tmux client
    list-sessions                        //显示全部 tmux server 管理的会话( session )        

 

  实际上 tmux 提供强大的拓展功能,这里仅记录最基本的终端复用时的经常使用操做,更炫酷的效果是使用 tmux 实现将单一终端布局为相似集成开发环境的效果,有意者能够参考本文的参考资料和网络资料。

参考资料: 

  Tmux 说明文档: man tmux

  Tmux 快捷键 & 速查表:https://gist.github.com/ryerh/14b7c24dfd623ef8edc7

  Tmux 速成教程:技巧和调整:https://linux.cn/article-5666-1.html

  Tmux使用手册:http://louiszhai.github.io/2017/09/30/tmux/

  Linux下终端利器tmux:http://kumu-linux.github.io/blog/2013/08/06/tmux/

  tmux 指南:https://wdxtub.com/2016/03/30/tmux-guide/

  优雅地使用命令行:Tmux 终端复用:https://harttle.land/2015/11/06/tmux-startup.html

相关文章
相关标签/搜索