Pregunta

¿Cuáles cree la gente que son no sólo las cosas esenciales que necesitas saber sobre la excelente utilidad Screen, sino también las cosas que crees que vale la pena enseñarle a alguien, un principiante, desde cero?

Acabo de presentarle Screen a un amigo y le está costando acostumbrarse.Entonces analogías y consejos útiles para recordar enlaces, etc.sería grandioso.

¿Fue útil?

Solución

He estado usando Screen durante más de 10 años y probablemente uso menos de la mitad de las funciones.Por lo tanto, definitivamente no es necesario aprender todas sus funciones de inmediato (y no recomendaría intentarlo).Mis comandos 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 que si la pantalla parece haberse bloqueado porque presionaste alguna combinación de teclas aleatoria por accidente, haz ^Q y ^A ^Q para intentar desbloquearla.

Otros consejos

No pude acostumbrarme a la pantalla hasta que encontré una manera de configurar 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 hay.He aquí mi arreglo:

[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 ~]$

Control+A ?- ¡muestra la pantalla de ayuda!

Si tu amigo tiene la costumbre de presionar ^A para llegar al principio de la línea en bash, se encontrará con algunas sorpresas, ya que ^A es la combinación de teclas del comando de pantalla.Generalmente termino con una pantalla congelada, posiblemente debido a alguna tecla aleatoria que presioné después ^A :-)

En esos casos lo intento

^A s y ^A q bloquear/desbloquear el desplazamiento del terminal

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

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

escape ^bB

Desde la línea de comando, 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

Cuando usas la pantalla solo necesitas algunos 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

Se puede encontrar una excelente referencia rápida. aquí.Vale la pena marcarlo como favorito.

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

  • Cambiar el nombre de una ventana de pantalla es muy fácil: control+A cambio+A.
  • ¿Te perdiste el último mensaje de la pantalla? control+a control+metro Se lo mostraré nuevamente.
  • Si desea ejecutar algo (como seguir un archivo) y que la pantalla le indique cuándo hay un cambio, use control+A cambio+metro en la ventana de destino.Advertencia:te avisará si cualquier cosa cambios.
  • ¿Quiere seleccionar la ventana 15 directamente?Pruebe estos en su .screenrc archivo:
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 control+a cambio+0 a 9 para ventanas 10 a 19.

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

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

"Debo" agregar esto:agregar

bind s

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

control+a es una clave especial.

control+a d - [d]each, dejar los programas (¿irssi?) en segundo plano, volver a casa.

control+a C [c]rear una nueva ventanacontrol+a 0-9 cambiar entre ventanas por número

pantalla -r - volver a la sesión separada

Eso cubre el 90% de los casos de uso.No intente mostrar todas las funciones a la vez.

Control+A es el comando base

Control+A norte = ir a la ***N***pantalla siguiente

Control+A PAG = ir a la ***P***pantalla anterior

Control+A C = ***C***crear nueva pantalla

Control+A D = ***D***separa tu pantalla

No es realmente esencial, no sólo en relación con la pantalla, sino habilitando 256 colores en mi terminal, GNU Screen y Vim Mejoré mi experiencia de pantalla a lo grande (especialmente porque codifico en Vim aproximadamente 8 horas al día; hay algunos esquemas de colores excelentes y agradables a la vista).

hay algunos trabajo interesante Se está haciendo para obtener una buena configuración de pantalla gnu de forma predeterminada en la próxima versión de Ubuntu Server, lo 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 el número de actualizaciones disponibles y si la máquina necesita reiniciar).Probablemente puedas agarrar su .screenrc y personalízalo según tus 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 sé qué ventanas están abiertas y qué se está ejecutando en ellas en ese momento también.

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

escapar `e

Eso es comilla invertida.

Esto me permite utilizar la comilla invertida como tecla de escape (p. ej.para crear una nueva pantalla, presiono backtick-c, separar es backtick-d, backtick-?es ayuda, backtick-backtick es la pantalla anterior, etc.).La única forma en que interfiere (y tuve que dejar el hábito) es usar un acento grave en la línea de comando para capturar el resultado de la ejecución o pegar cualquier cosa que contenga un acento grave.Para el primero, modifiqué mi hábito usando la convención BASH $(comando).Para este último, normalmente abro otro xterm o lo separo de la pantalla y luego pego el contenido que contiene la comilla invertida.Finalmente, si deseo insertar una comilla invertida literal, simplemente presiono comillas invertidas-e.

No recuerdo a quién le robé esto (alguien en dotfile.org).Lo modifiqué 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 configuro 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 y, si usa ssh, cambia el nombre del título de la pantalla con el nombre de host ssh.

Saludos z0mbix

Me gusta configurar una sesión de pantalla con nombres descriptivos para las ventanas.^a A le permitirá darle 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

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

me gusta usar screen -d -RR para crear/adjuntar automáticamente a una pantalla determinada.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, por lo que en mi .bashrc (debajo de esas funciones), tengo:

mkscreen irc /usr/bin/irssi

Entonces puedo simplemente escribir irc en una terminal para entrar a irssi.Si la pantalla 'irc' aún no existe, se crea y se ejecuta /usr/bin/irssi desde ella (que se conecta automáticamente, por supuesto).Si ya se está ejecutando, simplemente lo vuelvo a conectar, desconectando a la fuerza cualquier otra instancia que ya esté adjunta.Es bastante bonito.

Otro ejemplo es la creación de alias de pantalla temporales para perldocs a medida que los encuentro:

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) agrega el alias de pantalla a .bashrc (por lo que es persistente) y -d lo elimina (estos pueden ser potencialmente destructivos, así que utilícelos bajo su propia responsabilidad).xDD

Adjuntar:

Otro bashismo que encuentro conveniente cuando trabajo 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 choca con cualquier utilidad existente, pero no lo hizo en ese momento en mi sistema, así que lo intenté.

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

^A es un gran carácter especial para la gente de UNIX, pero si usas la pantalla para hablar con OpenVMS, entonces no poder ^A te dejará calvo prematuramente.En VMS, si está editando un comando DCL antes de la ejecución desde el búfer de historial, el modo Insertar está desactivado (tiene que estarlo por algunas razones que no abordaré aquí).para activarlo y no escribir demasiado el comando en lugar de espaciar las cosas, debes presionar ^A

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top