tmux so với màn hình


262

Tôi sắp quay lại sử dụng GNU Screen , nhưng thỉnh thoảng tôi vẫn nghe người ta nhắc đến tmux như một sự thay thế tốt hơn. Liệu nó thực sự cung cấp một sự thay thế cho tất cả các tính năng Cung cấp màn hình , chẳng hạn như giám sát hoạt động trong các cửa sổ khác nhau, v.v.? Những ưu và nhược điểm của mỗi là gì?



2
Trong màn hình, bạn có thể gửi lệnh đến một phiên đính kèm thông qua screen -S automate_me -X stuff 'command'$(echo -ne '\015')bạn không thể trong tmux. Khá hữu ích nếu bạn đang kiểm tra ISO / hình ảnh của hộp ảo và cần thực hiện một số lệnh từ xa nhanh chóng. Ví dụ, tôi có nó trong lệnh Vim để nhanh chóng gỡ lỗi các tập lệnh trong màn hình Virtualbox. Trong các phiên bản trước của tmux, tôi thấy rằng màn hình xử lý nhiều văn bản đi qua nhanh hơn trong khi tmux bị hỏng. Ngoài ra màn hình không yêu cầu bất kỳ cấu hình nào để xử lý UTF-8, v.v.
dezza

tmuxxử lý historyđúng không?
beroe

Câu trả lời:


170

Một số lý do (chính) tôi thích tmuxhơn screen:

  • Thanh trạng thái dễ sử dụng hơn nhiều. Bạn có thể dễ dàng thiết lập các văn bản / kiểu khác nhau cho cửa sổ hiện tại, cửa sổ có hoạt động, v.v. và bạn có thể đặt mọi thứ ở bên trái và bên phải của thanh trạng thái, bao gồm các lệnh shell có thể chạy ở một khoảng thời gian xác định (mặc định 15 giây).
  • Hầu như bất kỳ lệnh nào bạn có thể chạy bên trong tmuxđều có thể được chạy từ shell tmux command [args]. Điều này làm cho nó rất dễ dàng có kịch bản, cũng như làm cho nó dễ dàng thực hiện các lệnh phức tạp.
  • Đổi tên cửa sổ tự động chính xác hơn nhiều. Trong khi screenđặt tiêu đề dựa trên từ đầu tiên của lệnh và yêu cầu cấu hình shell để thực hiện ngay cả trong cửa sổ shell, tmuxtheo dõi các quá trình đang thực sự chạy trong mỗi cửa sổ và cập nhật tiêu đề tương ứng. Bằng cách này, bạn có được đổi tên động với bất kỳ cấu hình shell và zero nào. Ví dụ: giả sử bạn đang chạy Z Shell; tên của cửa sổ sẽ là "zsh". Bây giờ hãy nói rằng bạn muốn chỉnh sửa một số tệp cấu hình, vì vậy bạn nhập sudo emacs /etc/somefile. Mặc dù sudo đang hỏi mật khẩu của bạn, tên của cửa sổ sẽ là "sudo", nhưng một khi bạn đã thực hiện và sudokhởi chạy emacs, tiêu đề sẽ là "emacs". Khi bạn đã hoàn tất và bạn thoátemacs, tiêu đề sẽ thay đổi trở lại thành "zsh". Điều này khá hữu ích để theo dõi các cửa sổ và nó cũng có thể đặc biệt hữu ích trong các tình huống cụ thể, như nếu bạn có một quá trình chạy dài trong một cửa sổ khác thỉnh thoảng nhắc bạn nhập liệu bằng cách sử dụng dialog; tên cửa sổ sẽ thay đổi thành "hộp thoại" khi điều đó xảy ra, vì vậy bạn sẽ biết bạn phải chuyển sang cửa sổ đó và làm một cái gì đó.
  • Xử lý phiên Nicer (IMHO). Bạn có thể làm nhiều hơn với các phiên trong tmuxchính nó. Bạn có thể dễ dàng chuyển đổi, đổi tên, v.v. và bạn có thể di chuyển và chia sẻ các cửa sổ giữa các phiên. Nó cũng có một mô hình khác nhau, trong đó mỗi người dùng có một máy chủ điều khiển các phiên của mình và máy khách kết nối với. Nhược điểm của việc này là nếu máy chủ gặp sự cố, bạn sẽ mất tất cả; Tôi chưa bao giờ gặp sự cố máy chủ với tôi.
  • tmuxdường như được phát triển tích cực hơn. Có những cập nhật khá thường xuyên và bạn có thể gửi báo cáo lỗi hoặc yêu cầu tính năng theo Câu hỏi thường gặp này và nhận được câu trả lời trong vòng vài ngày.

