it-swarm-eu.dev

GNU Screen Survival Guide

Was denken die Leute, sind nicht nur die wesentlichen Dinge, die Sie über das hervorragende Bildschirm-Dienstprogramm wissen müssen, sondern auch die Dinge, die Sie für wertvoll halten, um jemanden, einen Anfänger, von Grund auf zu unterrichten?

Ich habe gerade einen Freund mit Screen bekannt gemacht, an den sie sich nur schwer gewöhnen können. Analogien und nützliche Tipps zum Speichern von Bindungen usw. wären also fantastisch.

106
Henry B

Ich benutze Bildschirm seit über 10 Jahren und benutze wahrscheinlich weniger als die Hälfte der Funktionen. Es ist also definitiv nicht notwendig, alle Funktionen sofort zu erlernen (und ich würde es nicht empfehlen, es zu versuchen). Meine täglichen Befehle sind:

^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

Ich denke das ist es. Ich benutze manchmal die Split-Screen-Funktionen, aber sicherlich nicht täglich. Der andere Tipp ist, wenn der Bildschirm blockiert zu sein scheint, weil Sie versehentlich eine zufällige Tastenkombination gedrückt haben, versuchen Sie es mit ^ Q und ^ A ^ Q.

91
Greg Hewgill

Ich habe mich erst an den Bildschirm gewöhnt, als ich eine Möglichkeit gefunden habe, eine Statusleiste am unteren Bildschirmrand einzurichten, die anzeigt, auf welcher Registerkarte oder auf welchem ​​virtuellen Bildschirm Sie sich befinden und auf welchen anderen. Hier ist mein Setup:

[[email protected] ~]$ 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"
[[email protected] ~]$ 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"
[[email protected] ~]$
36
Roel

Ctrl+A ? - Hilfebildschirm anzeigen!

30
James Muscat

Wenn Ihr Freund es gewohnt ist, ^A Zu drücken, um in der Bash an den Anfang der Zeile zu gelangen, ist er/sie mit einigen Überraschungen konfrontiert, da ^A Die Bildschirmbefehlstastenbindung ist. Normalerweise bekomme ich einen eingefrorenen Bildschirm, möglicherweise aufgrund einer zufälligen Taste, die ich nach ^A Gedrückt habe :-)

In solchen Fällen versuche ich es

^A s Und ^A q Blockieren/entsperren das Scrollen des Terminals

um das zu beheben. Um zum Anfang einer Zeile innerhalb des Bildschirms zu gelangen, lautet die Tastenfolge ^A a

26
agnul

Sie können die Escape-Taste von Strg-A neu zuordnen, um eine andere Taste Ihrer Wahl zu sein. Wenn Sie sie also für einen anderen Zweck verwenden, z. Um in Bash an den Anfang der Zeile zu gelangen, müssen Sie Ihrer ~/.screenrc-Datei lediglich eine Zeile hinzufügen. Um es zu machen, benutze ^ b oder ^ B:

escape ^bB

Verwenden Sie in der Befehlszeile Namesitzungen, um mehrere Sitzungen unter Kontrolle zu halten. Ich verwende eine Sitzung pro Aufgabe mit jeweils mehreren Registerkarten:

 screen -ls listet Ihre aktuellen Bildschirmsitzungen auf 
 screen -S <name> erstellt eine neue Bildschirmsitzung mit dem Namen name 
 screen -r <name> stellt eine Verbindung zu den genannten Bildschirmsitzungen her 

Wenn Sie den Bildschirm benutzen, brauchen Sie nur ein paar Befehle:

 ^ A c eine neue Shell erstellen 
 ^ A [0-9] Shell wechseln 
 ^ A k die aktuelle Shell beenden 
 ^ A d vom Bildschirm trennen 
 ^ A? zeige die Hilfe 

Eine hervorragende Kurzreferenz finden Sie hier . Es lohnt sich zu bookmarken.

12
Andrew Johnson

