tmux vs. GNU屏幕[关闭]


194

浏览有关tmux的问题(我通常使用GNU Screen)。我的问题是它们各自的优缺点。特别是我对tmux不太了解。



5
从下面的好答案中可以看出,它们不是基于观点的。
reinierpost

@reinierpost-似乎这里的许多人都太过急于以“主要基于意见”来结束问题。但是,我们可以投票重新开放。
MountainX

尽管这个问题是一个比较问题,但我认为赞成和反对的论点是足够客观的,因此在这里固执己见的拒绝理由还不行。您可以检查链接的SU问题,答案还可以。
peterh '18 -10-1

Answers:


122

他们的网站

  • tmux与GNU屏幕有何不同?它还提供什么?

与屏幕相比,tmux具有几个优点:

  • 明确定义的客户端-服务器模型:窗口是独立的实体,可以同时连接到多个会话,并可以从多个客户端(终端)查看,也可以在同一tmux服务器中的会话之间自由移动;
  • 一个一致的,有据可查的命令界面,具有相同的语法,无论是交互使用,用作键绑定还是从外壳程序使用;
  • 可从外壳轻松编写脚本;
  • 多个粘贴缓冲区;
  • 选择vi或emacs键布局;
  • 限制窗口大小的选项;
  • 状态行语法更有用,能够显示特定命令输出的第一行;
  • 更干净,现代,易于扩展的BSD许可代码库。

仍然有一些功能屏幕包括tmux省略:

  • 内置的串行和telnet支持;这很肿,不太可能添加到tmux中;
  • 更广泛的平台支持(例如IRIX和HP-UX)以及奇数终端。

4
该死的...现在我想尝试tmux ...只是因为缺少vi键绑定,屏幕对我不起作用。
xenoterracide

1
vi或emacs快捷键绑定是否只是意味着tmux附带了两个方便的默认值集?可以使用其rc文件完全重新配置屏幕的键绑定。
jw013 2011年

您可以定义任意键绑定。请参阅:openbsd.org/cgi-bin/...
NISC

当他们谈论实现时,他们最终应该使用<C-Left>in vim来解决愚蠢的错误tmux
2014年

45

一个区别是当多个终端连接到一个会话时,两者的行为方式不同。

通过屏幕,每个连接的终端的视图都彼此独立。使用tmux,所有连接的终端都可以看到相同的东西。

假设您有两个连接到单个tmux会话的终端。如果您^B在一个终端中键入1,则另一终端也将切换到窗口1。

当您有两个终端连接到一个屏幕会话时,如果您在其中一个终端上键入^A1,则它对另一终端无效。

这是基于我对tmux 1.2的经验;我看到1.3已发布,但我没有在变更日志中注意到有关此行为更改的任何内容。

如果您喜欢屏幕行为并希望在tmux中使用它:

如果您的原始tmux会话被调用0(默认设置),则可以执行tmux new-session -t 0)以启动一个新的独立会话,该会话连接到同一组窗口,然后它们可以拥有自己的视图。


1
这是一个有趣的区别。我确信对于不同的用例,每种方法都有其优势。(tmux的优势:附着在同一tmux会话上的两个人(例如,用于远程配对编程总是会看到同一件事;屏幕的优势:出于两个不同的目的而从两个地方附着到同一屏幕的一个人可以有两个不同的视图,即使同时使用) (例如,并排(操作系统/窗口管理器级别)窗口)。)
lindes 2011年

10
如果您原来的tmux会话称为“ 0”(默认值),则可以执行“ tmux new-session -t 0”)以启动一个新的独立会话,该会话连接到同一组窗口,然后可以拥有自己的窗口视图。我很确定这可以在1.2 / 1.3中恢复,但是我记不起来了。
Cos 2012年

@cos这正是我一直在寻找的技巧。非常感谢。希望我能对你投两次票:)我现在每次都开始重新附加“ tmux new-session -t 0”。
jrwren 2012年

