如何在Linux上使用tmux(以及为什么它比screen更好)

时间:2020-01-09 10:39:57  来源:igfitidea点击:

Linux的" tmux"命令是一个终端多路复用器,例如" screen"。它的拥护者很多,也很积极,因此我们决定将两者进行比较。 " tmux"真的更好吗,还是只是偏爱我们所知道的?

tmux与screen

tmux和GNU screen命令都是终端多路复用器。它们使我们可以在一个终端窗口中拥有多个窗口,并在它们之间来回跳转。窗口可以分为多个窗格,每个窗格都为我们提供一个独立的命令行。

我们还可以分离会话,它变成在后台运行的无头实体,甚至可以关闭启动该会话的终端窗口。准备就绪后,我们可以打开一个新的终端窗口并重新连接仍在运行的会话。我们也可以通过SSH连接执行此操作。

我们可以在一台计算机上分离会话,回家然后登录到远程计算机。重新连接后,我们可以重新连接后台会话,然后再次以交互方式使用它。

screen命令是什么?

screen命令也是一个终端多路复用器,它带有选项。有关我们可以使用它的所有功能的最低要求,请查看我们的深入文章。

这次,我们将专注于tmux。在进行过程中,我们将提到"screen"如何处理相同的功能。

只有一件事使我们对"screen"感到恼火。我们将在开始时介绍它,并查看tmux是否有更好的表现。

安装tmux

通常在流行的Linux发行版中默认安装"screen",而" tmux"则不是。要在Ubuntu上安装tmux,输入以下命令:

sudo apt-get install tmux

在Manjaro上,我们可以使用pacman

sudo pacman -Sy tmux

在Fedora 31上,已经安装了tmux

开始tmux会话

要启动tmux,只需键入它并按Enter:

tmux

当我们处于tmux会话时,终端窗口将显示状态栏。

状态栏的右侧显示主机名以及时间和日期。左侧显示以下与会话相关的信息:

  • [0]:这是会话名称。默认情况下,它们是从零开始编号的。我们将在下面介绍如何为会议指定有意义的名称。

  • 0:bash :0表示这是此会话中的第一个窗口。该会话中运行的唯一进程是bash。如果我们运行程序,其名称将显示在此处。星号()表示这是我们正在查看的窗口。每次在tmux会话中创建一个新窗口时,其窗口号和其中运行的程序的名称都会添加到状态栏中。

screen命令不会给我们状态栏。我们必须盲目飞行并依靠自己的智慧来了解发生了什么,这需要一些练习。

从好的方面来说,我们将不会失去任何一排终端窗口房地产。当然,通常我们会扩大终端窗口,以使用终端多路复用器值得。在这种情况下,状态栏的一行丢失不是什么大问题。我们将终端窗口的图像保留为默认大小,以便我们查看信息。

使用击键将命令发送给tmux,这有两部分。首先,按Ctrl + B引起tmux的注意。然后,我们快速按下一个键将命令发送到tmux。通过按字母,数字,标点符号或者箭头键来发出命令。

screen上的内容相同,只不过我们按Ctrl + A可以引起注意。

要关闭窗口,请按Ctrl + B,然后快速按X。状态栏变为琥珀色。然后提示我们确认要杀死该窗口。

如果我们改变主意,请按Y关闭窗口,或者按N。之后,我们不必再按Enter键。 Y或者N足以注册选择。

如果按Y,则窗口关闭。因为这是该会话中的唯一窗口,所以会话终止。

tmux会话已关闭,我们将返回到启动tmux的命令行。我们将在终端窗口中看到[已退出]。

看起来似乎很明显,但这是在确认我们已关闭会话,而不是将其分离并运行。我们将在下面讨论分离会议。

开始一个命名的tmux会话

如果我们定期启动多个tmux会话,我们将很快欣赏为每个会话赋予一个有意义的名称的功能。我们也可以在"screen"中命名会话,但会话窗口中的任何位置都不会显示它们。

要以会话名称启动" tmux",请使用" new"(新会话)命令和" -s"(会话名称)选项。我们的会话将称为data-1,因此我们键入以下内容:

tmux new -s data-1

tmux会话加载时,data-1作为状态栏中的第一个条目显示在最左侧。

添加更多窗口

要在当前会话中创建一个新窗口,请按Ctrl + B,然后按C。在当前会话中,我们将获得一个空白的终端窗口。因此,我们将在此新窗口中运行某些内容,让我们使用-w(follow)选项启动dmesg命令:

dmesg -w

现在,我们在会话中有两个窗口;一个正在运行" top",另一个正在运行" dmesg"。不过,我们一次只能看到一个(稍后会更多)。

看一下状态栏的左侧。我们仍然在thedata-1tmux会议上。在零窗口中,top正在运行,而在第一窗口中,正在运行dmesg。 dmesg之后的星号(*)告诉我们哪个窗口可见。

要在窗口之间切换,请按Ctrl + B,然后按以下键之一:

  • N:显示下一个窗口。

  • P:显示上一个窗口。

  • 0到9:显示编号为0到9的窗口。

我们也可以从列表中选择一个窗口。如果先按Ctrl + B,再按W,将显示一个窗口列表。

要移动琥珀色的高亮条,请按向上或者向下箭头,主页或者结束。显示屏的底部在突出显示的窗口中显示内容的预览。

按Enter键移至突出显示的窗口,或者按Esc键退出窗口列表而不进行切换。