Đó chỉ là những điều quan trọng mà ngay lập tức đến với tâm trí. Cũng có những điều nhỏ nhặt khác, và tôi chắc chắn rằng tôi đã quên một số điều. tmuxMặc dù vậy, nó chắc chắn đáng để thử.


151
phát triển tmux tích cực hơn vì nó mới . GNU Screen đã gần 25 tuổi , vì vậy họ đã sửa hầu hết các lỗi.
một mọt sách được trả tiền

8
một bình luận mọt sách được trả tiền là một phẩm chất rất quan trọng về điểm cuối cùng của bạn. Và điểm thứ hai như đã nêu không thực sự là một sự khác biệt vì nó cũng áp dụng cho màn hình trừ khi bạn có thể cụ thể hơn.
jw013


11
@apaidnerd đó là một tuyên bố rất phong phú: savannah.gnu.org/bugs/ Kẻ
Błażej Michalik

93

( Sessions là bộ sưu tập các cửa sổ có thể được tách ra và gắn lại sau. Windows có thể chứa một hoặc nhiều panes . Ví dụ configs, hãy kiểm tra ở đâyở đây .)

tmux

  • Ưu
    • Có thể gửi khóa tới các bảng khác, giống như một IDE
    • Phím bấm dễ dàng - với cấu hình phù hợp, bạn sẽ cảm thấy như ở nhà từ Vim hoặc Màn hình
    • Các ràng buộc Vim-ish và Emacs-ish tích hợp sẵn
    • Quản lý bố cục tốt, giống như một trình quản lý cửa sổ ốp lát
    • Unicode dường như chỉ hoạt động với các thiết bị đầu cuối hiện đại
    • Một số sự cố thiết bị đầu cuối được khắc phục với TERM=tmux
  • Nhược điểm
    • Chậm - không chắc tại sao, nhưng tổ hợp phím có vẻ chậm trễ Không còn vấn đề với sự chậm chạp
    • Ghép kênh buộc toàn bộ chiều rộng và chiều cao của thiết bị đầu cuối được gắn vào nhỏ nhất
    • Đã bị sập nhiều lần trên Mac OS X, mất toàn bộ phiên
    • Đã thất bại trên Linux sau khi nâng cấp, nơi tôi không thể kết nối lại với phiên cũ của mình
    • Thỉnh thoảng bấm phím lệnh - ^A ^[mất vài lần thử cho chế độ sao chép
    • Không thể di chuyển một cửa sổ từ cửa sổ này sang cửa sổ khác Đã sửa lỗi bằng join-panelệnh
    • Không hủy bỏ dòng (hoặc "chỉnh lại dòng" hoặc "tua lại") sau khi thay đổi độ rộng của thiết bị đầu cuối (thay đổi kích thước cửa sổ)

Màn hình GNU

  • Ưu
    • Cực kỳ ổn định (v1.0 là vào năm 1987)
    • Một số sự cố thiết bị đầu cuối được khắc phục với TERM=screen
    • Emacs-ish ràng buộc được xây dựng trong
    • Dễ dàng di chuyển và kiểm soát các tấm ngang
    • Khi ghép kênh, bất kỳ thiết bị đầu cuối đính kèm nào cũng có thể thay đổi kích thước khung
  • Nhược điểm
    • Không chia tách dọc mà không có bản vá (ngoại trừ trên Ubuntu)
    • Tách ngăn bị mất khi tách ra
    • Để Unicode hoạt động cần một chút tinh tế và quyết tâm
    • Cấu hình dòng trạng thái điên

Có phải các phím bấm bị lag chỉ khi nhấn Esc? tmux có một độ trễ trong đó nó chờ xem liệu bạn đang nhập chuỗi xterm hay chỉ là một Esc đơn độc, và kết hợp với vim, nó có vẻ khá lag. Đặt thời gian thoát thành giá trị thấp hơn như 50.
Eevee

^A ^[Đôi khi cũng buồn cười khi bạn nói không hoạt động; Tôi có cùng một vấn đề với màn hình, nhưng không bao giờ tmux! Và tôi tin rằng bạn có thể di chuyển panes xung quanh với join-pane.
Eevee

Tôi thấy rằng màn hình sử dụng bộ nhớ khá nhiều, có thể được coi là một bất lợi.
paradroid

6
Vâng, tmuxhút với vim, trong một số trường hợp (mỏ cụ thể), không có giải pháp bao giờ gửi bất cứ nơi nào hoạt động, và ngay cả những người chi tiêu một số thời gian giải quyết vấn đề của tôi là không thể. Thật khó chịu khi bạn không thể sử dụng <C-Left><C-Right>vào vim.
yo '

3
No vertical splits without patch (except on Ubuntu)Tôi không nghĩ đó là sự thật. Tôi đã sử dụng màn hình vài năm nay và tôi chưa bao giờ gặp vấn đề gì khi chia theo chiều ngang hoặc chiều dọc trên Debian và Fedora. Ngay cả trên Android với Termux, nó hoạt động như một sự quyến rũ.
Forivin

11

Một chuyên gia cho màn hình: nó có sẵn khá nhiều trên Linux và Solaris. Khi bạn phải chuyển đổi qua lại giữa các nền tảng, thật tuyệt khi không có chuyển đổi bối cảnh tinh thần.

Tôi chắc chắn rằng bạn có thể biên dịch tmux trên bất kỳ nền tảng nào, nhưng đôi khi bạn có đủ quyền truy cập để sử dụng màn hình, nhưng quản trị viên hệ thống thực sự không thực sự muốn thêm bất kỳ phần mềm nào không thực sự cần thiết.


10

Tôi đã sử dụng tmux được khoảng 2 ngày rồi, vì vậy sự nhiệt tình không kiềm chế của tôi đối với nó vẫn chưa được giảm bớt bằng cách nhấn các trường hợp sử dụng gây phiền nhiễu. Trong khi trải qua những khó khăn ngày càng tăng khi chuyển từ chương trình này sang chương trình khác, tôi đã bị ấn tượng bởi một số tính năng tích cực, nhưng tính năng khiến tôi tin rằng tôi sẽ không bao giờ quay lại màn hình là tiện ích của chế độ sao chép. Trong màn hình, bạn không thể vào chế độ sao chép, cuộn lại trong bộ đệm và sau đó chuyển sang cửa sổ khác. Trong tmux, bạn có thể có nhiều cửa sổ đồng thời ở chế độ sao chép với bộ đệm được cuộn trở lại các vị trí khác nhau. Ngoài ra, có nhiều bộ đệm sao chép. Và bạn không cần phải vá nguồn để có được chuyển động con trỏ fFtT.


8

Những điều tôi nhận được từ tmux tôi không dễ dàng có được trên màn hình là:

  1. thực hiện chia tách khung dọc
  2. ghép kênh, mà chúng tôi sử dụng để ghép nối từ xa và cục bộ.


Như bài viết trước đã đề cập, màn hình có các phân chia khung dọc (yêu cầu một bản vá với Ubuntu, rõ ràng). Ngoài ra, ghép kênh hoạt động tốt và có nhiều năm.
Vướng mắc vào

chia tách dọc đã có trong dòng chính screenkể từ 4.2, được phát hành vào năm 2014. Nhiều bản phân phối xuất xưởng các phiên bản rất cũ, đặc biệt là Apple.
Neal Fultz

2
Cả hai điểm đều không chính xác.
Forivin

2
Câu trả lời không đúng trong năm 2018
Alec Istomin

5

Tôi đã thay thế Màn hình GNU bằng tmux trong mọi trường hợp sử dụng ngoại trừ một người dùng khi tôi cần một HyperTerminal tương đương để kết nối với các cổng nối tiếp. Như Aaron Toponce đã lưu ý trong bài viết của mình "Kết nối với các modem không nối tiếp với màn hình GNU" , câu hỏi thường gặp của tmux :

màn hình đã tích hợp hỗ trợ nối tiếp và telnet; đây là sự phình to và không có khả năng được thêm vào tmux.

Trường hợp sử dụng tmux điển hình của tôi là tạo các phiên phát triển đa cửa sổ và đa cửa sổ kết hợp với tmuxinator . Nếu bạn muốn tìm hiểu về tmux , tôi khuyên bạn nên lấy cuốn sách của Brian P. Hogan, tmux: Phát triển không có chuột hiệu quả .


Bạn có biết cu Gọi lên hệ thống khác ? Tty nối tiếp đơn giản hơn màn hình , nhưng nhẹ và hữu ích!
F. Hauri

2

Tôi đã là một người sử dụng màn hình nặng trong một thời gian dài, nhưng tôi sử dụng một phiên bản mà tôi đã sửa đổi vào năm 2002. Chủ yếu là vì tôi muốn có thể có cửa sổ điều hướng "tiếp theo / trước" phù hợp với thứ tự mới cửa sổ đã được tạo, tương tự như trình quản lý cửa sổ ốp lát như i3 hoặc Ion . Hành vi màn hình tiêu chuẩn dành cho 'next' và 'trước' đi theo số cửa sổ, do đó, thông thường cửa sổ 'mới' (lấy số có sẵn nhỏ nhất) sẽ được đặt ở nơi khác ngoài cửa sổ 'next' - gây nhầm lẫn nếu bạn không ' t nhớ các số. Hành vi ưa thích của tôi đã được triển khai trong Tmux dưới dạng cờ cho lệnh cửa sổ mới trong năm 2010tùy chọn renumber-windows vào năm 2012. Bản vá màn hình của tôi, mà tôi đã cố gắng làm cho có thể chấp nhận được nhất có thể, bao gồm cả bổ sung tài liệu, v.v., đã không tạo ra bất kỳ cuộc thảo luận nào về danh sách Màn hình vào tháng 7 năm 2002 (sau đó "screen@informatik.uni-erlangen.de", không thể tìm tài liệu lưu trữ). Trong thực tế, nó thậm chí không được thừa nhận, ngay cả khi tôi gửi lại một năm sau đó.

Kể từ năm 2002, tôi đã "khởi động lại" bản vá của mình một vài lần để áp dụng cho các phiên bản Màn hình mới hơn. Tuy nhiên, khi tôi đến phiên bản 4.3 (2015), tôi nhận thấy một sự thay đổi không có giấy tờ đã phá vỡ một trong những cách sử dụng màn hình của tôi - cụ thể là 'thứ đó' hiện nội suy các biến môi trường . Tôi không cần tính năng đó và tôi không thể tìm ra cách dễ dàng thoát khỏi đối số để 'nội dung' (để tôi có thể gửi văn bản có chứa ký hiệu đô la) vì vậy tôi chỉ tiếp tục sử dụng phiên bản 4.0 (từ năm 2004).

Tôi sử dụng 'công cụ' của màn hình ('khóa gửi' trong Tmux) trong chức năng Emacs để gửi nội dung của vùng Emacs hiện tại đến một số cửa sổ cụ thể. Theo cách đó, khi tôi viết mã bằng ngôn ngữ kịch bản, tôi mở trình thông dịch, tôi cung cấp cho cửa sổ intepreter một số đặc biệt và sau đó tôi có thể gửi các dòng mã từ cửa sổ soạn thảo của mình trực tiếp đến cửa sổ trình thông dịch bằng liên kết Emacs này. Thật khó khăn nhưng tôi thích nó hơn giải pháp Emacs thuần túy , vì tôi cũng có thể tương tác với trình thông dịch trong cửa sổ Màn hình của nó bằng cách sử dụng tổ hợp phím tiêu chuẩn. Nó hơi giống với IDE GUI, nhưng tôi không phải sử dụng chuột hoặc nhìn chằm chằm vào một con trỏ nhấp nháy.

Một tính năng khác tôi đã triển khai trong bản vá của mình là khả năng "đánh dấu" một cửa sổ và sau đó định vị lại cửa sổ được đánh dấu là "tiếp theo" sau cửa sổ hiện tại. Đối với tôi đây là một cách sắp xếp lại các cửa sổ tự nhiên hơn nhiều so với việc đánh số lại; nó giống như mô hình sao chép / dán hoặc "kéo và thả". ( Gần đây tôi đã tìm ra cách để làm điều này trong i3 .)

Có thể làm điều tương tự trong Tmux, ví dụ như năm 2015 có một cơ sở để "đánh dấu" một khung. Hoặc có lẽ một giải pháp cơ bản hơn có thể được thực hiện với các kịch bản shell có trạng thái. Tôi đã triển khai một đoạn script và keybindings ngắn để thử phương thức "khung được đánh dấu" và nó đã hoạt động một vài lần nhưng sau đó Tmux đã gặp sự cố với "[máy chủ bị mất]". Sau đó, tôi thấy Tmux bị sập ngay cả khi tôi không cố làm gì phức tạp. Rõ ràng nó đã bị sập đối với một số người dùng trong một vài năm . Đôi khi máy chủ gặp sự cố, đôi khi nó bắt đầu sử dụng 100% CPU và không phản hồi. Tôi chưa bao giờ thấy Screen làm một trong những điều này.

Về lý thuyết, Tmux vượt trội hơn so với Screen theo nhiều cách. Nó có khả năng viết kịch bản tốt hơn nhiều, có nghĩa là bạn có thể thực hiện những việc như truy vấn danh sách các cửa sổ trong phiên hiện tại từ dòng lệnh, điều này là không thể với Screen. Ví dụ: 2015 Screen đã thêm một lệnh "sắp xếp các cửa sổ theo tiêu đề" . Tôi không chắc khi nào một lệnh chuyên dụng như vậy sẽ hữu ích, nhưng điều này và các biến thể thực tế hơn (ví dụ như sắp xếp các cửa sổ theo cách sử dụng CPU) có thể dễ dàng thực hiện từ một tập lệnh shell trong Tmux. Đối với tôi có vẻ khó thực hiện bất cứ điều gì sáng tạo trong Màn hình, ít nhất là không sửa đổi mã C.

Như các áp phích khác đã đề cập, Tmux có một mô hình máy chủ duy nhất mà tôi xem là nhược điểm chính, đặc biệt là khi máy chủ gặp sự cố. Có thể giải quyết vấn đề này bằng cách chỉ định một ổ cắm riêng cho mỗi "phiên". Tuy nhiên, tôi thích mặc định một máy chủ mỗi phiên của Screen, có vẻ thanh lịch hơn một chút.

Làm việc với mã màn hình, trở lại năm 2002, mang tính giáo dục và thú vị đối với tôi. Thật kỳ lạ, với tất cả các tính năng bổ sung của nó, Tmux có ít hơn 25% dòng mã so với Màn hình (30k so với 40k). Tôi nhận thấy rằng Tmux sử dụng nhiều cấu trúc dữ liệu cây và liệt kê, điều này hơi khó hiểu đối với tôi. Màn hình dường như thích mảng hơn.

Theo tôi hiểu, vì giao diện thiết bị đầu cuối Unix rất ổn định, nên không cần mã Screen hay Tmux để thích ứng với các thay đổi trong hệ điều hành bên dưới. Các chương trình này không thực sự có các bản cập nhật bảo mật như trình duyệt web hoặc máy chủ web hoặc thậm chí cả trình bao. Tôi chưa nhận thấy bất kỳ sự cố nào khi chạy phiên bản Màn hình tùy chỉnh của mình, được cập nhật lần cuối vào năm 2004 (ngoại trừ việc cần thêm một số tệp cấu hình để ngăn Systemd xóa ổ cắm; những tập tin này thường là một phần của gói phân phối). Có lẽ tôi chỉ có thể giải quyết các vấn đề tôi gặp phải trong Tmux bằng cách chạy phiên bản Tmux từ trước khi nó bắt đầu gặp sự cố. Tất nhiên, nếu đủ người dùng làm điều này thì nó sẽ không tốt cho người dùng mới, vì điều đó có nghĩa là sẽ có ít chuyên gia tìm kiếm lỗi hơn trong các phiên bản chính thức mới nhất của các chương trình này. Tuy nhiên, thật khó để thúc đẩy bản thân chuyển sang một sản phẩm không ổn định đối với tôi (Tmux mới nhất) hoặc thiếu các tính năng nhất định mà tôi muốn (Màn hình tiêu chuẩn).

Tôi biết điều này không cung cấp một câu trả lời dễ dàng cho câu hỏi của OP, nhưng tôi hy vọng rằng quan điểm của tôi là hữu ích.


2

Một trong những người duy trì tmux, Thomas Adam, cũng được liệt kê là người duy trì cho screendự án mặc dù anh ta chỉ chạm vào mã tmux. Đây là một pro rất lớn của tmux trên màn hình.


1

Tôi có thể nói rằng tính khả dụng của màn hình là thế mạnh của nó, nhưng hệ thống cửa sổ của nó không dễ xử lý như . Tôi phải nói rằng tôi sử dụng hầu hết thời gian hiện tại và kết quả là có rất nhiều tab thiết bị đầu cuối thay vì cửa sổ Màn hình.

@Jed Schneider: Bạn có thể nhận được các phân chia ngăn dọc với Ctrl+ Avà sau đó |(thanh dọc).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.