如何在 Linux 上使用 tmux(以及为什么它比屏幕更好)
已发表: 2022-01-29 Linux tmux
命令是一个终端多路复用器,例如screen
。 它的拥护者很多,而且直言不讳,因此我们决定将两者进行比较。 tmux
真的更好,还是只是喜欢你所知道的?
tmux 与屏幕
tmux
和 GNU screen
命令都是终端多路复用器。 它们允许您在单个终端窗口中拥有多个窗口,并在它们之间来回跳转。 一个窗口可以分为多个窗格,每个窗格都为您提供一个独立的命令行。
您还可以分离会话,使其成为在后台运行的无头实体——您甚至可以关闭启动它的终端窗口。 准备好后,您可以打开一个新的终端窗口并重新附加仍在运行的会话。 您也可以通过 SSH 连接执行此操作。
您可以在一台计算机上分离会话,回家,然后登录到远程计算机。 重新连接后,您可以重新附加后台会话并再次以交互方式使用它。
什么是屏幕命令?
screen
命令也是一个终端多路复用器,它包含许多选项。 有关您可以用它做的所有事情的内幕,请查看我们的深入文章。
这一次,我们将专注于tmux
。 随着我们的继续,我们将提到screen
如何处理相同的特性或功能。
只有一件事让我们对screen
感到恼火。 当我们谈到它时,我们将介绍它,并看看tmux
的表现是否更好。
相关:如何使用 Linux 的 screen 命令
安装 tmux
虽然screen
通常默认安装在流行的 Linux 发行版上,但tmux
不是。 要在 Ubuntu 上安装tmux
,请键入以下内容:
sudo apt-get install tmux
在 Manjaro 上,您可以使用pacman
:
sudo pacman -Sy tmux
在 Fedora 31 上,已经安装了tmux
。
启动 tmux 会话
要启动tmux
,只需键入它并按 Enter 键:
多路复用器
当您处于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
的命令行。 您将在终端窗口中看到“[exited]”。
这似乎是在说明显而易见的事情,但它确认您已经关闭了会话并且没有让它分离并运行。 我们将在下面讨论分离会话。
启动一个命名的 tmux 会话
如果您定期启动多个tmux
会话,您将很快体会到为每个会话赋予有意义的名称的功能。 您也可以在screen
中命名会话,但它们不会显示在会话窗口的任何位置。
要使用会话名称启动tmux
,请使用new
(新会话)命令和-s
(会话名称)选项。 我们的会话将被称为“geek-1”,因此我们输入以下内容:
tmux 新 -s geek-1
当tmux
会话加载时,“geek-1”显示为最左侧状态栏中的第一个条目。
添加更多窗口
要在当前会话中创建一个新窗口,请按 Ctrl+B,然后按 C。您将在当前会话中获得一个空白终端窗口。 所以我们将在这个新窗口中运行一些东西,让我们使用-w
(跟随)选项启动dmesg
命令:
dmesg -w
现在我们在会话中有两个窗口; 一个运行top
,另一个运行dmesg
。 不过,我们一次只能看到一个(稍后会详细介绍)。
看一下状态栏的左侧。 我们仍在“geek-1” tmux
会话中。 在窗口 0 中,top 正在运行,而在窗口 1 中, dmesg
正在运行。 dmesg
后面的星号 (*) 告诉我们哪个窗口是可见的。
要在窗口之间跳转,请按 Ctrl+B,然后按以下键之一:
- N :显示下一个窗口。
- P:显示上一个窗口。
- 0 到 9:显示编号为 0 到 9 的窗口。
您还可以从列表中选择一个窗口。 如果您按 Ctrl+B,然后按 W,则会出现一个窗口列表。
要移动琥珀色高亮条,请按向上或向下箭头、Home 或 End。 显示屏的底部显示突出显示窗口中内容的预览。
按 Enter 移动到突出显示的窗口,或按 Esc 离开窗口列表而不切换。
分离和附加会话
如果您按 Ctrl+B,然后按 D,您将分离会话。 它将继续在后台运行,但您将无法看到它或与之交互。
我们已经在会话中开始了top
,所以我们有一个正在运行的过程来演示。 然后,我们按Ctrl+B,再按D。会话消失,变成后台会话。
我们回到原来的终端窗口。 tmux
有一条消息告诉我们会话已分离。 它也让我们想起了我们给会议起的名字。 这很方便,因为我们用它来附加到后台会话,然后将其恢复为交互式会话。
要附加一个分离的会话,我们将使用带有-t
(目标会话)选项的不言自明的attach-session
命令。 我们还将提供我们希望召回的会话的名称。
我们输入以下内容:
tmux 附加会话 -t geek-1
我们的会话返回并再次成为可见的交互式会话。
当您附加会话时,您在分离会话之前启动的任何长时间运行或持续的进程仍将在后台运行(除非它们已完成)。
screen
可以做到这一点,但不那么直观。
处理多个会话
让我们打开另一个终端窗口,并启动一个名为“geek-2”的新tmux
会话:
tmux 新 -s geek-2
在该会话中,我们将启动dmesg
:
dmesg -w
现在,我们有了最初的“geek-1” tmux
会话,以及一个名为“geek-2”的新会话。
状态栏向我们展示了这个会话被称为“geek-2”,它有一个运行dmesg
的窗口。
如果我们按 Ctrl+B,然后按 D,我们将分离该会话。
回到“geek-1” tmux
会话,我们按 Ctrl+B,然后按 S 以查看tmux
会话列表。
需要明确的是,这是一个会话列表。 我们之前看到的类似显示是单个会话中的窗口列表。
您可以通过按向上和向下箭头、Home 和 End 来移动琥珀色高亮条。 底部显示突出显示的会话中内容的预览。
如果您按右箭头,则会显示突出显示的会话的窗口。
按 Enter 移动到突出显示的会话或窗口,或按 Esc 离开会话列表而不更改会话。 如果您选择一个新会话,您当前的会话将分离,而您选择的会话将附加。
在我们这样做之前,我们分离了“geek-2”会话。 但是,您可以使用仍附加到其原始终端窗口的会话来执行此操作。 当您这样做时,任何屏幕更改都将同时出现在两个tmux
会话中。
screen
命令也可以通过一组类似的命令来执行此操作。
使用窗格
如果按 Ctrl+B,然后按双引号 (“”),则会将窗口水平拆分为两个窗格。
这只影响当前窗口; 会话中的其他人不会改变。 我们在顶部窗格中使用了tmux ls
命令来列出此会话中的窗口。 有两个,状态行告诉我们我们在第一个窗口中。 如果我们通过按 Ctrl+B 跳到窗口零,然后按 0(零),我们会看到它就像我们离开它一样。
这是两个独立的命令行,而不是一个窗口中的两个视图; 它们是不同的、独立的壳。 我们可以通过在每个窗格中运行不同的命令来显示这一点。
我们输入以下内容:
uname -a
ls -hl
要从一个窗格移动到另一个窗格,请按 Ctrl+B,然后按向上、向下、向左或向右箭头。
如果您按 Ctrl+B,然后按百分号 ( %)
,它将垂直拆分当前窗格。
按 Ctrl+B,然后按 Q 使tmux
短暂闪烁每个窗格的编号。
这些数字用于tmux
的提示和消息。 按 Ctrl+B,然后按 X 关闭当前窗格。 状态栏变为琥珀色,系统会提示您确认是否要关闭该窗格编号。 按 Y 删除窗格,或按 N 保留原样。
如果按 Y,则删除窗格。
screen
命令也有窗格,但同样,它们使用起来不太直观。 screen
让我们烦恼的事情是,如果您使用窗格分离会话,当您重新连接该会话时它们会消失。 这很快就会变老。
A Ctrl+B 备忘单
我们在下面包含了您可以在tmux
中使用的不同命令的备忘单。
会话命令
- S:列出会话。
- $:重命名当前会话。
- D:分离当前会话。
- Ctrl+B,然后 ?:在
tmux
中显示帮助页面。
窗口命令
- C:创建一个新窗口。
- ,:重命名当前窗口。
- W:列出窗口。
- N:移动到下一个窗口。
- P:移动到上一个窗口。
- 0 到 9:移动到指定的窗口号。
窗格命令
- %:创建水平分割。
- “:创建垂直分割。
- H 或向左箭头:移动到左侧的窗格。
- I 或右箭头:移动到右侧的窗格。
- J 或向下箭头:移动到下面的窗格。
- K 或向上箭头:移动到上面的窗格。
- 问:简要显示窗格编号。
- O:按顺序在窗格中移动。 每按一次都会带你到下一个,直到你循环浏览所有这些。
- }:将当前窗格的位置与下一个交换。
- {:交换当前窗格与前一个窗格的位置。
- X:关闭当前窗格。
他们如何比较
在功能方面, screen
和tmux
的性能相似并且提供相同的主要功能。 您访问这些功能的方式明显不同。 tmux
提供了更流畅、更舒适的方式来获取各种功能。 然而,这不是唯一的区别。
在tmux
中重命名会话和窗口的功能非常简洁,并且当您重新附加会话时它会保留窗格这一事实改变了游戏规则。
另一方面,当您分离并重新附加会话时, screen
会完全丢失窗格。 这几乎很烦人,足以让你一开始就避免分离。
tmux
还有很多其他功能,包括其极其灵活的脚本功能。 你有责任自己去看看。
Linux 命令 | ||
文件 | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look ·字符串·类型·重命名· zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm | |
流程 | 别名· screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat ·超时·墙·是·杀死·睡眠· sudo · su ·时间· groupadd · usermod ·组· lshw ·关机·重新启动·停止·关机· passwd · lscpu · crontab ·日期· bg · fg | |
联网 | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
相关:适合开发人员和爱好者的最佳 Linux 笔记本电脑