其实最开始时候我用tmux是不管这个会话的,但是熟悉了之后我发现这个非常方便,特别是当你有云服务器开发一些云服务的时候,你在公司登录服务器开发一些内容做调试时可以将这些进程的调试过程保存在一个会话中,然后分离终端和会话,这个时候tmux服务会将这个会话运行在后台,当你回家之后或者第二天继续处理对应进程时直接重新附加到这个会话就可以了,之前打开调试的进程都还是在的,不会由于你在某个位置断开了终端这些调试任务就中止了。简单来讲,就是可以将你对服务器的程序和操作终端分离,程序的运行不随着操作终端的退出而退出,这些程序仍然被tmux的服务管理在后台,这个时候tmux就像一个管家,你退出终端之后交待一些事给管家让管家继续看护着,这些事就不会因为没人管而终止掉,而由管家暂时帮你照看,等你回来后可以在管家这里接手继续处理(当然,这个前提是你没有关闭服务器,只是退出了远程连接服务器的终端)。
创建会话就相当于要给一系列事情给个名称,比如说你现在调试某个进程的时候需要一边看日志,一边分析进程内存、cpu占用,还需要看下另一个相关进程是否和该进程通信成功,这个调试过程我们可以创建一个统一的会话来管理这几个相关的程序,并给这个会话起个名字,比如叫“debug”。
要创建第一个tmux会话,需要从shell运行tmux。使用new-session
命令创建一个新的会话,简写为new
:
$ tmux new
如果没有参数,new-session
将创建一个新会话并附加它。因为这是第一次会话,tmux服务器将被启动,从shell运行的tmux将成为第一个客户机并附加到它。
新会话将有一个窗口(索引为0),其中有一个包含shell的窗格。shell提示符应该出现在终端的顶部,绿色状态线出现在底部(状态线的更多内容在下面)。
默认情况下,第一个会话将被称为0
,第二个会话称为1
,依此类推。new-session
允许使用-s
标志为会话指定一个名称:
$ tmux new -s mysession
这将创建一个名为mysession
的新会话。一个命令可以通过传递额外的参数来代替运行shell。如果给出了一个参数,tmux将把它传递给shell,如果有多个参数,则直接运行该命令。例如,这些运行vim(1):
$ tmux new 'vim ~/.tmux.conf'
或者:
$ tmux new -- vim ~/.tmux.conf
默认情况下,tmux调用会话中运行的第一个窗口。-n标志给出了一个名称来代替使用,在这种情况下,一个窗口mytopwindow
运行top(1):
$ tmux new -n mytopwindow top
new-session
有其他的标志-下面有一些。完整的列表在tmux手册中。
当附加tmux客户机时,它会在屏幕的底部显示一个状态行。默认情况下这是绿色的,显示:
0:ksh
处的一个窗口称为ksh
。当新窗口打开时,窗口列表会增长——如果有太多的窗口无法适应终端的宽度,一个<
或>
将在左边或右边或两者都添加,以显示有隐藏的窗口。
在窗口列表中,当前窗口在名称后用*
标记,最后一个窗口用-
标记。
Tmux有大量的命令。它们都有一个像new-window
或new-session
或list-keys
这样的名称,许多还有一个更短的别名,如neww
或new
或lsk
。
每当使用键绑定时,它都会运行一个或多个tmux命令。例如,C-b c
执行new-window
命令。
也可以从shell中使用命令,就像上面的new-session
和list-keys
一样。
与标准Unix命令一样,每个命令都有0个或多个标志。标志本身可以也可以不接受单个参数。另外,命令可以在标记后附加参数。标志在命令之后传递,例如运行带有标志-d
和-n
的new-session
命令(别名new):
$ tmux new-session -d -nmysession
所有命令及其标志都记录在tmux手册页中。
本文档主要关注可用的键绑定,但是命令是为了提供信息或者有一个有用标志的地方而提到的。它们可以从shell或命令提示符中输入,将在下一节中进行描述。
Tmux有一个交互式命令提示符。这可以按C-b:打开,并显示而不是状态行,如图所示:
在提示符中,可以像在shell中一样输入命令。输出将在状态行中短暂显示一段时间,或者将活动窗格切换到视图模式。
默认情况下,命令提示符使用类似于emacs(1)的键;但是,如果VISUAL或EDITOR环境变量被设置为包含vi(例如vi或vim或nvi)的内容,那么将使用vi(1)风格的键。
在命令提示符下可以同时输入多个命令,以冒号(;)分隔。这称为命令序列。
与tmux分离意味着客户端退出并与外部终端分离,返回到shell,让tmux会话及其内部的任何程序在后台运行。为了将tmux分离,需要使用C-b d
键绑定。当tmux分离时,它将打印一条带有会话名称的消息:
[detached (from session mysession)]
attach-session
命令用来附加一个已经存在的会话。没有参数,它将附加到最近使用的没有附加的会话:
$ tmux attach
或者-t给出要连接到的会话的名称:
$ tmux attach -tmysession
默认情况下,附加到一个会话不会分离任何附加到同一会话的其他客户端。-d标志是这样做的:
$ tmux attach -dtmysession
new-session
命令有一个-A
标志,如果现有会话存在,则附加到它;如果不存在,则创建一个新的会话。对于一个名为myssession
的会话:
$ tmux new -Asmysession
添加-D标志可以使new-session
的行为类似于带有-d
的attach-session
,并分离任何附加到会话的其他客户端。
list-session
命令(alias ls
)显示可以附加的可用会话列表。这显示了4个会话,分别是1
、2
、myothersession
和myssession
:
$ tmux ls
1: 3 windows (created Sat Feb 22 11:44:51 2020)
2: 1 windows (created Sat Feb 22 11:44:51 2020)
myothersession: 2 windows (created Sat Feb 22 11:44:51 2020)
mysession: 1 windows (created Sat Feb 22 11:44:51 2020)
如果tmux内部没有会话、窗口或窗格,服务器将退出。也可以使用kill-server命令完全杀死它。例如,在命令提示符下:
:kill-server