tmux系列:2、tmux会话

tmux系列:2、tmux会话


文章目录

  • tmux系列:2、tmux会话
    • 1. 前言
    • 2. 创建会话
    • 3. 状态栏
    • 4. 命令和标志
    • 5. 命令提示符
    • 6. 附加和分离
    • 7. 会话清单
    • 8. 完全杀死tmux
    • 9. 总结一下

1. 前言

其实最开始时候我用tmux是不管这个会话的,但是熟悉了之后我发现这个非常方便,特别是当你有云服务器开发一些云服务的时候,你在公司登录服务器开发一些内容做调试时可以将这些进程的调试过程保存在一个会话中,然后分离终端和会话,这个时候tmux服务会将这个会话运行在后台,当你回家之后或者第二天继续处理对应进程时直接重新附加到这个会话就可以了,之前打开调试的进程都还是在的,不会由于你在某个位置断开了终端这些调试任务就中止了。简单来讲,就是可以将你对服务器的程序和操作终端分离,程序的运行不随着操作终端的退出而退出,这些程序仍然被tmux的服务管理在后台,这个时候tmux就像一个管家,你退出终端之后交待一些事给管家让管家继续看护着,这些事就不会因为没人管而终止掉,而由管家暂时帮你照看,等你回来后可以在管家这里接手继续处理(当然,这个前提是你没有关闭服务器,只是退出了远程连接服务器的终端)。

2. 创建会话

创建会话就相当于要给一系列事情给个名称,比如说你现在调试某个进程的时候需要一边看日志,一边分析进程内存、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手册中。

3. 状态栏

当附加tmux客户机时,它会在屏幕的底部显示一个状态行。默认情况下这是绿色的,显示:

  • 在左侧,附加会话的名称:[0]。
  • 在中间,会话中的窗口列表及其索引,例如索引0:0:ksh处的一个窗口称为ksh
  • 在右边,加引号的窗格标题(默认为运行tmux的主机的名称)以及时间和日期。

tmux系列:2、tmux会话_第1张图片

当新窗口打开时,窗口列表会增长——如果有太多的窗口无法适应终端的宽度,一个<>将在左边或右边或两者都添加,以显示有隐藏的窗口。

在窗口列表中,当前窗口在名称后用*标记,最后一个窗口用-标记。

4. 命令和标志

Tmux有大量的命令。它们都有一个像new-windownew-sessionlist-keys这样的名称,许多还有一个更短的别名,如newwnewlsk

每当使用键绑定时,它都会运行一个或多个tmux命令。例如,C-b c执行new-window命令。

也可以从shell中使用命令,就像上面的new-sessionlist-keys一样。

与标准Unix命令一样,每个命令都有0个或多个标志。标志本身可以也可以不接受单个参数。另外,命令可以在标记后附加参数。标志在命令之后传递,例如运行带有标志-d-nnew-session命令(别名new):

$ tmux new-session -d -nmysession

所有命令及其标志都记录在tmux手册页中。

本文档主要关注可用的键绑定,但是命令是为了提供信息或者有一个有用标志的地方而提到的。它们可以从shell或命令提示符中输入,将在下一节中进行描述。

5. 命令提示符

Tmux有一个交互式命令提示符。这可以按C-b:打开,并显示而不是状态行,如图所示:

tmux系列:2、tmux会话_第2张图片

在提示符中,可以像在shell中一样输入命令。输出将在状态行中短暂显示一段时间,或者将活动窗格切换到视图模式。

默认情况下,命令提示符使用类似于emacs(1)的键;但是,如果VISUAL或EDITOR环境变量被设置为包含vi(例如vi或vim或nvi)的内容,那么将使用vi(1)风格的键。

在命令提示符下可以同时输入多个命令,以冒号(;)分隔。这称为命令序列。

6. 附加和分离

与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的行为类似于带有-dattach-session,并分离任何附加到会话的其他客户端。

7. 会话清单

list-session命令(alias ls)显示可以附加的可用会话列表。这显示了4个会话,分别是12myothersessionmyssession:

$ 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)

8. 完全杀死tmux

如果tmux内部没有会话、窗口或窗格,服务器将退出。也可以使用kill-server命令完全杀死它。例如,在命令提示符下:

:kill-server

9. 总结一下

  • 创建会话:tmux new -s xxx
  • 分离会话和终端:C-b d
  • 附加到会话:tmux attach或者tmux attach -d xxx
  • 命令提示符进入交互模式:C-b :
  • 列出所有会话:C-b ls
  • 杀死tmux服务直接退出:C-b :进入交互模式后kill-server

你可能感兴趣的:(tmux,tmux)