我将重新使用GNU Screen,但我听到人们偶尔会提到tmux是更好的选择。它真的可以替代屏幕提供的所有功能,例如在不同窗口中进行活动监视等吗?每种都有什么优缺点?

评论

在unix.stackexchange.com/questions/549/tmux-vs-gnu-screen中也进行了讨论

在屏幕上,您可以通过屏幕-S automate_me -X东西'command'$(echo -ne'\ 015')发送命令到附加的会话,而tmux则不能。如果您正在测试virtualbox ISO /映像,并且需要快速远程执行一些命令,则该功能非常有用。例如,我在Vim命令中使用它可以在Virtualbox屏幕中快速调试脚本。在tmux的早期版本中,我发现屏幕可以快速处理更多文本,而tmux崩溃了。另外,屏幕不需要任何配置即可处理UTF-8等。tmux不需要。

tmux是否可以正确处理历史记录?

#1 楼

一些(主要)原因是我更喜欢tmux而不是screen:状态栏更易于使用。您可以轻松地为当前窗口,带有活动的窗口等设置不同的文本/样式,并且可以在状态栏的左侧和右侧放置内容,包括可以指定间隔(默认为15s)运行的shell命令。
几乎可以在tmux内部运行的所有命令都可以从带有tmux command [args]的外壳运行。这使它非常容易编写脚本,并且使执行复杂命令变得容易。
自动窗口重命名更加准确。尽管screen根据命令的第一个单词设置标题,并且要求shell配置甚至在shell窗口中进行配置,tmux仍会跟踪每个窗口中实际正在运行的进程,并相应地更新标题。这样,您可以使用任何外壳和零配置进行动态重命名。例如:假设您正在运行Z Shell;该窗口的名称为“ zsh”。现在,假设您要编辑一些配置文件,因此键入sudo emacs /etc/somefile。当sudo要求输入密码时,该窗口的名称将为“ sudo”,但是一旦完成该操作,并且sudo启动emacs,则标题将为“ emacs”。当您完成所有操作并退出emacs时,标题将更改回“ zsh”。这对于跟踪窗口非常有用,并且在特定情况下也特别有用,例如,如果您在另一个窗口中有一些长时间运行的进程,偶尔会提示您使用dialog进行输入;发生这种情况时,窗口名称将更改为“对话框”,因此您将知道必须切换到该窗口并执行某些操作。
更好的会话处理(IMHO)。您可以在tmux本身中的会话上做更多的事情。您可以轻松地切换,重命名等,并且可以在会话之间移动和共享窗口。它还有一个不同的模型,其中每个用户都有一个服务器来控制他/她的会话并与客户端连接。不利的一面是,如果服务器崩溃,您将失去一切。不过,我从未遇到过服务器崩溃的情况。

tmux似乎更加活跃地开发。更新非常频繁,您可以根据此FAQ提交错误报告或功能请求,并在几天之内得到答案。但是,正如评论中指出的那样,screen缺乏开发主要是因为它很稳定。基本上已经完成,没有放弃。就是说,如果它现在不能做某事,它可能永远也做不到,长期存在的问题也不太可能得到解决。 (不过,公平地说,垂直分割是screen在我第一次回答这个问题时所没有的功能,现在已经有了。) tmux。并不是说屏幕没有优势,但是FWIW,我想不出切换以来错过的任何事情。付费书呆子的另一个答案是更客观的赞成/反对意见,尽管我会说我从来没有遇到那里提到的崩溃或击键遗漏的问题。 (那些可能依赖于操作系统。我只在Linux和FreeBSD上使用过。)

评论


由于tmux是新的,因此它的开发更加活跃。 GNU Screen已经有25年历史了,因此他们已经修复了大多数错误。

–付费书呆子
2011年5月4日在18:31

付费书呆子的评论对您的最后一点很重要。除非您可以更具体地说明,否则第二点实际上并没有什么区别,因为它也适用于屏幕。

