Tips en Trucs 2023

Onafhankelijke terminals met screen

Als Linux-gebruikers moeten we soms werken aan langlopende taken, zoals - het installeren en/of compileren van software, updaten, het uitvoeren van tijdrovende database queries, enzovoort. Soms worden deze belangrijke taken abrupt afgebroken door een time-out van de terminal-sessie, bijvoorbeeld op afstand via SSH.

Om dergelijke scenario's te vermijden, kunnen we de screen opdracht gebruiken, dat kan worden gebruikt om een terminal te multiplexen tussen verschillende zelfstandige processen (met interactieve shells). Het biedt een gebruiker dus de mogelijkheid verschillende afzonderlijke terminalinstanties te openen binnen een enkel terminalvenster.

De screen opdracht is zeer nuttig als je meerdere programma's vanuit een terminal behandelt en om programma's van de terminalshell te scheiden. Je kunt er ook jouw sessies mee delen met andere gebruikers en terminalsessies loskoppelen/aankoppelen.

Screen installeren

De meeste distributies hebben screen standaard reeds aan boord en is dus direct beschikbaar. Om de aanwezigheid van screen te testen, kan je de versie opvragen met:

dany@pindabook:~> screen --version
Screen version 4.06.02 (GNU) 23-Oct-17

Screen gebruiken

Screen starten

Typ screen in bij de opdrachtprompt. Dan toont screen een welkomstscherm en daarna een scherm dat precies overeenkomt met de opdrachtprompt.

dany@pindabook:~> screen
GNU Screen version 4.06.02 (GNU) 23-Oct-17

Copyright (c) 2015-2017 Juergen Weigert, Alexander Naumov, Amadeusz Slawinski
Copyright (c) 2010-2014 Juergen Weigert, Sadrul Habib Chowdhury
Copyright (c) 2008-2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury
Copyright (c) 1993-2007 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute it and/or modify it under the terms of the GNU
General Public License as published by the Free Software Foundation; either version 3, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
Public License for more details.

You should have received a copy of the GNU General Public License along with this program (see the
file COPYING); if not, see http://www.gnu.org/licenses/, or contact Free Software Foundation, Inc., 51
Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA.


                              [Press Space for next page; Return to end.]

Screen sneltoetsen

Druk Return om het welkomstscherm te verlaten.

Wanneer je screen gebruikt, kun je al jouw werk doen zoals in de normale opdrachtregelomgeving. Maar omdat screen een toepassing is, kan je het besturen met sneltoetsen.

