终端复用工具tmux简单操作记录(代码片段)

yhjoker yhjoker     2023-01-15     621

关键词:

简介

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

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

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

 

tmux 安装

  在具备 root 或 sudo 权限的个人机器上,用户可通过系统自带的包管理工具安装 tmux ,如 Ubuntu 环境下可通过 apt 安装。

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

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

 

基本按键

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

   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    //退出当前的会话

  查询会话

  在原始的 shell 终端界面,可通过 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 提供的会话窗口中,每一个窗口可以被进一步被划分为不同的面板,每一面板为一个独立的伪终端,可进行独立的操作。

    "        //将当前窗口(面板)划分为上下两部分
    %       //将当前窗口(面板)划分为左右两部分
    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

 



linux笔记:终端复用与管理工具screen和tmux(代码片段)

...更多介绍tmux快速入门窗口与窗格更多介绍总结目的通过终端使用Linux时比较纠结的是一个终端通常同一时间只能做一件事,虽然可以将任务放入后台,但是对于有输出或交互的任务放入后台并不是一个好的选择。另一个... 查看详情

tmux终端复用详解

...什么我们在linux服务器上的工作一般都是通过一个远程的终端连接软件连接到远端系统进行操作,例如使用xshell或者SecureCRT工具通过ssh进行远程连接。在使用过程中,如果要做比较耗时的操作,例如有时候进行编译,或者下载大... 查看详情

[linux]tmux基础操作(代码片段)

...ght02大佬写的,本文主要参考这个什么是tmuxtmux是一个终端复用器:可以激活多个终端或窗口,在每个终端都可以单独访问,每一个终端都可以访问,运行和控制各自的程序.tmux类似于screen,可以关闭窗口将程序放在... 查看详情

tmux工具概念和使用(代码片段)

...ff1f;Github的地址:https://github.com/tmux/tmux可见tmux是一个终端多路复用器,能够在单屏条件下创建,访问和控制多个终端窗口。同时在终端窗口断开之后可以在主机后台继续运行,也可以之后重连。即优点如下:s... 查看详情

会话tmux的简单使用(代码片段)

...用crontab-ui来运行一些大的项目。但是,有时候。我们在终端用vim写代码的时候,突然有事情又需要关闭终端。所以,我们就会使用linux中一个非常好用的工具:tmux。同样,Mac系统也有这个工具。下面是一些简单的使用方法。安... 查看详情

tmux大法好(代码片段)

tmux是一个好工具啊到底哪里好呐?1、可以开多个终端窗口2、可以对当前终端窗口进行分屏3、可以保存之前所有的操作,记录下来,可回看4、可以团队协作,直击定位问题现场那么下面来安装一下tmux这个工具安... 查看详情

[转帖]tmux的使用说明(代码片段)

...s://www.cnblogs.com/chenshoubiao/p/4854987.html Tmux是一个优秀的终端复用软件,类似GNUScreen,但来自于OpenBSD,采用BSD授权。使用它最直观的 查看详情

远程炼丹:zerotier内网穿透+vscode配置远程开发+tmux终端复用(代码片段)

平时在开发深度学习等相关项目时,往往需要大型服务器或工作站的支持,远程开发时使用向日葵等远程桌面软件往往不是那么明知,多人使用冲突、限速卡顿,代码体验极其**。那么有没有更好的解决方案呢ÿ... 查看详情

tmux简单使用

tmux简单使用Tmux("TerminalMultiplexer"的简称),是一款优秀的终端复用软件,类似GNUscreen,但比screen更出色。tmux来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制... 查看详情

tmux神器(代码片段)

...钧轶(cenalulu)http://cenalulu.github.io/linux/tmux/tmux是一个优秀的终端复用器,通俗一点说就是“终端窗口管理器”如果本地开一个窗口连接到服务器跑前端程序,那么这个窗口就被占用了,如果需要再看别的程序就需要重新开一个窗口... 查看详情

linux下tmux的使用(代码片段)

Tmux(terminalmultiplexer)顾名思义是一个终端复用器,在开发过程中非常实用,可以很好的达到分屏作用。终端会话用户与计算机的交互方式就是打开一个终端窗口,进行会话(session)。session的特点是&#x... 查看详情

tmux入门(代码片段)

...显示的是文本编辑器,用于编辑代码。右边显示的是一个终端,用于执行代码。对于有图形界面的操作系统来说,以上需求非常容易实现,但是在一些时候,必须在没有安装图形界面的类Unix环境下进行开发。为了实现分屏,需... 查看详情

linux下tmux的使用(代码片段)

Tmux(terminalmultiplexer)顾名思义是一个终端复用器,在开发过程中非常实用,可以很好的达到分屏作用。终端会话用户与计算机的交互方式就是打开一个终端窗口,进行会话(session)。session的特点是&#x... 查看详情

快速重拾tmux(代码片段)

Tmux是一个Linux(MacOS也支持)下的终端复用器,相较于Screen更为强大,但快捷键和操作逻辑也更复杂,一段时间不用,就很容易忘记相关的命令和快捷键。本文旨在通过一个简单的场景,快速重拾TmuxTmux通常用来保持会话(session... 查看详情

tmux会话-基本操作及原理

...介绍:  Tmux(“TerminalMultiplexer”的简称),是一款优秀的终端复用软件,类似GNUscreen,但比screen更出色。  tmux来自于OpenBSD,采用BSD授权。  Tmux用于在一个终端窗口中运行多个终端会话。不仅如此,你还可以通过Tmux使终端会... 查看详情

tmux的使用(代码片段)

tmux的使用 1:tmux的介绍   tmux是一个优秀的终端多路复用软件,类似GNUScreen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再... 查看详情

linux终端复用神器-tmux使用梳理

...:https://www.cnblogs.com/kevingrace/p/6496899.htmlTmux是一个优秀的终端复用软件,类似GNUScreen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“... 查看详情

tmux使用及个性化配置(代码片段)

1.tmux介绍tmux是一个优秀的终端复用软件,split窗口。可以在一个terminal下打开多个终端。即使非正常掉线,也能保证当前的任务运行,这一点对于远程SSH访问特别有用,网络不好的情况下仍然能保证工作现场不丢失。SSH重新连接... 查看详情