您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

再也不用担心 SSH 断开了 - tmux 命令

时间:2020-11-04 09:14:53  来源:  作者:
再也不用担心 SSH 断开了 - tmux 命令

 

在服务器开发的过程中,经常使用SSH连接到远程服务上执行脚本,有些脚本可能需要运行一段时间

在脚本运行期间,如果会话超时或者会话意外断开又或者不小心关掉了关掉了当前会话窗口,那么脚本有可能执行到一半儿时就被强制停止了

更麻烦的是,可能数据只修改了一部分,而另一部分又没有修改,相当于出现脏数据了,这时就需要先恢复已经修改了的数据,才能再次执行脚本

今天介绍的 tmux 命令可以完美的避免上述问题

tmux 简介

tmux 是一个终端多路复用器,在终端中可以创建,访问和控制多个终端会话

在一个会话中可以打开多个窗口,每个窗口都占据整个屏幕,一个窗口还可以分成多个窗格

tmux 让远程终端窗口和会话分离开了,终端窗口关闭时,会话继续在后台运行,新的终端窗口可以随时接入会话,接入之后终端窗口上会显示会话的信息

tmux 启动时,会默认创建一个具有单个窗口的会话,在会话屏幕的底部,显示当前会话的信息

linux下 screen 命令的功能与 tmux 命令相似,相比 screen,tmux更易用,功能也更强大

安装

tmux 一般都是需要自己安装的,可以使用下面的命令安装 tmux

sudo yum install tmux

基础概念

在讲 tmux 命令的使用之前,先解释下 tmux中的 会话(session),窗口(window),窗格(pane) 之间的关系

再也不用担心 SSH 断开了 - tmux 命令

 

一个远程服务器终端窗口可以管理多个tmux会话(session)

一个tmux会话里可以管理多个窗口(window), 窗口(window)之间是互相独立的, 并且可以切换到任一窗口

一个窗口(window)可以划分成多个窗格(pane), 窗格之间是互相独立的, 也可以切换到任一窗格

快捷键前缀

进入tmux会话之后,会话中所有的快捷键,都需要先输入 Ctrl + B组合键,后面再输入快捷键才会生效,这里的 Ctrl + B组合键就是快捷键的前缀,可以把它理解成激活快捷键的前缀命令

进入tmux会话之后,tmux会话和终端分离的快捷命令是 Ctrl + B d

具体的使用方法是: 先在 tmux会话中,按下键盘上 Ctrl + B 组合键,然后再按下字母 d 键,会话就会和终端分离

会话操作

一个远程终端窗口可以创建多个会话,会话之间相互独立,可以随时分离、接入、退出,转换、重命名会话

  • 新建会话

终端中输入 tmux命令, 就进入了 tmux 窗口,底部是一个状态栏,状态栏左边是会话ID、窗口ID,当前用户命令目录,状态栏右边是系统信息,具体的如下图所示:

再也不用担心 SSH 断开了 - tmux 命令

 

1:会话ID,默认从0开始,依次递增

2:窗口ID,默认从0开始,依次递增

3:当前用户命令目录

4:系统信息

上面个的例子使用了ID编号来标识会话,实际使用中不便于记忆,也不直观,可以使用 tmux new -s <session-name> 创建一个自定义名字的会话

[root@ecs-centos-7 ~]# tmux new -s aa
[root@ecs-centos-7 ~]# tmux ls
aa: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34] (attached)

上面的例子中,tmux new -s aa 命令创建了一个名字是aa的会话

tmux ls命令是查看系统中的所有会话,从命令输出结果中可以看到

会话的名字是aa, 会话共有1个窗口,会话创建时间是Sun Sep 20 23:26:33 2020,后面的 attached 字符串表示当前终端已经接入了名字为aa的会话

  • 分离会话

在 tmux窗口中输入 tmux detach 命令或者使用快捷键 Ctrl + B d,即先按下 Ctrl + B键,再按下d 键,就会和会话分离

[root@ecs-centos-7 ~]# tmux detach
[aa] 0:root@ecs-centos-7:~*
[detached]
[root@ecs-centos-7 ~]#

上面的例子中,输入 tmux detach 命令之后tmux窗口从名字为 aa 的会话中分离出来了

  • 接入会话

tmux窗口中,使用 tmux attach -t 会话名或者会话ID 接入到指定会话名字或者会话ID的会话中

[root@ecs-centos-7 ~]# tmux ls
aa: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34]
bb: 1 windows (created Mon Sep 21 22:51:01 2020) [134x34]