Druk Ctrl+a en daarna ? om alle sneltoetsen op het scherm weer te geven.

                                   Screen key bindings, page 1 of 2.

                                   Command key:  ^A   Literal ^A:  a

  break       ^B b         history     { }          other       ^A           split       S         
  clear       C            info        i            pow_break   B            suspend     ^Z z      
  colon       :            kill        ^K k         pow_detach  D            time        ^T t      
  copy        ^[ [         lastmsg     ^M m         prev        ^H ^P p ^?   title       A         
  detach      ^D d         license     ,            quit        ^\           vbell       ^G        
  digraph     ^V           lockscreen  ^X x         readbuf     <            version     v         
  displays    *            log         H            redisplay   ^L l         width       W         
  dumptermcap .            login       L            remove      X            windows     ^W w      
  fit         F            meta        a            removebuf   =            wrap        ^R r      
  flow        ^F f         monitor     M            reset       Z            writebuf    >         
  focus       ^I           next        ^@ ^N sp n   screen      ^C c         xoff        ^S s      
  hardcopy    h            number      N            select      '            xon         ^Q q      
  help        ?            only        Q            silence     _         





                              [Press Space for next page; Return to end.]

Om het hulpscherm te verlaten, kun je op de spatiebalk of Enter drukken. Merk op dat alle sneltoetsen beginnen met Ctrl+a.

Alle geopende vensters weergeven

Nu we een screen sessie gestart hebben, kan je met de sneltoets Ctrl+a en daarna " alle geopende vensters van deze sessie weergeven:

Num Name                                                                                          Flags

   0 bash                                                                                              $

In de uitvoer kunnen we het nummer en de naam van het venster zien. De eerste kolom vertegenwoordigt het vensternummer en begint bij nul.

De volgende kolom vertegenwoordigt de naam van het venster (bash).

Een screen venster/sessie afsluiten

We kunnen de actieve venstersessie beëindigen met de toetsencombinaties Ctrl+a en daarna k (kill). Het is belangrijk op te merken dat deze actie de uitvoering van alle opdrachten van het huidige virtuele venster afbreekt.

Really kill this window [y/n]

In de uitvoer kunnen we zien dat de screen opdracht wacht op de bevestiging van de gebruiker. Het toont een waarschuwingsbericht in de linker benedenhoek.

Net als bij andere Linux-opdrachten kunnen we y gebruiken om door te gaan of n om de operatie af te breken.

[screen is terminating]

Een screen sessie met een naam starten

Met de screen opdracht kunnen we een sessie aanmaken met een door de gebruiker gedefinieerde naam, wat handig is als er meerdere sessies beschikbaar zijn.

Laten we dus de -S (hoofdletter) optie van de opdracht gebruiken om een sessie met naam aan te maken:

dany@pindabook:~> screen -S demo-screen

In het voorbeeld is demo-screen de naam van de sessie.

Een screen terminal sessie loskoppelen

Eén van de voordelen van een screen sessie is dat je het kunt loskoppelen. Daarna kun je het herstellen zonder alles te verliezen wat je in die sessie hebt gedaan. Hier is een voorbeeld scenario:

Je bent bezig met SSH op een apparaat op afstand. Laten we zeggen dat je een patch van 400 MB voor je systeem aan het downloaden bent met een wget opdracht.

Het downloadproces duurt naar schatting 2 uur. Als je de SSH-sessie verbreekt, of plotseling de verbinding per ongeluk verliest, dan stopt het downloadproces. Je moet dan weer van voren af aan beginnen. Om dat te voorkomen, kunnen we screen gebruiken en het loskoppelen.

Eerst start ik als voorbeeld in de screen sessie een eindeloos lopende opdracht met:

dany@pindabook:~> i=0; while true; do echo -n -e "\rDruk CTRL+c $i"; ((i=i+5)) ;sleep 5; done
Druk CTRL+c 0

Tijdens het uitvoeren van deze opdracht kun je op Ctrl+a en daarna d (detach) drukken. Je ziet niets wanneer je op deze toetsen drukt. De uitvoer ziet er dan zo uit:

[detached from 3126.demo-screen]

Een losgekoppelde screen sessie terug koppelen

Nadat je de screen sessie hebt losgekoppeld, kun je jouw SSH-sessie verbreken en naar huis gaan. Thuis begin je weer te SSH-en naar jouw apparaat en je wilt de voortgang van het downloadproces zien. Daarvoor moet je de screen sessie herstellen (terug koppelen aan de terminal). Je kunt daarvoor de volgende opdracht uitvoeren:

dany@pindabook:~> screen -r

En je zult zien dat de opdracht in de sessie dat je verliet nog steeds loopt.

dany@pindabook:~> i=0; while true; do echo -n -e "\rDruk CTRL+c $i"; ((i=i+5)) ;sleep 5; done
Druk CTRL+c 105

Als je meer dan één screen sessie hebt, moet je het screensessie-ID toevoegen.

Om dit te demonstreren, koppel je de huidige screen sessie terug los met Ctrl+a en daarna d.

[detached from 3649.demo-screen]

En starten we een tweede screen sessie:

dany@pindabook:~> screen -S tweede-screen

Ook deze tweede screen sessie koppelen we los met Ctrl+a en daarna d.

[detached from 3977.tweede-screen]

Bij een poging om een screen sessie te koppelen, krijg je de melding dat er verschillende sessies beschikbaar zijn:

dany@pindabook:~> screen -r
There are several suitable screens on:
        3977.tweede-screen      (Detached)
        3649.demo-screen        (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

De beschikbare screen sessies kan je ook opvragen met de opdracht:

dany@pindabook:~> screen -ls
There are screens on:
        3977.tweede-screen      (Detached)
        3649.demo-screen        (Detached)
2 Sockets in /run/uscreens/S-dany.

Als je screen sessie 3649.demo-screen terug wilt koppelen, gebruik je:

dany@pindabook:~> screen -r 3649

Breek de oneindig lopende opdracht af met Ctrl+c.

Een screen sessie kan je ook beëindigen met de klassieke exit opdracht:

dany@pindabook:~> exit
exit

[screen is terminating]

Meerdere screen terminal vensters gebruiken

Als je meer dan één scherm nodig hebt om je werk te doen, kan dat dan? Ja, dat is mogelijk. Je kunt meerdere screenvensters tegelijk laten draaien. Er zijn 2 (twee) manieren om dat te doen.

Ten eerste kun je de eerste screen sessie loskoppelen en een andere screen sessie op de terminal draaien. Ten tweede, je gebruikt in een bestaande screen sessie geneste schermen zoals we nu gaan demonstreren.

Koppel de screen sessie tweede-screen aan de terminal:

dany@pindabook:~> screen -r

Gebruik twee keer de toetsencombinatie Ctrl+a en daarna c om twee nieuwe vensters te maken. Vervolgens gebruiken we de toetsencombinatie Ctrl+a en daarna " om alle actieve vensters op te sommen:

Num Name                                                                                          Flags

   0 bash                                                                                              $
   1 bash                                                                                              $
   2 bash                                                                                              $

In de uitvoer zien we dat er nu drie vensters zijn.

Een venster hernoemen

In het vorige voorbeeld hebben we twee nieuwe vensters gemaakt. Hun standaardnamen geven echter geen details. In dat geval kunnen we ze een betekenisvolle naam geven.

We kunnen de toetsencombinatie Ctrl+a en daarna A (hoofdletter) gebruiken om de huidige venstersessie een andere naam te geven. Deze toetscombinatie vraagt de gebruiker een venstertitel in te stellen:

Set window's title to: bash

Verwijder de huidige naam en typ zelf een naam naar keuze. Bevestig met Return.

Screen schermen activeren

Om een venster sessie te selecteren, gebruik je Ctrl+a en daarna ", selecteer je met de pijltoetsen het gewenste scherm en activeer je deze met Return.

In het voorbeeld geef ik de drie vensters respectievelijk de naam nul, een en twee.

Dit wordt het resultaat:

Num Name                                                                                          Flags

   0 nul                                                                                               $
   1 een                                                                                              $
   2 twee                                                                                              $

Om duidelijk te zien in welk screen venster je werkt, kan je de prompt aanpassen. De prompt kan je instellen via de variabele $PS1. Eerst kijken we hoe deze standaard is ingesteld:

dany@pindabook:~> echo $PS1
\u@\h:\w>
dany@pindabook:~> PS1="\u@\h:${STY}:${WINDOW}:\w> "
dany@pindabook:4892.tweede-screen:0:~>

Door twee screen variabelen in de prompt op te nemen, krijgen we de screen sessie naam (tweede-screen) en het venster nummer (0) in de prompt. De gebruikte variabelen zijn:

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

Doe dit voor alle screen schermen.

Het volgende scherm activeren

We kunnen de toetsencombinatie Ctrl+a en daarna n (next) gebruiken om naar het volgende venster te gaan. Laten we dit begrijpen met een voorbeeld.

Ga eerst naar het eerste venster en controleer dit met de toetsencombinatie Ctrl+a en daarna ".

Druk nu twee keer op de toetsencombinatie Ctrl+a en daarna n om naar het derde venster te gaan en gebruik de toetsencombinatie Ctrl+a en daarna " om dit te controleren.

Het vorige scherm activeren

Op dezelfde manier kunnen we de combinatie Ctrl+a en daarna p (previous) gebruiken om naar het vorige venster te gaan.

Indien je in het derde venster zit. Druk je de toetsencombinatie Ctrl+a en daarna p twee keer en controleer of je weer in het eerste venster zit.

Een bepaald scherm activeren

In de vorige voorbeelden zagen we verschillende manieren om te schakelen tussen vensters. Soms willen we echter naar een bepaald venster springen. In dergelijke scenario's kunnen we de vensternummers gebruiken.

Laten we eerst de toetsencombinatie Ctrl+a en daarna " gebruiken om het vensternummer te vinden:

Num Name                                                                                          Flags

   0 nul                                                                                               $
   1 een                                                                                              $
   2 twee                                                                                              $

In de uitvoer staat de eerste kolom voor het vensternummer. Het is belangrijk op te merken dat screen schermen beginnen te nummeren vanaf nul.

Laten we nu de toetsencombinatie Ctrl+a en daarna 2 gebruiken om naar het derde venster te springen en controleer of we in het juiste venster zitten.

Venster horizontaal splitsen

Net als normale terminals kunnen we het screenvenster ook splitsen. Zorg dat je in het eerste screen venster werkt. We kunnen de toetsencombinatie Ctrl+a en daarna S (hoofdletter) gebruiken om het venster horizontaal te splitsen:

dany@pindabook:4892.tweede-screen:0:~> 










   0 nul                                                                                                











  --

Nu kunnen we de toetsencombinatie Ctrl+a en daarna Tab gebruiken om tussen de regio's te springen. Let op de regels onder de regio's met het screen schermnummer en -naam. Bij het splitsen wordt in de extra regio echter geen screen venster geactiveerd en staat er --. Spring met de toetsencombinatie Ctrl+a en daarna Tab naar de zojuist aangemaakte regio en activeer een screen scherm met de toetsencombinatie Ctrl+a en daarna ".

dany@pindabook:4892.tweede-screen:0:~>










   0 nul                                                                                                
 Num Name                                                                                          Flags

   0 nul                                                                                               $
   1 een                                                                                               $
   2 twee                                                                                              $






  -- 

Venster verticaal splitsen

Op dezelfde manier kunnen we de toetsencombinatie Ctrl+a en daarna | gebruiken om het huidige venster verticaal te splitsen:

dany@pindabook:4892.tweede-screen:0:~>










   0 nul                                                                                                
dany@pindabook:4892.tweede-screen:1:~>              dany@pindabook:4892.tweede-screen:2:~> 
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
                                                    
   1 een                                               2 twee

Opnieuw kunnen we de toetsencombinatie Ctrl+a en daarna Tab gebruiken om te wisselen tussen de regio's en de toetsencombinatie Ctrl+a en daarna X (hoofdletter) om de huidige regio te sluiten.

Sreen sessies registreren

Soms is het belangrijk om vast te leggen wat je in de terminal hebt gedaan. Laten we zeggen dat je een Linux-beheerder bent die veel Linux-apparaten beheert.

Met screen registratie (loggen) hoef je niet elke opdracht op te schrijven dat je hebt uitgevoerd. Om de screen logfunctie te activeren, druk je gewoon op Ctrl+a en daarna H. Wees voorzichtig, we gebruiken een hoofdletter H. Een niet-hoofdletter h maakt alleen een schermafdruk van het scherm in een ander bestand met de naam hardcopy.

Linksonder in het scherm komt een melding die je vertelt dat je een logbestand aanmaakt of aanvult:

Appending to logfile "screenlog.0".

Je vindt het screenlog.0 bestand in jouw home directory. Hierin wordt alles wat je doet terwijl je zich in het schermvenster bevindt bijgehouden. Om het loggen van de lopende activiteiten te stoppen, druk je opnieuw op Ctrl+a en daarna H.

Logfile "screenlog.0" closed.
screen

Screen sessie vergrendelen

Screen heeft ook een sneltoets om een sessie te vergrendelen. Je kunt op de toetsencombinatie Ctrl+a en daarna x drukken om de sessie te vergrendelen. Dit is handig als je screen snel wilt vergrendelen. Hier zie je een voorbeeld van het vergrendelingsscherm nadat je op de toetscombinatie hebt gedrukt.

Screen used by Dany Pinoy  on pindabook.
Password:

Je kunt jouw Linux gebruikers wachtwoord gebruiken om het te ontgrendelen.