Cómo usar tmux en Linux (y por qué es mejor que la pantalla)

Un terminal Linux estilizado en una computadora portátil con sesiones de shell en segundo plano.
fatmawati achmad zaenuri / Shutterstock

El tmuxcomando de Linux es un multiplexor de terminal, comoscreen . Sus defensores son muchos y vocales, así que decidimos comparar los dos. ¿Es tmuxrealmente mejor, o es solo un caso de preferir lo que sabes?

tmux frente a pantalla

Los  comandos  tmuxGNU y GNU son multiplexores de terminal . Le permiten tener varias ventanas dentro de una sola ventana de terminal y saltar de una a otra. Una ventana se puede dividir en paneles, cada uno de los cuales le brinda una línea de comando independiente.screen

También puede desconectar una sesión y se convierte en una entidad sin cabeza que se ejecuta en segundo plano; incluso puede cerrar la ventana de terminal que la inició. Cuando esté listo, puede abrir una nueva ventana de terminal y volver a conectar la sesión que aún se está ejecutando. También puede hacer esto a través de una conexión SSH .

Puede desconectar una sesión en una computadora, volver a casa e iniciar sesión en la computadora remota. Cuando vuelva a conectarse, puede volver a conectar la sesión en segundo plano y usarla de forma interactiva nuevamente.

¿Qué es el comando de pantalla?

El  screen comando también es un multiplexor de terminal y está repleto de opciones. Para conocer todo lo que puede hacer con él, consulte nuestro artículo detallado .

Esta vez, nos vamos a concentrar tmux . A medida que avanzamos, mencionaremos cómo screenmaneja la misma característica o función.

Solo una cosa nos molestó  screen. Cubriremos eso cuando lleguemos, y veremos si las tmuxtarifas son mejores.

Instalación de tmux

Si bien screen generalmente se instala de forma predeterminada en las distribuciones populares de Linux, tmux no lo es. Para instalar tmux en Ubuntu, escriba lo siguiente:

sudo apt-get install tmux

sudo apt-get install tmux en una ventana de terminal.

En Manjaro puedes usar pacman:

sudo pacman -Sy tmux

sudo pacman -Sy tmux en una ventana de terminal.

En Fedora 31, tmux ya está instalado.

Iniciar una sesión tmux

Para comenzar tmux, simplemente escríbalo y presione Enter:

tmux

tmux en una ventana de terminal.

La ventana de la terminal mostrará una barra de estado cuando esté en una tmuxsesión.

Una nueva sesión de tmux en una ventana de terminal.

El lado derecho de la barra de estado muestra el nombre de host, la hora y la fecha. El lado izquierdo muestra la siguiente información relacionada con la sesión:

  • [0]: este es el nombre de la sesión. De forma predeterminada, están numerados, comenzando con cero. A continuación, cubrimos cómo puede dar nombres significativos a las sesiones.
  • 0: bash *: El 0 indica que esta es la primera ventana de esta sesión. El único proceso que se ejecuta en esta sesión es bash. Si ejecuta un programa, su nombre aparecerá aquí. El asterisco (*) significa que esta es la ventana que está mirando. Cada vez que crea una nueva ventana en una  tmuxsesión, su número de ventana y el nombre del programa que se ejecuta en ella se agregan a la barra de estado.

El screencomando no le da una barra de estado. Tienes que volar a ciegas y confiar en tu ingenio para saber qué está pasando, lo que requiere un poco de práctica.

Relacionado:  Cómo usar el comando de unión en Linux

En el lado positivo, no perderá ni una línea de espacio en la ventana de la terminal. Por supuesto, normalmente expandiría la ventana de su terminal para que valga la pena usar un multiplexor de terminal. En ese caso, la pérdida de una línea para la barra de estado no es un gran problema. Hemos dejado las imágenes de las ventanas de la terminal aquí en el tamaño predeterminado para que pueda ver la información.

