- Dave McKay
@TheGurkha
- March 27, 2020, 8:00am EDT
Met het Linux-commando screen
kun je draaiende terminaltoepassingen naar de achtergrond duwen en ze naar voren halen als je ze wilt zien. Het ondersteunt ook split-screen schermen en werkt over SSH verbindingen, zelfs nadat je losgekoppeld en weer verbonden bent!
Wat is het screen commando?
Het screen
commando is een terminal multiplexer, en het zit vol met opties. Om te zeggen dat het veel kan is de grootvader van understatements. De man page beslaat meer dan 4.100 regels.
De volgende zijn de meest voorkomende gevallen waarin je het screen
commando zou gebruiken, en we zullen deze verder in dit artikel behandelen:
- De standaard operatie is om een nieuw venster te maken met een shell erin, een commando uit te voeren, en dan het venster naar de achtergrond te duwen (dit heet “ontkoppelen”). Als je wilt zien hoe je proces het doet, kun je het venster weer naar de voorgrond halen (“reattach”) en het opnieuw gebruiken. Dit is geweldig voor lange processen die je niet per ongeluk wilt beëindigen door het terminal venster te sluiten.
- Als je eenmaal een
screen
sessie hebt draaien, kun je nieuwe vensters maken en daar andere processen in draaien. Je kunt gemakkelijk van het ene venster naar het andere springen om de voortgang te bekijken. U kunt ook uw terminal venster splitsen in verticale of horizontale gebieden, en uw verschillendescreen
vensters in een venster weergeven. - U kunt verbinding maken met een machine op afstand, een
screen
sessie starten, en een proces starten. Je kunt de verbinding met de host op afstand verbreken, opnieuw verbinding maken, en je proces zal nog steeds draaien. - Je kunt een
screen
sessie delen tussen twee verschillende SSH verbindingen, zodat twee mensen hetzelfde kunnen zien, in real-time.
Scherm installeren
Om screen
op ubuntu te installeren, gebruikt u dit commando:
sudo apt-get install screen
Om screen
op Manjaro te installeren, gebruikt u het volgende commando:
sudo pacman -Sy screen
Op Fedora typt u het volgende:
sudo dnf install screen
Aan de slag met screen
Om te beginnen screen
typt u het zoals hieronder afgebeeld en drukt u op Enter:
screen
U ziet een pagina met licentie-informatie. Je kunt op de spatiebalk drukken om de tweede pagina te lezen of op Enter om terug te keren naar de opdrachtprompt.
Je blijft bij de opdrachtprompt en er lijkt niet veel te zijn gebeurd. U voert nu echter een commandoregel uit in een terminalemulator met multiplexing. Waarom is dit een goede zaak? Nou, laten we een proces starten dat lang gaat duren om te voltooien. We downloaden de broncode voor de nieuwste Linux kernel en zetten deze om in een bestand met de naam latest_kernel.zip
.
Daartoe typen we het volgende:
curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip
Onze download begint, en de curl
uitvoer toont ons de voortgang.
We kunnen u geen afbeelding laten zien van het volgende stukje, omdat het een toetscombinatie is. Je typt Ctrl+A, laat die toetsen los en drukt vervolgens op d om het scherm los te maken.
Het downloadproces loopt nog steeds, maar het venster dat de download laat zien is verwijderd. U keert terug naar het terminal venster van waaruit u de screen
sessie startte. Een bericht vertelt u dat een screen
venster met de naam 23167.pts-0.howtogeek
is losgemaakt.
U heeft het nummer vanaf het begin van de vensternaam nodig om het weer vast te maken. Als u het vergeet, kunt u altijd de -ls
(lijst) optie gebruiken, zoals hieronder, om een lijst van de losgemaakte vensters te krijgen:
screen -ls
Wanneer u klaar bent, kunt u de optie -r
(opnieuw vastmaken) en het nummer van de sessie gebruiken om deze opnieuw vast te maken, zoals dit:
screen -r 23167
Het venster dat op de achtergrond aan het werk is geweest, wordt nu teruggebracht naar je terminalvenster alsof het nooit is weggeweest.
Als het een proces is dat tot het einde doorloopt, zal het uiteindelijk worden voltooid. Als het een doorlopend proces is, zult u het uiteindelijk willen beëindigen. Hoe dan ook, wanneer het proces eindigt, kan je exit
typen om het proces te verlaten screen
. U kunt ook op Ctrl+A drukken, en dan op K om een venster geforceerd te doden.
Typ het volgende commando:
exit
U keert terug naar uw vorige terminal venster, dat nog steeds het commando toont dat u gebruikte om het venster weer vast te maken. Omdat we ons enige losgekoppelde venster hebben gesloten, krijgen we een bericht dat screen
wordt beëindigd.
GERELATEERD: Hoe gebruik je curl om bestanden te downloaden vanaf de Linux-opdrachtregel
Gebruik schermsessies met naam
Je kunt de -S
(sessienaam) optie gebruiken om je screen
sessie een naam te geven. Als je een memorabele naam gebruikt in plaats van de numerieke identiteit van de sessie, is het handiger om opnieuw verbinding te maken met een sessie. We typen het volgende om onze sessie “bigfile” te noemen:
screen -S bigfile
Wanneer screen
onze sessie opstart, zien we een leeg venster met een opdrachtprompt. We gaan een groot bestand downloaden, dus we kunnen een lang lopend proces als voorbeeld gebruiken.
We typen het volgende:
curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip
Wanneer het downloaden begint, drukken we op Ctrl+A, en vervolgens op D om de sessie te ontkoppelen. We typen het volgende om de -ls
(lijst) optie met screen
te gebruiken om de details van onze ontkoppelde sessie te zien:
screen -ls
Achter de numerieke identificatiecode (23266) zien we de naam van onze sessie (bigfile). We typen het volgende, inclusief de naam van de sessie, om deze opnieuw te koppelen:
screen -r bigfile
We zijn opnieuw verbonden met ons downloadvenster en zien dat de lange download nog steeds bezig is.
Als de download is voltooid, typen we exit
om het sessievenster te sluiten.
Scherm gebruiken met meerdere vensters
Tot nu toe hebben we screen
gebruikt om een enkel proces op de achtergrond in een losgekoppeld venster te plaatsen. Echter, screen
kan veel meer dan dat. Vervolgens zullen we een paar processen uitvoeren die ons in staat stellen om enkele aspecten van onze computer te monitoren.
We typen het volgende om een schermsessie met de naam “monitor” te starten:
screen -S monitor
Op de opdrachtprompt in onze nieuwe venstersessie starten we dmesg
en gebruiken we de -H
(menselijk leesbaar) en -w
(wacht op nieuwe berichten) opties. Hiermee worden de kernelbufferberichten weergegeven; nieuwe berichten verschijnen wanneer ze zich voordoen.
We typen het volgende:
dmesg -H -w
De bestaande berichten verschijnen. We worden niet teruggestuurd naar de opdrachtprompt omdat dmseg
wacht op nieuwe berichten, en deze zal weergeven zodra ze binnenkomen.
GERELATEERD: How to Use the dmesg Command on Linux
We willen een andere applicatie draaien, dus hebben we een nieuw screen
venster nodig. We drukken op Ctrl+A, en dan C om een nieuw venster te maken. We gaan watch
gebruiken om herhaaldelijk vmstat
te draaien, zodat we een regelmatig bijgewerkte weergave krijgen van het virtuele geheugengebruik op onze computer.
Op de nieuwe opdrachtprompt typen we het volgende:
watch vmstat
De vmstat
-uitvoer verschijnt en wordt elke twee seconden bijgewerkt.
Onze twee processen draaien nu. Om tussen de screen
vensters te springen, druk je op Ctrl+A, en het nummer van het venster. Het eerste dat we gemaakt hebben is window nul (0), het volgende is window 1, enzovoort. Om naar het eerste venster te gaan (het dmesg
venster), drukken we op Ctrl+A en 0.
Als we op Ctrl+A en 1 drukken, gaan we terug naar het vmstat
-venster.
Dat is best handig! We kunnen op Ctrl+A drukken, en dan op D om ons los te maken van deze sessie; we kunnen ons later weer vastmaken. Beide sessies zullen nog steeds draaien. Nogmaals, om tussen de vensters te wisselen, drukken we op Ctrl+A en het nummer (0 of 1) van het venster waarnaar we willen overschakelen.
Laten we naar de volgende stap gaan en beide schermen in één venster bekijken. Als je dit doet, rek je je terminal venster uit tot een grootte die deze stap nuttig maakt. Onze voorbeelden zijn beperkt tot de grootte van onze screenshots, dus onze vensters zullen er een beetje krap uitzien.
Om dit te doen, drukken we op Ctrl+A, en vervolgens op Shift+S (een hoofdletter “S” is vereist).
Het venster splitst zich in twee “regio’s.”
In de bovenste regio staat nog steeds vmstat
, en de onderste regio is leeg. De cursor is gemarkeerd in de schermafbeelding hieronder. Om hem naar de onderste regio te verplaatsen, drukken we op Ctrl+A, en vervolgens op Tab.
De cursor gaat naar de onderste regio, die eigenlijk gewoon een lege ruimte is. Het is geen commandoregel, dus we kunnen er niets in typen. Om een bruikbare weergave te krijgen, drukken we op Ctrl+A, en vervolgens op “0” om het dmesg
venster in deze regio weer te geven.
Dit geeft ons beide live uitgangen in een gesplitst venster. Als we op Ctrl+A en D drukken om het venster los te maken, en het dan weer vastmaken, verliezen we de split-pane weergave. We kunnen het echter herstellen met de volgende sneltoetsen:
- Ctrl+A, S: Split het venster horizontaal.
- Ctrl+A, Tab: Verplaats naar de onderste regio.
- Ctrl+A, 0: Venster nul weergeven in de onderste regio.
We kunnen nog een stap verder gaan. We splitsen nu het onderste deelvenster verticaal, en voegen een derde proces toe aan de weergave. Met de cursor in de onderste regio, drukken we op Ctrl+A en C om een nieuw venster te maken met een schil erin. De onderste regio geeft het nieuwe venster weer en geeft ons een opdrachtprompt.
Daarna voeren we het df
commando uit om het gebruik van het bestandssysteem te controleren:
df
Wanneer we df
zien lopen, drukken we op Ctrl+A en het pijpteken (|)
. Dit splitst de onderste regio verticaal. We drukken op Ctrl+A en Tab om naar de nieuwe regio te gaan. Vervolgens drukken we op Ctrl+A en 0 om het dmesg
venster weer te geven.
Je kunt ook van regio naar regio gaan, en meer verticale of horizontale splitsingen aanbrengen. Hier zijn nog enkele handige toetscombinaties:
- Ctrl+A: springt heen en weer tussen de huidige en vorige regionen.
- Ctrl+A, Q: sluit alle regionen behalve de huidige.
- Ctrl+A, X: Sluit de huidige regio.
Scherm gebruiken over SSH
Met screen
, kunt u een venstersessie starten, deze loskoppelen zodat hij nog steeds op de achtergrond draait, uit- of weer inloggen, en de sessie weer vastkoppelen.
Laten we een SSH verbinding maken met onze computer vanaf een andere computer met het ssh
commando. We moeten de naam opgeven van de account waarmee we verbinding gaan maken en het adres van de computer op afstand.
Voor ons voorbeeld typen we het volgende:
ssh [email protected]
Nadat we ons op de externe computer hebben geauthenticeerd en ons hebben aangemeld, typen we het volgende om een screen
-sessie te starten met de naam “ssh-geek”:
screen -S ssh-geek
Voor demonstratiedoeleinden zullen we top
uitvoeren in het screen
venster, maar je zou elk langlopend of eindeloos proces kunnen starten.
We typen het volgende:
top
Als top
eenmaal in het venster draait, drukken we op Ctrl+A, en vervolgens op D om het venster te ontkoppelen.
We keren terug naar het oorspronkelijke, externe terminalvenster.
Als we exit
typen, zoals hieronder te zien is, wordt de SSH-sessie verbroken en zijn we terug op onze lokale computer:
exit
We typen het volgende om opnieuw verbinding te maken:
ssh [email protected]
Nadat we opnieuw zijn verbonden en ingelogd, kunnen we het volgende typen om de screen
sessie opnieuw te koppelen:
screen -r ssh-geek
We zijn nu opnieuw verbonden met onze nog steeds draaiende instantie van top
.
Dit is handig als u een proces op de ene machine wilt starten, en dan verder wilt gaan waar u op een andere machine was gebleven.
GERELATEERD: Hoe SSH Keys te maken en te installeren vanuit de Linux Shell
Een schermsessie delen
U kunt ook een screen
sessie gebruiken om twee mensen hetzelfde venster te laten zien en ermee te laten werken. Stel dat iemand die Fedora op zijn computer draait, verbinding wil maken met onze Ubuntu server.
Hij zou het volgende typen:
ssh [email protected]
Nadat hij verbinding heeft gemaakt, start hij een schermsessie met de naam “ssh-geek” met de optie -S (sessienaam). Hij gebruikt ook de -d
(ontkoppelen) en -m
(afgedwongen creatie) opties om een nieuwe screen
sessie te maken die al is ontkoppeld.
Hij typt het volgende:
screen -d -m -S ssh-geek
Hij typt het volgende, waarbij hij de -X
(multiscreen mode) optie gebruikt om de sessie te koppelen:
screen -X ssh-geek
Op een Manjaro-computer maakt iemand anders verbinding met de Ubuntu-computer met dezelfde accountgegevens, zoals hieronder te zien is:
ssh [email protected]
Als ze eenmaal verbinding heeft, typt ze het commando screen
en gebruikt ze de optie -X (multiscreen mode) om deel te nemen aan dezelfde venstersessie, op de volgende manier:
screen -X ssh-geek
Nu ziet de ander alles wat de een typt. Als de ene persoon bijvoorbeeld het commando “date” geeft, zien ze allebei het getypte commando en de uitvoer ervan.
Beiden delen nu een screen
-sessie die wordt uitgevoerd op een Ubuntu-computer op afstand.
Voor een stuk software dat voor het eerst het daglicht zag in 1987, is screen
nog steeds een goede productiviteitsversterker. Jezelf ermee vertrouwd maken zal een goed bestede tijd zijn!
GeRELATEERD: 37 Belangrijke Linux commando’s die je moet kennen
Dave McKay gebruikte voor het eerst computers toen ponsband in de mode was, en hij programmeert sindsdien. Na meer dan 30 jaar in de IT industrie, is hij nu een full-time technologie journalist. Tijdens zijn loopbaan heeft hij gewerkt als freelance programmeur, manager van een internationaal software ontwikkelingsteam, een IT services project manager, en, meest recent, als een Data Protection Officer. Dave is een Linux evangelist en voorstander van open source.Read Full Bio ”