tmux vs. screen


262

Zaraz wracam do korzystania z GNU Screen , ale czasami słyszę, że ludzie wspominają tmux jako lepszą alternatywę. Czy naprawdę stanowi alternatywę dla wszystkich funkcji, które oferuje ekran , takich jak monitorowanie aktywności w różnych oknach itp.? Jakie są zalety i wady każdego z nich?



2
Na ekranie możesz wysyłać polecenia do dołączonej sesji screen -S automate_me -X stuff 'command'$(echo -ne '\015'), ponieważ nie możesz w tmux. Bardzo przydatne, jeśli testujesz obraz ISO / obraz wirtualnej skrzynki i potrzebujesz szybko wykonać niektóre polecenia. Na przykład mam go w poleceniu Vima, aby szybko debugować skrypty na ekranie Virtualbox. We wcześniejszych wersjach tmux odkryłem, że ekran radził sobie z szybkim przechodzeniem większej ilości tekstu, podczas gdy tmux się zawieszał. Również ekran nie wymaga żadnej konfiguracji do obsługi UTF-8 itp. Tmux tego wymaga.
dezza

Nie tmuxobsługiwać historyprawidłowo?
beroe

Odpowiedzi:


170

Niektóre z przyczyn (głównych) Wolę tmuxnad screen:

  • Pasek stanu jest znacznie łatwiejszy w użyciu. Możesz łatwo ustawić różne teksty / style dla bieżącego okna, okien z aktywnością itp., A także umieścić rzeczy po lewej i prawej stronie paska stanu, w tym polecenia powłoki, które można uruchamiać w określonych odstępach czasu (domyślnie 15s).
  • Prawie każde polecenie, które możesz uruchomić w środku, tmuxmożna uruchomić z powłoki za pomocą tmux command [args]. To sprawia, że ​​skryptowanie jest bardzo łatwe, a także wykonywanie skomplikowanych poleceń.
  • Znacznie dokładniejsza automatyczna zmiana nazwy okna. Chociaż screenustawia tytuł na podstawie pierwszego słowa polecenia i wymaga konfiguracji powłoki, aby zrobić to nawet w oknie powłoki, tmuxśledzi, jakie procesy faktycznie działają w każdym oknie i odpowiednio aktualizuje tytuł. W ten sposób uzyskujesz dynamiczną zmianę nazwy z dowolną konfiguracją powłoki i zerową. Na przykład: Załóżmy, że używasz Z Shell; nazwa okna to „zsh”. Powiedzmy, że chcesz edytować plik konfiguracyjny, więc piszesz sudo emacs /etc/somefile. Podczas gdy sudo prosi o podanie hasła, nazwa okna będzie brzmiała „sudo”, ale gdy to zrobisz i sudouruchomisz emacs, tytuł będzie brzmiał „emacs”. Kiedy wszystko skończysz i wyjdzieszemacs, tytuł zmieni się z powrotem na „zsh”. Jest to dość przydatne do śledzenia okien, a może być również szczególnie przydatne w określonych sytuacjach, na przykład jeśli masz jakiś długotrwały proces w innym oknie, który czasami monituje o użycie danych wejściowych dialog; nazwa okna zmieni się wtedy na „okno dialogowe”, więc będziesz wiedział, że musisz przejść do tego okna i coś zrobić.
  • Lepsza obsługa sesji (IMHO). Możesz zrobić znacznie więcej dzięki sesjom w tmuxsobie. Możesz łatwo przełączać, zmieniać nazwy itp., A także przenosić i udostępniać okna między sesjami. Ma także inny model, w którym każdy użytkownik ma serwer, który kontroluje jego sesje i do którego klient się łączy. Minusem tego jest to, że jeśli serwer ulegnie awarii, stracisz wszystko; Jednak nigdy nie miałem awarii serwera.
  • tmuxwydaje się być bardziej aktywnie rozwijany. Aktualizacje są dość częste i możesz złożyć raport o błędzie lub żądanie funkcji zgodnie z tym FAQ i uzyskać odpowiedź w ciągu kilku dni.

