Qu'est-ce que les gens pensent non seulement des choses essentielles que vous devez savoir sur l'excellent utilitaire Screen, mais des choses que vous penseriez utiles d'enseigner à quelqu'un, un débutant, à partir de zéro?
Je viens de présenter un ami à Screen et ils ont du mal à s'y habituer. Les analogies et les conseils pratiques pour se souvenir des liens, etc. seraient géniaux.
J'utilise l'écran depuis plus de 10 ans et j'utilise probablement moins de la moitié des fonctionnalités. Il n'est donc certainement pas nécessaire d'apprendre immédiatement toutes ses fonctionnalités (et je ne recommanderais pas d'essayer). Mes commandes quotidiennes 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 de l'écran partagé, mais certainement pas quotidiennement. L'autre astuce est que si l'écran semble s'être verrouillé parce que vous avez frappé une combinaison de touches aléatoire par accident, faites les deux ^ Q et ^ A ^ Q pour essayer de le déverrouiller.
Je ne pouvais pas m'habituer à filtrer jusqu'à ce que je trouve un moyen de définir une `` barre d'état '' au bas de l'écran qui montre quel `` onglet '' ou `` écran virtuel '' sur lequel vous vous trouvez et quels autres il y a. 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 ? - affichez l'écran d'aide!
Si votre ami a l'habitude d'appuyer sur ^A
pour arriver au début de la ligne en bash, il/elle va avoir quelques surprises, puisque ^A
est la liaison de la touche de commande d'écran. Habituellement, 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
^A s
et ^A q
bloquer/débloquer le défilement du terminal
pour arranger ça. 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 de ctrl-A pour qu'elle soit une autre clé de votre choix, donc si vous l'utilisez pour autre chose, par ex. pour aller au début de la ligne dans bash, il vous suffit d'ajouter une ligne à votre fichier ~/.screenrc. Pour le rendre ^ b ou ^ B, utilisez:
escape ^bB
À partir de la ligne de commande, utilisez des sessions de noms pour garder plusieurs sessions sous contrôle. J'utilise une session par tâche, chacune avec plusieurs onglets:
écran -ls répertorie vos sessions d'écran actuelles écran -S <nom> crée une nouvelle session d'écran appelée nom écran -r <nom> se connecte aux sessions d'écran nommées
Lorsque vous utilisez l'écran, vous n'avez besoin que de quelques commandes:
^ A c créer un nouveau Shell ^ A [0-9] Switch Shell ^ A k tuer le Shell actuel ^ A d se déconnecter de l'écran ^ A? montrer l'aide
Une excellente référence rapide peut être trouvée ici . Vaut le bookmarking.
Quelques conseils pour ceux qui connaissent un peu l'écran, mais qui ont tendance à ne pas se souvenir des choses qu'ils lisent dans la page de manuel:
.screenrc
fichier: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
Qui attribue ctrl+ashift+0 through 9 pour les fenêtres 10 à 19.
ctrl+a est une clé spéciale.
ctrl+ad - [d] etach, laisse les programmes (irssi?) en arrière-plan, rentre chez toi.
ctrl+ac [c] recrée une nouvelle fenêtre ctrl+a0-9 basculer entre les fenêtres par numéro
screen -r - retour à la session détachée
Cela couvre 90% des cas d'utilisation. N'essayez pas de montrer toutes les fonctionnalités en même temps.
Ctrl+A est la commande de base
Ctrl+AN = aller à l'écran *** N *** ext
Ctrl+AP = aller à l'écran *** P *** revious
Ctrl+AC = *** C *** recréer un nouvel écran
Ctrl+AD = *** D *** etachez votre écran
http://www.debian-administration.org/articles/34
Je l'ai écrit il y a quelques années, mais c'est toujours une bonne introduction qui reçoit beaucoup de commentaires positifs.
Je "dois" ajouter ceci: ajouter
bind s
à ton .screenrc
, si vous - comme moi - utilisiez des fenêtres fractionnées, comme C-a S
divise la fenêtre réelle, mais C-a s
le fige. Je viens donc de désactiver le raccourci de gel.
Pas vraiment essentiel non seulement lié à l'écran, mais permettant 256 couleurs dans mon terminal, GNU Screen et Vim a amélioré mon expérience d'écran grand temps (surtout depuis que je code dans Vim environ 8h par jour - il y a de très bons thèmes de couleurs pour les yeux).
Il y a travail intéressant en cours pour obtenir une bonne configuration d'écran gnu par défaut dans la prochaine version d'Ubuntu Server, qui inclut l'utilisation du bas de l'écran pour afficher toutes les fenêtres ainsi que d'autres détails utiles de la machine (comme # mises à jour disponibles et si la machine a besoin d'un redémarrage). Vous pouvez probablement saisir leur .screenrc
et personnalisez-le selon vos besoins.
Les commandes les plus utiles que j'ai dans mon .screenrc
sont les suivants
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 y fonctionne en ce moment aussi.
La première modification que j'apporte à .screenrc est de changer la commande d'échappement. Contrairement à beaucoup d'entre vous, je n'aime pas la séquence Ctrl-A par défaut en raison de son interférence avec cette fonctionnalité fondamentale dans presque tous les autres contextes. Dans mon fichier .screenrc, j'ajoute:
s'échapper `e
C'est backtick-e.
Cela me permet d'utiliser le backtick comme touche d'échappement (par exemple, pour créer un nouvel écran, j'appuie sur backtick-c, detach est backtick-d, backtick-? Is help, backtick-backtick est l'écran précédent, etc.). La seule façon dont cela interfère (et j'ai dû me débarrasser de l'habitude) consiste à utiliser le backtick sur la ligne de commande pour capturer la sortie de l'exécution ou à coller tout ce qui contient un backtick. Pour le premier, j'ai modifié mon habitude en utilisant la convention BASH $ (commande). Pour ce dernier, 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 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, j'ai défini 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 et iff en utilisant ssh, il renomme le titre de l'écran avec le nom d'hôte ssh.
Cheers z0mbix
J'aime mettre en place une session d'écran avec des noms descriptifs pour les fenêtres. ^ a A vous permettra de donner un nom à la fenêtre actuelle et ^ a "vous donnera une liste de vos fenêtres. Une fois terminé, détachez l'écran avec ^ a d et rattachez-le avec l'écran -R
Quelqu'un a posté une question similaire à cela sur Server Fault .
J'aime utiliser screen -d -RR
pour créer/attacher automatiquement à un écran donné. J'ai créé des fonctions bash pour le rendre plus facile ...
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 $name $command
. Par exemple, j'aime utiliser irssi dans une session écran, donc 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é depuis celui-ci (qui se connecte automatiquement, bien sûr). S'il est déjà en cours d'exécution, je le rattache simplement, en détachant de force toute autre instance qui lui est déjà attachée. C'est assez sympa.
Un autre exemple est la création d'alias d'écran temporaires pour les 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 (donc il est persistant) et -d le supprime (ceux-ci peuvent potentiellement être destructeurs, donc utilisez à vos risques et périls). xD
Ajouter:
Un autre bashisme que je trouve pratique lorsque je travaille beaucoup avec l'écran:
alias sls='/usr/bin/screen -ls'
De cette façon, vous pouvez répertorier vos écrans avec beaucoup moins de touches. Je ne sais pas si sls
entre en collision avec des utilitaires existants, mais ce n'était pas le cas à l'époque sur mon système, alors j'y suis allé.
^ A est un excellent caractère spécial pour les personnes UNIX, mais si votre écran utilise pour parler à OpenVMS, alors ne pas pouvoir ^ A va vous rendre 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é (doit être pour plusieurs raisons que je n'entrerai 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
^ A A revient à l'écran d'où vous venez.