Se dan comandos para tmuxusar pulsaciones de teclas, y hay dos partes para esto. Primero, presione Ctrl + B para llamar tmuxla atención. A continuación, presione rápidamente la tecla siguiente para enviar un comando tmux. Los comandos se dan presionando letras, números, signos de puntuación o teclas de flecha.

Es lo mismo en  screen, excepto que presiona Ctrl + A para llamar su atención.

Para cerrar la ventana, presione Ctrl + B y luego presione rápidamente X. La barra de estado se vuelve ámbar. Luego se le pedirá que confirme que desea cerrar la ventana.

Presione Y para cerrar la ventana o N si cambia de opinión. No es necesario que presione Intro después; Y o N es suficiente para registrar su elección.

tmux con una barra de estado de color ámbar y cierre esta ventana con la indicación de sí o no, en una ventana de terminal.

Si presiona Y, la ventana se cierra. Debido a que esta es la única ventana en esta sesión, la sesión finaliza.

Símbolo del sistema después de cerrar una sesión tmux en una ventana de terminal

La tmuxsesión se cierra y vuelve a la línea de comando desde la que inició tmux. Verá «[salido]» en la ventana de la terminal.

Esto puede parecer obvio, pero es una confirmación de que ha cerrado la sesión y no la ha dejado desconectada y en ejecución. Discutiremos las sesiones de separación a continuación.

Inicio de una sesión tmux con nombre

Si inicia varias tmuxsesiones con regularidad , apreciará rápidamente la funcionalidad de dar a cada una de ellas un nombre significativo. También puede nombrar sesiones screen, pero no se muestran en ninguna parte de las ventanas de sesión.

Para comenzar tmuxcon un nombre de sesión, use el new comando (nueva sesión) y la -sopción (nombre de sesión). Nuestra sesión se llamará «geek-1», por lo que escribimos lo siguiente:

tmux nuevo -s geek-1

tmux new -s geek-1 en una ventana de terminal.

Cuando se tmuxcarga la sesión, se muestra «geek-1» como la primera entrada en la barra de estado, en el extremo izquierdo.

Una sesión tmux con el nombre "geek-1" en el lado izquierdo de la barra de estado.

Agregar más ventanas

Para crear una nueva ventana en la sesión actual, presione Ctrl + B y luego C. Obtendrá una ventana de terminal en blanco en la sesión actual. Entonces tendremos algo ejecutándose en esta nueva ventana, comencemos el dmesgcomando con la -wopción (seguir):

dmesg -w

dmesg -w en una ventana de terminal.

Ahora tenemos dos ventanas en la sesión; uno está corriendo topy el otro  dmesg. Sin embargo, solo podemos ver uno a la vez (más sobre eso en un momento).

dmesg ejecutándose en la ventana dos de una sesión tmux, en una ventana de terminal.

Eche un vistazo al lado izquierdo de la barra de estado. Todavía estamos en la tmuxsesión «geek-1»  . En la ventana cero, top se está ejecutando y en la ventana uno, se  dmesg está ejecutando. El asterisco (*) después dmesgnos dice qué ventana está visible.

Para saltar entre ventanas, presione Ctrl + B, y luego una de las siguientes teclas:

  • N : muestra la siguiente ventana.
  • P: muestra la ventana anterior.
  • 0 a 9: muestra una ventana numerada del 0 al 9.

También puede elegir una ventana de una lista. Si presiona Ctrl + B y luego W, aparece una lista de ventanas.

Relacionado:  Cómo crear e instalar claves SSH desde el Shell de Linux

tmux muestra la lista de ventanas en una ventana de terminal.

Para mover la barra resaltada de color ámbar, presione las flechas hacia arriba o hacia abajo, Inicio o Fin. La sección inferior de la pantalla muestra una vista previa del contenido en la ventana resaltada.

Presione Entrar para ir a la ventana resaltada o Esc para salir de la lista de ventanas sin cambiar.

Separar y adjuntar sesiones

