再也不用担心 SSH 断开了 - tmux 命令
nanshan 2024-10-26 11:16 11 浏览 0 评论
在服务器开发的过程中,经常使用SSH连接到远程服务上执行脚本,有些脚本可能需要运行一段时间
在脚本运行期间,如果会话超时或者会话意外断开又或者不小心关掉了关掉了当前会话窗口,那么脚本有可能执行到一半儿时就被强制停止了
更麻烦的是,可能数据只修改了一部分,而另一部分又没有修改,相当于出现脏数据了,这时就需要先恢复已经修改了的数据,才能再次执行脚本
今天介绍的 tmux 命令可以完美的避免上述问题
tmux 简介
tmux 是一个终端多路复用器,在终端中可以创建,访问和控制多个终端会话
在一个会话中可以打开多个窗口,每个窗口都占据整个屏幕,一个窗口还可以分成多个窗格
tmux 让远程终端窗口和会话分离开了,终端窗口关闭时,会话继续在后台运行,新的终端窗口可以随时接入会话,接入之后终端窗口上会显示会话的信息
tmux 启动时,会默认创建一个具有单个窗口的会话,在会话屏幕的底部,显示当前会话的信息
Linux下 screen 命令的功能与 tmux 命令相似,相比 screen,tmux更易用,功能也更强大
安装
tmux 一般都是需要自己安装的,可以使用下面的命令安装 tmux
sudo yum install tmux
基础概念
在讲 tmux 命令的使用之前,先解释下 tmux中的 会话(session),窗口(window),窗格(pane) 之间的关系
一个远程服务器终端窗口可以管理多个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,当前用户命令目录,状态栏右边是系统信息,具体的如下图所示:
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 命令可以把窗口划分成左右两个窗格
上图中,第一步执行 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 } 快捷键是和下一个窗格交换位置
上面的例子中,先输入 tmux split-window 命令把窗口划分成上下两个窗格,鼠标光标在下面的窗格中,为了交换窗格操作前后的数据对比,在下面的窗格输出一个测试字符串
在下面的窗格中输入 tmux swap-pane -U 命令,上下窗格互相交换了位置,鼠标光标此时停留在上面的窗格中
在上面的窗格中输入 tmux swap-pane -D 命令,上下窗格再次互相交换位置,鼠标的光标变成了停留在下面的窗格中了
- 删除窗格
tmux kill-pane 命令可以删除当前窗格,或者输入 exit 命令也可以删除当前窗格
tmux kill-pane -t 窗格ID 命令可以删除指定ID的窗格
Ctrl + B x 快捷键可以删除当前窗格,状态栏有一个是否删除的二次确认
在上面的例子中,有上下两个窗格,在下面的窗格中输入 tmux kill-pane 命令,会删除当前窗格,删除之后,鼠标光标自动移动到上面的窗格中
上面的窗格中输入 tmux list-pane 命令是查看当前的窗格列表,从结果可以看出,目前只剩下 0 号窗格
再次输入 tmux kill-pane -t 0 命令,将 0 号窗格也删除了,由于删除的是会话最后一个窗格,所以删除操作会导致会话也退出了
小结
上面所讲述的只是 tmux 的一些日常用法,通过tmux list-command 命令可以了解更多命令的使用,通过 tmux list-keys 命令可以了解更多的快捷键的使用
相关推荐
- 教你一个解决手机卡顿的方法(10秒解决手机卡顿问题)
-
我们的手机天天刷头条,看视频,用了一阶段时间以后,就时不时的发生卡顿现象。昨天我的手机就发现了这个问题。友友们,你们遇到过这样的问题吗?你们都是怎样解决的?我看了一眼我的粉丝情况,头条君给我分析的很精...
- 手机视频缓存清理,3步彻底清空,告别卡顿
-
在我们使用手机观看视频的过程中,经常会产生大量的缓存垃圾,这些垃圾文件不仅占用了手机的存储空间,还可能导致手机卡顿和运行缓慢。然而,你知道如何彻底清空手机的视频缓存,让手机恢复流畅的使用体验吗?在本文...
- 关手机这个开关,轻松提升流畅度!
-
关闭手机这个开关,跟新买的一样流畅。手机不要再清理垃圾了,只要关闭这个开关,手机就会和新买的差不多,丝滑流畅不卡顿。其实抖音里就隐藏着一个小开关,每天刷过的视频都会保存在手机里,如果一直不清理,手机就...
- 如何清理今日头条和西瓜视频的内存,让手机流畅不卡顿?
-
对于老年人而言,今日头条和西瓜视频能带来丰富的资讯与娱乐。然而,随着使用时间的增加,这些应用会占用大量手机内存,致使手机运行卡顿。那该如何解决呢?接下来,我将用最简单易懂的方式教老年人清理今日头条和西...
- 视频在线如何转换格式?好用不卡顿的三种转换办法
-
转换视频格式目前来说已经是很熟练的操作了,但是还有些用户可能还是不知道,小编今天就特意给大家带来一些小众才知道的转换教程,让新手也能快速的上手去转换视频格式,以后获取到视频就不怕内容丢失了,视频的格式...
- 如何把视频慢放处理?这几个慢放方法记得收藏
-
如何把视频慢放处理?如果你想让视频慢放,可能是因为你想放慢一些精彩的瞬间,或者你想制作一个慢动作视频。在这篇文章中,我们将介绍一些调速方法,这些方法可以有效地调整视频速度,一起来学习一下吧。方法一:使...
- 如何清理看过的视频,释放垃圾,让手机更流畅?
-
现在谁的手机上没几个短视频平台,无聊时就会刷别人的视频。可您知道吗?我们看过的内容都会被自动保存在手机里,而且很耗内存。如果长时间不释放,手机就会出现各种问题,其中最突出的就是反应慢。相信很多老年人的...
- 手机掉帧是怎么回事?刷视频的时候经常掉帧卡顿
-
手机掉帧是指在运行应用或视频时,画面出现卡顿、不流畅的现象,通常由硬件性能不足、软件优化不佳、内存占用过高、网络问题或设备过热等因素引起。尤其是在刷视频时,掉帧问题可能更为明显,以下是具体原因及解决方...
- 拍视频画面卡顿不流畅,原来是相机设置错误 #短视频拍摄
-
拍摄视频时,应该选择哪种快门速度?许多新手朋友可能会认为,快门速度越高,画面就越清晰,实则不然。因为拍摄视频时,需要考虑一个问题,即动态模糊。例如,如果设置为24帧/秒,那么每秒钟会拍摄24张图片。如...
- 手机卡顿最大原因#视频太卡怎么变流畅
-
抖音这几个开关是手机卡顿的最大原因。你是不是也会经常遇到刷视频的时候,打开一个视频之后老半天还在那转着圈圈,总觉得手机没有之前流畅了。这就说明你的手机占用的内存太多了,导致手机卡顿,使用不流畅。使用手...
- 为啥你家的玩游戏和刷视频经常性的会卡,那是你不懂这些小妙招
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:暴走的黄小猪说到网速有不少的值友都有一个共同点,那就是“卡”,那是你根本没体验过啥叫真正的网速啊,全屋零四条网络报表也花不了几个钱你们的方法...
- 电脑看视频卡顿有什么解决方法?(电脑看视频画面卡顿是什么原因)
-
电脑看视频卡顿的原因可能多种多样,包括硬件性能不足、网络问题、软件设置不当等。以下是一些常见的解决方法,帮助你改善视频播放的流畅度:一、硬件方面1.检查硬件性能:如果电脑配置较低,尤其是CPU、内存或...
- 手机Wi-Fi满格但视频卡顿,你需要这样解决
-
累了一天的打工人回家拿出手机准备玩玩游戏,看看电影时,发现网络异常卡顿,但手机又显示Wi-Fi信号满格,当咱们遇到此类问题时,这些动作能让网络恢复正常,方法如下。一、重启路由器和光猫很多家庭在安装好路...
- 视频越刷越卡?原来是路由器开启了这个功能,关闭方法来了
-
应该很多小伙伴都有过类似的经历,就是在家里长时间刷视频或者看剧的时候,网速好像会越来越慢,视频总是要加载。手机本身可能是一部分原因,但路由器也会影响,你知道吗?当我们在刷视频的,路由器会悄悄地开启大量...
- 一招解决视频卡顿的问题,改变发布渠道后,结果香了
-
最近一段时间拍了很多美景视频,编辑发布到头条后,有时一直显示在缓冲,播放不了,有时打开断断续续的,老是卡顿。导致的后果是:要么展现量很低,要么阅读量寥寥无几,这让我非常苦恼。所以再发布作品时,我只好文...
你 发表评论:
欢迎- 一周热门
-
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
WindowsServer2022|配置NTP服务器的命令
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)