[root@ecs-centos-7 ~]# tmux attach -t bb

[bb] 0:root@ecs-centos-7:~* 

上面的例子中 tmux ls 命令列出所有的会话,从结果中可以看到,目前有会话名字为 aa 和 bb 两个会话,tmux attach -t bb 命令使tmux窗口接入会话bb中

  • 转换会话

有时tmux窗口已经接入了一个会话,想转到另一个会话中执行命令,可以使用 tmux switch -t 会话名字或者会话ID转换到指定会话名字或者会话ID的会话中

[root@ecs-centos-7 ~]# tmux ls
aa: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34]
bb: 1 windows (created Mon Sep 21 22:51:01 2020) [134x34] (attached)

[root@ecs-centos-7 ~]# tmux switch -t aa
[root@ecs-centos-7 ~]# tmux ls
aa: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34] (attached)
bb: 1 windows (created Mon Sep 21 22:51:01 2020) [134x34] 

上面的例子中tmux窗口刚开始是接入的是 bb 的会话, 执行 tmux switch -t aa, 通过 tmux ls 命令结果可以知道tmux窗口从 bb 会话转换到 aa 会话中了

  • 重命名会话

在实际使用 tmux的过程中,为了便于记忆以及识别,会话名字都会改成一个有意义并且容易记忆的名字,tmux rename -t 旧会话名或会话ID 新会话名或会话ID 命令可以重命名一个会话

按 Ctrl + B $ 快捷键之后,tmux窗口底部的状态栏变成可输入状态,此时可以输入新的会话名字再按回车键确认修改也可完成会话的重命令

[root@ecs-centos-7 ~]# tmux ls
aa: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34]
bb: 1 windows (created Mon Sep 21 22:51:01 2020) [134x34]
[root@ecs-centos-7 ~]# tmux rename -t aa dev
[root@ecs-centos-7 ~]# tmux rename -t bb test
[root@ecs-centos-7 ~]# tmux ls
dev: 1 windows (created Sun Sep 20 23:26:33 2020) [134x34]
test: 1 windows (created Mon Sep 21 22:51:01 2020) [134x34]

上面的例子中,把 会话名aa 修改成 dev 表示这个会话是用于执行开发任务,把会话名 bb 修改成 test 表示这个会话是用于测试任务

  • 退出会话

当会话中任务执行完成之后,为了不在占用系统资源,可以在会话中输入 exit 命令或者 tmux kill-session -t 会话名或会话ID 命令 退出当前会话

如果tmux窗口没有接入任何一个会话中,tmux kill-seesion -t 会话名或会话ID 命令会使指定会话名或会话ID退出会话,tmux kill-server 命令使所有会话全部退出

[root@ecs-centos-7 ~]# tmux ls
aa: 2 windows (created Mon Sep 21 23:45:36 2020) [134x34]
bb: 1 windows (created Mon Sep 21 23:56:35 2020) [134x34]
cc: 1 windows (created Mon Sep 21 23:56:59 2020) [134x34]
dd: 1 windows (created Mon Sep 21 23:57:08 2020) [134x34]

[root@ecs-centos-7 ~]# tmux kill-session -t dd
[root@ecs-centos-7 ~]# tmux ls
aa: 2 windows (created Mon Sep 21 23:45:36 2020) [134x34]
bb: 1 windows (created Mon Sep 21 23:56:35 2020) [134x34]
cc: 1 windows (created Mon Sep 21 23:56:59 2020) [134x34]

[root@ecs-centos-7 ~]# tmux kill-server
[root@ecs-centos-7 ~]# tmux ls
failed to connect to server

上面例子中,一开始总共有 aa,bb, cc, dd 四个会话,tmux kill-session -t dd 命令使 dd 会话退出了,tmux kill-server 命令使剩下的 aa, bb, cc 会话也全部退出了

窗口操作

  • 创建窗口

tmux new-window命令用来创建一个窗口, 也可以使用快捷键 Ctrl + B c创建窗口

新建会话时,默认会创建一个窗口ID为0的窗口,每次创建窗口,窗口ID会自动递增, 新窗口会自动变成活跃窗口

[root@ecs-centos-7 ~]# tmux list-window
0: root@ecs-centos-7:~* (1 panes) [134x34] [layout bb3e,134x34,0,0,1] @1 (active)

[root@ecs-centos-7 ~]# tmux new-window
[root@ecs-centos-7 ~]# tmux list-window
0: root@ecs-centos-7:~- (1 panes) [134x34] [layout bb3e,134x34,0,0,1] @1
1: root@ecs-centos-7:~* (1 panes) [134x34] [layout bb45,134x34,0,0,8] @8 (active)

