Tmux入门

时间:2020-03-05 15:29:55  来源:igfitidea点击:

使用tmux,我们可以创建多个终端会话,这些会话可以从一个窗口中打开(添加)和关闭(分离)或者同时显示。

如果我们在终端上花费大量时间,那么学习如何使用终端多路复用器将为我们节省很多麻烦。
如果工作仅涉及通过命令行访问远程计算机,则尤其如此。

screen与tmux

Tmux被认为是GNU Screen多路复用器向前迈出的下一步发展。

如果我们习惯于进行screen筛选,那么我们会发现马上就可以轻松上手。
这两个应用程序之间有很多相似之处。
我们对screen命令文章反应良好,我觉得我们的读者会非常喜欢使用tmux的某些更新功能。

如果我们已经熟悉了screen,则可以快速阅读本文以了解它们之间的区别。
对于某些命令,我可能会指出相似或者不同之处。

将介绍如何安装tmux以及如何执行基本操作。

安装tmux

Tmux是一个流行的应用程序,应该在Linux发行版的官方存储库中可用。
我们可以使用发行版的软件包管理来安装它。

在基于Debian和Ubuntu的发行版上,可以使用以下命令进行安装:

sudo apt install tmux

tmux入门

正如我们所谈到的那样,tmux是一个出色的应用程序,可以提高生产力。
它是一款功能强大的软件,但入门时可能会有些混乱。

我将一次指导我们完成一些关键功能。
我的目标是简化工作,并向我们展示基本功能。
自定义tmux的方法有很多,我们将无法涵盖本文的所有内容。
如果我们对有关高级功能和特性的文章感到好奇,请在注释部分告诉我们!

在tmux中创建会话

打开一个终端并使用以下命令:

Hyman@theitroad:~$tmux

这应该使我们进入tmux。
我们将像往常一样看到一个命令提示符,但是现在我们将在终端的底部看到一个任务列样式菜单,其中会显示bash 0 *之类的内容。
星号表示这是活动窗口。

让我们创建几个可以其中切换的窗口。
我们可以通过使用前缀[ctrl + b] + c来实现。

我们应该在任务列上看到已添加名为1:bash的内容。
让我们再添加一个,然后再继续。

现在,它应该看起来像下面的screen截图。
我们应该总共有三个新的终端窗口(一次只能看到一个窗口)。

自动窗口名称

Tmux实际上可以识别某些程序并自动重命名窗口(如果我们没有明确命名窗口)。
例如,如果在窗口中运行top命令,我们会注意到窗口名称从bash更改为top。

tmux中的会话vs窗口vs窗格(拆分)

在继续之前,我们应该了解tmux中会话,窗口和窗格之间的区别。

将会话视为笔记本,将窗口视为章节,将窗口窗格视为其页面。

一个会话可以有多个窗口。
窗口基本上是一个终端。
我们可以在几个垂直和水平窗格之间拆分一个窗口。
这意味着一个终端窗口中可以有多个终端。

我们可以为特定主题/项目创建一个tmux会话。
例如,如果我们管理三台服务器,也许可以为每台服务器创建一个会话以执行任务。
使用一个窗口来监视系统资源,并使用另一个窗口来执行某些维护任务。
系统监视窗口可以具有多个窗格,以监视内存,CPU和磁盘使用情况。

在tmux会话中切换窗口

请记住,ctrl + b(同时)就像“ tmux”键一样,它告诉软件我们要输入命令。
请查看下表,开始浏览tmux界面。

|上一页|下一个| n(0,1,2,3等)|
| --- - | --- | - - |
| [Ctrl + B] + P | [Ctrl + B] + N |切换到n窗口:[Ctrl + B] + 0 |

现在,我们可以“来回移动”或者通过其ID号选择一个特定的实例,尝试这些操作,直到感觉舒适为止。

准备好?
惊人的。
让我们看看其他一些功能。

注意:如果我们是经验丰富的Screen用户,则可能习惯于使用[ctrl + a]前缀。
编辑配置文件将允许我们根据需要更改前缀。
我实际上发现备用键组合提高了我的效率,但我也知道旧习惯很难打破。

使用窗口列表切换

另一个选项使用[ctrl + b] + w。
这使我们可以直观地查看会话。
我们可以使用箭头键选择所需的窗口/窗格。

在tmux中命名或者重命名Windows

我们可以使用以下组合键来命名当前窗口:

[ctrl+b] + ,

为tmux会话命名

我们可能会发现以有意义的标题命名会话以使事情井井有条会很有帮助。
让我们尝试用tmux命名第一个会话。

我们可以为我们想要的任何名称命名,但是在这种情况下,我将免费命名。
输入以下命令:

