Linux中Tmux命令简介
1. 概述
tmux 是 Linux 中的终端多路复用器工具。本质上,它允许我们创建和维护多个伪终端实例。具体来说,它通过在执行tmux命令时启动的服务器进程来维护这些伪终端。
因为这些终端进程由服务器进程维护,tmux为我们提供了从任何终端会话中分离而无需杀死它们的灵活性。此外,我们可以在以后重新连接任何终端会话以重新获得控制权。这使得它非常适合我们可以在后台运行并偶尔重新连接以重新获得控制权的任何长时间运行的进程。
在本教程中,我们将学习 Linux 中的tmux命令。特别是,我们将了解tmux提供的一些功能和命令。
2. tmux
2.1. 安装
我们可以 使用apt-get 包管理器在基于 Debian 的 Linux(例如 Ubuntu)上安装tmux :
$ sudo apt-get update -qq
$ sudo apt-get install -y tmux
同样,我们可以 使用yum 包管理器在基于 RHEL 的 Linux(例如 CentOS)上安装tmux :
$ sudo yum update -qq
$ sudo yum install -y tmux
2.2. 基本用法
我们可以通过单独输入命令来启动一个新的tmux会话:
$ tmux
没有任何参数,tmux使用一个窗口创建一个新会话。此外,会话被赋予一个默认名称 – 0。创建后,我们将立即进入 tmux会话:
3. 按键绑定
我们从文档中可以看出,tmux支持的命令非常多。这些命令通常用于配置 tmux实例。例如,有用于创建新窗口、拆分窗格和分离的命令。
为了让这些命令更容易输入,tmux定义了一些键绑定(也称为快捷方式或热键),我们可以利用它们来提高我们的工作效率。在本文中,我们将主要使用这些键绑定与tmux进行交互。
对于前缀键表中的键绑定,我们需要在它们前面加上前缀键。默认情况下,tmux将前缀键设置为 Ctrl + b。此外,我们将在本文的其余部分使用prefix key注释前缀键 。
4. tmux中的会话
tmux中的会话 将多个伪终端组合在一起。这些终端直接在tmux服务器的管理之下。
4.1. 创建会话
**我们可以 使用new-session命令在tmux中创建一个新会话。**该命令支持几个允许我们自定义会话的选项标志。
例如,我们可以创建一个会话并使用*-s*标志为其命名:
$ tmux new-session -s gamma
输入后,我们将进入gamma会话:
除了会话名称之外,我们还可以使用*-n*标志指定窗口名称:
$ tmux new-session -s gamma -n observation
使用-d*标志,我们可以选择不附加到新创建的会话*:
$ tmux new-session -s gamma -d
$ tmux list-session
alpha: 2 windows (created Sun Jun 20 11:37:35 2021)
gamma: 1 windows (created Sun Jun 20 12:11:41 2021)
在我们输入 new-session命令后,由于*-d*标志,我们不会进入会话。但是,我们仍然可以确认会话已经创建。
4.2. 从会话中分离
要从会话中分离客户端,我们可以输入热键:
<prefix key> + d
4.3. 附加到会话
要附加到会话,我们可以使用attach-session命令,后跟*-t*标志和会话名称。例如,我们可以附加到 gamma会话:
$ tmux attach-session -t gamma
4.4. 列出所有会话
要查看tmux服务器上当前所有会话的列表,我们可以使用list-session命令:
$ tmux list-session
alpha: 2 windows (created Sun Jun 20 11:37:35 2021)
gamma: 1 windows (created Sun Jun 20 12:11:41 2021)
从输出中,我们可以看到tmux服务器上当前正在运行两个会话:alpha和gamma。
4.5. 重命名会话
要重命名现有会话,我们可以使用rename-session命令:
$ tmux rename-session -t alpha beta
$ tmux list-session
beta: 2 windows (created Sun Jun 20 11:37:35 2021)
gamma: 1 windows (created Sun Jun 20 12:11:41 2021)
** rename-session命令要求我们使用*-t标志指定要重命名的目标会话**。在此示例中,我们将会话alpha*重命名为 beta。
4.6. 终止会话
要终止会话,我们需要首先确定会话的名称。然后,我们可以使用带有*-t标志的kill-session*命令终止会话:
$ tmux kill-session -t gamma
$ tmux list-session
beta: 2 windows (created Sun Jun 20 11:37:35 2021)
-t标志指定要终止的会话,在我们的示例中是会话gamma。
5. tmux中的窗口
在每个 tmux会话中,有一个或多个窗口。与会话类似,可以创建、删除、命名和切换窗口。
5.1. 创建一个新窗口
要在会话中创建一个新窗口,我们可以使用热键:
<prefix key> + c
从屏幕底部的状态栏,我们可以看到本次会话当前有两个窗口:
每个窗口都有一个从 0 开始的索引。此外,每个窗口都有一个名称。默认情况下,名称将是窗口当前正在执行的命令。在我们的示例中,两个窗口都被命名为 bash,因为这是两个窗口中当前正在运行的进程。
最后,** tmux通过在窗口名称旁边放置一个星号来指示当前活动的窗口**。从屏幕截图中,我们可以看出我们正在查看窗口索引号 1。
5.2. 列出所有窗口
我们可以通过键入以下命令显示此会话中所有窗口的列表:
<prefix key> + w
在列表上时,我们可以使用向上和向下箭头键在列表中导航。然后,我们按回车键选择我们要显示的窗口。
5.3. 重命名窗口
为了更容易识别,tmux允许我们使用以下命令更改窗口名称:
<prefix key> + ,
请注意,屏幕底部的状态栏变为黄色。这表明tmux正在等待我们的输入。
让我们将窗口的名称更改为window1:
更改名称并按 ENTER 后,我们可以看到名称更改反映在状态栏上:
5.4. 终止窗口
要终止窗口,我们可以使用热键:
<prefix key> + &
在窗口终止之前,tmux会提示确认。要确认终止,我们输入 y并按 ENTER。
6. tmux中的面板
tmux中的窗口 可以进一步拆分为多个窗格。此外,每个窗格都只运行一个独立的终端实例。
6.1. 将窗口拆分为窗格
要沿水平轴将窗口拆分为两个不同的窗格,我们可以使用热键:
<prefix key> + "
一旦我们输入命令,当前窗口将被分成两个窗格——一个在顶部,一个在底部:
或者,我们可以使用热键将一个窗口垂直拆分为两个窗格:
<prefix key> + %
6.2. 终止窗格
要终止窗格,我们在窗格上输入快捷方式:
<prefix key> + x
类似于终止一个窗口,tmux会提示我们进行确认。要确认终止,我们键入 y,然后按 ENTER。
6.3. 打破一个窗格到窗口
我们可以打破一个窗格,使它成为一个独立的窗口。例如,如果我们想把一个有两个窗格的窗口变成两个窗口,我们可以使用快捷方式:
<prefix key> + !
输入后,效果将立即发生,我们将看到一个由以前的窗格组成的附加新窗口。
6.4. 切换到不同的面板
在具有多个窗格的窗口上,我们可以使用热键轻松切换到不同的窗格:
<prefix key> + <arrow key>
例如,要从左窗格切换到右窗格,我们只需按前缀键,然后按右箭头键。 同样,要切换到底部窗格,我们将输入前缀键,然后输入向下箭头键。
7. tmux中的复制模式
7.1. 使用tmux 剪贴板复制和粘贴
在tmux中复制文本 比简单的 Ctrl + C 和 Ctrl + V 复杂一点。
通常,我们需要先进入复制模式。然后,我们将选择要复制的一部分文本。最后,我们可以从tmux剪贴板粘贴文本。让我们看看在tmux中复制和粘贴的具体步骤。
为了使解释更容易,我们将尝试在我们仍在tmux中时复制date命令的输出:
首先,我们将使用快捷方式进入复制模式:
<prefix key> + [
当我们处于复制模式时,右上角会有一个带有两个数字的注释。左边第一个数字代表我们的光标所在的行号。然后,右边的数字代表我们在标准输出中的总行数。
要复制文本,我们将使用向上箭头键将光标移动到上方 1 行。一旦光标就位,我们将点击快捷方式开始选择:
<prefix key> + Space
当我们开始选择时,我们可以看到光标的背景颜色变为黄色。这表明我们的光标现在处于选择模式。要选择该行,我们可以使用向左箭头键将光标移动到左侧:
确认选择后,只需按 ENTER 键即可将文本复制到 tmux的剪贴板中。
最后,我们将使用快捷方式从tmux的剪贴板粘贴文本 :
<prefix key> + ]
7.2. 滚动标准输出
要查看超出tmux显示范围的标准输出,我们需要先进入复制模式。然后,我们可以使用箭头键导航光标。或者,我们可以按 Page Up 或 Page Down 按页而不是行滚动。
7.3. 复制模式下的其他命令
在复制模式下, tmux支持无数类似于我们通常在文本编辑器中使用的功能。
例如,我们可以在复制模式下按w键移动到下一个单词。同样,我们可以使用键0移动到行的开头。此外,我们可以通过按冒号键然后输入行号直接跳转到该行。
到目前为止我们提到的命令只是复制模式下可能执行的命令的一小部分。有关受支持的命令及其快捷方式的完整列表,我们可以参考tmux文档 。