GNU Screen Survival Guide [cerrado]


¿Qué cree la gente que no son solo las cosas esenciales que necesita saber sobre la excelente utilidad de pantalla, sino las cosas que usted pensaría que vale la pena enseñar a alguien, un principiante, desde cero?

Acabo de presentar a un amigo a la pantalla y están teniendo dificultades para acostumbrarse a ella. Así que analogías y consejos útiles para recordar enlaces, etc. sería increíble.

 103
Author: Glorfindel, 2008-09-16

19 answers

He estado usando screen durante más de 10 años y probablemente use menos de la mitad de las funciones. Así que definitivamente no es necesario aprender todas sus características de inmediato (y no recomendaría intentarlo). Mis órdenes del día a día son:

^A ^W - window list, where am I
^A ^C - create new window
^A space - next window
^A p - previous window
^A ^A - switch to previous screen (toggle)
^A [0-9] - go to window [0-9]
^A esc - copy mode, which I use for scrollback

Creo que eso es todo. A veces uso las funciones de pantalla dividida, pero ciertamente no a diario. El otro consejo es si la pantalla parece haber bloqueado porque golpeó alguna combinación de teclas al azar por accidente, hacer tanto ^Q y ^A ^Q para tratar de desbloquearlo.

 90
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-23 11:05:34

No pude acostumbrarme a la pantalla hasta que encontré una manera de establecer una 'barra de estado' en la parte inferior de la pantalla que muestra en qué 'pestaña' o 'pantalla virtual' estás y cuáles otras hay. Aquí está mi configuración:

[roel@roel ~]$ cat .screenrc
# Here comes the pain...
caption always "%{=b dw}:%{-b dw}:%{=b dk}[ %{-b dw}%{-b dg}$USER%{-b dw}@%{-b dg}%H %{=b dk}] [ %= %?%{-b dg}%-Lw%?%{+b dk}(%{+b dw}%n:%t%{+b dk})%?(%u)%?%{-b dw}%?%{-b dg}%+Lw%? %{=b dk}]%{-b dw}:%{+b dw}:"

backtick 2 5 5 $HOME/scripts/meminfo
hardstatus alwayslastline "%{+b dw}:%{-b dw}:%{+b dk}[%{-b dg} %0C:%s%a %{=b dk}]-[   %{-b dw}Load%{+b dk}:%{-b dg}%l %{+b dk}] [%{-b dg}%2`%{+b dk}] %=[ %{-b dg}%1`%{=b dk} ]%{-b dw}:%{+b dw}:%<"

sorendition "-b dw"
[roel@roel ~]$ cat ~/scripts/meminfo
#!/bin/sh
RAM=`cat /proc/meminfo | grep "MemFree" | awk -F" " '{print $2}'`
SWAP=`cat /proc/meminfo | grep "SwapFree" | awk -F" " '{print $2}'`
echo -n "${RAM}kb/ram ${SWAP}kb/swap"
[roel@roel ~]$
 36
Author: Roel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 10:01:04

Ctrl+A ? - mostrar la pantalla de ayuda!

 30
Author: James Muscat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-20 22:51:24

Si tu amigo tiene la costumbre de presionar ^A para llegar al principio de la línea en bash, se espera algunas sorpresas, ya que ^A es el enlace de teclas de comando de pantalla. Por lo general, termino con una pantalla congelada, posiblemente debido a alguna tecla aleatoria que presioné después ^A :-)

En esos casos intento

^A s y ^A q bloquear / desbloquear desplazamiento de terminal

Para arreglar eso. Para ir al principio de una línea dentro de la pantalla la secuencia de teclas es ^A a

 26
Author: agnul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 09:23:31

Puede reasignar la tecla de escape de ctrl-A para que sea otra tecla de su elección, por lo que si la usa para otra cosa, por ejemplo, para ir al principio de la línea en bash, solo necesita agregar una línea a su ~/.screenrc archivo. Para hacerlo ^b o ^B use:

escape ^bB

Desde la línea de comandos, use nombres de sesiones para mantener varias sesiones bajo control. Utilizo una sesión por tarea, cada una con varias pestañas:

  screen -ls                lists your current screen sessions
  screen -S <name>          creates a new screen session called name
  screen -r <name>          connects to the named screen sessions

Al usar screen solo necesitas unos pocos comandos:

  ^A c          create a new shell
  ^A [0-9]      switch shell
  ^A k          kill the current shell
  ^A d          disconnect from screen
  ^A ?          show the help

An se puede encontrar una excelente referencia rápida aquí. Vale la pena marcar.

 12
Author: Andrew Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-17 17:36:28