– jw013
2011年11月10日,下午4:31

@付费书呆子:techrepublic.com/blog/opensource/is-tmux-the-gnu-screen-killer/…

– sjas
2012年8月10日14:07

@apaidnerd是一个非常丰富的声明:savannah.gnu.org/bugs/…

–BłażejMichalik
17年1月25日在2:36



屏幕包已弃用,不包含在RHEL8.0.0中。

– GoYun.Info
19年11月6日在16:15

#2 楼

(会话是Windows的集合,可以在以后分离并重新连接。Windows可能包含一个或多个窗格。例如,配置,请在此处和此处查看。)
tmux



优点

可以将键发送到其他窗格,就像IDE一样。
轻松进行键绑定-有了正确的配置,您会在Vim或Screen中感到宾至如归
Vim- ish和Emacs ish内置绑定
良好的布局管理,就像平铺窗口管理器一样
Unicode似乎只适用于现代终端
TERM=tmux解决了一些终端问题




缺点


慢-不确定为什么,但击键似乎迟钝不再慢的问题
多路复用力到最小连接终端的整个会话宽度和高度
在Mac OS X上多次崩溃,丢失了整个会话
升级后在Linux上失败,无法重新连接到以前的会话
偶尔缺少命令击键-^ A ^ [需要花费一些时间适用于复制模式

不能将窗格从一个窗口移动到另一个窗口使用join-pane命令修复了
端子宽度更改后,没有行解开(或“回流”或“重新包裹”)行(调整窗口大小)



GNU屏幕


Pros

非常稳定(v1.0处于1987年)
TERM=screen解决了某些终端问题

内置的Emacs式绑定
易于移动和控制水平窗格
多路复用时,任何连接的终端都可以调整大小窗格



缺点


没有补丁就没有垂直分割(Ubuntu除外)最新版本的屏幕支持垂直分割
分离时丢失窗格拆分
使Unicode工作需要一点技巧和决心
复杂而混乱的状态行配置





评论


是否只有在按Esc时才按下按键? tmux有一个延迟,它等待着您是否正在输入xterm序列或仅输入一个单独的Esc,并与vim结合使用,看起来似乎很滞后。将退出时间设置为较低的值,例如50。

–伊芙
2011年6月4日21:37

您说^ A ^ [有时不起作用,这也很有趣;我在屏幕上也遇到了同样的问题,但是从来没有tmux!而且我相信您可以使用连接窗格来移动窗格。

–伊芙
2011年6月4日21:38

好吧,tmux在vim上糟透了,在某些情况下(也就是我的),任何解决方案都无法在任何地方发布,甚至花一些时间解决我的问题的人也做不到。当您不能在Vim中使用时,这很烦人。

–吗?
2014-2-19在10:14

没有补丁就没有垂直分割(Ubuntu除外)我认为那不是真的。我使用屏幕已经有几年了,在Debian和Fedora上水平或垂直分割时我从未遇到任何问题。即使在带有Termux的Android上,它的作用也很吸引人。

–Forivin
18年4月18日在15:54

@Forivin先前的评论是在2014年发布的,当时屏幕4.2尚未发布。

– N M
18年7月25日在9:32

#3 楼

屏幕专家:在Linux和Solaris上几乎可以立即使用。当您必须在平台之间来回切换时,最好不要进行心理上下文切换。

我确定您可以在任何平台上编译tmux,但是有时您只有足够的访问权限才能使用屏幕,但是实际的系统管理员实际上并不想添加任何不兼容的软件。并非绝对必要。

评论


RHEL / Centos 8已删除GNU屏幕。仍然在Ubuntu 20.04 LTS中。

– sastorsl
20年8月25日在20:01

谢谢@sastorsl。该页面包含一些其他信息和有趣的评论:access.redhat.com/solutions/4136481

–贾斯汀
20年8月26日在15:51

#4 楼

我已经使用tmux大约2天了,所以我对狂热的用例的热情还没有得到满足。

虽然经历了从一个程序过渡到一个程序的通常的痛苦。另一个,我为几个积极的功能所震惊,但是让我相信我永远不会回到屏幕上的功能是复制n粘贴模式的实用程序。

screen中,您不能进入复制模式,在缓冲区中向后滚动,然后转到另一个窗口。

tmux中,您可以在复制模式下同时具有多个窗口,并且缓冲区向后滚动到不同的位置。此外,还有多个复制缓冲区。而且,您无需修补源即可获得fFtT光标移动。

评论


“在屏幕上,您无法进入复制模式,无法向后滚动缓冲区,然后转到另一个窗口。”也许自2012年以来情况已经改变,但我只是尝试了一下,效果还不错。

– cdhowie
19-10-12在23:15

#5 楼

除一个用例外,在每种用例中,我都已用tmux替换了GNU Screen。在这种情况下,我需要一个等效的超级终端才能连接到串行端口。正如Aaron Toponce在他的文章“使用GNU屏幕连接到串行空调制解调器”中指出的那样,tmux常见问题解答指出:屏幕具有内置的串行和telnet支持;这很膨胀,不太可能添加到tmux中。


我典型的tmux用例是与tmuxinator结合创建多窗格和多窗口开发会话。如果您想学习tmux,建议您阅读Brian P. Hogan的书tmux:高效的无鼠标开发。

评论


您知道cu调用另一个系统吗?串行tty比屏幕更简单,但是轻巧实用!

– F. Hauri
19年4月10日在9:39

#6 楼

我从tmux中脱颖而出,在屏幕上不容易实现:


进行垂直窗格拆分
多路复用,我们将其用于远程和本地配对。


评论


屏幕不支持使用-x选项和acladd进行多路复用吗?

–池
15-10-20在19:46

如先前的文章所述,屏幕具有垂直窗格拆分(显然需要一个不带Ubuntu的补丁)。而且,多路复用可以正常工作并且已经使用了很多年。

–纠缠循环
17年1月27日在16:25

自2014年发布4.2以来,垂直分割一直出现在主线屏幕上。许多发行版都发行了非常老的版本,尤其是Apple。

–尼尔·福尔茨(Neal Fultz)
17年5月3日在6:07

这两点都不正确。

–Forivin
18年4月18日在16:08

答案在2018年不正确

– Alec Istomin
18-09-30在6:14

#7 楼

我长期以来一直是Screen的重度用户,但是我使用的是2002年修改的版本。主要是因为我希望窗口“ next / prev”的导航顺序能够与new的顺序保持一致。创建了窗口,类似于i3或Ion等平铺窗口管理器。标准的屏幕行为是让“下一个”和“上一个”按窗口编号显示,因此通常“新”窗口(拥有最小的可用编号)将位于“下一个”窗口之外的其他位置-如果您不这样做,将会造成混淆记住数字。此后,我的首选行为已在Tmux中实现,作为2010年new-window命令和2012年renumber-windows选项的标志。我试图使我的Screen补丁尽可能地被接受,包括文档添加等。 ,在2002年7月的“屏幕”列表上没有引起任何讨论(当时“ screen@informatik.uni-erlangen.de”,找不到档案)。实际上,即使是一年后再次发送时,它甚至都没有得到认可。

自2002年以来,我“改编”了我的补丁几次以应用于新版本的Screen。但是,当我使用版本4.3(2015)时,我注意到一个未记录的更改,中断了我对屏幕的使用-即“材料”现在插值了环境变量。我不需要该功能,也无法弄清楚如何轻松地将“ stuff”的参数转义(以便我可以发送包含美元符号的文本),所以我一直使用4.0版本(从2004年开始)。 />
我在Emacs函数中使用Screen的“ stuff”(在Tmux中为“ send-keys”),该函数将当前Emacs区域的内容发送到特定的窗口号。这样,当我用脚本语言编写代码时,我打开了一个解释器,为解释器窗口指定了一个特殊的数字,然后可以使用此Emacs绑定将代码行从编辑器窗口直接发送到解释器窗口。它很hacky,但我比纯Emacs解决方案好,因为我还可以使用标准的击键在其“屏幕”窗口中与解释器进行交互。它有点像GUI IDE,但是我不必使用鼠标或盯着闪烁的光标。

我在补丁中实现的另一个功能是可以“标记”窗口,然后将标记的窗口重新定位为当前窗口之后的“下一个”。对我来说,这是重新排序窗口的自然方法,而不是重新编号。就像复制/粘贴范例或“拖放”一样。 (我最近也想出了如何在i3中执行此操作。)

应该可以在Tmux中执行相同的操作,例如,从2015年起,就可以使用“标记”窗格的功能。或者,也许可以使用有状态的shell脚本制定出更基本的解决方案。我实现了一个简短的脚本和快捷键来尝试“标记窗格”方法,该方法工作了几次,但是Tmux崩溃了,并显示“ [丢失服务器]”。然后我发现Tmux崩溃了,即使我没有尝试做任何复杂的事情。显然,至少对于某些用户来说,它已经崩溃了。有时服务器崩溃,有时服务器开始使用100%的CPU并变得无响应。我从未见过Screen可以做这两种事情。

从理论上讲,Tmux在几个方面都优于Screen。它具有更好的脚本编写能力,这意味着您可以执行一些操作,例如从命令行查询当前会话中的窗口列表,而这在Screen中是不可能的。例如,在2015年,Screen添加了一个命令“按标题对窗口进行排序”。我不确定这种专门的命令何时会有用,但是可以通过Tmux中的shell脚本相对容易地完成此操作以及更实际的变化(例如,按CPU使用率对窗口进行排序)。对我来说,至少在不修改C代码的情况下,要在Screen上做任何有创意的工作似乎很困难。特别是在服务器崩溃时。通过为每个“会话”指定一个单独的套接字,可以解决此问题。我仍然更喜欢Screen的每会话一台服务器的默认设置,这似乎更优雅。

使用Screen代码早在2002年,对我来说是有教育意义的,并且很有趣。奇怪的是,对于所有其他功能,Tmux的代码行数比Screen少25%(30k对40k)。我注意到Tmux使用了许多树和列表数据结构,这对我来说有点难以理解。屏幕似乎更喜欢数组。

据我了解,由于Unix终端接口非常稳定,因此Screen或Tmux代码几乎不需要适应底层操作系统的变化。这些程序实际上没有安全更新,例如Web浏览器或Web服务器,甚至Shell。我没有注意到运行自定义版本的Screen(最后一次于2004年更新)时遇到任何问题(除了需要添加一些配置文件以防止Systemd删除套接字外,这些文件通常还是分发包的一部分)。也许我可以通过在崩溃之前运行Tmux版本来解决在Tmux中遇到的问题。当然,如果有足够的用户这样做,那么这对于新用户来说将不是很好,因为这意味着更少的专家将寻找这些程序的最新正式版本中的错误。但是,很难激励自己转向对我来说不稳定(最新的Tmux)或缺少某些我想要的功能(标准屏幕)的产品。

我知道这不能提供OP的问题的简单答案,但我希望我的观点有用。

#8 楼

tmux的维护者之一Thomas Thomas也被列为screen项目的维护者,尽管他只涉及tmux代码。这是在屏幕上对tmux的巨大支持。

评论


您的答案并不清楚,为什么这是一个加号。

– TafT
20年7月2日在8:03

#9 楼

我想说屏幕的可用性是它的优势,但是其窗口系统不如tmux的易于处理。我必须说,我目前大部分时间都在使用gnu屏幕,因此有很多终端选项卡而不是屏幕窗口。

@Jed Schneider:您可以使用
Ctrl + A然后单击|获得垂直窗格拆分。 (竖线)。