上面例子中 tmux list-window 是列出当前会话中所有的窗口,它的结果中最左边的数字是窗口ID,最右边括号的字符串 active 表示窗口是活跃状态

会话只有一个窗口时,默认就是活跃状态,使用 tmux new-window 命令创建一个窗口之后,默认新窗口是活跃状态

  • 切换窗口

下面是切换窗口相关的快捷键,在按下面的快捷键之前,需要先按快捷键前缀 ( 默认是 Ctrl + B )

p  前一个窗口
n  下一个窗口
l  最后一个窗口
w  选择窗口

我们以 选择窗口 的快捷键为例,按 Ctrl + B w 键之后,会出现类似下面的窗口列表

(0)  0: root@ecs-centos-7:~- "ecs-centos-7.4-64bit-20200212"    
(1)  1: root@ecs-centos-7:~  "ecs-centos-7.4-64bit-20200212"    
(2)  2: root@ecs-centos-7:~  "ecs-centos-7.4-64bit-20200212"    
(3)  3: root@ecs-centos-7:~* "ecs-centos-7.4-64bit-20200212"

同时光标默认选中当前活跃的窗口,我们可以从列表中选择一个窗口,然后按回车键,就会切换到选中的窗口

  • 删除窗口

tmux kill-window 命令可以删除当前窗口,当会话只有一个窗口时,使用这个命令会自动结束会话

tmux kill-window -t 窗口ID 命令是删除指定窗口ID的窗口

[root@ecs-centos-7 ~]# tmux list-window
0: root@ecs-centos-7:~  (1 panes) [171x42] [layout b4bd,171x42,0,0,0] @0
1: root@ecs-centos-7:~- (1 panes) [171x42] [layout b4be,171x42,0,0,1] @1
2: root@ecs-centos-7:~* (1 panes) [171x42] [layout b4bf,171x42,0,0,2] @2 (active)
[root@ecs-centos-7 ~]# tmux kill-window -t 0
[root@ecs-centos-7 ~]# tmux list-window
1: root@ecs-centos-7:~- (1 panes) [171x42] [layout b4be,171x42,0,0,1] @1
2: root@ecs-centos-7:~* (1 panes) [171x42] [layout b4bf,171x42,0,0,2] @2 (active) 

[root@ecs-centos-7 ~]# tmux kill-window
[root@ecs-centos-7 ~]# tmux list-window
1: root@ecs-centos-7:~* (1 panes) [171x42] [layout b4be,171x42,0,0,1] @1 (active)

上面的例子中,一开始有窗口ID分别是 0, 1, 2 的三个窗口,2 号 的窗口是活跃状态

tmux kill-window -t 0 命令删除了 0 号窗口, 活跃窗口不变,通过 tmux list-window 命令查看窗口列表,此时还剩下 1, 2 号窗口

再执行 tmux kill-window 命令删除当前活跃窗口,最后通过 tmux list-window 再次查看窗口列表,会话只剩下 1 号窗口了,同时因为 2 号窗口删除了,所以活跃窗口变成了1 号窗口了

窗格操作

  • 划分窗格

tmux split-window 命令可以把窗口划分成上下两个窗格

tmux split-window -h 命令可以把窗口划分成左右两个窗格

再也不用担心 SSH 断开了 - tmux 命令

 

上图中,第一步执行 tmux split-window 命令把窗口划分成上下两个窗格,鼠标光标默认在下面的窗格中,第二步执行 tmxu split-window -h 命令把下面的窗格划分成左右两个窗格,鼠标光标默认在右边的窗格中

  • 切换窗格

切换窗格可以看成鼠标的移动,切换到目标窗格之后,鼠标的光标也会移动到目标窗格中

tmux select-pane -U 命令可以切换到上一个窗格

tmux select-pane -D 命令可以切换到下一个窗格

tmux select-pane -L 命令可以切换到左边窗格

tmux select-pane -R 命令可以切换到右边窗格

Ctrl +B 方向键 快捷命令可以快速切换到上下左右窗格中,方向键是小键盘旁边的上下左右方向键

  • 交换窗格

tmux swap-pane -U 命令使当前窗格和上面的窗格交换位置

tmux swap-pane -D 命令使当前窗格和下面的窗格交换位置

Ctrl + B { 快捷键是和上一个窗格交换位置

Ctrl + B } 快捷键是和下一个窗格交换位置