Algunos consejos para aquellos que están familiarizados con la pantalla, pero que tienden a no recordar las cosas que leen en la página de manual:

  • Para cambiar el nombre de una ventana de pantalla es muy fácil: ctrl+Un cambio+Un.
  • ¿Te perdiste el último mensaje de la pantalla? ctrl+un ctrl+m se mostrará de nuevo para usted.
  • Si desea ejecutar algo (como seguir un archivo) y que screen le diga cuándo hay un cambio, use ctrl+Un cambio+m en la ventana de destino. Advertencia: le avisará si cambia algo.
  • ¿Desea seleccionar la ventana 15 directamente? Pruebe estos en su archivo .screenrc:
bind  ! select 11
bind  @ select 12
bind \# select 13
bind  $ select 14
bind  % select 15
bind \^ select 16
bind  & select 17
bind  * select 18
bind  ( select 19
bind  ) select 10

Que asigna ctrl+a shift+0 a través de 9 para windows 10 a través de 19.

 7
Author: staticsan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-21 12:30:11

Http://www.debian-administration.org/articles/34

Escribí eso hace un par de años, pero sigue siendo una buena introducción que recibe muchos comentarios positivos.

 6
Author: Steve Kemp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 19:45:11

Yo "debo" añadir esto: añadir

bind s

A su .screenrc, si Usted - como yo - solía usar ventanas divididas, ya que C-a S divide la ventana real, pero C-a s la congela. Así que desactivé el atajo de congelación.

 6
Author: Zsolt Botykai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-01 11:21:49

ctrl+un es una clave especial.

ctrl+a d - [d] etach, dejar programas (irssi?) en el fondo, ir a casa.

ctrl+un c [c]rear una nueva ventana ctrl+un 0-9 cambiar entre ventanas por número

Screen-r-volver a la sesión separada

Que cubre el 90% de los casos de uso. No intente mostrar toda la funcionalidad al mismo tiempo.

 6
Author: tadeusz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-21 12:30:07

Ctrl+A es el comando base

Ctrl+Un N = ir a la ***N***ext pantalla

Ctrl+Un P = ir a la ***P***revious pantalla

Ctrl+Un C = ***C***crear nueva pantalla

Ctrl+Un D = ***D***etach la pantalla

 6
Author: Niko Gunadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-21 12:30:51

No es realmente esencial, no solo relacionado con la pantalla, pero habilitar 256 colores en mi terminal, GNU Screen y Vim mejoraron mi experiencia de pantalla a lo grande (especialmente porque codifico en Vim alrededor de 8 horas al día, hay algunos excelentes esquemas de color amigables para la vista).

 4
Author: jkramer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-08 06:20:05