Einige Tipps für diejenigen, die mit dem Bildschirm vertraut sind, sich aber nicht an die in der Manpage gelesenen Dinge erinnern:

  • Den Namen eines Bildschirmfensters zu ändern ist sehr einfach: ctrl+Ashift+A.
  • Haben Sie die letzte Meldung auf dem Bildschirm verpasst? ctrl+actrl+m werde es dir nochmal zeigen.
  • Wenn Sie etwas ausführen möchten (z. B. eine Datei verfolgen) und vom Bildschirm erfahren möchten, wann sich etwas ändert, verwenden Sie ctrl+Ashift+m auf dem Zielfenster. Warnung: Sie werden informiert, wenn sich irgendetwas ändert.
  • Möchten Sie Fenster 15 direkt auswählen? Probieren Sie diese in Ihrem .screenrc Datei:
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

Das ordnet zu ctrl+ashift+0 through 9 für Windows 10 bis 19.

8
staticsan

ctrl+a ist ein spezieller Schlüssel.

ctrl+ad - [d] etach, Programme (irssi?) im Hintergrund lassen, nach Hause gehen.

ctrl+ac [c] öffne ein neues Fenster ctrl+a0-9 Umschalten zwischen Fenstern nach Nummer

screen -r - Kehrt zur getrennten Sitzung zurück

Das deckt 90% der Anwendungsfälle ab. Versuchen Sie nicht, alle Funktionen gleichzeitig anzuzeigen.

6
tadeusz

Ctrl+A ist der Basisbefehl

Ctrl+AN = gehe zum *** N *** ext Bildschirm

Ctrl+AP = gehe zum vorherigen Bildschirm

Ctrl+AC = *** C *** reate neuen Bildschirm

Ctrl+AD = Befestigen Sie Ihren Bildschirm

6
Niko Gunadi

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

Ich habe das vor ein paar Jahren geschrieben, aber es ist immer noch eine gute Einführung, die viele positive Rückmeldungen bekommt.

6
user14038

Ich muss dies hinzufügen: hinzufügen

bind s

zu deinem .screenrc, wenn Sie - wie ich - geteilte Fenster verwendet haben, als C-a S teilt das aktuelle Fenster, aber C-a s friert es ein. Also habe ich nur die Freeze-Verknüpfung deaktiviert.

6
Zsolt Botykai

Nicht wirklich wichtig, nicht nur in Bezug auf Bildschirm, sondern 256 Farben in meinem Terminal aktivieren, GNU Bildschirm und Vim mein Bildschirmerlebnis erheblich verbessert (vor allem, da ich in Vim programmiere) ca. 8h pro Tag - es gibt einige tolle augenfreundliche Farbschemata).

4
jkramer

