Atajos de tmux: ventanas, paneles, sesiones y desplazamiento

Guía práctica de tmux sobre el prefijo Ctrl+b, ventanas, paneles, sesiones, historial, configuración, automatización y solución de problemas.

tmux puede administrar múltiples ventanas y pantallas divididas en una terminal, y puede mantener las tareas en ejecución después de una desconexión SSH. Su tecla de prefijo predeterminada es Ctrl+b. La mayoría de los atajos siguen esta secuencia:

  1. Presione Ctrl+b;
  2. Suelte ambas teclas;
  3. Presione la tecla de acción nuevamente. Por ejemplo, para crear una nueva ventana, en lugar de presionar Ctrl+b+c al mismo tiempo, presione primero Ctrl+b, suéltelo y luego presione c.

Los atajos de teclado más importantes para recordar

1
2
3
4
5
6
Ctrl+b d       Desconectar sin detener las tareas
Ctrl+b %       Dividir en paneles izquierdo y derecho
Ctrl+b "       Dividir en paneles superior e inferior
Ctrl+b flechas  Cambiar de panel
Ctrl+b z       Ampliar o restaurar el panel actual
Ctrl+b [       Abrir y recorrer el historial

Restaura la sesión de la que acabas de salir:

1
tmux attach

Instale y confirme que tmux esté disponible

Debian y Ubuntu:

1
2
sudo apt update
sudo apt install tmux

Fedora:

1
sudo dnf install tmux

Arch Linux:

1
sudo pacman -S tmux

macOS usando Homebrew:

1
brew install tmux

Verifique la versión después de la instalación:

1
tmux -V

El terminal devuelve información similar a tmux 3.x, lo que indica que el comando ha ingresado a PATH en el entorno actual.

Crear, salir y reanudar sesiones

Inicie una sesión anónima directamente:

1
tmux

Es más recomendable crear una sesión con nombre:

1
tmux new -s work

work se puede reemplazar por el nombre del proyecto, el nombre del servidor o el nombre de la tarea. Presione Ctrl+b cuando salga temporalmente y presione d después de soltar. Esta operación se llama desconectar, que solo desconecta el terminal actual de la sesión. La compilación, las descargas, la supervisión de registros y los scripts dentro de la sesión seguirán ejecutándose. Si se ejecuta exit en el panel, se cerrará el shell actual. Después de que salga el último panel, la ventana y la sesión correspondientes también pueden finalizar.

funcionar Tecla de comando o método abreviado
Crear una nueva sesión con nombre tmux new -s nombre-sesion
Ver sesión tmux ls
Restaurar conversaciones recientes tmux attach
Restaurar la sesión especificada tmux attach -t nombre-sesion
salida temporal Ctrl+b, luego presione d
Cambiar el nombre de la sesión actual Ctrl+b, luego presione $
Eliminar sesión especificada tmux kill-session -t nombre-sesion
Cuando hay varias sesiones, tmux attach puede indicar que el objetivo no está claro. Comprueba el nombre primero:
1
tmux ls

Luego reanude la sesión especificada:

1
tmux attach -t work

Los comandos abreviados también funcionan:

1
tmux a -t work

Teclas de acceso directo de ventana

Windows es similar a las pestañas del navegador. Una sesión puede tener varias ventanas y cada ventana puede contener varios paneles.

funcionar tecla de acceso directo
Nueva ventana Ctrl+b, luego presione c
siguiente ventana Ctrl+b, luego presione n
Ventana anterior Ctrl+b, luego presione p
ventanas usadas recientemente Ctrl+b, luego presione l
Cambiar a Windows 0–9 Ctrl+b, luego presione las teclas numéricas
Ver lista de ventanas Ctrl+b, luego presione w
Cambiar nombre de ventana Ctrl+b, luego presione ,
Cerrar la ventana actual Ctrl+b, luego presione &
tmux pedirá confirmación al cerrar la ventana. Después de escribir y, todos los paneles y programas de la ventana finalizarán. No confunda & con d utilizado por desprendimiento.
Cuando el número de ventana exceda 9, use Ctrl+b w para seleccionar de la lista. También puede presionar Ctrl+b ', ingresar el número de ventana y presionar Enter.

Operación de pantalla dividida y panel

Los paneles son áreas terminales independientes dentro de la misma ventana.

funcionar tecla de acceso directo
Pantalla dividida a izquierda y derecha Ctrl+b, luego presione %
Dividir pantalla arriba y abajo Ctrl+b, luego presione "
Panel de interruptores Ctrl+b, luego presione las teclas de flecha
Cambiar al siguiente panel Ctrl+b, luego presione o
Número del panel de visualización Ctrl+b, luego presione q
Panel actual en pantalla completa o restaurado Ctrl+b, luego presione z
Cerrar el panel actual Ctrl+b, luego presione x
Girar diseños preestablecidos Ctrl+b, luego presione espacio
Después de presionar Ctrl+b q, cada panel mostrará brevemente el número. Presione el número correspondiente mientras el número todavía está en la pantalla para saltar directamente.
Ctrl+b z solo cambia el rango de visualización y no elimina otros paneles; ejecútelo nuevamente para restaurar el diseño original.

Cambiar tamaño del panel

La operación común es presionar primero Ctrl+b, luego mantener presionado Ctrl y presionar las teclas de dirección continuamente. Si el terminal intercepta la combinación de teclas, puede usar el comando tmux. Primero presione Ctrl+b :, luego ingrese:

1
2
3
4
resize-pane -L 5
resize-pane -R 5
resize-pane -U 3
resize-pane -D 3

L, R, U y D representan la izquierda, la derecha, la parte superior y la inferior respectivamente, y los números representan el número de unidades que se ajustarán. Establezca el ancho o alto del panel actual como porcentaje:

1
2
resize-pane -x 70%
resize-pane -y 60%

Desplazarse por la historial de salida

La rueda de desplazamiento de un terminal normal a veces no puede desplazarse directamente por el historial de tmux. Primero ingrese al modo de copia:

1
Ctrl+b [
funcionar botón
Mover línea por línea teclas de flecha
Página arriba PageUp
Página abajo PageDown
saltar a la cima g, necesita usar el modo vi
saltar al fondo G, necesita usar el modo vi
buscar /, necesita usar el modo vi
Salir del modo de copia q o Esc
Si g, G y / se comportan de manera diferente, generalmente es porque se utilizan pulsaciones de teclas estilo emacs. El modo Vi se puede habilitar en ~/.tmux.conf:
1
set-window-option -g mode-keys vi

Copiar y pegar texto

Cuando se utiliza el modo vi, el proceso común es el siguiente:

  1. Presione Ctrl+b [ para ingresar al modo de copia;
  2. Ir al punto de partida;
  3. Presione la barra espaciadora para iniciar la selección;
  4. moverse al punto final;
  5. Presione Enter para copiar al búfer tmux;
  6. Presione Ctrl+b ] para pegar. Diferentes versiones o configuraciones personalizadas pueden usar v para iniciar la selección y y para completar la copia. Presione Ctrl+b ? para ver el enlace real actual. Ver y guardar buffers tmux:
1
2
tmux show-buffer
tmux save-buffer ~/tmux-buffer.txt

Habilitar la operación del mouse

Cuando desee utilizar el mouse para seleccionar paneles, ajustar bordes y desplazarse, agregue ~/.tmux.conf:

1
set -g mouse on

Recargar configuración:

1
tmux source-file ~/.tmux.conf

Cuando enciende el mouse, la rueda de desplazamiento generalmente ingresa automáticamente al modo de copia. En algunas terminales, tmux se hará cargo de la selección del mouse; cuando necesites usar la selección nativa del terminal, puedes intentar mantener presionado Shift y arrastrar.

Una configuración básica suficiente

Editar ~/.tmux.conf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# Activar el ratón
set -g mouse on

# Aumentar el historial disponible
set -g history-limit 50000

# Numerar ventanas y paneles desde 1
set -g base-index 1
setw -g pane-base-index 1

# Renumerar las ventanas después de cerrar una
set -g renumber-windows on

# Usar el modo de copia de vi
setw -g mode-keys vi

# Reducir la espera entre teclas
set -sg escape-time 10

Después de guardar, ejecute:

1
tmux source-file ~/.tmux.conf

También puede presionar Ctrl+b : e ingresar source-file ~/.tmux.conf. Cuando hay errores de sintaxis en la configuración, tmux señalará el número de línea; comente la configuración agregada recientemente e inténtelo nuevamente sin eliminar el archivo completo.

Modificar clave de prefijo predeterminada

Si Ctrl+b entra en conflicto con la tecla de acceso directo del editor, puede cambiarla a Ctrl+a:

1
2
3
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

Después de la carga, todas las operaciones Ctrl+b en este artículo deben reemplazarse con Ctrl+a. La última línea se utiliza para enviar el prefijo al tmux anidado.

Reanudar la tarea después de la desconexión SSH

Al ejecutar una tarea larga de forma remota, puede seguir el siguiente proceso:

1
2
3
ssh user@server
tmux new -s train
./run-task.sh

Cuando necesite salir, presione Ctrl+b d y luego salga de SSH. Las sesiones suelen sobrevivir a desconexiones inesperadas de la red. Después de volver a conectar ejecute:

1
2
tmux ls
tmux attach -t train

tmux solo puede guardar sesiones de terminal y no puede reactivar automáticamente programas que salieron con un error. Las tareas importantes aún deben registrarse:

1
./run-task.sh 2>&1 | tee -a task.log

Errores comunes y soluciones.

no server running

Cuando se ejecuta tmux ls, aparece no server running on /tmp/tmux-..., lo que indica que el usuario actual no tiene un servidor tmux en ejecución. Simplemente recrea la sesión:

1
tmux new -s work

sessions should be nested with care

Esto significa que el shell actual ya está en tmux y se ha ejecutado tmux. Primer control:

1
echo "$TMUX"

Cuando haya resultados, primero presione Ctrl+b c para crear una nueva ventana o use el siguiente comando para cambiar de sesión:

1
tmux switch-client -t nombre-sesion

El tamaño de la pantalla es incorrecto después de attach

Cuando se conectan terminales de diferentes tamaños a la misma sesión, el área de visualización puede verse afectada por el cliente más pequeño. Otros clientes pueden desconectarse durante la recuperación:

1
tmux attach -d -t work

Ver clientes existentes:

1
tmux list-clients

Las teclas de acceso directo no responden

Consultar en orden:

  1. Ya sea para presionar el prefijo primero y soltarlo;
  2. Si el prefijo ha sido modificado en la configuración;
  3. Si el terminal o el escritorio remoto interceptan la combinación de teclas;
  4. Ya sea en tmux anidado;
  5. Si el complemento sobrescribe el enlace actual. Mostrar todos los enlaces reales:
1
Ctrl+b ?

Consultar desde el shell las teclas vinculadas a la división de paneles:

1
tmux list-keys | grep 'split-window'

Cerrar accidentalmente un panel o sesión

tmux no tiene una función general de deshacer y cerrar. Antes de cerrar, asegúrese de que no haya editores no guardados, tareas interactivas o resultados no escritos en archivos. Utilice tee para guardar el registro, lo que puede reducir la pérdida después de cerrar accidentalmente el panel.

Apagado y limpieza seguros

Simplemente finalice una sesión:

1
tmux kill-session -t work

Mantenga work y finalice otras sesiones:

1
tmux kill-session -a -t work

Finalice todo el servidor tmux para el usuario actual:

1
tmux kill-server

kill-server cerrará todas las sesiones administradas por el servidor y los procesos en ellas. Antes de la ejecución, ejecute tmux ls para confirmar que aún no hay tareas que deban conservarse.

Especifique con precisión sesiones, ventanas y paneles.

El comando tmux suele utilizar -t para especificar el objetivo. El formato de destino completo es:

1
nombre-sesion:numero-ventana.numero-panel

Por ejemplo, work:1.2 representa la ventana 1, panel 2 en la sesión work.

Ver objetivos actuales:

1
tmux display-message -p '#S:#I.#P'

Listar todas las ventanas:

1
tmux list-windows -a

Enumere todos los paneles y sus comandos actuales:

1
tmux list-panes -a -F '#S:#I.#P #{pane_current_command}'

Este método de escritura es adecuado para solucionar problemas de ubicaciones de tareas entre múltiples sesiones y también es adecuado para que los scripts solo operen paneles específicos para evitar cerrar accidentalmente otras terminales.

El objetivo puede omitir algunos campos. La ventana 2 de la sesión actual se puede escribir como :2 y el panel 1 de la ventana actual se puede escribir como .1. Se recomienda utilizar el objetivo completo en los scripts de automatización para reducir la ambigüedad causada por los cambios en el foco actual.

Crea ventanas y divide pantallas desde el shell.

Además de los atajos de teclado, los comandos tmux también se pueden llamar directamente. Cree una nueva ventana para la sesión work:

1
tmux new-window -t work -n logs

Cree pantallas divididas izquierda y derecha en la ventana:

1
tmux split-window -h -t work:logs

Crea una pantalla dividida de arriba a abajo:

1
tmux split-window -v -t work:logs

Ejecute el comando directamente al crear el panel:

1
tmux split-window -h -t work:logs 'tail -f /var/log/syslog'

El panel con el comando se cerrará una vez que finalice el comando. Si desea ver el resultado final, puede decirle al shell que persista después del comando:

1
tmux split-window -h -t work:logs 'tail -n 100 /var/log/syslog; exec bash'

En un entorno de producción remoto, no escriba comandos que requieran contraseñas directamente en el historial de Shell. Utilice los mecanismos de autenticación existentes y limite el panel de registro para leer solo los archivos necesarios.

Enviar comando a la sesión en segundo plano

send-keys puede simular la entrada del teclado en el panel especificado:

1
tmux send-keys -t work:server.0 'npm run dev' Enter

Envíe Ctrl+c al programa en primer plano en ejecución:

1
tmux send-keys -t work:server.0 C-c

Antes de enviar el comando, confirme el programa que se está ejecutando actualmente en el panel:

1
tmux display-message -p -t work:server.0 '#{pane_current_command}'

Si el resultado es un editor, un cliente de base de datos u otro programa interactivo, enviar texto directamente puede provocar la modificación de los datos. Al automatizar, prepare sesiones dedicadas y nombres de ventanas fijos para las tareas, y no confíe en números temporales.

Cree una sesión en segundo plano y comience la tarea:

1
2
tmux new-session -d -s backup
tmux send-keys -t backup:0 'bash ~/backup.sh 2>&1 | tee -a ~/backup.log' Enter

Compruebe si la sesión existe:

1
2
tmux has-session -t backup
echo $?

Un código de retorno de 0 indica que la sesión de destino existe. Solo muestra que la sesión tmux todavía está ahí, no que el script tuvo éxito. También debe verificar el estado de salida, el registro o el archivo de salida.

Capturar la salida del panel para diagnosticar problemas

También puedes leer el historial del panel sin entrar a una sesión:

1
tmux capture-pane -p -t work:server.0

Obtenga solo las últimas 100 filas:

1
tmux capture-pane -p -S -100 -t work:server.0

Guardar en archivo:

1
tmux capture-pane -p -S -500 -t work:server.0 > server-output.txt

capture-pane lee la pantalla y el contenido del historial guardado por tmux. Si la salida del programa excede history-limit, el contenido anterior no se puede restaurar.

Las tareas que requieren auditorías a largo plazo deben hacer que el programa escriba sus propios registros, en lugar de depender únicamente del historial de tmux. Si los registros contienen tokens, cadenas de conexión o datos de usuario, también se deben establecer los permisos de archivo y los períodos de retención adecuados.

Comprobar si la sesión todavía tiene clientes

El siguiente comando puede verificar qué terminales todavía están conectados a tmux:

1
tmux list-clients -F '#{client_name} session=#{session_name} tty=#{client_tty}'

Si se requiere una sesión exclusiva antes del período de mantenimiento, notifique primero a otros usuarios y luego decida si desea usar attach -d para desconectar a sus clientes.

Una lista de clientes vacía no significa que la tarea haya finalizado, solo significa que ningún terminal muestra la sesión actualmente.

Preguntas frecuentes

¿La desconexión detendrá el programa?

No. Ctrl+b d solo desconecta clientes. Si el programa continúa ejecutándose también depende de si el servidor se apaga, se reinicia o si el proceso finaliza mediante otro mecanismo.

¿Por qué Ctrl+b % ingresó un signo de porcentaje?

Por lo general, no hay un prefijo de activación o las teclas se presionan en una combinación simultánea. Presione primero Ctrl+b y suéltelo todo antes de ingresar a %; la mayoría de las distribuciones de teclado requieren Shift+5.

¿Por qué es difícil presionar comillas dobles?

Primero active el prefijo y luego use la combinación de comillas dobles correspondiente a la distribución del teclado actual, generalmente Shift+'. También puede volver a vincular una clave de pantalla dividida más conveniente en la configuración.

¿Cómo confirmar la sesión, ventana y panel actual?

1
tmux display-message -p '#S:#I.#P'

El resultado es el nombre de la sesión, el número de ventana y el número del panel, en orden.

Resumen rápido

La estructura de tmux se divide en tres capas: la sesión guarda todo el entorno de trabajo, la ventana distingue las tareas y el panel se encarga de dividir la pantalla. El proceso diario consiste en usar tmux new -s nombre para crear una sesión, organizar tareas a través de ventanas y pantallas divididas, presionar Ctrl+b d para salir de manera segura y luego usar tmux attach -t nombre para reanudar. Cuando olvide un acceso directo, presione Ctrl+b ? para ver los enlaces reales en su configuración actual, lo cual es más confiable que memorizar la lista completa.