Linux tmux命令(后台运行)
简介
Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。
Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机。是BSD实现的Screen替代品,相对于Screen,它更加先进:支持屏幕切分,而且具备丰富的命令行参数,使其可以灵活、动态的进行各种布局和操作。对于Tmux的使用,可以参考:Tmux终端复用详解
Tmux 可用于在一个终端窗口中运行多个终端会话。不仅如此,还可以通过 Tmux 使终端会话运行于后台或是按需接入、断开会话,这个功能非常实用。
Tmux的使用场景
1)可以某个程序在执行时一直是输出状态,需要结合nohup、&来放在后台执行,并且ctrl+c结束。这时可以打开一个Tmux窗口,在该窗口里执行这个程序,用来保证该程序一直在执行中,只要Tmux这个窗口不关闭
2)公司需要备份数据库时,数据量巨大,备份两三天弄不完,这时不小心关闭了终端窗口或误操作就前功尽弃了,使用Tmux会话运行命令或任务,就不用担心这些问题。
3)下班后,你需要断开ssh或关闭电脑,将运行的命令或任务放置后台运行。
4)关闭终端,再次打开时原终端里面的任务进程依然不会中断
Tmux功能:
- 提供了强劲的、易于使用的命令行界面。
- 可横向和纵向分割窗口。
- 窗格可以自由移动和调整大小,或直接利用四个预设布局之一。
- 支持 UTF-8 编码及 256 色终端。
- 可在多个缓冲区进行复制和粘贴。
- 可通过交互式菜单来选择窗口、会话及客户端。
- 支持跨窗口搜索。
- 支持自动及手动锁定窗口。
tmux 应用程序的名称来源于终端(terminal)复用器(muxer)或多路复用器(multiplexer)。换句话说,它可以将您的单终端会话分成多个会话。 它管理窗口和窗格:
- 窗口(window)是一个单一的视图 - 也就是终端中显示的各种东西。
- 窗格(pane)是该视图的一部分,通常是一个终端会话。
tmux有三个基本概念:会话(Session),窗口(Window)和面板(Pane). 当你输入tmux后, tmux实际做的事是首先创建一个会话(Session), 然后在这个会话中创建一个窗口, 你可以继续创建多个窗口(Window), 每个窗口初始只包含一个面板, 继续分屏后, 会出现多个面板(Pane) 你在其中看到的终端实际上都属于tmux的某个面板
更进一步讲, Session可以包含多个Window, 每个Window又可以包含多个Pane
安装
1 | yum install -y tmux |
使用
安装完成后输入命令tmux即可打开软件,界面十分简单,类似一个下方带有状态栏的终端控制台;但根据tmux的定义,在开启了tmux服务器后,会首先创建一个会话,而这个会话则会首先创建一个窗口,其中仅包含一个面板;也就是说,这里看到的所谓终端控制台应该称作tmux的一个面板,虽然其使用方法与终端控制台完全相同。
Tmux的快捷键使用说明:
Ctrl+b | 激活控制台;此时以下按键生效 | |
---|---|---|
系统操作 | ? | 列出所有快捷键;按q返回 |
d | 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 | |
D | 选择要脱离的会话;在同时开启了多个会话时使用 | |
Ctrl+z | 挂起当前会话 | |
r | 强制重绘未脱离的会话 | |
s | 选择并切换会话;在同时开启了多个会话时使用 | |
: | 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器 | |
[ | 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出 | |
~ | 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息 | |
窗口操作 | c | 创建新窗口 |
& | 关闭当前窗口 | |
数字键 | 切换至指定窗口 | |
p | 切换至上一窗口 | |
n | 切换至下一窗口 | |
l | 在前后两个窗口间互相切换 | |
w | 通过窗口列表切换窗口 | |
, | 重命名当前窗口;这样便于识别 | |
. | 修改当前窗口编号;相当于窗口重新排序 | |
f | 在所有窗口中查找指定文本 | |
面板操作 | " | 将当前面板平分为上下两块 |
% | 将当前面板平分为左右两块 | |
x | 关闭当前面板 | |
! | 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板 | |
Ctrl+方向键 | 以1个单元格为单位移动边缘以调整当前面板大小 | |
Alt+方向键 | 以5个单元格为单位移动边缘以调整当前面板大小 | |
Space | 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled | |
q | 显示面板编号 | |
o | 在当前窗口中选择下一面板 | |
方向键 | 移动光标以选择面板 | |
{ | 向前置换当前面板 | |
} | 向后置换当前面板 | |
Alt+o | 逆时针旋转当前窗口的面板 | |
Ctrl+o | 顺时针旋转当前窗口的面板 |
=========================================================
需要注意的几点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 1)进入tmux面板后,一定要先按ctrl+b,然后松开,再按其他的组合键才生效。 2)常用到的几个组合键: ctrl+b ? 显示快捷键帮助 ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示 ctrl+b ! 把当前窗口变为新窗口 ctrl+b " 模向分隔窗口 ctrl+b % 纵向分隔窗口 ctrl+b q 显示分隔窗口的编号 ctrl+b o 跳到下一个分隔窗口。多屏之间的切换 ctrl+b 上下键 上一个及下一个分隔窗口 ctrl+b C-方向键 调整分隔窗口大小 ctrl+b & 确认后退出当前tmux ctrl+b [ 复制模式,即将当前屏幕移到上一个的位置上,其他所有窗口都向前移动一个。 ctrl+b c 创建新窗口 ctrl+b n 选择下一个窗口 ctrl+b l 最后使用的窗口 ctrl+b p 选择前一个窗口 ctrl+b w 以菜单方式显示及选择窗口 ctrl+b s 以菜单方式显示和选择会话。这个常用到,可以选择进入哪个tmux ctrl+b t 显示时钟。然后按enter键后就会恢复到shell终端状态 ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话 |
========================================================
示例
1)安装命令:
1 | [root@Centos6 ~]# yum -y install tmux |
2)默认创建一个会话,以数字命名。(不推荐)
1 | [root@Centos6 ~]# tmux |
3)新建会话,比如新创建一个会话以"ccc"命名
1 | [root@Centos6 ~]# tmux new -s ccc |
加上参数-d,表示在后台新建会话
1 2 3 | root@bobo:~# tmux new -s shibo -d root@bobo:~# tmux ls shibo: 1 windows (created Tue Oct 2 19:22:32 2018) [135x35] |
4)查看创建得所有会话
1 2 3 4 | [root@Centos6 ~]# tmux ls 0: 1 windows (created Wed Aug 30 17:58:20 2017) [112x22](attached) #这里的attached表示该会话是当前会话 aaa: 2 windows (created Wed Aug 30 16:54:33 2017) [112x22] ccc: 1 windows (created Wed Aug 30 17:01:05 2017) [112x22] |
5)登录一个已知会话。即从终端环境进入会话。
第一个参数a也可以写成attach。后面的aaa是会话名称。
1 | [root@Centos6 ~]# tmux a -t aaa |
6)退出会话不是关闭:
登到某一个会话后,依次按键ctrl-b + d,这样就会退化该会话,但不会关闭会话。
如果直接ctrl + d,就会在退出会话的通话也关闭了该会话!
7)关闭会话(销毁会话)
1 2 3 4 5 6 7 8 | [root@Centos6 ~]# tmux ls aaa: 2 windows (created Wed Aug 30 16:54:33 2017) [112x22] bbb: 1 windows (created Wed Aug 30 19:02:09 2017) [112x22] [root@Centos6 ~]# tmux kill-session -t bbb [root@Centos6 ~]# tmux ls aaa: 2 windows (created Wed Aug 30 16:54:33 2017) [112x22] |
8)重命名会话
1 2 3 4 5 6 7 | [root@Centos6 ~]# tmux ls wangshibo: 1 windows (created Sun Sep 30 10:17:00 2018) [136x29] (attached) [root@Centos6 ~]# tmux rename -t wangshibo kevin [root@Centos6 ~]# tmux ls kevin: 1 windows (created Sun Sep 30 10:17:00 2018) [136x29] (attached) |
状态栏
运行 tmux程序:
1 | tmux |
状态栏
首先,似乎什么也没有发生,除了出现在终端的底部的状态栏:
底部栏显示:
- [0] – 这是 tmux 服务器创建的第一个会话。编号从 0 开始。tmux 服务器会跟踪所有的会话确认其是否存活。
- 0:testuser@scarlett:~ – 有关该会话的第一个窗口的信息。编号从 0 开始。这表示窗口的活动窗格中的终端归主机名 scarlett 中 testuser 用户所有。当前目录是 ~ (家目录)。
- * – 显示你目前在此窗口中。
- “scarlett.internal.fri” – 你正在使用的 tmux 服务器的主机名。
- 此外,还会显示该特定主机上的日期和时间。
当你向会话中添加更多窗口和窗格时,信息栏将随之改变。
多窗口
把你的终端窗口拉伸到最大。现在让我们尝试一些简单的命令来创建更多的窗格。默认情况下,所有的命令都以 Ctrl+b 开头。
- 敲
Ctrl+b, "
水平分割当前单个窗格。 现在窗口中有两个命令行窗格,一个在顶部,一个在底部。请注意,底部的新窗格是活动窗格。 - 敲
Ctrl+b, %
垂直分割当前单个窗格。 现在你的窗口中有三个命令行窗格,右下角的窗格是活动窗格。
注意当前窗格周围高亮显示的边框。要浏览所有的窗格,请做以下操作:
- 敲 Ctrl+b,然后点箭头键
- 敲 Ctrl+b, q,数字会短暂的出现在窗格上。在这期间,你可以你想要浏览的窗格上对应的数字。
现在,尝试使用不同的窗格运行不同的命令。例如以下这样的:
- 在顶部窗格中使用 ls 命令显示目录内容。
- 在左下角的窗格中使用 vi 命令,编辑一个文本文件。
- 在右下角的窗格中运行 top 命令监控系统进程。
到目前为止,这个示例中只是用了一个带多个窗格的窗口,你也可以在会话中运行多个窗口。
- 为了创建一个新的窗口,请敲Ctrl+b, c 。请注意,状态栏显示当前有两个窗口正在运行。(敏锐的读者会看到上面的截图。)
- 要移动到上一个窗口,请敲 Ctrl+b, p 。
- 要移动到下一个窗口,请敲 Ctrl+b, n 。
- 要立即移动到特定的窗口,请敲 Ctrl+b 然后跟上窗口编号。
如果你想知道如何关闭窗格,只需要使用 exit 、logout,或者 Ctrl+d 来退出特定的命令行 shell,一旦你关闭了窗口中的所有窗格,那么该窗口也会消失。
使用手册
http://louiszhai.github.io/2017/09/30/tmux/
screen工具
LINUX下有两个比较常用的终端工具:screen和tmux,两者都是支持分屏操作的。不过screen只支持上下分屏,而tmux支持上下左右分屏。
screen参考:https://www.xmmup.com/linuxzhiscreenminglinghoutaiyunxing.html