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后,在其中可以开启多个控制台而无需再“ ...
随机推荐
- Struts2——第一个helloworld页面
struts2是一个较为成熟的mvc框架,先看看怎么配置struts2并且产生helloworld页面. 首先从官网下载struts2,http://struts.apache.org/downloa ...
- formidable 表单文件和数据提交
只要涉及文件上传,那么form标签要加一个属性: <form action="http://127.0.0.1/dopost" method="post" ...
- Python struct模块
有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...
- zTree根据json选中节点,并且设置其他节点不可选
首先,在适配目录树时,使用checkbox形式,配置代码如下: var settingCatalog = { check:{ enable: true }, data:{ simpleData:{ e ...
- crontab的mysqldump备份任务未能完全正确执行的故障处理
crontab是每个运维一线人员必须掌握的技术,熟练运用crontab可以自动帮助我们执行重复性的工作,提高运维的工作效率.它就像一个闹钟,在特定的时间,准时响应并执行相应的任务.如果你的工作经常与L ...
- linux下执行java类(运行java定时器)
假如有一个定时器TimerTest.java import java.io.IOException; import java.util.Timer; public class TimerTest { ...
- 原生Ajax用法——一个简单的实例
Ajax全名(Asynchronous(异步) JavaScript and XML )是可以实现局部刷新的 在讲AJax之前我们先用简单的实例说一下同步和异步这个概念 /*异步的概念(就是当领导有一 ...
- SpringCloud的服务注册中心(二)注册中心服务端和两个微服务应用客户端
一.构建EurekaServer工程 1.pom.xml 2.application.yml 3. EurekaServerApp.java 4.启动EurekaServer 二.构建部署 Eurek ...
- Python 自动化 第一周
1.Python简介 1.1.Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时 ...
- JS解析JSON字符串
问题描述:后台需要传递给前台一些数据,用于页面数据显示,因为是一些Lable标签,所以数据传递到前台需要解析. 思路:因为数据比较杂乱,所以我选择传递的数据类型是Json格式,但是数据展示时需要解析成 ...