tmux new -s free

现在,我们应该有一个新的tmux会话正在运行。
如果我们在窗口的左下方查看,我们将看到会话的名称,而不是通用的“ bash”。

如果我们已经创建了会话,则可以使用以下按键组合对其进行命名或者重命名:

[ctrl+b] + $

分离会话(退出tmux会话,但使其在后台运行)

在继续之前,让我们开始使用watch命令免费运行,它将每2秒更新一次结果。

watch free

如果我们不熟悉free或者watch,建议我们查看watch and free命令。

然而,了解它们的功能对于将它们与tmux结合使用并不是必不可少的。

好的,一旦程序开始,请继续并分离会话。
使用此组合键:

[ctrl + b] + d

这将使我们返回到标准命令提示符。
请记住,tmux会话仍在后台运行,我们可以随时输入它。

列出tmux会话

会议怎么了?
它仍在后台运行。
我们可以按名称或者ID号重新打开会话,但是如果忘记了会话名称该怎么办?

tmux内置了一个列表函数:

tmux ls

这将列出我们当前的所有tmux会话。
运行它会产生如下输出:

Hyman@theitroad:~$tmux ls
free: 1 windows (created Sat Nov 29 03:16:31 2015) [80x23]

如我们所见,它还列出了会话中有多少个窗口。

在Tmux中重新进入会话(也称为添加)

要重新打开tmux会话,可以将tmux命令与attach或者attach-session方法一起使用,如下所示:

tmux attach -t session_name_or_number

这是一个动画,显示了演示之前的所有这些步骤。

在tmux中创建多个窗格

现在我们已经了解了基础知识,可以继续进行操作并创建多个窗格。

水平(左/右)垂直(上/下)
[Ctrl + B] +%[Ctrl + B] +“

我们先创建一个垂直拆分,然后再创建一个水平拆分,以对这些命令进行一些练习。

[ctrl + b] + " 
[ctrl + b] +  %

如果按该顺序输入了命令,则应该有三个看起来如下的窗格:

我们可以使用[ctrl + b] +空格键切换当前焦点窗格的布局。

在窗格之间切换

要在分割之间切换,可以使用tmux前缀[ctrl + b] +箭头键。

[ctrl+b] + arrow keys

这将使窗格按我们选择的方向循环。
所选窗格将以绿色突出显示。

放大窗格

我们也可以使用[ctrl + b] + z将其“缩放”到选定的窗格中,这将使选定的screen达到全屏大小。
要退出缩放模式,请再次按[ctrl + b] + z。

杀死或者关闭窗格

这是重要的。
我们可以使用前缀[ctrl + b] + x关闭窗格(拆分)。

它将要求我们确认:

kill-pane 0? (y/n)

在Tmux中杀死或者关闭Windows

为了关闭当前窗口(选项卡),请使用:

[ctrl + b] + &

它将要求我们确认:

kill-window window_name? (y/n)

在tmux中杀死会话

要终止当前正在使用的tmux会话,必须首先终止所有窗口。
那不是很方便,是吗?

我们可以使用其名称或者数字有选择地杀死tmux会话,如下所示:

tmux kill-session -t session_name_or_number

即使我们在会话中,它也会杀死该会话。

如果要杀死除当前正在使用的会话(或者最近使用的会话)以外的所有会话,请使用以下命令:

tmux kill-session -a

要一次性杀死所有tmux会话,可以使用以下神奇命令:

tmux kill-server

下载tmux速查表

我们已经学习了tmux的基础知识,但是记住所有命令并不容易,尤其是在一开始的时候。
这就是为什么我汇总下表中的所有命令的原因。
我们也可以下载PDF格式的文件。

命令说明
tmux开始新会议
tmux new -s名称使用名称启动新会话
tmux ls列出所有会话
tmux kill-session -t name杀死提到的会话
tmux kill-session-a杀死除最后用过的会话之外的所有会话
Tmux kill-server杀死所有TMUX会话
tmux附件-t name添加/输入提到的会话
[Ctrl + B] + D分离/退出当前会话
[Ctrl + B] + $名称或者重命名当前会话
[Ctrl + B] + C创建新窗口
[Ctrl + B] +,名称或者重命名当前窗口
[Ctrl + B] + W列出所有窗口
[Ctrl + B] +&杀死当前窗口
[Ctrl + B] + N/P/N搬到下一个/上一个/nth窗口
[Ctrl + B] +%创建水平窗格
[Ctrl + B] +“创建垂直窗格
[Ctrl + B] +空间键切换当前窗格的布局
[Ctrl + B] + Z放大当前窗格
[ctrl + b] + x杀死当前窗格