分离和添加会话

如果按Ctrl + B,然后按D,则将分离会话。它会继续在后台运行,但是我们将无法看到它或者与之交互。

我们已经在会话中启动了" top",因此我们有一个正在运行的过程可供演示。然后,我们按Ctrl + B,然后按D。该会话消失并成为后台会话。

我们返回到原始终端窗口。来自" tmux"的消息告诉我们会话已分离。这也使我们想起了为会议指定的名称。这很方便,因为这是我们用来添加到后台会话,然后将其还原为交互式会话的方法。

要添加一个分离的会话,我们将使用带有-t选项(目标会话)的不言自明的" attach-session"命令。我们还将提供我们希望召回的会议的名称。

我们输入以下内容:

tmux attach-session -t data-1

我们的会话返回并再次成为可见的交互式会话。

当我们添加会话时,在分离会话之前启动的所有长时间运行或者连续的进程仍将在后台运行(除非它们已完成)。

screen可以做到这一点,但是不那么直观。

处理多个会话

让我们打开另一个终端窗口,然后启动一个新的名为data-2的tmux会话:

tmux new -s data-2

在该会话中,我们将启动dmesg

dmesg -w

现在,我们有了原始的data-1tmux会话,还有一个新的名为data-2的会话。

状态栏显示此会话称为data-2,它有一个运行" dmesg"的窗口。

如果我们按Ctrl + B,然后再按D,则将分离该会话。

回到data-1的tmux会话,我们按Ctrl + B,然后按S组合键以查看tmux会话列表。

需要明确的是,这是会话列表。我们之前看到的类似显示是单个会话中的窗口列表。

我们可以通过按下向上和向下箭头,主页和结束来移动琥珀色高亮条。底部显示突出显示的会话中内容的预览。

如果按向右箭头,则会显示突出显示的会话的窗口。

按Enter键移至突出显示的会话或者窗口,或者按Esc键退出会话列表而不更改会话。如果选择一个新会话,则当前会话将分离,并添加我们选择的会话。

在执行此操作之前,我们分离了data-2会话。但是,我们可以使用仍添加到其原始终端窗口的会话来执行此操作。完成后,任何screen更改都会在两个" tmux"会话中同时出现。

screen命令也可以通过一组类似的命令来完成。

使用窗玻璃

如果按Ctrl + B,然后按双引号(),则将窗口水平拆分为两个窗格。

这只会影响当前窗口。会话中的其他内容将保持不变。我们在顶部窗格中使用了" tmux ls"命令列出了该会话中的窗口。有两个,状态行告诉我们我们在第一个窗口中。如果我们先按Ctrl + B跳至窗口零,然后再按0(零),我们将看到它与我们离开时一样。

这是两个独立的命令行,而不是一个窗口中的两个视图。它们是不同的,独立的shell。我们可以通过在每个窗格中运行不同的命令来说明这一点。

我们输入以下内容:

uname -a

ls -hl

要从一个窗格移动到另一个窗格,请按Ctrl + B,然后按向上,向下,向左或者向右箭头。

如果按Ctrl + B,然后使用百分号(%)垂直拆分当前窗格。

按Ctrl + B,然后按Q以使tmux简短地闪烁每个窗格的编号。

这些数字用于tmux的提示和消息中。按Ctrl + B,然后按X关闭当前窗格。状态栏变为琥珀色,并提示我们确认要关闭该窗格号。按Y删除窗格,或者按N保留原样。

如果按Y,将删除窗格。

screen命令也有窗格,但是同样,它们使用起来不太直观。screen问题使我们感到烦恼的是,如果我们用窗格分离会话,则在重新连接该会话时它们会消失。这很快就变老了。

Ctrl + B备忘单

我们在下面提供了可在tmux中使用的不同命令的备忘单。

会话命令

  • S:列出会话。

  • $:重命名当前会话。

  • D:分离当前会话。

  • Ctrl + B,然后在tmux中显示帮助页面。

窗口命令

  • C:创建一个新窗口。

  • ,:重命名当前窗口。

  • W:列出窗口。

  • N:移至下一个窗口。

  • P:移至上一个窗口。

  • 0至9:移至指定的窗口号。

窗格命令

  • %:创建水平分割。

  • :创建垂直分割。

  • H或者向左箭头:移至左侧窗格。

  • I或者向右箭头:移到右侧窗格。

  • J或者向下箭头:移到下面的窗格。

  • 向上箭头键:移至上方的窗格。

  • 问:简要显示窗格编号。

  • O:依次浏览窗格。每按一次,便会跳至下一个,直到我们遍历所有这些。

  • }:将当前窗格的位置与下一个交换。

  • {:将当前窗格的位置与上一个交换。

  • X:关闭当前窗格。

"screen"和" tmux"比较

在功能方面,"screen"和" tmux"两者的性能相似,并提供相同的主要功能。这是我们访问这些功能的方式截然不同的方式。tmux提供更流畅,更舒适的方式来访问各种功能。但是,这并不是唯一的区别。

重命名tmux中的会话和窗口的功能很简洁,并且当我们重新连接会话时它保留窗格的事实改变了游戏规则。

另一方面,当我们分离并重新连接会话时," screen"会完全丢失窗格。这几乎足以使我们避免在一开始就分离。

tmux还有更多功能,包括其难以置信的灵活脚本功能。