Hur man använder tmux på Linux (och varför det är bättre än skärmen)
- Dave McKay
@ TheGurkha
- maj 14, 2020, 8:00 EDT
kommandot Linux tmux
är en terminalmultiplexer, som screen
. Dess förespråkare är många och vokala, så vi bestämde oss för att jämföra de två. Är tmux
verkligen bättre, eller är det bara ett fall att föredra vad du vet?
tmux vs. skärm
både kommandona tmux
och GNU screen
är terminalmultiplexorer. De låter dig ha flera fönster i ett enda terminalfönster och hoppa fram och tillbaka mellan dem. Ett fönster kan delas in i rutor, som alla ger dig en oberoende kommandorad.
du kan också ta bort en session och det blir en huvudlös enhet som körs i bakgrunden—du kan till och med stänga terminalfönstret som startade det. När du är redo kan du öppna ett nytt terminalfönster och sätta tillbaka sessionen som fortfarande körs. Du kan också göra detta via en SSH-anslutning.
du kan koppla bort en session på en dator, gå hem och logga in på fjärrdatorn. När du ansluter igen kan du sätta tillbaka bakgrundssessionen och använda den interaktivt igen.
vad är skärmkommandot?
kommandot screen
är också en terminalmultiplexer, och den är full av alternativ. För lowdown på allt du kan göra med det, kolla in vår djupgående artikel.
den här gången kommer vi att koncentrera oss på tmux
. När vi går vidare kommer vi att nämna hur screen
hanterar samma funktion eller funktion.
bara en sak irriterade oss om screen
. Vi kommer att täcka det när vi kommer till det, och se om tmux
går bättre.
RELATERAD: Så här använder du Linuxs skärmkommando
installera tmux
medan screen
vanligtvis installeras som standard på populära Linux-distributioner, tmux
är det inte. för att installera tmux
på Ubuntu, skriv följande:
sudo apt-get install tmux
på Manjaro kan du använda pacman
:
sudo pacman -Sy tmux
på Fedora 31 är tmux
redan installerat.
starta en tmux-Session
för att starta tmux
, skriv bara in den och tryck på Enter:
tmux
terminalfönstret visar en statusfält när du befinner dig i en tmux
– session.
den högra sidan av statusfältet visar värdnamnet och tid och datum. Vänster sida visar följande sessionsrelaterad information:
- : detta är sessionens namn. Som standard är de numrerade, börjar med noll. Vi täcker hur du kan ge meningsfulla namn till sessioner nedan.
- 0: bash*: 0 indikerar att detta är det första fönstret i den här sessionen. Den enda processen som körs i den här sessionen är
bash
. Om du kör ett program visas dess namn här. Asterisken ( * ) betyder att det här är fönstret du tittar på. Varje gång du skapar ett nytt fönster i entmux
– session läggs dess fönsternummer och namnet på programmet som körs i det till statusfältet.
kommandot screen
ger dig inte en statusfält. Du måste flyga blind och lita på dina wits för att veta vad som händer, vilket tar lite övning.
på plussidan kommer du inte att förlora en rad terminalfönsterfastigheter. Naturligtvis skulle du normalt utöka ditt terminalfönster för att göra det möjligt att använda en terminalmultiplexer. I så fall är förlusten av en rad för statusfältet inte mycket av ett problem. Vi har lämnat bilderna på terminalfönstren här i standardstorleken så att du kan se informationen.
kommandon ges till tmux
med tangenttryckningar, och det finns två delar till detta. Först trycker du på Ctrl + B för att få tmux
uppmärksamhet. Du trycker sedan snabbt på Nästa för att skicka ett kommando tilltmux
. Kommandon ges genom att trycka på bokstäver, siffror, skiljetecken eller piltangenter.
det är detsamma i screen
, förutom att du trycker på Ctrl+A för att få uppmärksamhet.
för att stänga fönstret, tryck på Ctrl+B och tryck sedan snabbt på X. statusfältet blir gult. Du uppmanas sedan att bekräfta att du vill döda fönstret.
tryck på Y för att stänga fönstret eller N om du ändrar dig. Du behöver inte trycka på Enter efteråt; Y eller N räcker för att registrera ditt val.
om du trycker på Y stängs fönstret. Eftersom detta är det enda fönstret i den här sessionen avslutas sessionen.
tmux
– sessionen är stängd och du återgår till kommandoraden från vilken du startade tmux
. Du ser ”” i terminalfönstret.
det här kan tyckas som om det är uppenbart, men det är en bekräftelse att du har stängt sessionen och inte lämnat den fristående och löpande. Vi diskuterar att ta bort sessioner nedan.
starta en namngiven tmux-Session
om du regelbundet startar flera tmux
– sessioner kommer du snabbt att uppskatta funktionaliteten att ge var och en av dem ett meningsfullt namn. Du kan också namnge sessioner i screen
, men de visas inte någonstans i sessionsfönstren.
för att starta tmux
med ett sessionsnamn, använd kommandot new
(ny session) och alternativet -s
(sessionsnamn). Vår session kommer att kallas ”geek-1”, Så vi skriver följande:
tmux new -s geek-1
när sessionen tmux
laddas visas ”geek-1” som den första posten i statusfältet längst till vänster.
lägga till fler fönster
för att skapa ett nytt fönster i den aktuella sessionen, tryck Ctrl+B och sedan C. Du får ett tomt terminalfönster i den aktuella sessionen. Så vi har något som körs i det här nya fönstret, låt oss starta kommandot dmesg
med alternativet -w
(följ) :
dmesg -w
nu har vi två fönster i sessionen; EN körs top
och den andra dmesg
. Vi kan bara se en i taget (mer om det i ett ögonblick).
ta en titt på vänster sida av statusfältet. Vi är fortfarande i” geek-1 ” tmux
session. I window zero körs top, och i window one körs dmesg
. Asterisken ( * ) efter dmesg
berättar vilket fönster som är synligt.
för att hoppa mellan windows, tryck Ctrl+B och sedan på en av följande tangenter:
- N: Visa nästa fönster.
- P: Visa föregående fönster.
- 0 till 9: visa ett fönster numrerat 0 till 9.
du kan också välja ett fönster från en lista. Om du trycker på Ctrl + B och sedan W visas en lista med fönster.
för att flytta den gula markeringsfältet, tryck på upp-eller nedpilarna, hem eller slut. Den nedre delen av skärmen visar en förhandsgranskning av innehållet i det markerade fönstret.
tryck på Enter för att flytta till det markerade fönstret, eller Esc för att lämna fönsterlistan utan att byta.
ta bort och bifoga sessioner
om du trycker på Ctrl+B och sedan D, kommer du att ta bort sessionen. Det fortsätter att köras i bakgrunden, men du kommer inte att kunna se eller interagera med det.
vi har startat top
i sessionen så vi har en löpande process att demonstrera med. Sedan trycker vi på Ctrl + B och sedan D. sessionen försvinner och blir en bakgrundssession.
vi återgår till det ursprungliga terminalfönstret. Det finns ett meddelande från tmux
som berättar att sessionen är fristående. Det påminner oss också om namnet Vi gav till sessionen. Det här är praktiskt eftersom det är vad vi använder för att bifoga en bakgrundssession och sedan återställa den till en interaktiv.
för att bifoga en fristående session använder vi kommandot självförklarande attach-session
med alternativet -t
(target session). Vi kommer också att ange namnet på den session vi vill återkalla.
vi skriver följande:
tmux attach-session -t geek-1
vår session återvänder och blir en synlig, interaktiv session igen.
alla långvariga eller kontinuerliga processer som du startade innan du tog bort sessionen körs fortfarande i bakgrunden (såvida de inte är färdiga) när du bifogar sessionen.
screen
kan göra detta, men inte lika intuitivt.
hantering av flera sessioner
låt oss öppna ett annat terminalfönster och starta en ny tmux
session som heter ”geek-2”:
tmux new -s geek-2
i den sessionen börjar vidmesg
:
dmesg -w
nu, vi har vår ursprungliga” geek-1 ”tmux
session, och en ny som heter ” geek-2.”
statusfältet visar oss den här sessionen kallas” geek-2″, och den har ett fönster som kör dmesg
.
om vi trycker på Ctrl+B och sedan D, kopplar vi bort den sessionen.
tillbaka i ”geek-1” tmux
sessionen trycker vi på Ctrl+B och sedan S för att se en lista med tmux
sessioner.
för att vara tydlig är detta en lista över sessioner. Den liknande skärmen vi såg tidigare var en lista över fönster i en enda session.
du kan flytta den gula markeringsfältet genom att trycka på upp-och nedpilarna, hem och slut. Den nedre delen visar en förhandsgranskning av innehållet i den markerade sessionen.
om du trycker på högerpilen visas fönstren för den markerade sessionen.
tryck på Enter för att flytta till den markerade sessionen eller fönstret eller Esc för att lämna sessionslistan utan att ändra sessioner. Om du väljer en ny session lossnar din nuvarande och den du valt är bifogad.
vi lossade ”geek-2” – sessionen innan vi gjorde det här. Du kan dock göra detta med sessioner som fortfarande är kopplade till deras ursprungliga terminalfönster. När du gör det visas alla skärmändringar samtidigt i båda tmux
– sessionerna.
kommandot screen
kan också göra detta via en liknande uppsättning kommandon.
arbeta med fönsterrutor
om du trycker på Ctrl+B och sedan dubbla citattecken ( ”” ) delar du fönstret horisontellt i två rutor.
detta påverkar bara det aktuella fönstret; de andra i sessionen ändras inte. Vi har använt kommandot tmux ls
i den övre rutan för att lista fönstren i den här sessionen. Det finns två, och statusraden säger att vi är i fönster ett. Om vi hoppar över till window zero genom att trycka på Ctrl + B och sedan 0 (noll) ser vi att det är precis som vi lämnade det.
dessa är två oberoende kommandorader, inte två vyer i ett fönster; de är distinkta och separata skal. Vi kan visa detta genom att köra ett annat kommando i varje ruta.
vi skriver följande:
uname -a
ls -hl
om du vill flytta från en ruta till en annan trycker du på Ctrl+B och sedan på Upp -, Ned -, Vänster-eller högerpilen.
om du trycker på Ctrl+B och sedan procenttecknet (%)
delar den aktuella rutan vertikalt.
tryck på Ctrl+B och sedan Q för att göra tmux
blinkar kort numret på varje ruta.
dessa siffror används i prompter och meddelanden från tmux
. Tryck på Ctrl + B och sedan X för att stänga den aktuella rutan. Statusfältet ändras till gult och du uppmanas att bekräfta att du vill stänga det rutnumret. Tryck på Y för att ta bort rutan eller N för att lämna saker som de är.
om du trycker på Y tas rutan bort.
kommandot screen
har också rutor, men igen är de mindre intuitiva att använda. Det som irriterar oss om screen
är om du kopplar bort en session med rutor, försvinner de när du sätter tillbaka den sessionen. Detta blir gammalt väldigt snabbt.
en Ctrl+B fusklapp
vi har inkluderat en fusklapp av de olika kommandon som du kan använda i tmux
nedan.
Sessionskommandon
- S: lista sessioner.
- $: Byt namn på aktuell session.
- D: lossa aktuell session.
- Ctrl + B, och sedan ?: Visa hjälpsidan i
tmux
.
Fönsterkommandon
- C: skapa ett nytt fönster.
- ,: Byt namn på det aktuella fönstret.
- W: lista fönstren.
- N: gå till nästa fönster.
- P: flytta till föregående fönster.
- 0 till 9: flytta till det angivna fönsternumret.
Panelkommandon
- %: skapa en horisontell delning.
- ”: skapa en vertikal delning.
- h eller vänsterpil: flytta till rutan till vänster.
- I eller Högerpil: flytta till rutan till höger.
- J eller nedåtpil: flytta till rutan nedan.
- K eller uppåtpil: flytta till rutan ovan.
- Q: Visa kort rutnummer.
- O: flytta genom rutor i ordning. Varje tryck tar dig till nästa, tills du slingrar igenom dem alla.
- }: byt positionen för den aktuella rutan med nästa.
- {: byt positionen för den aktuella rutan med föregående.
- X: stäng den aktuella rutan.
hur de jämför
när det gäller funktionalitet, screen
och tmux
båda utför på samma sätt och erbjuder samma huvudfunktioner. Det är hur du får tillgång till de funktionerna som är markant annorlunda. tmux
erbjuder slicker, bekvämare sätt att komma till de olika funktionerna. Men det är inte den enda skillnaden.
möjligheten att byta namn på sessioner och fönster i tmux
är snyggt, och det faktum att det behåller rutorna när du sätter tillbaka en session är en spelväxlare.
screen
, å andra sidan, förlorar helt rutor när du lossnar och sätter tillbaka en session. Detta är nästan irriterande nog för att du ska undvika att lossna i första hand.
det finns så mycket mer att tmux
, inklusive dess otroligt flexibla skriptfunktioner. Du är skyldig dig själv att kolla in det.
Dave McKay använde först datorer när stansade pappersband var på modet, och han har programmerat sedan dess. Efter över 30 år i IT-branschen är han nu en heltidsteknikjournalist. Under sin karriär har han arbetat som frilansprogrammerare, chef för ett internationellt mjukvaruutvecklingsteam, projektledare för IT-tjänster och senast som dataskyddsombud. Dave är en Linux evangelist och öppen källkod förespråkare.Läs Hela Bio ”