Si presiona Ctrl + B y luego D, desconectará la sesión. Continuará ejecutándose en segundo plano, pero no podrá verlo ni interactuar con él.

Comenzamos topen la sesión, por lo que tenemos un proceso en ejecución con el que demostrar. Luego, presionamos Ctrl + B, y luego D. La sesión desaparece y se convierte en una sesión en segundo plano.

tmux después de detener una sesión, en una ventana de terminal.

Regresamos a la ventana de terminal original. Hay un mensaje tmuxque nos dice que la sesión está desconectada. También nos recuerda el nombre que le dimos a la sesión. Esto es útil porque eso es lo que usamos para adjuntar a una sesión en segundo plano y luego restaurarla a una interactiva.

Para adjuntar una sesión separada, usaremos el attach-sessioncomando autoexplicativo con la -topción (sesión de destino). También proporcionaremos el nombre de la sesión que deseamos recordar.

Escribimos lo siguiente:

tmux adjuntar-sesión -t geek-1

tmux attach-session -t geek-1 en una ventana de terminal.

Nuestra sesión vuelve y vuelve a ser una sesión interactiva visible.

Una sesión tmux restaurada en una ventana de terminal.

Los procesos continuos o de larga duración que haya iniciado antes de desconectar la sesión seguirán ejecutándose en segundo plano (a menos que hayan terminado) cuando adjunte la sesión.

screen puede hacer esto, pero no tan intuitivamente.

Manejo de múltiples sesiones

Abramos otra ventana de terminal e iniciemos una nueva tmuxsesión llamada «geek-2»:

tmux nuevo -s geek-2

tmux new -s geek-2 en una ventana de terminal.

En esa sesión, comenzaremos dmesg:

dmesg -w

dmesg -w en una ventana de terminal.

Ahora, tenemos nuestra tmuxsesión original «geek-1» y una nueva llamada «geek-2».

tmux session geek-2 ejecutando dmesg en una ventana de terminal.

La barra de estado nos muestra que esta sesión se llama «geek-2», y tiene una ventana que se está ejecutando dmesg.

Si presionamos Ctrl + B, y luego D, separamos esa sesión.

Sesión tmux separada geek-2 en una terminal widnow.

De vuelta en la tmuxsesión «geek-1» , presionamos Ctrl + B, y luego S para ver una lista de tmuxsesiones.

lista de sesiones tmux mostradas en una ventana de terminal.

Para ser claros, esta es una lista de sesiones. La pantalla similar que vimos anteriormente era una lista de ventanas en una sola sesión.

Puede mover la barra resaltada de color ámbar presionando las flechas hacia arriba y hacia abajo, Inicio y Fin. La sección inferior muestra una vista previa del contenido de la sesión resaltada.

lista de sesiones tmux mostradas en una ventana de terminal.

Si presiona la flecha derecha, se muestran las ventanas de la sesión resaltada.

tmux lista de sesiones con detalles de la ventana mostrados en una ventana de terminal.

Presione Entrar para ir a la sesión o ventana resaltada o Esc para salir de la lista de sesiones sin cambiar las sesiones. Si selecciona una nueva sesión, la actual se desconecta y la que seleccionó se adjunta.

Separamos la sesión «geek-2» antes de hacer esto. Sin embargo, puede hacer esto con sesiones que aún están conectadas a sus ventanas de terminal originales. Cuando lo haga, los cambios de pantalla aparecerán simultáneamente en ambas tmuxsesiones.

El screencomando también puede hacer esto mediante un conjunto similar de comandos.

Trabajar con paneles de ventana

Si presiona Ctrl + B y luego comillas dobles (“”), dividirá la ventana horizontalmente en dos paneles.

tmux sesión con paneles horizontales en una ventana de terminal.

Esto solo afecta a la ventana actual; los demás en la sesión no se cambiarán. Hemos utilizado el tmux lscomando en el panel superior para enumerar las ventanas en esta sesión. Hay dos, y la línea de estado nos dice que estamos en la ventana uno. Si saltamos a la ventana cero presionando Ctrl + B, y luego 0 (cero), vemos que está tal como lo dejamos.