Hay un trabajo interesante que se está haciendo para obtener una buena configuración de gnu-screen de forma predeterminada en la próxima versión de Ubuntu Server, que incluye el uso de la parte inferior de la pantalla para mostrar todas las ventanas, así como otros detalles útiles de la máquina (como # actualizaciones disponibles y si la máquina necesita un reinicio). Probablemente puede tomar su .screenrc y personalizarlo a sus necesidades.

Los comandos más útiles que tengo en mi .screenrc son los siguientes

shelltitle "$ |bash" # make screen assign window titles automatically
hardstatus alwayslastline "%w" # show all window titles at bottom line of term

De esta manera siempre saber qué ventanas están abiertas, y lo que se está ejecutando en ellos en este momento, también.

 3
Author: David Dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-19 03:47:10

La primera modificación que hago.screenrc es cambiar el comando escape. No a diferencia de muchos de ustedes, no me gusta la secuencia predeterminada Ctrl-A debido a su interferencia con esa funcionalidad fundamental en casi todos los demás contextos. En mi .archivo screenrc, añado:

Escape ' e

Eso es backtick-e.

Esto me permite usar el backtick como la tecla de escape (por ejemplo, para crear una nueva pantalla, presiono backtick-c, detach is backtick-d, backtick-? es ayuda, backtick-backtick es la pantalla anterior, etc.). La única forma de que interfiera (y tuve que romper el hábito) es usar backtick en la línea de comandos para capturar la salida de la ejecución, o pegar cualquier cosa que contenga un backtick. Para el primero, he modificado mi hábito usando la convención BASH command(comando). Para este último, generalmente solo abro otro xterm o desacoplo de la pantalla y luego pego el contenido que contiene el backtick. Finalmente, si deseo insertar un backtick literal, simplemente presiono backtick-e.

 3
Author: Gary Chambers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-21 17:34:30

No puedo recordar a quién le robé esto (alguien en dotfile.org). Lo he modificado ligeramente para ssh:

#!/bin/sh
# scr - Runs a command in a fresh screen
#
# Get the current directory and the name of command

wd=`pwd`
cmd=$1
shift

# We can tell if we are running inside screen by looking
# for the STY environment variable.  If it is not set we
# only need to run the command, but if it is set then
# we need to use screen.

if [ -z "$STY" ]; then
        $cmd $*
else
        # Screen needs to change directory so that
        # relative file names are resolved correctly.
        screen -X chdir $wd

        # Ask screen to run the command
        if [ $cmd == "ssh" ]; then
                screen -X screen -t ""${1##*@}"" $cmd $*
        else
                screen -X screen -t "$cmd $*" $cmd $*
        fi
fi

Luego establezco los siguientes alias de bash:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Abre una nueva pantalla para los alias anteriores e iff usando ssh, cambia el nombre del título de la pantalla con el nombre de host ssh.

Salud z0mbix

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-05 13:27:47

Me gusta configurar una sesión de pantalla con nombres descriptivos para las ventanas. ↑ a Una le permitirá dar un nombre a la ventana actual y ^a " le dará una lista de sus ventanas. Cuando termine, separe la pantalla con ^a d y vuelva a conectarla con screen-R

 2
Author: innaM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-22 19:35:52

Alguien ha publicado una pregunta similar a esta en Error del servidor.

 2
Author: Vagnerr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:13:44

Me gusta usar screen -d -RR para crear/adjuntar automáticamente a una pantalla dada. Creé funciones bash para hacerlo más fácil...

function mkscreen
{
    local add=n

    if [ "$1" == '-a' ]; then
        add=y
        shift;
    fi

    local name=$1;
    shift;
    local command="$*";

    if [ -z "$name" -o -z "$command" ]; then
        echo 'Usage: mkscreen [ -a ] name command

    -a          Add to .bashrc.' 1>&2;
        return 1;
    fi

    if [ $add == y ]; then
        echo "mkscreen $name $command" >> $HOME/.bashrc;
    fi

    alias $name="/usr/bin/screen -d -RR -S $name $command";

    return 0;
}

function rmscreen
{
    local delete=n

    if [ "$1" == '-d' ]; then
        delete=y
        shift;
    fi

    local name=$1;

    if [ -z "$name" ]; then
        echo 'Usage: rmscreen [ -d ] name

    -d          Delete from .bashrc.' 1>&2;
        return 1;
    fi

    if [ $delete == y ]; then
        sed -i -r "/^mkscreen $name .*/d" $HOME/.bashrc;
    fi

    unalias $name;

    return 0;
}

Crean un alias para /usr/bin/screen -d -RR -S $name $command. Por ejemplo, me gusta usar irssi en una sesión de pantalla, así que en mi .bashrc (debajo de esas funciones), tengo:

mkscreen irc /usr/bin/irssi

Entonces puedo simplemente escribir irc en una terminal para entrar en irssi. Si la pantalla 'irc' no existe todavía entonces se crea y/usr/bin / irssi se ejecuta desde ella (que se conecta automáticamente, por supuesto). Si es ya en ejecución, entonces simplemente volver a conectar a ella, separando por la fuerza cualquier otra instancia que ya está conectado a ella. Es bastante bonito.

Otro ejemplo es crear alias de pantalla temporales para perldocs a medida que me encuentro con ellos:

mkscreen perlipc perldoc perlipc
perlipc # Start reading the perldoc, ^A d to detach.
...
# Later, when I'm done reading it, or at least finished
# with the alias, I remove it.
rmscreen perlipc 

La opción-a (debe ser el primer argumento) añade el alias de pantalla a .bashrc (por lo que es persistente) y-d lo elimina (estos pueden ser potencialmente destructivos, por lo que utilizar bajo su propio riesgo). xD

Añadir:

Otro bash-is que encuentro conveniente cuando se trabaja mucho con la pantalla:

alias sls='/usr/bin/screen -ls'

De esa manera puede enumerar sus pantallas con muchas menos pulsaciones de teclas. No se si sls colisiona con cualquier utilidad existente, pero no lo hizo en ese momento en mi sistema, así que lo hice.

 1
Author: bambams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-10 21:13:34

^A A vuelve a la pantalla de la que acaba de venir.

 0
Author: dummy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 10:31:37

^A es un gran char especial para la gente de UNIX, pero si usa la pantalla para hablar con OpenVMS, entonces no ser capaz de ^A lo hará calvo prematuramente. En las máquinas VIRTUALES, si edita un comando DCL antes de la ejecución desde el búfer de historial, el modo de inserción está desactivado (tiene que estar desactivado por algunas razones que no entraré aquí) .. para activarlo de modo que no sobreescriba su comando en lugar de espaciar las cosas, debe presionar ^A

 0
Author: user2146463,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-07 23:19:45