Question

Selon vous, quelles sont les choses essentielles à savoir sur l'excellent utilitaire Screen, mais aussi les choses qui, selon vous, valent la peine d'être enseignées à un débutant?

Je viens de présenter Screen à un ami et ils ont du mal à s’y habituer. Donc, des analogies et des astuces pratiques pour se souvenir de liens, etc. seraient géniaux.

Était-ce utile?

La solution

J'utilise Screen depuis plus de 10 ans et j'utilise probablement moins de la moitié des fonctionnalités. Il n'est donc absolument pas nécessaire de connaître toutes ses fonctionnalités immédiatement (et je ne recommanderais pas d'essayer). Mes commandes au jour le jour sont:

^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

Je pense que c'est ça. J'utilise parfois les fonctionnalités d'écran partagé, mais certainement pas tous les jours. L’autre astuce est que si l’écran semble s’être verrouillé parce que vous avez frappé une combinaison de touches au hasard, faites les deux ^ Q et ^ A ^ Q pour essayer de les déverrouiller.

Autres conseils

Je ne pouvais pas m'habituer à l'écran tant que je n'avais pas trouvé le moyen de définir une "barre d'état" en bas de l'écran indiquant quel "onglet" ou "écran virtuel" vous êtes et quels sont ceux qui existent . Voici ma configuration:

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

Ctrl + A ? - afficher l'écran d'aide!

Si votre ami a l'habitude d'appuyer sur ^ A pour atteindre le début de la ligne en bash, il / elle risque quelques surprises, car ^ A est la liaison de touche d'écran. En général, je me retrouve avec un écran figé, probablement à cause d’une touche aléatoire sur laquelle j’ai appuyé après ^ A :-)

Dans ces cas, j'essaie

^ As et ^ Un q blocage / déblocage du défilement des terminaux

pour résoudre ce problème. Pour aller au début d'une ligne à l'intérieur de l'écran, la séquence de touches est ^ A a

Vous pouvez remapper la touche d'échappement Ctrl-A pour qu'elle soit une autre clé de votre choix. Par conséquent, si vous l'utilisez pour autre chose, par exemple. pour aller au début de la ligne dans bash, il vous suffit d’ajouter une ligne à votre fichier ~ / .screenrc. Pour le faire ^ b ou ^ b, utilisez:

escape ^bB

A partir de la ligne de commande, utilisez name sessions pour garder plusieurs sessions sous contrôle. J'utilise une session par tâche, chacune avec plusieurs onglets:

  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

Lorsque vous utilisez l'écran, vous n'avez besoin que de quelques commandes:

  ^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

Vous trouverez une excellente référence rapide ici . Cela vaut la peine de mettre en favori.

Quelques conseils pour les personnes habituées à l'écran, mais qui ont tendance à ne pas se souvenir des choses lues dans la page de manuel:

  • Changer le nom d'une fenêtre d'écran est très simple: ctrl + A shift + A .
  • Avez-vous manqué le dernier message de l'écran? ctrl + a ctrl + m l'affichera à nouveau pour vous.
  • Si vous souhaitez exécuter quelque chose (comme un fichier de fichier) et que l'écran vous le prévienne en cas de changement, utilisez ctrl + A shift + m dans la fenêtre cible. Attention: cela vous permettra de savoir si quelque chose change.
  • Voulez-vous sélectionner la fenêtre 15 directement? Essayez-les dans votre fichier .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

Cela attribue ctrl + à shift + 0 à 9 pour les fenêtres 10 à 19.

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

J'ai écrit cela il y a quelques années, mais c'est toujours une bonne introduction qui suscite beaucoup de retours positifs.

Je "dois" ajoutez ceci: ajoutez

bind s

vers votre .screenrc , si vous - comme moi - utilisiez autrefois des fenêtres divisées, car Ca S divise la fenêtre réelle, mais Ca s le gèle. Je viens donc de désactiver le raccourci gel.

ctrl + a est une clé spéciale.

ctrl + a d - [d] etach, laissez les programmes (irssi?) en arrière-plan, allez à la maison.

ctrl + a c [c] créer une nouvelle fenêtre ctrl + a 0-9 basculer entre les fenêtres par leur numéro

screen -r - revenir à la session détachée

Cela couvre 90% des cas d'utilisation. N'essayez pas de montrer toutes les fonctionnalités à la fois.

Ctrl + A est la commande de base

Ctrl + A N = aller à l'écran *** N *** ext

Ctrl + A P = aller à l'écran de révocation *** P ***

Ctrl + A C = *** C *** créer un nouvel écran

Ctrl + A D = *** D *** attachez votre écran

Pas vraiment essentiel, pas uniquement lié à screen, mais permettant 256 couleurs dans mon terminal, GNU Screen et Vim ont considérablement amélioré mon expérience de l'écran (surtout depuis que je code dans Vim environ 8h par jour - il existe de superbes jeux de couleurs agréables pour les yeux).