Relacionado:  Cómo mostrar la fecha y la hora en la terminal de Linux (y usarla en scripts Bash)

Estas son dos líneas de comando independientes, no dos vistas en una ventana; son conchas distintas y separadas. Podemos mostrar esto ejecutando un comando diferente en cada panel.

Escribimos lo siguiente:

uname -a

ls -hl

Para pasar de un panel a otro, presione Ctrl + B y luego las flechas hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha.

Dos comandos diferentes en dos paneles en una sesión tmux en una terminal viuda.

Si presiona Ctrl + B, y luego el signo de porcentaje ( %) divide el panel actual verticalmente.

tmux sesión con paneles divididos verticales y horizontales en una ventana de terminal.

Presione Ctrl + B y luego Q para hacer  tmux parpadear brevemente el número de cada panel.

tmux que muestra los números de panel en una ventana de terminal.

Estos números se utilizan en avisos y mensajes de tmux. Presione Ctrl + B y luego X para cerrar el panel actual. La barra de estado cambia a ámbar y se le solicita que confirme que desea cerrar ese número de panel. Presione Y para eliminar el panel, o N para dejar las cosas como están.

tmux solicitando eliminar un panel en una ventana de terminal.

Si presiona Y, el panel se elimina.

tmux con dos paneles horizontales en una ventana de terminal.

El screencomando también tiene paneles, pero, nuevamente, son menos intuitivos de usar. Lo que nos molesta  screen es que si desconecta una sesión con paneles, desaparecen cuando vuelve a conectar esa sesión. Esto envejece muy rápidamente.

A Ctrl + B Cheat Sheet

Hemos incluido una hoja de trucos de los diferentes comandos que puede usar a tmux continuación.

Comandos de sesión

  • S: Lista de sesiones.
  • $: Cambiar el nombre de la sesión actual.
  • D: Separar la sesión actual.
  • Ctrl + B, y luego?:  Muestra la página de ayuda en formato tmux.

Comandos de ventana

  • C: Crea una nueva ventana.
  • ,: Cambia el nombre de la ventana actual.
  • W: Lista las ventanas.
  • N: pasar a la siguiente ventana.
  • P: Ir a la ventana anterior.
  • 0 a 9: muévase al número de ventana especificado.

Comandos del panel

  • %: Crea una división horizontal.
  • “: Crea una división vertical.
  • H o Flecha izquierda: muévase al panel de la izquierda.
  • I o flecha derecha: muévete al panel de la derecha.
  • J o flecha hacia abajo: muévete al panel de abajo.
  • K o flecha arriba: muévete al panel de arriba.
  • P : Muestra brevemente los números de panel.
  • O: Desplácese por los paneles en orden. Cada pulsación le lleva a la siguiente, hasta que recorra todas.
  • }: Intercambia la posición del panel actual con el siguiente.
  • {: Intercambia la posición del panel actual con el anterior.
  • X: cierra el panel actual.

Cómo se comparan

En términos de funcionalidad, screeny tmuxambos realizan de manera similar y ofrecen las mismas características principales. Es la forma en que accede a esas funciones lo que es marcadamente diferente. tmux ofrece formas más sencillas y cómodas de acceder a las distintas funciones. Sin embargo, esa no es la única diferencia.

La capacidad de cambiar el nombre de las sesiones y las ventanas tmuxes genial, y el hecho de que conserve los paneles cuando vuelva a conectar una sesión es un cambio de juego.

screen, por otro lado, pierde completamente los paneles cuando desconecta y vuelve a conectar una sesión. Esto es casi lo suficientemente molesto como para evitar separarse en primer lugar.

Hay mucho más tmux, incluidas sus capacidades de scripting increíblemente flexibles. Te lo debes a ti mismo para comprobarlo.