tmux 终端复用详解
tmux是什么
我们在linux服务器上的工作一般都是通过一个远程的终端连接软件连接到远端系统进行操作,例如使用xshell或者SecureCRT工具通过ssh进行远程连接。在使用过程中,如果要做比较耗时的操作,例如有时候进行编译,或者下载大文件需要比较长的时间,一般情况下是下班之后直接运行希望第二天早上过来运行完成,这样就不用耽误工作时间。但是网络有时候不稳定,可能在半夜会出现连接断掉的情况,一旦连接断掉,我们所执行的程序也就中断,我们当然可以写一个脚本后台运行,但是还是不方便。那么有没有一种工具可以解决这样的问题呢。这就是我们这里要提到的tmux了。其实类似tmux的工具还有很多。例如gnu screen等。tmux刚好可以解决我们描述的问题,当我们在tmux中工作的时候,即使关掉SecureCRT的连接窗口,再次连接,进入tmux的会话我们之前的工作仍然在继续。
tmux是一个linux下面的工具,在使用之前需要安装,就像安装linux下的其他工具一样方便。首先我们通过SecureCRT连接登入远程的linux机器,我们将此时的环境称为终端环境。如果这个机器上并没有安装tmux,我们需要安装。例如在CentOs上是yum install tmux,完成之后我们就可以使用tmux命令了。tmux中有3种概念,会话,窗口(window),窗格(pane)。会话有点像是tmux的服务,在后端运行,我们可以通过tmux命令创建这种服务,并且可以通过tmux命令查看,附加到后端运行的会话中。一个会话可以包含多个窗口,一个窗口可以被分割成多个窗格(pane)。首先我们来看一下tmux的会话。
tmux的会话
1. tmux new -s session1 新建会话
使用 tmux new -s 命令新建一个会话 -s (其实是session的头字母)。后面指定会话名即可。运行之后会从shell的终端环境进入到会话环境中,并停留在刚才新建的会话中。例如:
可以看到进入session之后的显示,在下面有一条绿色的状态指示栏,左边显示的是当前会话的名字,紧接着是会话中的窗口(window)序号以及窗口名字。关于窗口的概念我们后面再说,窗口名字后面有一个星号*表示是我们操作的当前窗口,一个会话中可以有多个窗口。当进入一个会话之后,会自动创建一个窗口。如上图所示,上面的环境在本章中称为会话环境。这样我们就已经开始了tmux的使用,如果此时关闭掉SecureCRT软件,下次在进入,该会话仍然在运行工。也就是说我们在刚刚进入的会话环境中使用wget下载一个超大的文件,或者是编译一个非常耗时的项目,我们关闭掉该SecureCRT的连接,下次再进入,这个会话依然存在,会话里面运行的编译命令或者wget下载命令仍然在运行,并不会因为关闭SecureCRT而终止,这正是我们需要的功能。不受SecureCRT网络连接的影响。甚至我们可以关掉整个SecureCRT程序。
2. ctrl+b d 退出会话,回到shell的终端环境
我们刚才是通过 tmux new -s 命令创建一个tmux会话并进入该会话的,如果要退出这个会话环境回到终端环境(会话里面的程序不会退出在后台保持继续运行)。应该如何操作呢,例如上图,当前我们在tmux的会话环境中,使用一个快捷键 ctrl+b d (按ctrl+b 之后再按一个字母d即可,字母d是detach的缩写)。操作之后的结果如下:
可以看到绿色的状态栏消失了,而顶部出现一个[detached],表示已经脱离tmux会话,现在已经不在tmux的会话环境中回到shell终端环境中了。
这里有必要说一下在tmux会话环境中,我们经常会用到tmux的组合键,一般的组合键中都会加一个前缀也就是 ctrl+b 另外,在后面的描述中,我们说的终端环境是指使用SecureCRT进入远程linux之后但是没有进入tmux的会话环境的状态。
通过上面的操作 ctrl+b d 之后,回到终端环境,实际上现在tmux的会话还在后台运行,如何查看呢。
3. tmux ls 终端环境查看会话列表
在终端环境中,我们可以通过tmux ls 命令来查看后台运行中的tmux的会话列表,例如:
可以看到在列出的列表中,只有1行,说明只有一个session,其中左边的session1表示该session的名字,中间2 windows说明该session1会话中有2个window,右边表示该会话创建的时间。如果该机器中有多个tmux会话在后台运行,那么这里会列出多行。因为tmux会话在后台运行,我们猜测实际上肯定是有tmux的进程在后台运行来维持这些会话。我们可以ps看一下:
可以看到我们之前创建会话的命令还在后端运行。
4. ctrl+b s 会话环境查看会话列表
上面的命令中我们已经退出了tmux的会话环境,在终端环境中通过tmux ls 来列出当前linux机器后台运行的tmux会话列表。那么假设我们当前环境已经在tmux的会话环境中,我们如何得到当前tmux的会话列表呢,如果每次都要退出当前会话,先回到shell终端环境再运行tmux ls 来查看就很不方便,那么在tmux的会话环境中,我们可以通过 ctrl+b s 来获取当前linux机器上tmux所有的后台会话列表,例如操作之后显示如下:
此时可以通过方向键选择会话并回车,在会话间进行切换。
5. tmux a -t session1 从终端环境进入会话
如果在终端环境中运行 tmux ls 查看有tmux会话正在后台运行,如何进入到该正在后台中运行的会话呢,通过运行 tmux a -t session1 即可进入到该已存在的会话 session1 中。其中a字母是attach的头字母,表示附加, -t 指定要进入已存在的会话名,如果不存在则会报告 session not found 错误。
6. tmux kill-session -t session1 销毁会话
我们可以在终端环境和会话环境中销毁会话,例如在终端环境中运行 tmux kill-session -t session1 结束名字为session1的tmux会话。
在会话环境中运行 ctrl+b :
(注意按组合键之后再按一个冒号键),状态栏变成黄色之后提示我们可以在会话环境中输入命令,此时输入 kill-session -t session1 回车即可。其中session1是要销毁的会话名。
会话销毁之后,在终端环境中运行tmux ls 或者在会话环境中运行 ctrl+b s 则被销毁的会话不会再出现在会话列表中。
tmux的window
一个tmux的会话中可以有多个窗口(window),每个窗口又可以分割成多个pane(窗格)。我们工作的最小单位其实是窗格。默认情况下在一个window中,只有一个大窗格,占满整个窗口区域。我们在这个区域工作。
本节我们讲解一下tmux窗口的相关操作,后面我们再说一下关于窗格(pane)的相关知识。首先在新创建的一个会话里面是会默认创建一个窗口的。正如我们上面提到过的图一样,如下所示:
新创建的会话中会默认创建一个窗口,该窗口名字一般是登陆终端的用户名@主机名,我们可以通过 crtl+b ,
(组合键之后按一个逗号)来修改当前窗口的名字,如上图所示的窗口名字myserver1就是修改之后的名字。该名字后面有一个*号,表示该窗口是活动窗口(键盘输入会输入到该窗口中)
1. 创建window
可以在当前会话窗口中创建多个窗口,例如 ctrl+b c 创建之后会多出一个窗口如下图所示:
默认情况下创建出来的窗口由窗口序号+窗口名字组成,窗口名字可以由上面提到的方法修改,可以看到新创建的窗口后面有*号,表示是当前窗口。
2. 切换window
在同一个会话的多个窗口之间可以通过如下快捷键进行切换:
ctrl+b p (previous的首字母) 切换到上一个window。
ctrl+b n (next的首字母) 切换到下一个window。
ctrl+b 0 切换到0号window,依次类推,可换成任意窗口序号
ctrl+b w (windows的首字母) 列出当前session所有window,通过上、下键切换窗口
ctrl+b l (字母L的小写)相邻的window切换
3. ctrl+b & 关闭window
ctrl+b & 关闭当前window,会给出提示是否关闭当前窗口,按下y确认即可。
tmux的pane
tmux的一个窗口可以被分成多个pane(窗格),可以做出分屏的效果。
1. ctrl+b % 垂直分屏(组合键之后按一个百分号),用一条垂线把当前窗口分成左右两屏。
2. ctrl+b " 水平分屏(组合键之后按一个双引号),用一条水平线把当前窗口分成上下两屏。
分屏之后光标停留在哪个pane上,表示该pane是活动的,另外一般情况下当前pane会被绿色的线条围起来。一般分屏之后当前窗口名字会重置为默认窗口名字。通过多次分屏操作,我们可以得到各种样子的分屏效果,例如下图显示的是一次垂直分屏之后,在右边pane中再次水平分屏的效果:
可以看到右下角的分屏是绿色框,说明是当前活动pane
3. 切换pane
ctrl+b o 依次切换当前窗口下的各个pane。
ctrl+b Up|Down|Left|Right 根据按箭方向选择切换到某个pane。
ctrl+b Space (空格键) 对当前窗口下的所有pane重新排列布局,每按一次,换一种样式。
ctrl+b z 最大化当前pane。再按一次后恢复。
4. 关闭pane
ctrl+b x 关闭当前使用中的pane,操作之后会给出是否关闭的提示,按y确认即关闭。
总结
tmux中的最重要的三个概念会话,窗口,pane的使用方法已经介绍完毕,其实这是我们操作tmux的最常用功能,如果掌握好,足以应付大多数工作。另外tmux还有一些高级用法,例如可以个性化的配置其组合键(官方默认的ctrl+b组合键按起来不太方便可以修改,UI设置,鼠标支持,复制粘贴等),但是我觉得这些高级功能基本不太用的到。如有需要大家可以自行查阅相关资料。
tmux 终端复用详解的更多相关文章
- [Linux] tmux 终端复用命令行工具
tmux 终端复用命令行工具 tmux 是一款终端复用命令行工具,通常用于 Terminal 的窗口管理.可以在终端软件重启后通过命令行恢复上次的 session. 安装运行 macOS 上使用 Ho ...
- tmux终端复用/tmate终端共享
目录 tmux tmate tmux 一种终端复用工具,是终端中的窗口管理器.常见的一种用途是在关闭父shell时保持程序运行(常用于ssh访问断开连接后保持运行).linux上可通过包管理器进行安装 ...
- [linux] tmux终端复用神器 [转载]
转载https://www.cnblogs.com/kevingrace/p/6496899.html Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授 ...
- 优雅地使用命令行:Tmux 终端复用
转自:http://harttle.com/2015/11/06/tmux-startup.html 你是否曾经开过一大堆的Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就 ...
- Tmux终端复用神器使用心得
tmux在连接远程服务器做实验时很有帮助,可以为每一个项目设置一个Session,在Session中设置不同的Window同时跑多个实验,Window本身还可以分割为多个Pane,在一个视野内利用多个 ...
- 【转】linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解----不错
原文网址:http://blog.csdn.net/liaoxinmeng/article/details/5004743 首先: 1.终端和控制台都不是个人电脑的概念,而是多人共用的小型中型大型计算 ...
- windows 终端命令详解
打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令后关闭cmd ...
- tmux终端复用神器简单使用
创建命名Tmux会话(tmux new -s session_name)tmux new -s session_name chongchong 暂退Tmux会话(Ctrl + a d)直接关窗口 返回 ...
- Linux终端复用神器-Tmux使用梳理
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“ ...
随机推荐
- 算法题丨Longest Consecutive Sequence
描述 Given an unsorted array of integers, find the length of the longest consecutive elements sequence ...
- Leetcode 5——Median of Two Sorted Arrays
题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...
- 测试工作中经常用到的几个Linux命令(第一弹)
自己平时测试工作中经常要在Linux下搭建测试环境,有涉及到启动/终止服务器,修改tomcat配置文件,偶尔碰到端口被占用... 这时就不得不需要一些基本的Linux命令来处理遇到的这些问题(顺便迈向 ...
- C语言博客作业—一二维数组
一.PTA实验作业 题目1:7-2 求整数序列中出现次数最多的数 1. 本题PTA提交列表 2. 设计思路 Begin 输入整数个数N 定义数组a[N] 输入数组a for(i 0 to N-1){/ ...
- 201621123050 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 答 ...
- 项目Alpha冲刺Day5
一.会议照片 二.项目进展 1.今日安排 熟悉后台框架并尝试编写及继续搭建前台框架模版.完成登录相关的功能实现,添加一些用户相关的单元测试代码,以及相应的测试数据. 2.问题困难 前端不是很熟,页面框 ...
- maven添加oracle驱动
由于oracle商业版权问题,maven是不可以直接下载jar包的,所以.. 先将ojdbc14.jar放到用户目录,win7放到C:\Users\Administrator然后在cmd执行 ...
- 实验二Java面向对象程序设计实验报告(2)
实验二 Java面向对象程序设计 实验概述: 课程:程序设计与数据结构 班级:1623班 姓名: 邢天岳 学号:2309 指导老师:娄老师 王老师 实验日期:2017.4.16 实验名称: Java面 ...
- mysql基础篇 - SELECT 语句详解
基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...
- C++中文件的读写
C++中文件的读写 在C++中如何实现文件的读写? 一.ASCII 输出 为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstrea ...