如何安装和使用 Tmux

一、介绍

Tmux 是一种终端多路复用器。它允许您从一个 tmux 会话同时运行和管理多个命令提示符。

Tmux 使用客户端/服务器模型,该模型允许它保持连接。您可以从一台计算机启动会话,运行其中运行的多个程序,然后断开连接。您可以稍后从另一台计算机重新连接到同一会话,并且相同的程序将运行。

二、在 Debian 和 Ubuntu 上安装 tmux

在 Debian 和 Ubuntu 系统上,使用 apt 安装 tmux。

$ sudo apt-get update && sudo apt-get -y install tmux

 三、在 Redhat,CentOS 和其他基于RHEL 的发行版上安装 tmux

在 Redhat,CentOS 和其他基于 RHEL 的系统上,使用 yum 安装 tmux。

$ sudo yum install update && sudo yum -y install tmux

 四、术语

  • 窗格 – 窗格只是终端提示符。
  • 窗口 – 一个窗口在一个屏幕上包含多个窗格(终端)。
  • 会话 – 一个会话有多个窗口。
  • 服务器 – 服务器保存多个会话。它在后台运行,并确保会话的持久性。

五、启动新的 tmux 会话

$ tmux new -s start

您将在屏幕底部看到一个栏,其中创建了会话名称 tmux,开始,在括号中。这是因为 tmux 在创建新窗格时会自动使用您的用户帐户登录。

六、在 tmux 中操纵

进入 tmux 会话后,您可以使用前缀键触发命令以告诉 tmux 要做什么。默认前缀键为 + 。例如,如果要告诉 tmux 通过将屏幕拆分为两个垂直部分来创建新窗格,请先键入 + ,然后键入 。CTRLBCTRLB%

七、创建多个窗格

如果您键入 + ,则如上所示,则屏幕上有两个窗格。CTRLB%

  • 通过键入 + 将当前窗格拆分为两个水平部分,然后键入 。CTRLB"
  • 要循环浏览所有三个窗格,请键入 + ,然后键入 。CTRLBO

八、在窗格之间切换

若要在不同的打开窗格之间切换,请使用带有前缀的箭头键。

  • CTRL + B,然后:转到当前窗格上方的窗格。UP
  • CTRL + B,然后 :转到当前窗格下方的窗格。DOWN
  • CTRL + B,然后 :转到当前窗格左侧的窗格。LEFT
  • CTRL + B,然后 :转到当前窗格右侧的窗格。RIGHT

九、创建多个窗口

  1. 启动会话中创建新窗口。键入 + ,然后打开一个新的空白终端。CTRLBC
  2. 将此终端拆分为两个水平窗格,其中 + ,然后 。CTRLB"
  3. 使用 + 创建第三个窗口,然后 。CTRLBC

    您将再次看到一个新的空白终端。

  4. 发出命令,然后按以确认已打开三个窗口。tmux list-windowsENTER
  5. 使用 + ,然后在创建的三个窗口之间循环。CTRLBN

十、附加和分离到会话/从会话分离

  • 使用 + ,然后从当前会话分离。CTRLBD
  • 使用 重新连接到会话。tmux attach -t YOUR_SESSION_NAME
  • 使用 + ,然后在会话中的窗口之间循环。CTRLBN

十一、通用键绑定

  • CTRL + B,然后:创建新窗口。C
  • CTRL + B,然后 :重命名窗口。,
  • CTRL + B,然后 :移动到下一个窗口。N
  • CTRL + B,然后 :移动到上一个窗口。P
  • CTRL + B,然后:终止当前窗口。&
  • CTRL + B,然后:将当前窗格拆分为两个(垂直)。%
  • CTRL + B,然后:将当前窗格拆分为两个(水平)。"
  • CTRL + B,然后:切换到下一个窗格。O
  • CTRL + B,然后:显示窗格编号(然后键入 # 切换到它)。Q
  • CTRL + B,然后:从当前会话分离。D
  • CTRL + B,然后 :列出所有键绑定。?
  • CTRL + B,然后:杀死活动窗格(按下确认后)。XY
  • CTRL + B,然后 :显示所有活动窗口和窗格的概述。使用箭头键在窗口列表中移动并查看所选窗口的预览。按下可切换到所选窗口。按下可退出概览。WENTERESC

11.1、常用命令

  • tmux list-sessions– 列出现有的 tmux 会话。
  • tmux new -s session-name– 创建一个名为会话名称的新 tmux 会话。
  • tmux attach -t session-name– 连接到名为会话名称的现有 tmux 会话。
  • tmux switch -t session-name– 切换到名为会话名称的现有 tmux 会话。

11.2、使用 Vim 键绑定在窗格之间切换

您可以使用 Vim 键 、、、 .为此,请更新 tmux 配置文件 。如果此文件不存在,请创建它。HJKL~/.tmux.conf

将这些行(第一行是注释)添加到配置文件中,以使用 Vim 键启用窗格导航:

# hjkl pane traversal

bind h select-pane -L

bind j select-pane -D

bind k select-pane -U

bind l select-pane -R

更新配置文件后,重新启动 tmux。您可以通过获取更新的配置文件来加载新配置而无需重新启动 tmux:

tmux source-file ~/.tmux.conf

 十二、元键

以下部分中的许多键绑定都基于 Meta 键。在大多数现代计算机和键盘上,元键不是一个特定的键。根据系统设置和正在使用的终端仿真器,Meta 键可以绑定到 、 或 。在看到键绑定的一部分时,请尝试使用该键。如果不起作用,请尝试上述其他键之一。ESCALTCOMMANDWINOptMETAESC

十三、调整窗格大小

当窗口有多个窗格时,可以更改各个窗格的大小。

  • 要更改窗格大小,请按住前缀 (+),同时按其中一个箭头键。CTRLB
  • 按住 + ,同时按 或 : 更改窗格的高度。CTRLBUPDOWN
  • 按住 + ,同时按 或 : 更改窗格的宽度。CTRLBLEFTRIGHT

上述组合键“连续”调整窗格的大小,只要按住它们。要一步一步地调整窗格的大小,请执行以下操作:

  • CTRL + B,然后 + 或 :更改窗格的高度。METAUPDOWN
  • CTRL + B,然后 + 或 :更改窗格的宽度。METALEFTRIGHT

特定组合键(如上)是增加还是减少窗格的尺寸取决于该窗格相对于其他窗格的位置。

如果终端模拟器支持使用鼠标,则可以通过拖动窗格边框来调整窗格的大小。

十四、选择预设窗格布局

Tmux 有五种不同的预设布局,用于在窗口中排列多个窗格:

  1. 所有窗格并排堆叠。
  2. 所有窗格都堆叠在一起。
  3. 主窗格占据整个屏幕宽度,其他窗格并排堆叠在其下方
  4. 主窗格占据整个屏幕高度,其他窗格堆叠在它旁边,彼此重叠
  5. 所有窗格都排列在一个网格中。

启动 tmux 并创建 4 个(或任意数量的)窗格。

要循环浏览不同的预设布局,请使用 + ,然后CTRLBSPACE

您还可以选择特定布局:

  • CTRL + B,然后 + :切换到布局 1。META1
  • CTRL + B,然后 + :切换到布局 2。META2
  • CTRL + B,然后 + :切换到布局 3。META3
  • CTRL + B,然后 + :切换到布局 4。META4
  • CTRL + B,然后 + :切换到布局 5。META5

十五、交换窗格位置

当窗口具有多个窗格时,您可以移动窗格并交换其位置。

注意:如前所述,+ ,然后使光标在不同的窗格中循环。上面的顺序用于循环窗格本身的位置。CTRLBO

  • CTRL + B,然后 + 顺时针循环窗格的位置。METAO
  • CTRL + B,然后 + 逆时针循环窗格的位置。CTRLO

十六、分离并重新连接单个窗格

在窗口中具有多个窗格的布局中,有时需要将窗格移动到其他位置。交换窗格位置(如上所述)并不总是足够的,因为它会干扰所有其他窗格的位置。有时还需要将窗格移动到同一会话中的其他窗口。

使用 tmux 命令提示符中的命令将窗格与窗口分离。 重新附加窗格。break-panejoin-pane

要访问 tmux 命令提示符,请按前缀 + ,然后按 。这将在终端底部打开一个提示。要在不输入任何命令的情况下退出它,请按 + 。CTRLB:CTRLC

要分离窗格,请切换到要分离的窗格,激活 tmux 命令提示符( + , then ),然后输入命令:CTRLB:

break-pane -dP

这将分离活动窗格并显示其“ID”。此 ID 的格式为 X、Y 和 Z 为数字。上一个窗格将成为新的活动窗格。该 ID 显示在(新的)活动窗格的顶部。记下此 ID,然后按 将其关闭。X:Y.ZESC

分离的窗格可以重新附加到同一会话中任何窗口中的任何窗格旁边。切换到要重新附加分离窗格旁边的窗格。激活 tmux 命令提示符并输入:

join-pane -vs X:Y.Z

这会将分离的窗格重新附加到活动窗格下方(代表垂直拆分)。要在活动窗格的右侧重新连接分离的窗格:vs

join-pane -hs X:Y.Z

在上面的命令中,代表水平拆分hs

十七、在用户之间共享 tmux 会话

17.1、会话的工作原理

启动 tmux 时,它会创建一个新的服务器实例并在该服务器内创建会话。

Tmux 客户端和服务器是单独的进程。它们通过 UNIX 套接字进行通信。默认情况下,tmux 将套接字存储在目录中。由单个用户创建的服务器的套接字存储在名为“其中是该用户的 UNIX UID”的子目录下。用户为 1001 的套接字将存储在 中。此子目录的所有者是 。默认情况下,其他用户或组无法访问此子目录。/tmptmux-UIDUIDUID/tmp/tmux-1001user1

17.2、兼容性

本节中描述的步骤已在 tmux 版本 3.1 和 3.3 上在原版 Debian 11 安装上进行了测试。它们应该适用于所有最新的 tmux 版本。

注意:在安全强化的操作系统(例如涉及 SELinux 的操作系统)上,更改组和权限可能需要额外的步骤。讨论这些超出了本指南的范围。假设您知道如何更改操作系统上的组和权限。

Tmux 版本 3.3(于 2022 年 6 月发布)在会话共享的工作方式中引入了与安全相关的更改。这些更改涉及使用新添加的命令。使用 检查 tmux 安装的版本。实际上,这会导致 tmux 版本 3.3 及更高版本的额外步骤。server-accesstmux -V

17.3、系统说明

考虑一个具有两个用户的系统:使用 UID 1001 和 UID 1002。user1user2

为了连接到 创建的 tmux 会话,) 必须有权访问 创建的服务器的套接字,以便 创建的客户端可以与 创建的服务器通信,并且(对于版本 3.3 及更高版本)可以访问 通过命令授予的服务器。user2user1user2user1user2user1user1server-access

在执行以下步骤时,请根据您自己的系统使用适当的用户 ID 和用户名。检查用户的 UID(和其他详细信息):user1

$ id user1

不带任何参数的命令显示当前用户的 UID(和其他详细信息)。id

如果系统上没有其他用户帐户,请在测试这些步骤之前创建新用户。

17.4、步骤

以下步骤描述了如何向 授予对其 tmux 会话的访问权限。user1user2

  1. 在终端会话中,以 身份登录。user1
  2. 启动 tmux 会话:
    $ tmux
    

    这将创建套接字(子)目录(如果它以前不存在)。

  3. 检查套接字目录的所有权和权限:
    $ ls -hdl /tmp/tmux-1001
    
  4. 为 和 创建一个公共组,这样可以更轻松地管理权限。创建一个新组:user1user2tmuxusers
    # groupadd tmuxusers
    
  5. 添加并添加到此组:user1user2
    # usermod -a -G tmuxusers user1
    
    # usermod -a -G tmuxusers user2
    
  6. 将目录组更改为 :/tmp/tmux-1001tmuxusers
    # chgrp -R tmuxusers /tmp/tmux-1001 
    
  7. user2需要完全访问 启动的 TMUX 服务器的套接字。授予组对目录的完全权限:user1
    # chmod -R g+rwx /tmp/tmux-1001
    
  8. 验证目录的组是否已更改为,并且该组是否对该目录具有完全权限:tmuxusers
    $ ls -hdl /tmp/tmux-1001
    
  9. 退出正在运行的 tmux 会话:
    $ exit
    
  10. 作为(再次),创建一个新的 tmux 会话并指定套接字的名称:user1
    $ tmux -L socket1
    
  11. 该选项创建一个命名套接字,路径为 。-Lsocket1/tmp/tmux-1001/socket1
  12. 到目前为止,所有命令都适用于所有最新版本的 tmux。接下来的 3 个命令仅适用于 tmux 版本 3.3 及更高版本。
    1. 在新创建的 tmux 会话中,授予对 tmux 服务器的访问权限:user2
      $ tmux server-access -w -a user2
      
    2. 上述命令提供对会话的写入访问权限。因此,也可以在会话中输入命令。可以只授予读取访问权限。具有读取访问权限,只能查看会话的内容,但不能输入任何命令。要授予读取访问权限,请使用而不是在上面的命令中:user2user2user2user2user2-r-w
      $ tmux server-access -r -a user2
      
    3. user1可以撤销授予以下权限:user2
      $ tmux server-access -d user2
      

    前三个命令仅适用于 tmux 版本 3.3 及更高版本。进一步的步骤适用于所有最新版本的 tmux。

  13. 更改新套接字文件的组:
    # chgrp tmuxusers /tmp/tmux-1001/socket1
    
  14. 验证套接字文件的组是否为,以及该组是否有权访问该文件:tmuxusers
    # ls -l /tmp/tmux-1001/socket1
    
  15. 检查打开的会话的 ID:
    $ tmux ls
    
  16. 在另一个终端中,以 身份登录。启动 tmux 并指定由 创建的命名套接字的路径:user2user1
    $ tmux -S /tmp/tmux-1001/socket1 ls
    

    上面的命令显示了服务器上由 启动和侦听的会话列表。user1socket1

  17. 附加到会话:
    $ tmux -S /tmp/tmux-1001/socket1
    
  18. 如果有许多打开的会话,请附加到特定会话(其 ID 为 N):
    $ tmux -S /tmp/tmux-1001/socket1 attach -t N
    

user2现在已连接到 的 TMUX 会话。user1

十八、使用嵌套会话

通常,在 tmux 中使用嵌套会话既不是必需的,也不建议使用。但是,当从本地 tmux 会话中连接到远程 tmux 会话时,它很有用。假设您处于本地计算机上的 tmux 会话中。在其中一个窗格(或窗口)中,登录到也具有正在运行的 tmux 会话的远程服务器。当您连接到此远程服务器上的 tmux 会话时,最终会得到嵌套会话。远程 tmux 会话嵌套在本地 tmux 会话中。

要将按键序列传递到嵌套会话,请连续按两个会话的前缀组合键。假设两个会话都使用默认前缀键,请按两次 + 访问嵌套会话。CTRLB

例如,要在嵌套会话中执行垂直拆分,请输入 +,后跟 (再次)、+,然后输入 。CTRLBCTRLB%

赞(0)
未经允许不得转载:主机百科 » 如何安装和使用 Tmux