porqué usar tmux? #
Durante mucho tiempo que uso screen
y me resulta muy útil, muchos
desconocen que se pueden hacer split horizontal y vertical usando
(CTRL-A + |
y CTRL-A + -
).
Luego de leer varios tutoriales para tmux llegué a dos conclusiones:
-
es un reemplazo de screen (muchos sugieren mapear el
CTRL-B
porCTRL-A
-
es para usar con monitores grandes!
Debido a esto es que tarde en implementarlo, screen
parecía suficiente
y tmux
no me resultaba del todo atractivo.
tmux + terminator + awesome {#tmux-terminator-awesome-1} #
Hasta que decidí probarlo y descubrí que podía adaptarlo a mi manera de
trabajar. Habitualmente uso awesome
1 y terminator
, me resultan
muy cómodos, por un lado terminator permite realizar un split muy
fácil, usando CTRL+SHIFT+E
y CTRL+SHIFT+O
. Por otro lado usando
SUPER+1..9
me permite cambiar de workspace fácilmente, de esta
manera venía trabajando con 1 terminal por workspace, esto resulta muy
útil para mantener el foco en una única aplicación y no distraerse.
Ahora en cada terminal hay una sesion de tmux
corriendo y cada sesion
esta dividida en diferentes ventanas y en muy pocos casos además cada
ventana en diferentes paneles. No me resulta cómodo usar varios paneles
porque no puedo tener diferentes tamaños de fuente en cada panel (al
menos yo no encontré cómo hacerlo) y esa funcioalidad la realizo con
terminator
, normalmente lo utilizo para ver logs locales o remotos
relacionados a lo que estoy trabajando.
definiendo sesiones #
Sin dudas, una de las mejores características de tmux
es el poder
definir la composisión de una sesión, la cantidad y tamaño de las
ventanas y/o paneles.
Un ejemplo de cómo se puede definir una sesion mediante un script bash
, por ejemplo ~/bin/tmuxosiux
es el siguiente:
1#!/bin/bash
2cd ~
3tmux new-session -d -s osiux -n 'mm' 'mutt -F ~/config/mutt/muttrc-imap-osiux-gin'
4tmux new-window -t osiux:2 -n 'mx' 'mutt -F ~/config/mutt/muttrc-imap-xuiso-gin'
5tmux a -t osiux
De esta manera se crea una sesion osiux con dos ventanas mm y
mx, en la primera levanto un mutt
con la cuenta osiux y en la
otra ventana un mutt
con la cuenta xuiso. Para simplificar su
ejecución defini el alias tmx
.
Entonces tengo asociada cada sesion de tmux
a un workspace de
awesome
con el siguiente esquema:
ws alias comando
1 tmo tmuxosiris 2 tgca tmuxgca 3 tmx tmuxosiux 7 temacs tmuxemacs 8 tmoc tmuxmoc 9 tchat tmuxchat
Otros alias que uso bastante son:
1alias tas='tmux a -s '
2alias tls='tmux ls'
3alias tma='tmux a'
4alias tns='tmux new-session -d -s '
screen
dentro de tmux
#
No cambié el default de CTRL+B
de tmux
como reemplazo de screen
,
esto permite que pueda ejecutar screen
dentro de tmux
e invocar los
comandos de screen
mediante CTRL+A
y al mismo tiempo sin
superponerse los comandos de tmux
. Generalmente utilizo screen
en
servidores remotos para procesos que requieran una ejecución prolongada.
local y remoto de la misma manera #
La gran ventaja de usar tmux
es poder mantener abiertos todos los
programas con la configuración de ventanas y paneles tanto localmente
como remotamente vía ssh
, es decir, no necesito cerrar nada y al
terminar el día, al volver a casa puedo conectarme por ssh
al trabajo
y esta todo donde lo dejé, continuar con algo que me olvidé o necesitaba
mi atención, hacer un tmux detach
o CTRL-B
y quedarme que esta ahi
corriendo en segundo plano y que puedo recuperar mediante un
tmux attatch
en cualquier momento y desde cualquier lugar.
tmux list-windows -a
chat:2: finch* (1 panes) [140x47]
emacs:2: emacs!* (1 panes) [140x47]
gca:2: vim* (1 panes) [140x47]
gca:3: socks# (1 panes) [140x47]
gca:4: ssh#- (1 panes) [140x47]
gcoop:1: mg!* (1 panes) [140x47]
gcoop:3: mo#!- (1 panes) [140x47]
moc:2: mocp* (1 panes) [140x47]
osiux:1: mm!* (1 panes) [140x47]
osiux:2: mx#!- (1 panes) [140x47]
Dado que la única aplicación que uso que no vive dentro de una terminal
es Firefox, todo mi entorno se reduce a una terminal y tmux, ya sea
local combinando con awesome como remotamente mediante ssh
, y esto
además de resultar muy cómodo es extremadamente productivo, pueden pasar
2 días y puedo volver en cualquier momento a un archivo abierto en una
línea determinada de cualquier proyecto y remotamente!
Por tratarse de una conexión ssh
que sólo envía texto plano, no
requiero de ancho de banda, de ser necesario puedo recuperar la sesión
desde un telefono espía con android
tmux es un excelente monitor #
También resulta muy útil utilizar tmux
como herramienta de monitoreo,
por ejemplo en malbec a veces es necesario monitorear las conexiones
de red y como hay varias placas de red, mediante un script tmux es muy
simple ver que esta sucediendo en cada interfaz de red al mismo tiempo:
1#!/bin/bash
2cd /
3tmux ls | grep gorra >/dev/null 2>/dev/null
4OK=$(echo $?)
5if [ $OK -eq 0 ]
6then
7tmux a -t gorra
8else
9tmux new-session -d -s gorra 'iftop -n -i eth3'
10tmux select-window -t gorra:0
11tmux split-window -h -t 0 'iftop -n -i eth5'
12tmux select-window -t gorra:0
13tmux split-window -h -t 1 'iftop -n -i eth0'
14tmux split-window -h -t 0 'iftop -n -i eth4'
15
16tmux select-window -t gorra:0
17tmux split-window -v -t 0 'nbwmon -i eth3'
18tmux select-window -t gorra:0
19tmux split-window -v -t 1 'nbwmon -i eth5'
20tmux select-window -t gorra:0
21tmux split-window -v -t 2 'nbwmon -i eth0'
22tmux select-window -t gorra:0
23tmux split-window -v -t 3 'nbwmon -i eth4'
24
25tmux a -t gorra
26fi
Para visualizar varios archivos de logs al mismo tiempo:
ChangeLog #
2019-04-18 00:21
Agregar hora en header date2019-04-18 00:01
Corregir identación header #+INCLUDE:2015-07-03 03:59
@ 01:00 hs - reemplazo :alt por :title y cambios menores2015-06-30 05:10
@ 00:15 hs - recupero posts a medio terminar :)