Co se stane, když se připojíte ke vzdálenému systému pomocí dlouho běžícího programu a pak připojení přestane fungovat? Pravděpodobnost je minimálně, že budete muset restartovat program a v nejhorším případě budete mít poškození dat. Abychom tomu pomohli obejít, některé programy běží v prostředí okna v systému. Velmi základním příkladem je screen
program:
[pgervase@pgervase ~]$ ssh [email protected]
X11 forwarding request failed on channel 0
Last login: Wed Jan 27 12:10:06 2021 from xxxxxxxx.redhat.com
[root@rhel7dev ~]# screen
Tím se otevře můj nový shell na rhel7dev
Systém. Spustím ping
příkaz níže zevnitř této relace:
[root@rhel7dev ~]# ping www.google.com
PING www.google.com (74.125.24.147) 56(84) bytes of data.
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=1 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=2 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=3 ttl=100 time=242 ms
Nyní ukážu, jak se odpojit od relace a simulovat výpadek sítě nebo jednoduše nechat něco běžet přes noc. Chcete-li to provést, stiskněte Ctrl , podržte tuto klávesu a poté stiskněte A a poté stiskněte D . To mě přivádí zpět k výchozímu příkazu SSH a pak jsem schopen spustit screen -ls
k zobrazení mé oddělené relace:
[root@rhel7dev ~]# screen -x
[detached from 25665.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There is a screen on:
25665.pts-0.rhel7dev (Detached)
1 Socket in /var/run/screen/S-root.
[root@rhel7dev ~]#
[ Mohlo by se vám také líbit: Práce s kanály na příkazovém řádku systému Linux ]
Pro obnovení relace obrazovky napíšu screen -x
protože bylo možné pouze jedno sezení. To mě přivedlo zpět k relaci obrazovky, kde byl ping
příkaz stále běží:
[root@rhel7dev ~]# ping www.google.com
PING www.google.com (74.125.24.147) 56(84) bytes of data.
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=1 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=2 ttl=100 time=242 ms
<snipped>
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=19 ttl=100 time=242 ms
64 bytes from 74.125.24.147 (74.125.24.147): icmp_seq=20 ttl=100 time=242 ms
^C
--- www.google.com ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 20278ms
rtt min/avg/max/mdev = 242.105/242.197/242.727/0.576 ms
[root@rhel7dev ~]#
Mohu mít více relací obrazovky najednou:
[root@rhel7dev ~]# screen -ls
There is a screen on:
25665.pts-0.rhel7dev (Detached)
1 Socket in /var/run/screen/S-root.
[root@rhel7dev ~]# screen
[detached from 25693.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There are screens on:
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
2 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]# screen
[detached from 25706.pts-0.rhel7dev]
[root@rhel7dev ~]# screen -ls
There are screens on:
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
3 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]#
V každé z těchto tří relací obrazovky mohu mít spuštěné příkazy nebo jednoduše opustit relaci sezením na výzvu.
Výchozí screen -x
nyní nebude fungovat obnovení relace, protože běží několik obrazovek:
[root@rhel7dev ~]# screen -x
There are several suitable screens on:
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
[root@rhel7dev ~]#
Abych se mohl připojit k jedné z mých relací, musím spustit screen -x
a přidejte dostatek názvu obrazovky, aby byl jedinečný:
[root@rhel7dev ~]# screen -x 257
[detached from 25706.pts-0.rhel7dev]
[root@rhel7dev ~]#
Spíše než se snažit omezit se na jednu relaci nebo si pamatovat, co běží na které obrazovce, můžete relaci pojmenovat pomocí -S
argument:
[root@rhel7dev ~]# screen -S "db upgrade"
[detached from 25778.db upgrade]
[root@rhel7dev ~]# screen -ls
There are screens on:
25778.db upgrade (Detached)
25706.pts-0.rhel7dev (Detached)
25693.pts-0.rhel7dev (Detached)
25665.pts-0.rhel7dev (Detached)
4 Sockets in /var/run/screen/S-root.
[root@rhel7dev ~]# screen -x "db upgrade"
[detached from 25778.db upgrade]
[root@rhel7dev ~]#
Chcete-li ukončit relaci obrazovky, můžete zadat exit
nebo stiskněte Ctrl+A a poté D .
Nyní, když víte, jak spustit, zastavit a označit screen
relací pojďme trochu více do hloubky. Chcete-li relaci obrazovky vertikálně rozdělit na poloviny, stiskněte Ctrl+A a poté | klávesa (Shift+zpětné lomítko ). V tomto okamžiku budete mít relaci obrazovky s výzvou vlevo:
Chcete-li přepnout na obrazovku vpravo, stiskněte Ctrl+A a poté Tab klíč. Váš kurzor je nyní ve správné relaci, ale žádná výzva. Chcete-li získat výzvu, stiskněte Ctrl+A a poté C . Mohu to udělat vícekrát, abych získal více vertikálních rozdělení na obrazovku:
Nyní můžete přepínat tam a zpět mezi dvěma panely obrazovky pomocí Ctrl+A+Tab .
Co se stane, když cat
ven soubor, který je větší, než dokáže zobrazit vaše konzole, a tak se nějaký obsah posune kolem? Chcete-li se ve vyrovnávací paměti posunout zpět, stiskněte Ctrl+A a poté Esc . Nyní se budete moci pomocí kurzorových kláves pohybovat po obrazovce a vracet se zpět do vyrovnávací paměti.
Existují další možnosti pro screen
, takže je zobrazíte stisknutím Ctrl a poté A a poté otazník :
[ Bezplatný online kurz:Technický přehled Red Hat Enterprise Linux. ]
Další informace naleznete v manuálové stránce screen
. Tento článek je rychlým úvodem do používání screen
příkaz, aby odpojená vzdálená relace neskončila náhodným zabitím procesu. Další program, který je podobný screen
je tmux
a můžete si přečíst o tmux
v tomto článku.