103.5 Lección 2
Certificación: |
LPIC-1 |
---|---|
Versión: |
5.0 |
Tema: |
103 Comandos GNU y Unix |
Objetivo: |
103.5 Crear, monitorear y matar procesos |
Lección: |
2 de 2 |
Introducción
Las herramientas y utilidades vistas en la lección anterior son muy útiles para el monitoreo de procesos en general. Sin embargo, un administrador del sistema puede necesitar ir un paso más allá. En esta lección discutiremos el concepto de multiplexores de terminales y aprenderemos sobre GNU Screen y tmux ya que, a pesar de los modernos y excelentes emuladores de terminales actuales, los multiplexores aún conservan algunas características interesantes y potentes para un administrador de sistemas productivo.
Características de los multiplexores terminales
En electrónica, un multiplexor (o mux) es un dispositivo que permite conectar múltiples entradas a una sola salida. Por lo tanto, un multiplexor terminal nos da la capacidad de cambiar entre diferentes entradas según sea necesario. Aunque no son exactamente lo mismo, screen
y tmux
comparten una serie de características comunes:
-
Cualquier invocación exitosa dará como resultado al menos una sesión que, a su vez, incluirá al menos una ventana. Las ventanas contienen programas.
-
Las ventanas se puede dividir en regiones o paneles, lo que puede ayudar a la productividad cuando se trabaja con varios programas simultáneamente.
-
Facilidad de control: para ejecutar la mayoría de los comandos, utilizan una combinación de teclas, el llamado comando prefijo o comando clave, seguido de otro caracter.
-
Las sesiones se pueden separar de su terminal actual (es decir, los programas se envían en segundo plano y continúan ejecutándose). Esto garantiza la ejecución completa de los programas sin importar si cerramos accidentalmente un terminal, experimentamos un congelamiento ocasional del terminal o incluso una pérdida de conexión remota.
-
Conexiones de Socket.
-
Modo de copia.
-
Son altamente personalizables.
GNU Screen
En los primeros días de Unix (1970-1980), las computadoras consistían básicamente en terminales conectados a una computadora central. Eso fue todo, sin múltiples ventanas o pestañas. Y esa fue la razón detrás de la creación de GNU Screen en 1987: emular múltiples pantallas VT100 independientes en un solo terminal físico.
Ventanas
La pantalla GNU se invoca simplemente escribiendo screen
en la terminal. Primero verá un mensaje de bienvenida:
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Presione la barra espaciadora o Enter para cerrar el mensaje y se le mostrará un símbolo del sistema:
$
Puede parecer que no ha pasado nada, pero el hecho es que screen
ya ha creado y gestionado su primera sesión y ventana. El prefijo de comando de la pantalla es Ctrl+a. Para ver todas las ventanas en la parte inferior de la pantalla del terminal, escriba Ctrl+a-w:
0*$ bash
¡Ahí está, nuestra única ventana hasta ahora! Sin embargo, tenga en cuenta que el conteo inicia en 0. Para crear otra ventana, escriba Ctrl+a-c. Verá un nuevo mensaje. Comencemos con ps
en esa nueva ventana:
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
y escriba Ctrl+a-w nuevamente:
0-$ bash 1*$ bash
Ahí tenemos nuestras dos ventanas (observe el asterisco que indica la que se está mostrando en este momento). Sin embargo, como comenzaron con Bash, ambas reciben el mismo nombre. Ya que invocamos ps
en nuestra ventana actual, cambiemos el nombre con el mismo nombre. Para eso, debe escribir Ctrl+a-A y escribir el nombre de la nueva ventana (ps
) cuando se le solicite:
Set window's title to: ps
Ahora, creemos otra ventana pero proporcione un nombre desde el principio: yetanotherwindow
. Esto se hace invocando screen
con el modificador -t
:
$ screen -t yetanotherwindow
Puede moverse entre ventanas de diferentes formas:
-
Usando Ctrl+a-n (ir a la ventana siguiente) y Ctrl+a-p (ir a la ventana anterior).
-
Usando Ctrl+a-número (vaya a la ventana número número).
-
Usando Ctrl+a-" para ver una lista de todas las ventanas. Puede moverse hacia arriba y hacia abajo con las teclas de flecha y seleccionar la que desee con Enter:
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Al trabajar con ventanas, es importante recordar lo siguiente:
-
Las ventanas ejecutan sus programas de forma completamente independiente entre sí.
-
Los programas seguirán ejecutándose incluso si su ventana no está visible (también cuando se desconecta la sesión de pantalla, como veremos en breve).
Para eliminar una ventana, simplemente finalice el programa que se está ejecutando en ella (una vez que se elimine la última ventana, screen
terminará). Alternativamente, use Ctrl+a-k mientras está en la ventana que desea eliminar; se le pedirá confirmación:
Really kill this window [y/n] Window 0 (bash) killed.
Regiones
screen
puede dividir la pantalla de un terminal en varias regiones para acomodar las ventanas. Estas divisiones pueden ser horizontales (Ctrl+a-S) o verticales (Ctrl+a-|).
Lo único que mostrará la nueva región es simplemente --
en la parte inferior, lo que significa que está vacío:
1 ps --
Para moverse a la nueva región, escriba Ctrl+a-Tab. Ahora puede agregar una ventana mediante cualquiera de los métodos que ya hemos visto, por ejemplo: Ctrl+a-2. Ahora el --
debería haberse convertido en 2 yetanotherwindow
:
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
Los aspectos importantes a tener en cuenta al trabajar con regiones son:
-
Puede moverse entre regiones escribiendo Ctrl+a-Tab.
-
Puede terminar todas las regiones excepto la actual con Ctrl+a-Q.
-
Puede terminar la región actual con Ctrl+a-X.
-
Terminar una región no termina su ventana asociada.
Sesiones
Hasta ahora hemos jugado con algunas ventanas y regiones, pero todas pertenecen a la misma y única sesión. Es hora de empezar a jugar con sesiones. Para ver una lista de todas las sesiones, teclee screen -list
o screen -ls
:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
Esa es nuestra única sesión hasta ahora:
- PID
-
1037
- Name
-
pts-0.debian
(indicando el terminal — en nuestro caso un pseudo terminal esclavo — y el nombre de host). - Status
-
Attached
Creemos una nueva sesión dándole un nombre más descriptivo:
$ screen -S "second session"
La pantalla del terminal se borrará y se le dará un nuevo mensaje. Puede comprobar las sesiones una vez más:
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
Para cerrar una sesión, salga de todas sus ventanas o simplemente escriba el comando screen -S SESSION-PID -X quit
(también puede proporcionar el nombre de la sesión). Deshagámonos de nuestra primera sesión:
$ screen -S 1037 -X quit
Se le enviará de vuelta al indicador de su terminal fuera de la screen
. Pero recuerde, nuestra segunda sesión todavía está viva:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
Sin embargo, dado que matamos su sesión principal, se le asigna una nueva etiqueta: Detached
.
Desvincular sesiones
Por varias razones, es posible que desee desconectar una sesión de pantalla de su terminal:
-
Para permitir que su computadora en el trabajo haga su trabajo y se conecte de forma remota más tarde desde casa.
-
Para compartir una sesión con otros usuarios.
Desconecte una sesión con la combinación de teclas Ctrl+a-d. Volverá a su terminal:
[detached from 1090.second session] $
Para vincular nuevamente a la sesión, use el comando screen -r SESSION-PID
. Alternativamente, puede usar el SESSION-NAME
como vimos arriba. Si solo hay una sesión desvinculada, ninguna es obligatoria:
$ screen -r
Este comando es suficiente para volver a vincularla a nuestra segunda sesión:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Opciones importantes para volver a adjuntar la sesión:
-d -r
-
Vuelva a conectar una sesión y, si es necesario, desconéctela primero.
-d -R
-
Igual que
-d -r
peroscreen
incluso creará la sesión primero si no existe. -d -RR
-
Igual que
-d -R
. Sin embargo, utilice la primera sesión si hay más de una disponible. -D -r
-
Vuelva a conectar una sesión. Si es necesario, desconecte y cierre la sesión de forma remota primero.
-D -R
-
Si se está ejecutando una sesión, vuelva a conectarla (desconecte y cierre la sesión de forma remota primero si es necesario). Si no se estaba ejecutando créelo y notifique al usuario.
-D -RR
-
Lo mismo que
-D -R
- solo que más fuerte. -d -m
-
Inicie
screen
en modo independiente. Esto crea una nueva sesión pero no se vincula a ella. Esto es útil para los scripts de inicio del sistema. -D -m
-
Igual que
-d -m
, pero no bifurca un nuevo proceso. El comando sale si la sesión termina.
Lea las páginas del manual de screen
para conocer otras opciones.
Copiar y pegar: modo Scrollback
GNU Screen presenta un modo de copia o scrollback. Una vez ingresado, puede mover el cursor en la ventana actual y por el contenido de su historial usando las teclas de flecha. Puede marcar texto y copiarlo en ventanas. Los pasos a seguir son:
-
Ingrese al modo de copia/scrollback: Ctrl+a-[.
-
Vaya al principio del texto que desea copiar usando las teclas de flecha.
-
Marque el comienzo del fragmento de texto que desea copiar: Espacio.
-
Vaya al final del fragmento de texto que desea copiar usando las teclas de flecha.
-
Marque el final del fragmento de texto que desea copiar: Espacio.
-
Vaya a la ventana de su elección y pegue el fragmento de texto: Ctrl+a-].
Personalización de Screen
El archivo de configuración de todo el sistema para screen es /etc/screenrc
. Alternativamente, se puede usar un ~/.screenrc
a nivel de usuario. El archivo incluye cuatro secciones principales de configuración:
SCREEN SETTINGS
-
Puede definir la configuración general especificando la directiva seguida de un espacio y el valor como en:
defscrollback 1024
. SCREEN KEYBINDINGS
-
Esta sección es bastante interesante ya que le permite redefinir combinaciones de teclas que quizás interfieran con su uso diario del terminal. Utilice la palabra clave
bind
seguida de un espacio, el carácter que se utilizará después del prefijo del comando, otro espacio y el comando como en:bind l kill
(esta configuración cambiará la forma predeterminada de matar una ventana a Ctrl+a-l).Para mostrar todos los enlaces de la pantalla, escriba Ctrl+a-? O consulte la página del manual.
TipPor supuesto, también puede cambiar el prefijo del comando. Por ejemplo, para ir de Ctrl+a a Ctrl+b, simplemente agregue esta línea:
escape ^Bb
. TERMINAL SETTINGS
-
Esta sección incluye configuraciones relacionadas con el tamaño de la ventana de la terminal y los búferes, entre otros. Para habilitar el modo sin bloqueo para manejar mejor las conexiones ssh inestables, por ejemplo, se utiliza la siguiente configuración:
defnonblock 5
. STARTUP SCREENS
-
Puede incluir comandos para que varios programas se ejecuten en el inicio de la
pantalla
; por ejemplo:screen -t top top
(screen abrirá una ventana llamadatop
contop
adentro).
tmux
tmux
fue lanzado en 2007. Aunque es muy similar a screen
, incluye algunas diferencias notables:
-
Modelo cliente-servidor: el servidor suministra una serie de sesiones, cada una de las cuales puede tener varias ventanas vinculadas que, a su vez, pueden ser compartidas por varios clientes.
-
Selección interactiva de sesiones, ventanas y clientes a través de menús.
-
La misma ventana se puede vincular a varias sesiones.
-
Disponibilidad de diseños de teclas vim y Emacs.
-
Soporte para terminales UTF-8 y 256 colores.
Ventanas
tmux
se puede invocar simplemente escribiendo tmux
en el símbolo del sistema. Se le mostrará un indicador de shell y una barra de estado en la parte inferior de la ventana:
[0] 0:bash* "debian" 18:53 27-Aug-19
Aparte del hostname
, la hora y la fecha, la barra de estado proporciona la siguiente información:
- Session name
-
[0]
- Window number
-
0:
- Window name
-
bash*
. Por defecto, este es el nombre del programa que se ejecuta dentro de la ventana y, a diferencia descreen
,tmux
lo actualizará automáticamente para reflejar el programa en ejecución actual. Note el asterisco que indica que esta es la ventana visible actual.
Puede asignar nombres de sesión y ventana al invocar tmux
:
$ tmux new -s "LPI" -n "Window zero"
La barra de estado cambiará en consecuencia:
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
El prefijo de comando de tmux es Ctrl+b. Para crear una nueva ventana, simplemente escriba Ctrl+b-c; se le llevará a un nuevo prompt y la barra de estado reflejará la nueva ventana:
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Como Bash es el shell subyacente, la nueva ventana recibe ese nombre de forma predeterminada. Inicie top
y vea cómo cambia el nombre a top
:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
En cualquier caso, puede cambiar el nombre de una ventana con Ctrl+b-,. Cuando se le solicite, proporcione el nuevo nombre y presione Enter:
(rename-window) Window one
Puede mostrar todas las ventanas para su selección con Ctrl+b-w (use las teclas de flecha para moverse hacia arriba y hacia abajo y enter para seleccionar):
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
De manera similar a screen
, podemos saltar de una ventana a otra con:
- Ctrl+b-n
-
ir a la siguiente ventana.
- Ctrl+b-p
-
ir a la ventana anterior.
- Ctrl+b-número
-
ir a la ventana número.
Para deshacerse de una ventana, use Ctrl+b-&. Se le pedirá confirmación:
kill-window Window one? (y/n)
Otros comandos de ventana interesantes incluyen:
- Ctrl+b-f
-
buscar ventana por nombre.
- Ctrl+b-.
-
cambiar el número de índice de la ventana.
Para leer la lista completa de comandos, consulte la página del manual.
Paneles
La función de división de ventanas de screen
también está presente en tmux
. Sin embargo, las divisiones resultantes no se llaman regiones sino paneles. La diferencia más importante entre regiones y paneles es que estos últimos son pseudo-terminales completas vinculadas a una ventana. Esto significa que matar un panel también matará su pseudo-terminal y cualquier programa asociado que se ejecute dentro.
Para dividir una ventana horizontalmente, usamos Ctrl+b-":
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Para dividirlo verticalmente, use Ctrl+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Para destruir el panel actual (junto con su pseudo-terminal que se ejecuta dentro de él, junto con cualquier programa asociado), use Ctrl+b-x. Se le pedirá confirmación en la barra de estado:
kill-pane 1? (y/n)
Comandos de panel importantes:
- Ctrl+b-↑,↓,←,→
-
moverse entre paneles.
- Ctrl+b-;
-
pasar al último panel activo.
- Ctrl+b-Ctrl+arrow key
-
cambiar el tamaño del panel en una línea.
- Ctrl+b-Alt+arrow key
-
cambiar el tamaño del panel en cinco líneas.
- Ctrl+b-{
-
intercambiar paneles (actual a anterior).
- Ctrl+b-}
-
intercambiar paneles (actual a siguiente).
- Ctrl+b-z
-
panel de acercar/alejar.
- Ctrl+b-t
-
tmux
muestra un reloj elegante dentro del panel (deténgalo presionandoq
). - Ctrl+b-!
-
convertir el panel en ventana.
Para leer la lista completa de comandos, consulte la página del manual.
Sesiones
Para listar sesiones en tmux
puede usar Ctrl+b-s:
(0) + LPI: 2 windows (attached)
Alternativamente, puede usar el comando tmux ls
:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
Solo hay una sesión (LPI
) que incluye dos ventanas. Creemos una nueva sesión desde nuestra sesión actual. Esto se puede lograr usando Ctrl+b, teclee :new
en el indicador, luego presione Enter. Se le enviará a la nueva sesión como se puede observar en la barra de estado:
[2] 0:bash* "debian" 19:15 27-Aug-19
Por defecto, tmux
nombró la sesión 2
. Para cambiarle el nombre, use Ctrl+b-$. Cuando se le solicite, proporcione el nuevo nombre y presione Enter:
(rename-session) Second Session
Puede cambiar de sesión con Ctrl+b-s (use las teclas de flecha y enter):
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Para cerrar una sesión, puede usar el comando tmux kill-session -t SESSION-NAME
. Si escribe el comando desde la sesión adjunta actual, se le sacará de tmux
y volverá a su sesión de terminal inicial:
$ tmux kill-session -t "Second Session" [exited] $
Desvincular sesiones
Al matar a Second Session
estamos fuera de tmux
. Sin embargo, todavía tenemos una sesión activa. Pídale a tmux
una lista de sesiones y seguramente la encontrará allí:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Sin embargo, esta sesión está separada de su terminal. Podemos vincularla con tmux attach -t SESSION-NAME
(attach
puede ser reemplazado por at
o — simplemente — a
). Cuando solo hay una sesión, la especificación del nombre es opcional:
$ tmux a
Ahora está de vuelta en su sesión; para desplegarla, presione Ctrl+b-d:
[detached (from session LPI)] $
Tip
|
La misma sesión se puede vincular a más de un terminal. Si desea vincular una sesión asegurándose de que primero esté desconectada de cualquier otro terminal, use el modificador |
Comandos importantes para vincular/desvincular sesiones:
- Ctrl+b-D
-
seleccione qué cliente desvincular.
- Ctrl+b-r
-
Actualizar la terminal del cliente.
Para leer la lista completa de comandos, consulte la página del manual.
Copiar y pegar: modo Scrollback
tmux
también presenta el modo scrollback básicamente de la misma manera que screen
(recuerde usar el prefijo de comando de tmux y no el de screen). La única diferencia en cuanto a los comandos es que usa Ctrl+Espacio para marcar el comienzo de la selección y Alt+w para copiar el texto seleccionado.
Personalización de tmux
Los archivos de configuración para tmux
se encuentran normalmente en /etc/tmux.conf
y ~/.tmux.conf
. Cuando se inicia, tmux
utiliza estos archivos si existen. También existe la posibilidad de iniciar tmux
con el parámetro -f
para proporcionar un archivo de configuración alternativo. Puede encontrar un ejemplo de archivo de configuración tmux
ubicado en /usr/share/doc/tmux/example_tmux.conf
. El nivel de personalización que se puede lograr es realmente alto. Algunas de las cosas que puede hacer incluyen:
-
Cambiar la tecla de prefijo
# Change the prefix key to C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Establecer combinaciones de teclas adicionales para ventanas superiores a 9
# Some extra key bindings to select higher numbered windows bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Para obtener una lista completa de todos los enlaces, escriba Ctrl+b-? (Presione q
para salir) o consulte la página del manual.
Ejercicios Guiados
-
Indique si las siguientes declaraciones/características corresponden a la GNU Screen, tmux o ambos:
Característica/Declaración GNU Screen tmux El prefijo de comando predeterminado es Ctrl+a
Modelo cliente-servidor
Los paneles son pseudo-terminales
Matar una región no mata sus ventanas asociadas
Las sesiones incluyen ventanas
Las sesiones se pueden separar
-
Instale GNU Screen en su computadora (nombre del paquete:
screen
) y complete las siguientes tareas:-
Inicie el programa. ¿Qué comando utiliza?
-
Inicie
top
: -
Usando el prefijo de la tecla de pantalla, abra una nueva ventana; luego, abra
/etc/screenrc
usandovi
: -
Liste las ventanas en la parte inferior de la pantalla:
-
Cambie el nombre de la ventana actual a
vi
: -
Cambie el nombre de la ventana restante a
top
. Para hacer eso, primero muestre una lista de todas las ventanas para que pueda moverse hacia arriba y hacia abajo y seleccionar la correcta: -
Verifique que los nombres hayan cambiado volviendo a mostrar los nombres de las ventanas en la parte inferior de la pantalla:
-
Ahora, separe la sesión y haga que
screen
cree una nueva llamadassh
: -
Desconecte también de
ssh
y haga quescreen
muestre la lista de sesiones: -
Ahora, adjunte a la primera sesión usando su PID:
-
Debería estar de vuelta en la ventana que muestra
top
. Divida la ventana horizontalmente y muévase a la nueva región vacía: -
Haga que
screen
enumere todas las ventanas y seleccionevi
para que se muestre en la nueva región vacía: -
Ahora, divida la región actual verticalmente, muévase a la región vacía recién creada y asóciela con una nueva ventana:
-
Termine todas las regiones excepto la actual (recuerde, aunque mate las regiones, las ventanas siguen vivas). Luego, salga de todas las ventanas de la sesión actual hasta que termine la sesión:
-
Finalmente, haga que
screen
liste sus sesiones una vez más, elimine la sesiónssh
restante por PID y verifique que en realidad no quedan sesiones:
-
-
Instale
tmux
en su computadora (nombre del paquete:tmux
) y complete las siguientes tareas:-
Inicie el programa. ¿Qué comando utiliza?
-
Inicie
top
(observe cómo, en un par de segundos, el nombre de la ventana cambia atop
en la barra de estado): -
Usando el prefijo de clave de tmux, abra una nueva ventana; luego, cree
~/.tmux.conf
usandonano
: -
Divida la ventana verticalmente y reduzca el tamaño del panel recién creado varias veces:
-
Ahora cambie el nombre de la ventana actual a
text editing
; luego, haga quetmux
muestre una lista con todas sus sesiones: -
Vaya a la ventana que ejecuta
top
y vuelva a la actual usando la misma combinación de teclas: -
Desconecte la sesión actual y cree una nueva cuyo nombre sea
ssh
y su nombre de ventana seassh window
: -
Desconecte también de la sesión
ssh
y haga quetmux
muestre la lista de sesiones nuevamente:NoteA partir de este punto, el ejercicio requiere que utilice una máquina remota para las conexiones
ssh
a su host local (una máquina virtual es perfectamente válida y puede resultar realmente práctica). Asegúrese de teneropenssh-server
instalado y ejecutándose en su máquina local y que al menosopenssh-client
esté instalado en la máquina remota. -
Ahora, inicie una máquina remota y conéctese a través de
ssh
con su host local. Una vez que se haya establecido la conexión, verifique las sesionestmux
: -
En el host remoto, adjunte a la sesión
ssh
por nombre: -
De vuelta en su máquina local, conéctese a la sesión
ssh
por nombre, asegurándose de que la conexión al host remoto finalice primero: -
Haga que todas las sesiones se muestren para su selección y vaya a su primera sesión (
[0]
). Una vez allí, mate la sesiónssh
por su nombre: -
Finalmente, desconéctese de la sesión actual y elimínela por su nombre:
-
Ejercicios Exploratorios
-
Tanto
screen
comotmux
pueden ingresar al modo de línea de comandos a través de prefijo de comando + : (ya vimos un breve ejemplo contmux
). Investigue un poco y realice las siguientes tareas en el modo de línea de comandos:-
Haga que
screen
entre en el modo de copia: -
Haga que
tmux
cambie el nombre de la ventana actual: -
Haga que
screen
cierre todas las ventanas y finalice la sesión: -
Haga que
tmux
divida un panel en dos: -
Haga que
tmux
elimine la ventana actual:
-
-
Cuando ingresa al modo de copia en
screen
, no solo puede usar las teclas de flecha y PgUP o PgDown para navegar por la ventana actual y el búfer de retroceso. También existe la posibilidad de utilizar un editor de pantalla completa similar a vi. Con este editor, realice las siguientes tareas:-
Echo
supercalifragilisticexpialidocious
en su terminalscreen
: -
Ahora, copie los cinco caracteres consecutivos (de izquierda a derecha) en la línea justo encima de su cursor:
-
Finalmente, pegue la selección (
stice
) en su símbolo del sistema:
-
-
Suponga que desea compartir una sesión
tmux
(our_session
) con otro usuario. Ha creado el socket (/tmp/our_socket
) con los permisos adecuados para que tanto usted como el otro usuario puedan leer y escribir. ¿Qué otras dos condiciones deben cumplirse para que el segundo usuario pueda adjuntar correctamente la sesión a través detmux -S /tmp/our_socket a -t our_session
?
Resumen
En esta lección ha aprendido sobre multiplexores de terminales en general y GNU Screen y tmux en particular. Los conceptos importantes para recordar incluyen:
-
Prefijo de comando:
screen
use Ctrl+a + caracter;tmux
, Ctrl+b + caracter. -
Estructura de sesiones, ventanas y divisiones de ventanas (regiones o paneles).
-
Modo de copia.
-
Separación de sesión: una de las características más potentes de los multiplexores.
Comandos utilizados en esta lección:
screen
-
Inicia una sesión de pantalla.
tmux
-
Inicia una sesión
tmux
.
Respuestas a los ejercicios guiados
-
Indique si las siguientes declaraciones/características corresponden a la GNU Screen, tmux o ambos:
Característica/Declaración GNU Screen tmux El prefijo de comando predeterminado es Ctrl+a
x
Modelo cliente-servidor
x
Los paneles son pseudo-terminales
x
Matar una región no mata sus ventanas asociadas
x
Las sesiones incluyen ventanas
x
x
Las sesiones se pueden separar
x
x
-
Instale GNU Screen en su computadora (nombre del paquete:
screen
) y complete las siguientes tareas:-
Inicie el programa. ¿Qué comando usaría?
screen
-
Inicie
top
:top
-
Usando el prefijo de la tecla de pantalla, abra una nueva ventana; luego, abra
/etc/screenrc
usandovi
:Ctrl+a-c
sudo vi /etc/screenrc
-
Enumere las ventanas en la parte inferior de la pantalla :
Ctrl+a-w
-
Cambie el nombre de la ventana actual a
vi
:Ctrl+a-A. Escriba
vi
y presione enter. -
Cambie el nombre de la ventana restante a
top
. Para hacer eso, primero muestre una lista de todas las ventanas para que pueda moverse hacia arriba y hacia abajo y seleccionar la correcta:Primero teclee Ctrl+a-". Luego usamos las flechas para marcar el que dice
0 bash
y presione enter. Finalmente teclee Ctrl+a-A, escribatop
y presione enter. -
Verifique que los nombres hayan cambiado volviendo a mostrar los nombres de las ventanas en la parte inferior de la pantalla:
Ctrl+a-w
-
Ahora, desvincule la sesión y haga que
screen
cree una nueva llamadassh
:Ctrl+a-d
screen -S "ssh"
y presione enter. -
Desconecte también de
ssh
y haga quescreen
muestre la lista de sesiones:Ctrl+a-d
screen -list
orscreen -ls
. -
Ahora, vincúlelo a la primera sesión usando su PID:
screen -r PID-OF-SESSION
-
Debería estar de vuelta en la ventana que muestra
top
. Divida la ventana horizontalmente y muévase a la nueva región vacía:Ctrl+a-S
Ctrl+a-Tab
-
Haga que
screen
liste todas las ventanas y seleccionevi
para que se muestre en la nueva región vacía:Usaremos Ctrl+a-" para que se muestren todas las ventanas para su selección, marque
vi
y presione enter. -
Ahora, divida la región actual verticalmente, muévase a la región vacía recién creada y asóciela con una nueva ventana:
Ctrl+a-|
Ctrl+a-Tab
Ctrl+a-c
-
Termine todas las regiones excepto la actual (recuerde, aunque mates las regiones, las ventanas siguen vivas). Luego, salga de todas las ventanas de la sesión actual hasta que termine la sesión:
Ctrl+a-Q.
exit
(para salir de Bash). Shift+:, posteriormente tecleequit
y presione enter (para salir devi
). Después, tecleeexit
(para salir del shell de Bash subyacente)q
(para terminartop
); después tecleeexit
(para salir del shell de Bash subyacente). -
Finalmente, haga que
screen
liste sus sesiones una vez más, elimine la sesiónssh
restante por PID y verifique que en realidad no quedan sesiones:screen -list
oscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
oscreen -ls
-
-
Instale
tmux
en su computadora (nombre del paquete:tmux
) y complete las siguientes tareas:-
Inicie el programa. ¿Qué comando usas?
tmux
-
Inicie
top
(observe cómo, en un par de segundos, el nombre de la ventana cambia atop
en la barra de estado):top
-
Usando el prefijo de clave de tmux, abra una nueva ventana; luego, crea
~/.tmux.conf
usandonano
:Ctrl+b-c
nano ~/.tmux.conf
-
Divida la ventana verticalmente y reduzca el tamaño del panel recién creado varias veces:
Ctrl+b-"
Ctrl+b-Ctrl+↓
-
Ahora cambie el nombre de la ventana actual a
text editing
; luego, haga quetmux
muestre una lista con todas sus sesiones:Ctrl+b-,. Luego proporciona el nuevo nombre y presiona enter. Ctrl+b-s o
tmux ls
. -
Vaya a la ventana que ejecuta
top
y vuelva a la actual usando la misma combinación de teclas:Ctrl+b-n or Ctrl+b-p
-
Desconecte de la sesión actual y cree una nueva cuyo nombre sea
ssh
y su nombre de ventana seassh window
:Ctrl+b-d
tmux new -s "ssh" -n "ssh window"
-
Desconecte también de la sesión
ssh
y haga quetmux
muestre la lista de sesiones nuevamente:Ctrl+b-d
tmux ls
NoteA partir de este punto, el ejercicio requiere que utilice una máquina remota para las conexiones
ssh
a su host local (una máquina virtual es perfectamente válida y puede resultar realmente práctica). Asegúrese de teneropenssh-server
instalado y ejecutándose en su máquina local y que al menosopenssh-client
esté instalado en la máquina remota. -
Ahora, inicie una máquina remota y conéctese a través de
ssh
desde su host local. Una vez que se haya establecido la conexión, verifique las sesionestmux
:En un host remoto:
ssh local-username@local-ipaddress
. Una vez que este conectado al equipo local:tmux ls
. -
En el host remoto, adjunte a la sesión
ssh
por nombre:tmux a -t ssh
(a
puede reemplazarse conat
oattach
). -
De vuelta en su máquina local, conéctese a la sesión
ssh
por nombre, asegurándose de que la conexión al host remoto finalice primero:tmux a -d -t ssh
(a
puede ser reemplazarse porat
oattach
). -
Haga que todas las sesiones se muestren para su selección y vaya a su primera sesión (
[0]
). Una vez allí, mata la sesiónssh
por su nombre:Teclee Ctrl+b-s, use las teclas de flecha para marcar la sesión
0
y presione entertmux kill-session -t ssh
. -
Finalmente, desconéctese de la sesión actual y elimínela por su nombre:
Ctrl+b-d
tmux kill-session -t 0
.
-
Respuestas a ejercicios exploratorios
-
Tanto
screen
comotmux
pueden ingresar al modo de línea de comandos a través de prefijo de comando + : (ya vimos un breve ejemplo contmux
). Investigue un poco y realice las siguientes tareas en el modo de línea de comandos:-
Haga que
screen
entre en el modo de copia:Ctrl+a-: — después, teclee
copy
. -
Haga que
tmux
cambie el nombre de la ventana actual:Ctrl+b-: — después, teclee
rename-window
. -
Haga que
screen
cierre todas las ventanas y finalice la sesión:Ctrl+a-: — después, teclee
quit
. -
Haga que
tmux
divida un panel en dos:Ctrl+b-: — después, teclee
split-window
. -
Haga que
tmux
elimine la ventana actual:Ctrl+b-: — después, teclee
kill-window
.
-
-
Cuando ingresa al modo de copia en
screen
, no solo puede usar las teclas de flecha y PgUP o PgDown para navegar por la ventana actual y el búfer de retroceso. También existe la posibilidad de utilizar un editor de pantalla completa similar a vi. Con este editor, realice las siguientes tareas:-
Echo
supercalifragilisticexpialidocious
en su terminalscreen
:echo supercalifragilisticexpialidocious
-
Ahora, copie los cinco caracteres consecutivos (de izquierda a derecha) en la línea justo encima de su cursor:
Ingresamos al modo de copia: Ctrl+a-[ o Ctrl+a-: y luego escribimos
copy
. Luego, nos movemos a la línea de arriba usandok
y presionamos espacio para marcar el comienzo de la selección. Finalmente, avanzamos cuatro caracteres usandol
y presionamos espacio nuevamente para marcar el final de la selección. -
Finalmente, pegue la selección (
stice
) en su símbolo del sistema:Ctrl+a-]
-
-
Suponga que desea compartir una sesión
tmux
(our_session
) con otro usuario. Ha creado el socket (/tmp/our_socket
) con los permisos adecuados para que tanto usted como el otro usuario puedan leer y escribir. ¿Qué otras dos condiciones deben cumplirse para que el segundo usuario pueda adjuntar correctamente la sesión a través detmux -S /tmp/our_socket a -t our_session
?Ambos usuarios deben tener un grupo en común, p. Ej.
multiplexor
. Luego, también debemos cambiar el conector a ese grupo:chgrp multiplexer /tmp/our_socket
.