再也不用担心 SSH 断开了 - tmux 命令

 

上面的例子中,先输入 tmux split-window 命令把窗口划分成上下两个窗格,鼠标光标在下面的窗格中,为了交换窗格操作前后的数据对比,在下面的窗格输出一个测试字符串

在下面的窗格中输入 tmux swap-pane -U 命令,上下窗格互相交换了位置,鼠标光标此时停留在上面的窗格中

在上面的窗格中输入 tmux swap-pane -D 命令,上下窗格再次互相交换位置,鼠标的光标变成了停留在下面的窗格中了

  • 删除窗格

tmux kill-pane 命令可以删除当前窗格,或者输入 exit 命令也可以删除当前窗格

tmux kill-pane -t 窗格ID 命令可以删除指定ID的窗格

Ctrl + B x 快捷键可以删除当前窗格,状态栏有一个是否删除的二次确认

再也不用担心 SSH 断开了 - tmux 命令

 

在上面的例子中,有上下两个窗格,在下面的窗格中输入 tmux kill-pane 命令,会删除当前窗格,删除之后,鼠标光标自动移动到上面的窗格中

上面的窗格中输入 tmux list-pane 命令是查看当前的窗格列表,从结果可以看出,目前只剩下 0 号窗格

再次输入 tmux kill-pane -t 0 命令,将 0 号窗格也删除了,由于删除的是会话最后一个窗格,所以删除操作会导致会话也退出了

小结

上面所讲述的只是 tmux 的一些日常用法,通过tmux list-command 命令可以了解更多命令的使用,通过 tmux list-keys 命令可以了解更多的快捷键的使用



Tags:SSH   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  Tags: SSH  点击:(16)  评论:(0)  加入收藏
在本教程中,将展示如何使用Centos8的DVD镜像引导Rescue救援模式,并在救援模式中启用网络、配置SSH服务,供用户远程登录该服务器 系统环境Centos8加载ISO镜像,进入救...【详细内容】
2021-11-30  Tags: SSH  点击:(29)  评论:(0)  加入收藏
事件起因从安全分析系统里面发现一条带有病毒的下载,然后针对这条记录展开了一系列的分析分析过程1.登录到被感染服务器,查看系统状况,hadoop 这个用户在 2020/6/18 20:32 从这...【详细内容】
2021-11-23  Tags: SSH  点击:(32)  评论:(0)  加入收藏
1.背景介绍几乎每一个玩渗透的人都会接触到metasploit framework,简称msf。这是一个渗透测试框架,用ruby语言编写的,该框架集成了很多可用的exploit,比如著名的ms08_067等。你可...【详细内容】
2021-11-15  Tags: SSH  点击:(37)  评论:(0)  加入收藏
老配置文件导到新交换机上,SSH不能登陆,会提示Received disconnect from 192.168.2.163: 2: The connection is closed by SSH ServerCurrent FSM is SSH_Main_VersionMatch其...【详细内容】
2021-10-26  Tags: SSH  点击:(159)  评论:(0)  加入收藏
背景上次给大家介绍了实现基础的运维系统功能&mdash;webssh,今日书接上回,继续给大家介绍一个web远程ssh终端录像回放功能。 一、思路网上查了一下资料,搜索了一下关于实现webs...【详细内容】
2021-10-13  Tags: SSH  点击:(40)  评论:(0)  加入收藏
一、背景介绍Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的...【详细内容】
2021-09-28  Tags: SSH  点击:(64)  评论:(0)  加入收藏
目的本文的目的是指导在Windows操作系统下面,如何配置通过ssh key来访问gerrit服务器。检查并生成本地的ssh key检查是否已经存在ssh key在生成本地的ssh key之前,我们需要首...【详细内容】
2021-07-23  Tags: SSH  点击:(127)  评论:(0)  加入收藏
作者:左右里编辑:釉子 据BitDefender安全研究人员称,他们发现了一个黑客组织正在以SSH暴力破解的方式攻击Linux设备,目的是在这些设备上安装门罗币恶意挖矿软件。SSH,一种为远程...【详细内容】
2021-07-22  Tags: SSH  点击:(185)  评论:(0)  加入收藏
今天在虚拟机里面安装了docker,利用docker起了一个centos。里面配置完成openssh后,利用xsheel连接docker里面的centos,发现特别慢,差不多要的1分钟才能连接上去。这肯定是有问题...【详细内容】
2021-07-21  Tags: SSH  点击:(131)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(13)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(21)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(21)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(34)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(26)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(16)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(24)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条