To tylko najważniejsze rzeczy, które od razu przychodzą mi na myśl. Są też inne małe rzeczy i jestem pewien, że zapomniałem o niektórych. Zdecydowanie warto jednak tmuxspróbować.


151
Rozwój tmux jest bardziej aktywny, ponieważ jest nowy . Ekran GNU ma prawie 25 lat , więc naprawili większość błędów.
płatny frajer

8
komentarz płatnego kujona jest bardzo ważną kwalifikacją twojego ostatniego punktu. Drugi punkt, jak wspomniano, nie jest tak naprawdę różnicą, ponieważ dotyczy również ekranu, chyba że możesz być bardziej szczegółowy.
jw013,

14
@a pay
sjas

11
@apaidnerd to bardzo bogata wypowiedź: savannah.gnu.org/bugs/…
Błażej Michalik

93

( Sesje to zbiory okien, które można odłączyć i ponownie podłączyć później. Windows może zawierać jeden lub więcej okien . Na przykład konfiguracje, sprawdź tutaj i tutaj .)

tmux

  • Plusy
    • Może wysyłać klucze do innych okien, coś w rodzaju IDE
    • Proste skróty klawiszowe - dzięki odpowiedniej konfiguracji poczujesz się jak w domu dzięki Vim lub Screen
    • Wbudowane wiązania Vim-ish i Emacs-ish
    • Dobre zarządzanie układem, podobnie jak menedżer okien kafelkowych
    • Wydaje się, że Unicode po prostu działa z nowoczesnymi terminalami
    • Rozwiązano niektóre problemy z terminalami TERM=tmux
  • Cons
    • Powolne - nie wiem dlaczego, ale naciśnięcia klawiszy wydają się opóźnione. Nigdy więcej problemów ze spowolnieniem
    • Multipleksowanie wymusza całą szerokość i wysokość sesji do najmniejszego podłączonego terminala
    • Wielokrotnie rozbił się w systemie Mac OS X, tracąc całą sesję
    • Nie powiodło się w systemie Linux po aktualizacji, gdzie nie mogłem ponownie połączyć się ze starą sesją
    • Od czasu do czasu nie ^A ^[trafia w klawisze poleceń - wymaga kilku prób przejścia w tryb kopiowania
    • Nie można przenieść panelu z jednego okna do drugiego Naprawiono za pomocą join-panepolecenia
    • Brak rozpakowywania linii (lub „ponownego wlania” lub „ponownego zawinięcia”) po zmianie szerokości terminala (zmiana rozmiaru okna)

Ekran GNU

  • Plusy
    • Niezwykle stabilny (wersja 1.0 była w 1987 r.)
    • Rozwiązano niektóre problemy z terminalami TERM=screen
    • Wbudowane wiązania Emacsa
    • Łatwe do przenoszenia i kontrolowania poziomych szyb
    • Podczas multipleksowania dowolny dołączony terminal może zmienić rozmiar panelu
  • Cons
    • Bez podziałów pionowych bez łatki (oprócz Ubuntu)
    • Podziały szyb są tracone podczas odłączania
    • Uruchomienie Unicode wymaga trochę finezji i determinacji
    • Szalona konfiguracja linii statusu

Czy opóźnione naciśnięcia klawiszy są wykonywane tylko po naciśnięciu klawisza Esc? tmux ma opóźnienie, w którym czeka, czy wchodzisz w sekwencję xtermową, czy tylko samotną Esc, aw połączeniu z vimem może wydawać się dość opóźniony. Ustaw czas ucieczki na niższą wartość, np. 50.
Eevee

Zabawne jest również to, że ^A ^[czasami nie działa; Mam ten sam problem z ekranem, ale nigdy nie tmux! I wierzę, że możesz przesuwać szyby join-pane.
Eevee,

Uważam, że ekran zużywa znacznie więcej pamięci, co może stanowić wadę.
paradroid

6
Cóż, do tmuxbani vim, w niektórych przypadkach (moje, mianowicie), żadne rozwiązanie nigdy nie opublikowano nigdzie działa, a nawet ludzie spędzający trochę czasu na rozwiązaniu mojego problemu nie byli w stanie. To denerwujące, gdy nie możesz używać <C-Left>ani <C-Right>w nim vim.
yo „

3
No vertical splits without patch (except on Ubuntu)Nie sądzę, że to prawda. Używam screena od kilku lat i nigdy nie miałem żadnych problemów z podziałem poziomym lub pionowym na Debianie i Fedorze. Nawet na Androida z Termuxem działa jak urok.
Forivin

11

Profesjonalista na ekranie: jest dostępny praktycznie od razu po instalacji w systemie Linux i Solaris. Kiedy musisz przełączać się między platformami, dobrze jest nie przełączać kontekstu mentalnego.

Jestem pewien, że możesz skompilować Tmux na dowolnej platformie, ale czasami masz wystarczający dostęp do korzystania z ekranu, ale faktyczni administratorzy systemu tak naprawdę nie chcą dodawać oprogramowania, które nie jest absolutnie konieczne.


10

Używam Tmuxa od około 2 dni, więc mój nieokiełznany entuzjazm nie został jeszcze złagodzony poprzez trafianie w irytujące przypadki użycia. Podczas przechodzenia przez zwykłe rosnące bóle związane z przechodzeniem z jednego programu do drugiego, uderzyło mnie kilka pozytywnych funkcji, ale cechą, która mnie przekonała, że ​​nigdy nie wrócę do ekranu, jest użyteczność trybu kopiuj-wklej. Na ekranie nie można przejść do trybu kopiowania, przewinąć do bufora, a następnie przejść do innego okna. W tmux możesz mieć wiele okien jednocześnie w trybie kopiowania z buforem przewijanym z powrotem do różnych pozycji. Ponadto istnieje wiele buforów kopii. I nie musisz łatać źródła, aby uzyskać ruch kursora fFtT.


8

Rzeczy, które wyciągam z tmuxa, których nie mam łatwo na ekranie, to:

  1. wykonać pionowe podziały szyb
  2. multipleksowanie, którego używamy do parowania zdalnego i lokalnego.


Jak wspomniałem w poprzednim poście, ekran ma pionowe podziały okien (najwyraźniej wymaga poprawki bez Ubuntu). Również multipleksowanie działa dobrze i działa przez wiele lat.
EntangledLoops

pionowe podziały są w linii głównej screenod wersji 4.2, wydanej w 2014 roku. Wiele dystrybucji dostarcza bardzo stare wersje, zwłaszcza Apple.
Neal Fultz

2
Oba punkty są nieprawidłowe.
Forivin

2
Odpowiedź jest nieprawidłowa w 2018 r.
Alec Istomin

5

Wymieniłem GNU ekran z tmux w każdym przypadku użycia z wyjątkiem jednej-kiedy muszę HyperTerminal równowartość podłączyć do portów szeregowych. Jak zauważył Aaron Toponce w swoim artykule „Łączenie się z szeregowymi zerowymi modemami za pomocą ekranu GNU” , FAQ tmux brzmi:

ekran ma wbudowaną obsługę szeregową i telnet; jest to wzdęcie i jest mało prawdopodobne, aby zostało dodane do tmux.

Mój typowy przypadek użycia tmux to tworzenie wielopanelowych i wielo-okiennych sesji programistycznych w połączeniu z tmuxinatorem . Jeśli chcesz nauczyć się tmux , polecam zdobycie książki Briana P. Hogana, tmux: Productive Free-Mouse Development .


Czy wiesz cu Zadzwoń na inny system ? Prostszy seryjny tty niż ekran , ale lekki i użyteczny!
F. Hauri

2

Przez długi czas byłem intensywnym użytkownikiem Screen, ale korzystam z wersji, którą zmodyfikowałem w 2002 roku. Głównie dlatego, że chciałem, aby okno nawigacyjne „następne / poprzednie” odpowiadało kolejności, w jakiej nowe okna zostały utworzone, podobnie jak menedżer okien sąsiadujących, taki jak i3 lub Ion . Standardowe zachowanie ekranu polega na tym, że „następny” i „poprzedni” przechodzi według numeru okna, tak że zwykle „nowe” okno (chwytając najmniejszą dostępną liczbę) znajduje się gdzie indziej niż okno „następne” - mylące, jeśli nie ” pamiętam liczby. Moje preferowane zachowanie zostało zaimplementowane w Tmux jako flaga polecenia new-window w 2010 roku , a opcja renumber -windows w 2012 roku. Moja łatka do ekranu, którą starałem się uczynić możliwie akceptowalną, w tym uzupełnienia dokumentacji itp., Nie spowodowała żadnej dyskusji na liście ekranów w lipcu 2002 r. (Wtedy „screen@informatik.uni-erlangen.de”, nie może znajdź archiwa). W rzeczywistości nie został nawet potwierdzony, nawet gdy wysłałem go ponownie rok później.

Od 2002 roku kilkakrotnie „zmieniłem” swoją łatkę, aby zastosować ją w nowszych wersjach ekranu. Kiedy jednak dotarłem do wersji 4.3 (2015), zauważyłem nieudokumentowaną zmianę, która przerwała jedno z moich zastosowań screena - mianowicie, że „rzeczy” interpolują zmienne środowiskowe . Nie potrzebowałem tej funkcji i nie mogłem wymyślić, jak łatwo uciec przed argumentem „rzeczy” (aby móc wysyłać tekst zawierający znaki dolara), więc nadal używałem wersji 4.0 (od 2004 r.).

Używam „rzeczy” Screena („klucze wysyłania” w Tmuxie) w funkcji Emacsa, która wysyła zawartość bieżącego regionu Emacsa na określony numer okna. W ten sposób, gdy piszę kod w języku skryptowym, otwieram interpretera, nadaję okno interpretera specjalny numer, a następnie mogę wysyłać wiersze kodu z okna edytora bezpośrednio do okna interpretera za pomocą tego powiązania Emacsa. Jest hacky, ale podoba mi się to bardziej niż rozwiązanie z czystym Emacsem , ponieważ mogę również wchodzić w interakcję z tłumaczem w jego oknie ekranowym za pomocą standardowych naciśnięć klawiszy. To trochę jak IDE GUI, ale nie muszę używać myszy ani patrzeć na migający kursor.

Inną funkcją, którą zaimplementowałem w mojej łatce, jest możliwość „oznaczenia” okna, a następnie przesunięcia zaznaczonego okna, aby było „następne” po bieżącym. Dla mnie jest to o wiele bardziej naturalny sposób zmiany kolejności okien niż zmiana numeracji; przypomina paradygmat kopiuj / wklej lub „przeciągnij i upuść”. ( Ostatnio wymyśliłem, jak to zrobić w i3 ).

To samo powinno być możliwe w Tmux, na przykład od 2015 r. Istnieje możliwość „oznaczania” szyby. A może można opracować bardziej elementarne rozwiązanie za pomocą stanowych skryptów powłoki. Zaimplementowałem krótki skrypt i skróty klawiszowe, aby wypróbować metodę „zaznaczonego panelu” i zadziałało kilka razy, ale potem Tmux zawiesił się z „[utraconym serwerem]”. Potem odkryłem, że Tmux ulega awarii nawet bez mojej próby zrobienia czegoś skomplikowanego. Podobno został on upaść dla niektórych użytkowników za kilka lat co najmniej . Czasami serwer ulega awarii, czasem zaczyna używać 100% procesora i przestaje odpowiadać. Nigdy nie widziałem, żeby Screen robił jedno z tych.

Teoretycznie Tmux jest lepszy od Screena na kilka sposobów. Ma znacznie lepszą skryptowalność, co oznacza, że ​​możesz wykonywać takie czynności, jak przeszukiwanie listy okien w bieżącej sesji z wiersza poleceń, co jest niemożliwe w przypadku Screen. Na przykład w 2015 r. Screen dodał polecenie „sortuj okna według tytułu” . Nie jestem pewien, kiedy takie wyspecjalizowane polecenie byłoby przydatne, ale ta i bardziej praktyczna odmiana (np. Sortowanie okien według użycia procesora) można stosunkowo łatwo wykonać ze skryptu powłoki w Tmux. Wydaje mi się, że trudno jest zrobić coś tak kreatywnego na ekranie, przynajmniej bez modyfikacji kodu C.

Jak wspomniano w innych plakatach, Tmux ma model z jednym serwerem, który uważam za podstawową wadę, szczególnie gdy serwer ulega awarii. Można obejść ten problem, określając osobne gniazdo dla każdej „sesji”. Nadal wolę domyślny ekran dla jednego serwera na sesję, który wydaje się nieco bardziej elegancki.

Praca z kodem ekranowym w 2002 roku była dla mnie edukacyjna i przyjemna. Co dziwne, mimo wszystkich dodatkowych funkcji Tmux ma około 25% mniej wierszy kodu niż Screen (30 tys. Vs 40 tys.). Zauważyłem, że Tmux używa wielu struktur danych drzewa i list, które były dla mnie nieco trudne do zrozumienia. Wyglądało na to, że ekran woli tablice.

Jak rozumiem, ponieważ interfejs terminala w systemie Unix jest tak stabilny, nie ma potrzeby dostosowywania kodu Screen lub Tmux do zmian w podstawowym systemie operacyjnym. Te programy tak naprawdę nie mają aktualizacji zabezpieczeń, takich jak przeglądarki internetowe, serwery sieciowe, a nawet powłoka. Nie zauważyłem żadnych problemów z uruchomieniem mojej niestandardowej wersji Screen, ostatnio zaktualizowanej w 2004 roku (z wyjątkiem konieczności dodania niektórych plików konfiguracyjnych, aby zapobiec usunięciu gniazda przez Systemd; te pliki i tak są zazwyczaj częścią pakietu dystrybucyjnego). Być może mógłbym po prostu obejść problemy, które napotkałem w Tmux, uruchamiając wersję Tmux sprzed jego awarii. Oczywiście, jeśli zrobi to wystarczająca liczba użytkowników, nie będzie to dobre dla nowych użytkowników, ponieważ oznacza to, że mniej ekspertów będzie szukało błędów w najnowszych oficjalnych wersjach tych programów. Trudno jednak zmotywować się do przejścia na produkt, który jest dla mnie niestabilny (najnowszy Tmux) lub który nie ma pewnych funkcji, których chcę (standardowy ekran).

Wiem, że nie zapewnia to łatwej odpowiedzi na pytanie PO, ale mam nadzieję, że moja perspektywa była przydatna.


2

Jeden z opiekunów tmux, Thomas Adam, jest również wymieniony jako opiekun screenprojektu, chociaż tylko dotyka kodu tmux. To ogromna zaleta tmuxa nad ekranem.


1

Powiedziałbym, że dostępność ekranu jest jego siłą, ale jego system okienkowy nie jest tak łatwy w obsłudze jak . Muszę powiedzieć, że obecnie używam i w rezultacie mam wiele zakładek terminali zamiast okien ekranu.

@Jed Schneider: Możesz uzyskać pionowe podziały szyb za pomocą Ctrl+, Aa następnie |(pionowy pasek).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.