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


再也不用担心 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 lsaa: 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 lsaa: 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的会话中


推荐阅读