终端复用工具 tmux 基本操作教程
在 Linux 操作环境下,终端操作是发挥 Linux 强大命令功能的重要途径,但在本地主机操作中,针对不同任务开启不同的终端,在使用时进行频繁的终端切换在某些场合下是一种使人分心和疲惫的操作,而通过远程登录使用远端服务器的功能时, ssh 等远程登录服务提供的单一终端时常不能满足正常的使用需求,而且单一终端上执行的任务也会受到 ssh 连接断开等意外状况的影响,如由于远程登录断开使得终端上执行的任务也直接停止等。本文主要记录一种 Linux 平台下进行终端复用的工具 tmux,其可以在单一的终端上实现多任务管理,通过简单的操作进行任务之间的切换,且任务的执行不受终端退出等意外情况的影响。
在 tmux 环境下,用户主要通过会话( session )来管理多个不同任务的终端界面控制,其中,每个会话可以拥有多个窗口( window )用于相关任务的显示,每个窗口则可以进一步被划分为多个面板( pane )每一个面板为一个独立的伪终端,从而在单一的终端命令中实现终端复用,即使当前终端退出登录,只要会话不被注销,会话中相关的任务就会继续得到执行。
本文主要记录在常规使用过程中常用的 tmux 功能按键和操作,以供备忘和参考。
(另注:一般在服务器环境下,通过源码编译安装 tmux 的过程是比较繁琐的,故而在服务器端想要使用这样的工具并不容易,更好的选择是一般的 linux 服务器会提供的 screen 命令,其简单用法可见笔者的另一篇博文。)
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 的窗口,注注意 new 对应的是新建的含义
例:用户可通过以下命令创建一个名为 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 //切换至前一窗口
-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
终端复用工具 tmux 基本操作教程的更多相关文章
- 终端复用工具-tmux
目录 终端复用工具--Tmux 一.为什么要用Tmux? 二.tmux是什么? 三.Tmux基本概念 四.Tmux使用规则 1.安装Tmux 2.基本使用 3.自定义配置文件 五.补充 1.tmux ...
- Linux终端复用工具 tmux
简介 Terminal Multiplexer (From WIKIPEDIA) - A terminal multiplexer is a software application that can ...
- 终端复用工具tmux的使用
tmux的作用在于终端复用. 1. 在server上启动一个bash.并在里面执行tmux 2. 通过ssh远程登录server,执行tmux attach,就会切换到server上的那个bash中, ...
- Linux终端复用工具tmux的使用和配置
1. 会话管理 新建会话 $ tmux new -s session-one -d -s:指定回话名称 -d:会话在后台运行 查看所有会话 $ tmux ls session-one: 1 windo ...
- (转载)Linux终端复用神器-Tmux使用
Linux终端复用神器-Tmux使用 转载地址:https://blog.51cto.com/652465/2094738 Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于Open ...
- Linux终端复用神器-Tmux使用梳理
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“ ...
- 终端复用软件 tmux
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权. Tmux 所使用的快捷键前缀默认是组合键 Ctrl-b(同时按下 Ctrl 键和 b 键). 技巧 ...
- Linux/UNIX 下终端复用利器 tmux
简介 tmux 是一个终端复用器类自由软件,功能类似 GNU Screen,但使用 BSD 许可发布.用户可以通过 tmux 在一个终端内管理多个分离的会话,窗口及面板,对于同时使用多个命令行,或多个 ...
- screen 命令基本操作教程
sreen 命令提供的基本功能与 tmux 较为相似( 关于 tmux 基本操作可参见笔者的博文 终端复用工具 tmux 基本操作教程 ).screen 命令以会话( session )为基础为用户提 ...
随机推荐
- cmd下命令提示符下杀进程主要有三种方法
https://blog.csdn.net/sunboy2718/article/details/30056787 1.用taskkill命令 1.taskkill /im 进程名称 示例:用task ...
- 基于.NET Core2的图片上传
其实,.NET Core2的图片上传挺好做的,只是,有些坑要注意.......话不多说,上代码 public async Task<IActionResult> Upload([FromS ...
- [javaSE] 集合框架(TreeSet)
TreeSet:可以对Set集合中的元素排序,默认按照ascii表排序,二叉树结构 左边叉是小的,右边叉是大的 存储自定义对象 定义一个类Student实现Comparable类,使自定义类具备比较性 ...
- golang chan 发送接收测试数据
测试代码: package main import ( "fmt" "time" ) const ( num = 10000000 / ...
- VMWare安装Mac OS X
原文作者 谷月K 2016.08.16 18:55 字数3473 随着iPhone.iPad.Mac等苹果产品越来越火爆,越来越多的初学者想要了解和尝试苹果平台,包括苹果操作系统Mac OS X.苹果 ...
- C#的字节与流
计算机中文件有很多种,我们知道实际存在计算机中的都是二进制.这里我记录了通过流对文件的读取操作. 一.首先在这里简单涉及下位,字节,字符的概念. 位(bit):可以表示0或1: 字节(byte):由8 ...
- YII 用gii生成modules模块下的mvc
1.生成model ModelPath设置为: application.modules.[moduleName].models 2.生成CURD ModelClass设置为: application. ...
- nodejs做的一个测试端口程序
最近在学习nodejs的http,然后做了一个测试域名有没有使用那些端口,原意是用来做一个本地的静态服务器,然后运行前先测试端口,首先要用到的是net模块,主要用到的是Socket,判断其连接状态即可 ...
- js-权威指南学习笔记17
第十七章 事件处理 1.事件处理程序或事件监听程序是处理或响应事件的函数. 2.事件对象是与特定事件相关且包含有关该事件详细信息的对象. 3.响应通过键盘改变焦点的表单元素在得到和失去焦点时会分别出发 ...
- Spark2.x详解
一.概述 Apache Spark 是一个快速的, 多用途的集群计算系统. 它提供了 Java, Scala, Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎. 它还 ...