@Cos已添加“从1.0到1.1,2009年11月5日”。@jrwren该命令可以缩短tmux new -t 0
user285259 '12

24

与GNU屏幕相比,tmux相当新。优点/缺点是一个棘手的问题,因为两个程序都解决了大约相同的问题。tmux是BSD许可的,而screen是GNU GPL。这对某些人来说很重要。

目前,屏幕(在Linux上)更具代表性,也就是说,与tmux相比,您更有可能在给定的Linux机器上找到它。但是,tmux在基本安装的一部分中包含在OpenBSD中。

这两个程序都允许您做同一件事,尽管事情的状态要复杂得多。两者之间的切换并不是太复杂,因为许多屏幕功能也已进入tmux,尽管如果您是任一方的高级用户,则切换到另一方时可能会发现一些挫败感。

与任何程序一样,它实际上取决于您的需求,并且您更满意。试一试,看看自己玩的不错。

有关tmux的更多信息,请参见https://tmux.github.io/


17

我使用的最大区别在于,在Gnu Screen中您只能水平分割帧,而在Tmux中,您可以水平分割和垂直分割。这是一个移动的目标,尽管正如我在这里告诉我的那样,垂直分割正在使其进入屏幕

除此之外,一切都是平坦的。


10
您也可以在屏幕上垂直分割。mmm ...至少可以在默认的Ubuntu 10.10屏幕安装中使用。
斯坦

4
@andre有一个长期存在的用于屏幕垂直分割的补丁程序...从未合并到上游...但是我敢肯定很多发行版都在应用它。
xenoterracide 2011年

17

我以为我只想提一下byobu可用于屏幕的包装器,它可以使开箱即用的包装变得更好。我不知道这样的东西是否可用于tmux,但是byobu让我的.screenrc仅有几行。查看有关byobu和屏幕截图的快速文章byobu的项目页面描述了该名称,该名称源于日语中的装饰性多面板屏风,该屏风可用作折叠式隔断。另外,仅运行它就不会损害您的屏幕设置,因此您可以放心地尝试它。一旦开始会话,byobu就可以使用随意重新连接到该会话,screen并且仍然不会丢失由其完成的任何自定义设置byobu(因此只能将其用于初始调用)。它的两个主要优点是:

  • 从带有一些有用信息的状态栏开始屏幕
  • 提供许多按键绑定,以更轻松地访问屏幕功能

我没有使用键盘绑定部分,但是肯定会发现状态栏很有用。

另外,您可能会发现Screen Vs tmux链接很有用。我认为大多数答案已被现有答案提及。


如果您汇总了的功能byobu,则该答案会更有用,例如此答案及其功能列表。
Gilles

好的,我在上添加了更多信息byobu,但是它就像运行命令并自己找到(菜单驱动)一样简单,因为它不会破坏您现有的屏幕设置。我已将答案设为社区Wiki,请随时对其进行编辑。
haridsv 2011年

1
byobu似乎实际上也支持tmux,至少在最新版本中。
Darael 2012年

12

Drench提出了一个有趣的观点-将两次连接到同一会话的默认行为在tmux中有所不同。但是,如果您要附加两次并在该会话中拥有独立的窗口视图,请使用以下命令启动tmux:

tmux new-session -t <session name>

这将为您创建一个新会话,并附加现有会话中的窗口。如果您没有为第一个会话命名,则可以使用“ rename-session”添加一个。


12

一个主要的缺点screen是它没有被积极开发。该漏洞的网页有近200页分配的内容可以追溯到5年以上。

tmux 也有一些悬而未决的问题,但问题要少得多,而且得到了更积极的支持。


8

tmux是较新的功能。

我发现良好的使用取决于良好的设置。

我使用vi(vim)进行编辑(在轨道上运行红宝石),并做了一些设置以使其正常运行。

这是我的〜/ .tmux.conf文件,其中包含许多有用的设置:

