Guide de survie de l'écran GNU [fermé]
-
09-06-2019 - |
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.
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