Il y a des travaux intéressants . Cela est fait par défaut pour obtenir une bonne configuration d’écran gnu dans la prochaine version du serveur Ubuntu, qui inclut l’utilisation du bas de l’écran pour afficher toutes les fenêtres ainsi que d’autres informations utiles sur la machine (comme le nombre de mises à jour disponibles et si la besoin d'un redémarrage). Vous pouvez probablement récupérer leur .screenrc et le personnaliser selon vos besoins.

Les commandes les plus utiles que j'ai dans mon .screenrc sont les suivantes

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

De cette façon, je sais toujours quelles fenêtres sont ouvertes et ce qui les exécute actuellement.

La première modification apportée à .screenrc consiste à modifier la commande d'échappement. Contrairement à beaucoup d'entre vous, je n'aime pas la séquence par défaut Ctrl-A en raison de son interférence avec cette fonctionnalité fondamentale dans presque tous les autres contextes. Dans mon fichier .screenrc, j'ajoute:

échapper à e

C'est un backtick-e.

Cela me permet d'utiliser le backtick comme touche d'échappement (par exemple, pour créer un nouvel écran, appuyer sur backtick-c, détacher est backtick-d, backtick-? help, backtick-backtick est l'écran précédent, etc.) . La seule manière pour que cela interfère (et je devais me défaire de l'habitude) consiste à utiliser un backtick sur la ligne de commande pour capturer la sortie de l'exécution, ou à coller tout ce qui contient un backtick. Pour les premiers, j'ai modifié mon habitude en utilisant la convention BASH $ (commande). Pour ces derniers, je viens généralement d’ouvrir un autre xterm ou de me détacher de l’écran, puis de coller le contenu contenant le backtick. Enfin, si je souhaite insérer un backtick au sens littéral, j’appuie simplement sur backtick-e.

Je ne me souviens plus de qui j'ai volé ça (quelqu'un sur dotfile.org). Je l'ai légèrement modifié pour 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

Ensuite, je définis les alias Bash suivants:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Il ouvre un nouvel écran pour les alias ci-dessus. Si vous utilisez ssh, il renomme le titre de l'écran avec le nom d'hôte ssh.

Cheers z0mbix

J'aime configurer une session d'écran avec des noms descriptifs pour les fenêtres. ^ Un A vous permettra de donner un nom à la fenêtre en cours et ^ un " vous donnera une liste de vos fenêtres. Une fois terminé, détachez l'écran avec ^ a d et rattachez-le avec screen -R

Quelqu'un a posé une question similaire à celle-ci sur la défaillance du serveur .

J'aime utiliser screen -d -RR pour créer / joindre automatiquement à un écran donné. J'ai créé des fonctions bash pour faciliter les choses ...

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;
}

Ils créent un alias pour / usr / bin / screen -d -RR -S $ nom $ commande . Par exemple, j'aime utiliser irssi dans une session d'écran. Ainsi, dans mon .bashrc (sous ces fonctions), j'ai:

mkscreen irc /usr/bin/irssi

Ensuite, je peux simplement taper irc dans un terminal pour entrer dans irssi. Si l'écran 'irc' n'existe pas encore, il est créé et / usr / bin / irssi est exécuté à partir de celui-ci (qui se connecte automatiquement, bien sûr). S'il est déjà en cours d'exécution, je m'y attache simplement et détache de force toute autre instance qui y est déjà attachée. C'est assez sympa.

Un autre exemple est la création d'alias d'écran temporaires pour perldocs lorsque je les rencontre:

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 

L'option -a (doit être le premier argument) ajoute l'alias d'écran à .bashrc (il est donc persistant) et -d le supprime (ils peuvent potentiellement être destructeurs, utilisez donc à vos risques et périls). xD

Ajouter

Un autre bash-isme que je trouve pratique lorsque je travaille beaucoup avec screen:

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

De cette façon, vous pouvez répertorier vos écrans avec beaucoup moins de frappes au clavier. Je ne sais pas si sls est en conflit avec des utilitaires existants, mais ce n'était pas le cas à ce moment-là sur mon système, alors je me suis lancé.

^ A A revient à l'écran d'origine.

^ A est un excellent caractère spécial pour les utilisateurs UNIX, mais si vous utilisez un écran pour parler à OpenVMS, ne pas être en mesure de ^ A vous rendra chauve prématurément. Dans VMS, si vous modifiez une commande DCL avant l'exécution à partir du tampon d'historique, le mode Insertion est désactivé (pour des raisons que je ne rentrerai pas ici) .. pour l'activer afin de ne pas trop tapez votre commande plutôt que d'espacer les choses, vous devez appuyer sur ^ A

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top