bind r source-file ~/.tmux.conf \; display "Reloaded!"  # Reload with ctrl-r
set -g prefix C-a         # prefix from ctrl-b to ctrl-a
unbind C-b                # allow ctrl-b for other things
set -sg escape-time 1     # quicker responses
bind C-a send-prefix      # Pass on ctrl-a for other apps
set -g base-index 1        # Numbering of windows
setw -g pane-base-index 1  # Numbering of Panes
bind \ split-window -h    # Split panes horizontal
bind - split-window -v    # Split panes vertically
bind h select-pane -L     # Switch to Pane Left
bind j select-pane -D     # Switch to Pane Down
bind k select-pane -U     # Switch to Pane Up
bind l select-pane -R     # Switch to Pane Right
bind -r C-h select-window -t :-  # Quick Pane Selection
bind -r C-l select-window -t :+  # Quick Pane Selection
bind -r H resize-pane -L 5       # Switch to Pane Left
bind -r J resize-pane -D 5       # Switch to Pane Down
bind -r K resize-pane -U 5       # Switch to Pane Up
bind -r L resize-pane -R 5       # Switch to Pane Right
setw -g mode-mouse off           # Mouse Off
set -g mouse-select-pane off     # Mouse Off  
set -g mouse-resize-pane off     # Mouse Off
set -g mouse-select-window off   # Mouse Off
setw -g monitor-activity on      # Activity Alerts
set -g visual-activity on
set -g status-fg white           # Status line Colors
set -g status-bg black
setw -g window-status-fg cyan    # Window list color
setw -g window-status-bg default
setw -g window-status-attr dim
setw -g window-status-current-fg white     # Active Window Color
setw -g window-status-current-bg red
setw -g window-status-current-attr bright
set -g pane-border-fg green      # Pane colors
set -g pane-border-bg black 
set -g pane-active-border-fg white 
set -g pane-active-border-bg yellow
set -g message-fg white          # Command/Message Line.
set -g message-bg black
set -g message-attr bright
set -g status-left-length 40     # Status Line, left side
set -g status-left "#[fg=white]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
set -g status-utf8 on            # Status Line, right side
set -g status-right "-------"
set -g status-interval 60        # frequency of status line updates
set -g status-justify centre     # center window list
setw -g mode-keys vi             # vi keys to move 
unbind v                         # Open panes in same directory as tmux-panes script
unbind n
bind v send-keys " ~/tmux-panes -h" C-m
bind n send-keys " ~/tmux-panes -v" C-m
unbind Up                        # Maximizing and Minimizing...
bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
unbind Down
bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"

Tmux较新,但“更多功能”意味着它至少与屏幕具有同等的功能-并非如此-除了其他地方提到的内容外,tmux的多用户支持也严重缺乏。没有ACL或状态信息,只是总体上它显示了tmux的新颖性,因为您可以做的事情并不十分优美。

很高兴知道。我现在已经使用了一年,虽然一点匈牙利语可能会有所帮助,但我没有注意到有必要进行抛光。表示法是。好的坏双关;)之前没有使用屏幕,所以没有注意到所提到的问题。现在发现切换到屏幕并失去新功能将变得更加困难。
Michael Durrant

8

我会随意添加一个区别:

tmux是基于ncurses的,而screen不会绘制其他元素。如果有人使用支持滚动的终端仿真器,则将使用屏幕而不是tmux滚动(至少在默认配置下)。搜索和类似功能也一样。


2
我从来没有像...曾经滚动过屏幕?:/
souser12345

是的,我的TE支持滚动并使其中断屏幕...我必须与屏幕一起滚动。-1似乎不正确。
xenoterracide 2011年

@xenoterracide:嗯。您部分正确。在某些发行版/系统(旧的Gentoo)上的屏幕不会损坏它,而在某些(新的Ubuntu)上却可以。我不知道为什么。
Maciej Piechotka 2011年

可能是补丁……我们全都是5.5美分的系统
xenoterracide

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.