In der nächsten Version von Ubuntu Server gibt es einige interessante Arbeit Schritte, um ein gutes Gnu-Bildschirm-Setup zu erreichen. Dazu gehört, dass am unteren Bildschirmrand alle Fenster und andere angezeigt werden nützliche Maschinendetails (wie # verfügbare Aktualisierungen und ob die Maschine einen Neustart benötigt). Sie können wahrscheinlich ihren .screenrc Nehmen und ihn an Ihre Bedürfnisse anpassen.

Die nützlichsten Befehle, die ich in meinem .screenrc Habe, sind die folgenden

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

Auf diese Weise weiß ich immer, welche Fenster geöffnet sind und was gerade in ihnen läuft.

3
David Dean

Die erste Änderung, die ich an .screenrc vornehme, besteht darin, den Escape-Befehl zu ändern. Nicht anders als viele von Ihnen mag ich die Standard-Strg-A-Sequenz nicht, da sie diese grundlegende Funktionalität in fast jedem anderen Kontext beeinträchtigt. In meiner .screenrc-Datei füge ich hinzu:

flucht `e

Das ist backtick-e.

Dies ermöglicht mir, das Backtick als Escape-Taste zu verwenden (z. B. um einen neuen Bildschirm zu erstellen, drücke ich backtick-c, entferne das Backtick-d, backtick-? Ist Hilfe, backtick-backtick ist der vorherige Bildschirm usw.). Die einzige Möglichkeit, die dies stört (und ich musste mich von der Gewohnheit lösen), ist die Verwendung von Backtick in der Befehlszeile, um die Ausführungsausgabe zu erfassen, oder das Einfügen von Elementen, die Backtick enthalten. Bei ersteren habe ich meine Gewohnheit mithilfe der BASH $ (Befehls-) Konvention geändert. Für letzteres öffne ich normalerweise einfach ein anderes xterm oder entferne mich vom Bildschirm und füge dann den Inhalt mit dem Backtick ein. Wenn ich ein Backtick einfügen möchte, drücke ich einfach backtick-e.

3
Gary Chambers

Ich kann mich nicht erinnern, wem ich das gestohlen habe (jemand auf dotfile.org). Ich habe es für ssh leicht modifiziert:

#!/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

Dann habe ich folgende Bash-Aliase gesetzt:

vim() {
        scr vim $*
}

man() {
        scr man $*
}

info() {
        scr info $*
}

watch() {
        scr watch $*
}

ssh() {
        scr ssh $*
}

Es öffnet sich ein neuer Bildschirm für die oben genannten Aliase und wenn ssh verwendet wird, wird der Bildschirmtitel mit dem ssh-Hostnamen umbenannt.

Prost z0mbix

3
user203445

Ich möchte eine Bildschirmsitzung mit beschreibenden Namen für die Fenster einrichten. Mit ^ a A können Sie dem aktuellen Fenster einen Namen geben und mit ^ a "erhalten Sie eine Liste Ihrer Fenster. Wenn Sie fertig sind, entfernen Sie den Bildschirm mit ^ a d und hängen Sie ihn mit screen -R wieder an

2
innaM

Eine ähnliche Frage hat jemand am Serverfehler gestellt.

2
Vagnerr

Ich benutze gerne screen -d -RR, um einen bestimmten Bildschirm automatisch zu erstellen/anzuhängen. Ich habe Bash-Funktionen erstellt, um es einfacher zu machen ...

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

Sie erstellen einen Alias ​​für /usr/bin/screen -d -RR -S $name $command. Zum Beispiel verwende ich irssi gerne in einer Bildschirmsitzung. In meinem .bashrc (unter diesen Funktionen) habe ich also:

mkscreen irc /usr/bin/irssi

Dann kann ich einfach irc in ein Terminal eingeben, um in irssi zu gelangen. Wenn der Bildschirm 'irc' noch nicht existiert, wird er erstellt und/usr/bin/irssi ausgeführt (was sich natürlich automatisch verbindet). Wenn es bereits ausgeführt wird, stelle ich nur eine erneute Verbindung her, indem ich jede andere Instanz, die bereits mit ihm verbunden ist, zwangsweise trenne. Es ist ganz nett.

Ein weiteres Beispiel ist das Erstellen temporärer Bildschirmaliase für Perldocs, wenn ich auf sie stoße:

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 

Die Option -a (muss das erste Argument sein) fügt den Aliasnamen des Bildschirms an .bashrc an (bleibt also bestehen) und -d entfernt ihn (diese können möglicherweise destruktiv sein, verwenden Sie sie also auf eigenes Risiko). xD

Anhängen:

Ein weiterer Bash-Ismus, den ich für die Arbeit mit dem Bildschirm als nützlich empfinde:

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

Auf diese Weise können Sie Ihre Bildschirme mit viel weniger Tastenanschlägen auflisten. Ich weiß nicht, ob sls mit vorhandenen Dienstprogrammen kollidiert, aber es war zu der Zeit auf meinem System nicht so, dass ich es gewählt habe.

1
bambams

^ A ist ein großartiger Sondercharakter für UNIX-Benutzer, aber wenn Sie den Bildschirm verwenden, um mit OpenVMS zu kommunizieren, führt die Tatsache, dass Sie nicht in der Lage sind, ^ A zu einer vorzeitigen Glatze. Wenn Sie in VMS einen DCL-Befehl vor der Ausführung aus dem Verlaufspuffer bearbeiten, ist der Einfügemodus deaktiviert (dies muss aus einigen Gründen geschehen, auf die ich hier nicht näher eingehen möchte). Geben Sie Ihren Befehl ein, anstatt die Leertaste zu drücken, und drücken Sie ^ A

0
user2146463

^ A A schaltet auf den Bildschirm zurück, von dem Sie gerade gekommen sind.

0
dummy