103.5 Lecke 2
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
103 GNU és Unix parancsok |
Fejezet: |
103.5 Folyamatok létrehozása, monitorozása és megszakítása |
Lecke: |
2/2 |
Bevezetés
Az előző leckében látott eszközök és segédprogramok nagyon hasznosak a folyamatok általános monitorozásához. Egy rendszergazdának azonban szüksége lehet arra, hogy egy lépéssel tovább menjen. Ebben a leckében a terminálmultiplexerek fogalmát tárgyaljuk, és megismerkedünk a GNU Screen és a tmux programokkal, mivel — a mai modern és nagyszerű terminálemulátorok ellenére — a multiplexerek még mindig őriznek néhány nagyszerű, hatékony funkciót egy produktív rendszergazda számára.
A terminál multiplexerek funkciói
Az elektronikában a multiplexer (vagy mux) olyan eszköz, amely lehetővé teszi, hogy több bemenetet egyetlen kimenethez csatlakoztassanak. Így egy terminálmultiplexer lehetővé teszi számunkra, hogy szükség szerint váltsunk a különböző bemenetek között. Bár nem teljesen azonosak, a screen
és a tmux
egy sor közös tulajdonsággal rendelkeznek:
-
Minden sikeres invokálás legalább egy munkamenetet eredményez, amely — viszont — legalább egy ablakot tartalmaz. Az ablakok programokat tartalmaznak.
-
Az ablokok régiókra vagy ablaktáblákra/panelekre oszthatók - ami segítheti a produktivitást, ha egyszerre több programmal dolgozunk.
-
Könnyű kezelhetőség: a legtöbb parancs futtatásához egy billentyűkombinációt — az úgynevezett command prefix vagy command key — használnak, amelyet egy másik karakter követ.
-
A munkamenetek leválaszthatók az aktuális terminálról (azaz a programok a háttérbe kerülnek és tovább futnak). Ez garantálja a programok teljes körű végrehajtását, függetlenül attól, hogy véletlenül bezárjuk a terminált, időnként terminálfagyást vagy akár távoli kapcsolatvesztést tapasztalunk.
-
Socket kapcsolat.
-
Másolás mód.
-
Nagymértékben testreszabhatók.
GNU Screen
A Unix korábbi korszakában (1970-80-as évek) a számítógépek alapvetően egy központi számítógéphez csatlakoztatott terminálokból álltak. Ennyi volt minden, nem volt több ablak vagy lap. És ez volt az oka a GNU Screen 1987-es létrehozásának: több független VT100 képernyő emulálása egyetlen fizikai terminálon.
Ablakok
A GNU Screen a screen
terminálba történő beírásával hívható elő. Először egy üdvözlő üzenetet fogunk látni:
GNU Screen version 4.05.00 (GNU) 10-Dec-16 Copyright (c) 2010 Juergen Weigert, Sadrul Habib Chowdhury Copyright (c) 2008, 2009 Juergen Weigert, Michael Schroeder, Micah Cowan, Sadrul Habib Chowdhury Copyright (c) 1993-2002, 2003, 2005, 2006, 2007 Juergen Weigert, Michael Schroeder Copyright (c) 1987 Oliver Laumann (...)
Nyomjuk meg a Space vagy az Enter billentyűt az üzenet bezárásához, és megjelenik a parancssor:
$
Úgy tűnhet, hogy semmi sem történt, de a valóság az, hogy a screen
már létrehozta és kezeli az első munkamenetet és ablakot. A képernyő parancsának előtagja Ctrl+a. Ha a terminál kijelzőjének alján lévő összes ablakot szeretnénk látni, írjuk be a Ctrl+a-w kombinációt:
0*$ bash
Itt van, az eddigi egyetlen ablakunk! Figyeljük meg, hogy a számlálás 0-nál kezdődik. Egy másik ablak létrehozásához nyomjuk le a Ctrl+a-c billentyűket. Egy új promptot fogunk látni. Indítsuk el a ps
-t ebben az új ablakban:
$ ps PID TTY TIME CMD 974 pts/2 00:00:00 bash 981 pts/2 00:00:00 ps
és írjuk be a Ctrl+a-w újra:
0-$ bash 1*$ bash
Itt van a két ablakunk (figyeljük meg a csillagot, amely azt jelzi, hogy éppen melyik van megjelenítve). Mivel azonban mindkettő a Bash segítségével indult, mindkettőnek ugyanaz a neve. Mivel a ps
-t hívtuk meg a jelenlegi ablakunkban, nevezzük át ugyanezzel a névvel! Ehhez be kell írnunk Ctrl+a-A és írjuk be az új ablak nevét (ps
):
Írjuk át az ablak címét erre: ps
Most hozzunk létre egy másik ablakot, de már az elején adjunk neki nevet: yetanotherwindow
. Ezt úgy tehetjük meg, hogy a screent a -t
kapcsolóval hívjuk meg:
$ screen -t yetanotherwindow
Külöböző módon válthatunk az ablakok között:
-
A Ctrl+a-n használatával (váltás a következő ablakra) és Ctrl+a-p (váltás az előző ablakra).
-
A Ctrl+a-number használatával (váltás a number számú ablakra).
-
A Ctrl+a-" használatával az összes ablak listájának megtekintéséhez. A nyílbillentyűkkel mozoghatunk fel és le, majd az Enter billentyűvel kiválaszthatjuk a kívánt ablakot:
Num Name Flags 0 bash $ 1 ps $ 2 yetanotherwindow
Az ablakokkal kapcsolatban fontos megjegyezni a következőket:
-
Az ablakok egymástól függetlenül futtatják a programjaikat.
-
A programok akkor is tovább futnak, ha az ablakuk nem látható (akkor is, ha a képernyő munkamenet leválasztásra kerül, amint azt hamarosan látni fogjuk).
Egy ablak eltávolításához egyszerűen fejezzük be a benne futó programot (az utolsó ablak eltávolítása után a screen
maga is befejeződik). Alternatív megoldásként használjuk a Ctrl+a-k parancsot, miközben az eltávolítani kívánt ablakban vagyunk; ekkor a rendszer megerősítést fog kérni:
Really kill this window [y/n] Window 0 (bash) killed.
Régiók
A screen
a terminál képernyőjét több régióra oszthatja, amelyekben ablakokat helyezhet el. Ezek a felosztások lehetnek vízszintesek (Ctrl+a-S) vagy függőlegesek (Ctrl+a-|).
Az egyetlen dolog, amit az új régió mutatni fog, az a --
az alján, ami azt jelenti, hogy üres:
1 ps --
Az új régióra való áttéréshez nyomjuk le a Ctrl+a-Tab billentyűket. Most a már látott módszerek bármelyikével hozzáadhatunk egy ablakot, például: Ctrl+a-2. Most a --
-nak 2 yetanotherwindow
-ra kell változnia:
$ ps $ PID TTY TIME CMD 1020 pts/2 00:00:00 bash 1033 pts/2 00:00:00 ps $ screen -t yetanotherwindow 1 ps 2 yetanotherwindow
A régiókkal való munka során a következő fontos szempontokat kell szem előtt tartani:
-
Régiók között így lehet váltani: Ctrl+a-Tab.
-
Az aktuális kivételével minden régiót így lehet terminálni: Ctrl+a-Q.
-
Az aktuális régiót így lehet terminálni: Ctrl+a-X.
-
Egy régió megszüntetése nem szünteti meg a hozzá tartozó ablakot..
Munkamenetek
Eddig néhány ablakkal és régióval játszottunk, de mindegyik ugyanahhoz az egyetlen munkamenethez (session) tartozott. Itt az ideje, hogy elkezdjünk a munkamenetekkel is játszani. Az összes munkamenet listájának megtekintéséhez írjuk be a screen -list
vagy screen -ls
parancsot:
$ screen -list There is a screen on: 1037.pts-0.debian (08/24/19 13:53:35) (Attached) 1 Socket in /run/screen/S-carol.
Eddig ez az egyetlen munkamenetünk:
- PID
-
1037
- Név
-
pts-0.debian
(a terminál — esetünkben egy pseudo terminal slave — és hosztnév). - Státusz
-
Csatolt
(Attached)
Hozzunk létre egy új munkamenetet, és adjunk neki egy beszédesebb nevet:
$ screen -S "second session"
A terminál tartalma törlődik, és egy új promptot kapunk. Ismét ellenőrizhetjük a munkameneteket:
$ screen -ls There are screens on: 1090.second session (08/24/19 14:38:35) (Attached) 1037.pts-0.debian (08/24/19 13:53:36) (Attached) 2 Sockets in /run/screen/S-carol.
A munkamenet megállításához lépjünk ki az összes ablakából, vagy írjuk be a screen -S SESSION-PID -X quit
parancsot (megadhatjuk a munkamenet nevét is). Szabaduljunk meg az első munkamenetünktől:
$ screen -S 1037 -X quit
Visszakerülünk a terminál prompthoz a screen
-en kívülre. De ne feledjük, a második munkamenetünk még mindig él:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Detached) 1 Socket in /run/screen/S-carol.
Mivel azonban termináltuk a szülő munkamenetet, új címkét kap: Detached
(leválasztott).
Munkamenet leválasztása
Több okból is előfordulhat, hogy egy screen munkamenetet le akarunk választani a termináljáról:
-
Hagyni, hogy a számítógép elvégezze a dolgát és később otthonról csatlakozni rá.
-
Munkamenet megosztása más felhasználókkal.
A munkamenet leválasztása a Ctrl+a-d billentyűkombinációval lehetséges, ezzel visszakerülünk a terminálunkba:
[detached from 1090.second session] $
A munkamenethez való újbóli kapcsolódáshoz használjuk a screen -r SESSION-PID
parancsot. Alternatívaként használhatjuk a SESSION-NAME
parancsot is, ahogy fentebb láttuk. Ha csak egy leválasztott munkamenet van, egyik sem kötelező:
$ screen -r
Ez a parancs elegendő ahhoz, hogy újra csatlakozzunk a második munkamenetünkhöz:
$ screen -ls There is a screen on: 1090.second session (08/24/19 14:38:35) (Attached) 1 Socket in /run/screen/S-carol.
Fontos kapcsolók a munkamenet újracsatolásához:
-d -r
-
Újracsatol egy munkamenetet és — ha szükséges — először leválasztja.
-d -R
-
Ugyanaz, mint a
-d -r
, de ascreen
akkor is létre fogja hozni a munkamenetet, ha az nem létezik. -d -RR
-
Ugyanaz, mint a
-d -R
, azonban az első munkamenetet használja, ha egynél több elérhető. -D -r
-
Munkamenet újracsatolása. Ha szükséges, először távolról válasszuk le és jelentkezzünk ki a munkamenetből.
-D -R
-
Ha egy munkamenet fut, akkor újracsatolja (szükség esetén előbb távolról leválasztva és kijelentkezve). Ha nem futott, létrehozza, és értesíti a felhasználót.
-D -RR
-
Ugyanaz, mint a
-D -R
— csak erősebb. -d -m
-
Elindítja a
screen
-t leválasztott módban (detached mode). Ez új munkamenetet hoz létre, de nem kapcsolódik hozzá. Ez hasznos lehet a rendszerindító szkripteknél. -D -m
-
Ugyanaz, mint a
-d -m
, de nem forkol új processzt. A parancs kilép, ha a munkamenet terminálódik.
Olvassuk el a screen
manualját, hogy megismerjük a többi kapcsolót.
Másolás és beillesztés: Scrollback mód
A GNU Screen rendelkezik másolási (copy) vagy scrollback móddal. Ha beléptünk, a kurzort az aktuális ablakban és annak előzményeiben a nyílbillentyűkkel mozgathatjuk. Szöveget jelölhetünk ki és másolhatunk az ablakok között. A követendő lépések a következők:
-
Belépés a copy/scrollback módba: Ctrl+a-[.
-
Menjünk a másolni kívánt szövegrész elejére a nyílbillentyűkkel.
-
Jelöljük ki a másolni kívánt szövegrész elejét: szóköz.
-
Menjünk a másolni kívánt szövegrész végére a nyílbillentyűkkel.
-
Jelöljük meg a másolni kívánt szövegrész végét: szóköz.
-
Menjünk a kívánt ablakba és illesszük be a szövegrészt: Ctrl+a-].
A képernyő testreszabása
A screen rendszerszintű konfigurációs fájlja az /etc/screenrc
. Alternatívaként a felhasználói szintű ~/.screenrc
is használható. A fájl négy fő konfigurációs részt tartalmaz:
SCREEN SETTINGS
-
Általános beállításokat úgy határozhatunk meg, hogy megadjuk a direktívát, amelyet egy szóköz és az érték követ, mint az alábbi:
defscrollback 1024
. SCREEN KEYBINDINGS
-
Ez a szakasz elég érdekes, mivel lehetővé teszi, hogy átdefiniálja azokat a billentyűkódokat, amelyek esetleg zavarják a terminál mindennapi használatát. Használjuk a
bind
kulcsszót, amelyet egy szóköz, a parancs előtagja után használandó karakter, egy újabb szóköz és a parancs követ, mint az alábbi példában:bind l kill
(ez a beállítás az ablakok megállításának alapértelmezett módját Ctrl+a-l-re változtatja).A képernyő összes hozzárendelésének megjelenítéséhez használjuk a Ctrl+a-? billentyűkombinációt vagy nézzük meg a man oldalát.
TipTermészetesen magát a parancs előtagját is megváltoztathatjuk. Ha például erről Ctrl+a erre Ctrl+b akarunk váltani, adjuk hozzá ezt a sort:
escape ^Bb
. TERMINAL SETTINGS
-
Ez a szakasz többek között a terminálablak méretével és a pufferekkel kapcsolatos beállításokat tartalmazza. A nem blokkoló üzemmód engedélyezéséhez, hogy jobban megbirkózzunk például az instabil ssh-kapcsolatokkal, a következő konfigurációt használjuk:
defnonblock 5
. STARTUP SCREENS
-
Beépíthetünk parancsokat, hogy különböző programok fussanak a
screen
indításakor; például:screen -t top top
(a screen megnyit egytop
nevű ablakot, benne atop
programmal).
tmux
A tmux
2007-ben jelent meg. Bár nagyon hasonlít a screen
-re, van néhány jelentős különbség:
-
Kliens-szerver modell: a kiszolgáló számos munkamenetet biztosít, amelyek mindegyikéhez több ablak is kapcsolódhat, amelyeket viszont különböző kliensek használhatnak.
-
A munkamenetek, ablakok és kliensek interaktív kiválasztása menükön keresztül.
-
Ugyanaz az ablak több munkamenethez is kapcsolódhat.
-
Elérhető mind vim és Emacs billentyűkiosztás.
-
UTF-8 és 256-színű terminál támogatás.
Ablakok
A tmux
egyszerűen a parancssorba beírva hívható elő. Ekkor megjelenik egy shell prompt és egy állapotsor az ablak alján:
[0] 0:bash* "debian" 18:53 27-Aug-19
A hosztnév
, az idő és a dátum mellett az állapotsor a következő információkat tartalmazza:
- Munkamenet neve
-
[0]
- Ablak száma
-
0:
- Ablak neve
-
bash*
. Alapértelmezés szerint ez az ablakban futó program neve, és — ascreen
-nel ellentétben — atmux
automatikusan frissíti, hogy tükrözze az aktuálisan futó programot. Figyeljük meg a csillagot, ami azt jelzi, hogy ez az aktuális, látható ablak.
A munkamenet- és ablakneveket a tmux
meghívásakor adhatjuk meg:
$ tmux new -s "LPI" -n "Window zero"
Az állapotsor ennek megfelelően változik:
[LPI] 0:Window zero* "debian" 19:01 27-Aug-19
A tmux parancs prefixe Ctrl+b. Egy új ablak létrehozásához csak erre van szükség: Ctrl+b-c; ez egy új prompthoz vezet és az állapotsor is jelzi az új ablakot:
[LPI] 0:Window zero- 1:bash* "debian" 19:02 27-Aug-19
Mivel a Bash az alapértelmezett shell, az új ablak alapértelmezés szerint ezt a nevet kapja. Indítsuk el a top
ablakot, és nézzük meg, hogy a név top
-ra változik:
[LPI] 0:Window zero- 1:top* "debian" 19:03 27-Aug-19
Mindenesetre az ablakot átnevezhetjük a Ctrl+b-, billentyűkombinációval. Amikor a rendszer kéri, adjuk meg az új nevet, és nyomjuk meg az Entert:
(rename-window) Window one
A Ctrl+b-w billentyűkombinációval az összes ablakot megjeleníthetjük kiválasztásra (a nyílbillentyűkkel felfelé és lefelé mozoghatunk, a enter billentyűvel pedig választhatunk):
(0) 0: Window zero- "debian" (1) 1: Window one* "debian"
A screen
-hez hasonlóan az egyik ablakból a másikba ugorhatunk a következővel:
- Ctrl+b-n
-
következő ablak.
- Ctrl+b-p
-
előző ablak.
- Ctrl+b-number
-
number számú ablak.
Az ablakok eltávolításához használjuk a Ctrl+b-& parancsot, ez megerősítést fog kérni:
kill-window Window one? (y/n)
További érdekes parancsok az ablakokhoz:
- Ctrl+b-f
-
ablak keresése név alapján.
- Ctrl+b-.
-
ablak indexének megváltoztatása.
A parancsok teljes listáját a man oldalon találhatjuk meg.
Panelek
A screen
ablakfelosztási lehetősége a tmux
-ban is jelen van. Az így kapott felosztásokat azonban nem régióknak, hanem paneleknek (pane) nevezzük. A legfontosabb különbség a régiók és a panelek között az, hogy az utóbbiak egy ablakhoz kapcsolódó teljes pszeudo-terminálok. Ez azt jelenti, hogy egy panel terminálása a hozzá tartozó pszeudo-terminált és a benne futó kapcsolódó programokat is terminálja.
Egy ablak vízszintes felosztása így lehetséges:[Ctrl+b]-":
Tasks: 93 total, 1 running, 92 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 4050960 total, 3730920 free, 114880 used, 205160 buff/cache KiB Swap: 4192252 total, 4192252 free, 0 used. 3716004 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1340 carol 20 0 44876 3400 2800 R 0.3 0.1 0:00.24 top 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 $ ─────────────────────────────────────────────────────────────────────────────────────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
A függőleges felosztás pedig így: Ctrl+b-%:
│$ 1 root 20 0 139088 6988 5264 S 0.0 0.2 0:00.50 systemd │ │ 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd │ │ 3 root 20 0 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0 │ 4 root 20 0 0 0 0 S 0.0 0.0 0:01.62 kworker/0:0 │ 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H│ 7 root 20 0 0 0 0 S 0.0 0.0 0:00.06 rcu_sched │ 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh │ 9 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 │ │ 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drai│ n │ 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 │ │ 12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 │ │ $ │ ───────────────────────────────────────────────────────────────────────────────┴─────────────── $ [LPI] 0:Window zero- 1:Window one* "debian" 19:05 27-Aug-19
Az aktuális panel (a benne futó pszeudo-terminállal és a hozzá tartozó programokkal együtt) terminálásához használjuk a Ctrl+b-x parancsot. Az állapotsor megerősítést fog kérni:
kill-pane 1? (y/n)
Fontos panelekhez kötődő parancsok:
- Ctrl+b-↑,↓,←,→
-
mozgás a panelek között.
- Ctrl+b-;
-
az utolsó aktív panelre váltás.
- Ctrl+b-Ctrl+arrow key
-
a panel méretének csökkentése egy sorral.
- Ctrl+b-Alt+arrow key
-
a panel átméretezése öt sorral.
- Ctrl+b-{
-
panelek lapozása (aktuálisról az előzőre).
- Ctrl+b-}
-
panelek lapozása (aktuálisról a következőre).
- Ctrl+b-z
-
panelba/ból történő nagyítás.
- Ctrl+b-t
-
a
tmux
megjelenít egy dizájnos órát a panelon belül (eliminálni aq
lenyomásával lehet). - Ctrl+b-!
-
panel ablakká alakítása.
A parancsok teljes listája a man oldalon található.
Munkamenetek
A munkameneteket tmux
-ban így lehet listázni: Ctrl+b-s:
(0) + LPI: 2 windows (attached)
Alternatívaként használhatjuk a tmux ls
parancsot is:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39] (attached)
Csak egy munkamenet van (LPI
), amely két ablakot tartalmaz. Hozzunk létre egy új munkamenetet a jelenlegi munkamenetünkből. Ezt a Ctrl+b billentyűkombinációval tehetjük meg, a promptba írjuk be a :new
parancsot, majd nyomjuk le az Entert. Az új munkamenetbe kerülünk, amint az az állapotsoron is látható:
[2] 0:bash* "debian" 19:15 27-Aug-19
Alapértelmezés szerint az tmux
a munkamenetet 2
-nek nevezte el. Átnevezéséhez használjuk a Ctrl+b-$ parancsot. Amikor a rendszer kéri, adjuk meg az új nevet, és nyomjuk meg az Entert:
(rename-session) Second Session
A munkamenetek között a Ctrl+b-s segítségével válthatunk (használjuk a nyílbillentyűket és az enter billentyűt):
(0) + LPI: 2 windows (1) + Second Session: 1 windows (attached)
Egy munkamenet megszüntetéséhez használhatja az tmux kill-session -t SESSION-NAME
parancsot. Ha a parancsot az aktuális, csatlakoztatott munkamenetből írjuk be, akkor a tmux
-ból kilépünk és visszatérünk az eredeti terminál munkamenetéhez:
$ tmux kill-session -t "Second Session" [exited] $
Munkamenetek leválasztása
A Second Session
terminálásával kikerültünk a tmux'-on kívülre. Azonban még mindig van egy aktív munkamenetünk. Kérjük le a `tmux
munkameneteinek listáját, és meg is fogjuk találni:
$ tmux ls LPI: 2 windows (created Tue Aug 27 19:01:49 2019) [158x39]
Ez a munkamenet azonban lecsatolódott a termináljáról. A tmux attach -t SESSION-NAME
paranccsal csatolhatjuk (az attach
helyettesíthető at
-val vagy — egyszerűen — a
-val). Ha csak egyetlen munkamenet van, a név megadása opcionális:
$ tmux a
Most újra a munkamenetben vagyunk; a munkamenetből való kilépéshez nyomjuk meg a Ctrl+b-d billentyűkombinációt:
[detached (from session LPI)] $
Tip
|
Ugyanaz a munkamenet több terminálhoz is csatlakoztatható. Ha egy munkamenetet úgy akarunk csatolni, hogy előbb minden más terminálról leválasztjuk, használjuk a |
Fontos paracsok a munkamenetek csatolásához/leválasztásához:
- Ctrl+b-D
-
a leválasztandó kliens kijelölése.
- Ctrl+b-r
-
a kliens termináljának frissítése.
A parancsok teljes listáját a man oldalon találjuk.
Másolás és beillesztés: Scrollback mód
A tmux
szintén rendelkezik másolási móddal, alapvetően ugyanúgy, mint a screen
(ne felejtsük el, hogy a tmux és nem a screen parancs prefixét kell használni!). Az egyetlen különbség a parancsok között, hogy a Ctrl + Space billentyűkombinációval jelöljük a kijelölés kezdetét, és a Alt+w billentyűkombinációval másoljuk a kijelölt szöveget.
A tmux testreszabása
A tmux
konfigurációs fájljai általában a /etc/tmux.conf
és a ~/.tmux.conf
. Indításkor a tmux
ezeket a fájlokat forrásként kezeli, ha léteznek. Lehetőség van arra is, hogy a tmux
-ot az -f
kapcsolóval indítsuk el, hogy egy másik konfigurációs fájlt adjunk meg. Egy példa a tmux
konfigurációs fájlra a /usr/share/doc/tmux/example_tmux.conf
. A testreszabás lehetőségei meglehetősen magas szinten vannak. Íme, néhány példa:
-
A prefix megváltoztatása
# Change the prefix key to C-a set -g prefix C-a unbind C-b bind C-a send-prefix
-
Extra billentyű-hozzárendelések beállítása 9-esnél magasabb számú ablakokhoz
# Some extra key bindings to select higher numbered windows bind F1 selectw -t:10 bind F2 selectw -t:11 bind F3 selectw -t:12
Az összes hozzárendelés átfogó listáját a Ctrl+b-? (nyomjuk meg a q
-t a kilépéshez) billentyűparanccsal érhetjük el vagy a man oldalon találhatjuk meg.
Gyakorló feladatok
-
Jelöljük meg, hogy a következő utasítások/funkciók a GNU Screenhez, a tmuxhoz vagy mindkettőhöz tartoznak-e:
Funkció/utasítás GNU Screen tmux Az alapértelmezett prefix: Ctrl+a
Kliens-szerver modell
A panelek pszeudo-terminálok
Egy régió terminálása nem terminálja a hozzátartozó ablako(ka)t
A munkamenetekbe beletartoznak az ablakok
A munkamenetek leválaszthatók
-
Telepítsük a GNU Screen-t (csomag neve:
screen
) és végezzük el a következő feladatokat:-
Indítsuk el a programot! Milyen parancsot használunk?
-
Indítsuk el a
top
-ot: -
A prefix segítségével nyissunk meg egy új ablakot, majd nyissuk meg a
/etc/screenrc
-t avi
használatával: -
Listázzuk ki az ablakokat a képernyő alján:
-
Változtassuk meg az aktuális ablak nevét
vi
-ra: -
A fennmaradó ablak nevét változtassuk meg
top
-ra. Ehhez először jelenítsük meg az összes ablak listáját, hogy fel-le mozoghassunk és kiválaszthassuk a megfelelőt: -
Ellenőrizzük, hogy a nevek megváltoztak-e, úgy, hogy az ablaknevek ismét megjelennek a képernyő alján:
-
Válasszuk le a munkamenetet és a
screen
hozzon létre egy újatssh
néven: -
Válasszuk le az
ssh
-t is és listázzuk ki a munkamenetet ascreen
segítségével: -
Csatlakozzunk az első munkamenethez a PID-jével:
-
Térjünk vissza a
top
ablakhoz. Osszuk fel az ablakot vízszintesen, és lépjünk az új üres régióba: -
Listáztassuk ki az összes ablakot a
screen
segítségével és válasszuk ki avi
-t, hogy jelenjen meg az üres régióban: -
Osszuk fel függőlegesen a jelenlegi régiót, lépjünk át az újonnan létrehozott üres régióba és társítsuk azt egy vadonatúj ablakhoz:
-
Termináljuk az összes régiót, kivéve az aktuálisat (ne feledjük, attól, hogy a régiókat eltüntetjük, az ablakok megmaradnak)! Ezután lépjünk ki az aktuális munkamenet összes ablakából, amíg maga a munkamenet nem terminálódik:
-
Végül, még egyszer listáztassuk ki a
screen
segítségével az összes munkamenet, termináljuk a megmaradtssh
munkamenetat PID-del és ellenőrizzük, hogy nem maradt több munkamanet:
-
-
Telepítsük a
tmux
-ot (csomagnév:tmux
) és végezzük el az alábbi feladatokat:-
Indítsuk el a programot! Milyen parancsot kell használnunk?
-
Indítsuk el a
top
-ot (vegyük észre, hogy — néhány másodpercen belül — az ablak neve megváltoziktop
-ra az állapotsoron): -
A tmux prefixét használva nyissunk meg egy új ablakot, majd hozzuk létre a
~/.tmux.conf
fájlt anano
segítségével: -
Osszuk fel az ablakot függőlegesen, és csökkentsük az újonnan létrehozott panel méretét néhányszor:
-
Változtassuk meg az aktuális ablak nevét
text editing
-re; majd listáztassuk ki atmux
összes munkamenetét: -
Ugorjunk át a
top
ablakra, majd vissza az aktuálisra, ugyanazon billentyűkombináció használatával: -
Csatlakozzunk le az aktuális munkamenetről és hozzunk létre egy újat, aminek a neve
ssh
, az ablakának a neve pedigssh window
: -
Csatlakozzunk le az
ssh
munkamenetről és atmux
jelenítse meg újra az összes munkamenetét:NoteEttől a ponttól kezdve a gyakorlat megköveteli, hogy egy remote (távoli) gépet használjunk a helyi géphez történő
ssh
kapcsolódásokhoz (egy virtuális gép is tökéletesen megfeel és nagyon praktikus is lehet). Győződjünk meg róla, hogy a helyi gépen telepítve van és fut azopenssh-server
, valamint arról, hogy a távoli gépen legalább azopenssh-client
telepítve van. -
Most indítsuk el a távoli gépet és csatlakozzunk hozzá
ssh
-val a helyi gépről. Ha a kapcsolat létrejött, ellenőrizzük atmux
munkameneteket: -
A távoli gépen csatlakozzunk az
ssh
munkamenethez a nevével: -
A saját gépünkön csatlakozzunk az
ssh
munkamenethez a nevével úgy, hogy terminálódjon először a távoli kapcsolat: -
Jelenítsük meg az összes munkamenetet és lépjünk az első munkamenetre (
[0]
). Ha már ott vagyunk, termináljuk azssh
munkamenetet a nevével: -
Végül csatlakozzunk le az aktuális munkamenetről és termináljuk a nevével:
-
Gondolkodtató feladatok
-
A
screen
és atmux
is beléphet parancssori módba a _command prefix + : segítségével (atmux
esetében már láttunk egy rövid példát). Végezzünk némi kutatást és hajtsuk végre a következő feladatokat parancssori üzemmódban:-
A
screen
lépjen be a copy módba: -
A
tmux
nevezze át az aktuális ablakot: -
A
screen
zárja be az összes ablakot és terminálja a munkamenetet: -
A
tmux
válassza ketté a panelt: -
A
tmux
zárja be az aktuális ablakot:
-
-
Amikor a
screen
másolási módba lép, nem csak a nyílbillentyűkkel és a PgUP vagy PgDown billentyűkkel navigálhatunk az aktuális ablakban és a scrollback pufferben. Lehetőség van egy vi-szerű teljes képernyős szerkesztő használatára is. Ezzel a szerkesztővel a következő feladatokat végezhetjük el:-
Echo
supercalifragilisticexpialidocious
ascreen
terminálban: -
Most másoljuk az öt egymást követő karaktert (balról jobbra) a kurzor fölötti sorba:
-
Végül illesszük vissza a kijelölést (
stice
) a parancssorba:
-
-
Tegyük fel, hogy egy
tmux
munkamenetet (a mi munkamenetünket) szeretnénk megosztani egy másik felhasználóval. Létrehoztuk a socketet (/tmp/our_socket
) a megfelelő jogosultságokkal, hogy mind mi, mind a másik felhasználó írhasson és olvashasson. Milyen további két feltételnek kell teljesülnie ahhoz, hogy a második felhasználó sikeresen csatolni tudja a munkamenetet aztmux -S /tmp/our_socket a -t our_session
segítségével?
Összefoglalás
Ebben a leckében a terminális multiplexerekről tanultunk általánosságban, különösen a GNU Screenről és a tmuxról. A fontos fogalmak, amelyekre emlékeznünk kell:
-
Parancs prefix:
screen
esetén: Ctrl+a + karakter;tmux
, Ctrl+b + karakter. -
A munkamenetek, ablakok és ablakfelosztások (régiók vagy panelek) szerkezete.
-
Másolási mód.
-
Munkamenet leválasztás: a multiplexerek egyik leghatékonyabb funkciója
A leckében használt parancsok:
screen
-
Elindít egy screen munkamenetet.
tmux
-
Elindít egy
tmux
munkamenetet.
Válaszok a gyakorló feladatokra
-
Jelöljük meg, hogy a következő utasítások/funkciók a GNU Screenhez, a tmuxhoz vagy mindkettőhöz tartoznak-e:
Funkció/utasítás GNU Screen tmux Az alapértelmezett prefix: Ctrl+a
x
Kliens-szerver modell
x
A panelek pszeudo-terminálok
x
Egy régió terminálása nem terminálja a hozzátartozó ablako(ka)t
x
A munkamenetekbe beletartoznak az ablakok
x
x
A munkamenetek leválaszthatók
x
x
-
Telepítsük a GNU Screen-t (csomag neve:
screen
) és végezzük el a következő feladatokat:-
Indítsuk el a programot! Milyen parancsot használunk?
screen
-
Indítsuk el a
top
-ot:top
-
A prefix segítségével nyissunk meg egy új ablakot, majd nyissuk meg a
/etc/screenrc
-t avi
használatával:Ctrl+a-c
sudo vi /etc/screenrc
-
Listázzuk ki az ablakokat a képernyő alján:
Ctrl+a-w
-
Változtassuk meg az aktuális ablak nevét
vi
-ra:Ctrl+a-A. Majd íruk be a
vi
-t és nyomjuk meg az enter-t. -
A fennmaradó ablak nevét változtassuk meg
top
-ra. Ehhez először jelenítsük meg az összes ablak listáját, hogy fel-le mozoghassunk és kiválaszthassuk a megfelelőt:Először: Ctrl+a-". Majd a nyilak segítségével válasszuk ki azt, amelyik
0 bash
és nyomjuk meg az enter-t. Végül: Ctrl+a-A, írjuk be, hogytop
és enter. -
Ellenőrizzük, hogy a nevek megváltoztak-e, úgy, hogy az ablaknevek ismét megjelennek a képernyő alján:
Ctrl+a-w
-
Válasszuk le a munkamenetet és a
screen
hozzon létre egy újatssh
néven:Ctrl+a-d
screen -S "ssh"
majd enter. -
Válasszuk le az
ssh
-t is és listázzuk ki a munkamenetet ascreen
segítségével:Ctrl+a-d
screen -list
vagyscreen -ls
. -
Csatlakozzunk az első munkamenethez a PID-jével:
screen -r PID-OF-SESSION
-
Térjünk vissza a
top
ablakhoz. Osszuk fel az ablakot vízszintesen, és lépjünk az új üres régióba:Ctrl+a-S
Ctrl+a-Tab
-
Listáztassuk ki az összes ablakot a
screen
segítségével és válasszuk ki avi
-t, hogy jelenjen meg az üres régióban:Használjuk a Ctrl+a-" parancsot, hogy az összes ablakot megjelenítsük kiválasztásra, jelöljük ki a
vi
-t és nyomjuk meg az enter billentyűt. -
Osszuk fel függőlegesen a jelenlegi régiót, lépjünk át az újonnan létrehozott üres régióba és társítsuk azt egy vadonatúj ablakhoz:
Ctrl+a-|
Ctrl+a-Tab
Ctrl+a-c
-
Termináljuk az összes régiót, kivéve az aktuálisat (ne feledjük, attól, hogy a régiókat eltüntetjük, az ablakok megmaradnak)! Ezután lépjünk ki az aktuális munkamenet összes ablakából, amíg maga a munkamenet nem terminálódik:
Ctrl+a-Q.
exit
(a Bash-ból való kilépéshez). Shift+:, majd írjuk be, hogyquit
, majd enter (avi
-ból való kilépéshez). Ezutánexit
(az alapértelmezett Bash shellből való kilépéshez)q
(atop
terminálása); majdexit
(az alapértelmezett Bash shellből való kilépéshez). -
Végül, még egyszer listáztassuk ki a
screen
segítségével az összes munkamenet, termináljuk a megmaradtssh
munkamenetat PID-del és ellenőrizzük, hogy nem maradt több munkamanet:screen -list
vagyscreen -ls
screen -S PID-OF-SESSION -X quit
screen -list
vagyscreen -ls
-
-
Telepítsük a
tmux
-ot (csomagnév:tmux
) és fejezzük be az alábbi feladatokat:-
Indítsuk el a programot! Milyen parancsot kell használnunk?
tmux
-
Indítsuk el a
top
-ot (vegyük észre, hogy — néhány másodpercen belül — az ablak neve megváltoziktop
-ra az állapotsoron):top
-
A tmux prefixét használva nyissunk meg egy új ablakot, majd hozzuk létre a
~/.tmux.conf
fájlt anano
segítségével:Ctrl+b-c
nano ~/.tmux.conf
-
Osszuk fel az ablakot függőlegesen, és csökkentsük az újonnan létrehozott panel méretét néhányszor:
Ctrl+b-"
Ctrl+b-Ctrl+↓
-
Változtassuk meg az aktuális ablak nevét
text editing
-re; majd listáztassuk ki atmux
összes munkamenetét:Ctrl+b-,. Majd adjuk meg az új nevet és enter. Ctrl+b-s vagy
tmux ls
. -
Ugorjunk át a
top
ablakra, majd vissza az aktuálisra, ugyanazon billentyűkombináció használatával:Ctrl+b-n vagy Ctrl+b-p
-
Csatlakozzunk le az aktuális munkamenetről és hozzunk létre egy újat, aminek a neve
ssh
, az ablakának a neve pedigssh window
:Ctrl+b-d
tmux new -s "ssh" -n "ssh window"
-
Csatlakozzunk le az
ssh
munkamenetről és atmux
jelenítse meg újra az összes munkamenetét:Ctrl+b-d
tmux ls
NoteEttől a ponttól kezdve a gyakorlat megköveteli, hogy egy remote (távoli) gépet használjunk a helyi géphez történő
ssh
kapcsolódásokhoz (egy virtuális gép is tökéletesen megfeel és nagyon praktikus is lehet). Győződjünk meg róla, hogy a helyi gépen telepítve van és fut azopenssh-server
, valamint arról, hogy a távoli gépen legalább azopenssh-client
telepítve van. -
Most indítsuk el a távoli gépet és csatlakozzunk hozzá
ssh
-val a helyi gépről. Ha a kapcsolat létrejött, ellenőrizzük atmux
munkameneteket:Távoli hoszton:
ssh local-username@local-ipaddress
. Ha csatlakozott a lokális géphez:tmux ls
. -
A távoli gépen csatlakozzunk az
ssh
munkamenethez a nevével:tmux a -t ssh
(aza
helyett lehetat
vagyattach
is). -
A saját gépünkön csatlakozzunk az
ssh
munkamenethez a nevével úgy, hogy először terminálódjon a távoli kapcsolat:tmux a -d -t ssh
(aza
helyett lehetat
vagyattach
is). -
Jelenítsük meg az összes munkamenetet és lépjünk az első munkamenetre (
[0]
). Ha már ott vagyunk, termináljuk azssh
munkamenetet a nevével:Először Ctrl+b-s, majd a nyilak segítségével megkeressük a
0
munkamenetet és entertmux kill-session -t ssh
. -
Végül csatlakozzunk le az aktuális munkamenetről és termináljuk a nevével:
Ctrl+b-d
tmux kill-session -t 0
.
-
Válaszok a gondolkodtató feladatokra
-
A
screen
és atmux
is beléphet parancssori módba a _command prefix + : segítségével (atmux
esetében már láttunk egy rövid példát). Végezzünk némi kutatást és hajtsuk végre a következő feladatokat parancssori üzemmódban:-
A
screen
lépjen be a copy módba:Ctrl+a-: — majd íruk be, hogy
copy
. -
A
tmux
nevezze át az aktuális ablakot:Ctrl+b-: — majd íruk be, hogy
rename-window
. -
A
screen
zárja be az összes ablakot és terminálja a munkamenetet:Ctrl+a-: — majd íruk be, hogy
quit
. -
A
tmux
válassza ketté a panelt:Ctrl+b-: — majd íruk be, hogy
split-window
. -
A
tmux
zárja be az aktuális ablakot:Ctrl+b-: — majd íruk be, hogy
kill-window
.
-
-
Amikor a
screen
másolási módba lép, nem csak a nyílbillentyűkkel és a PgUP vagy PgDown billentyűkkel navigálhatunk az aktuális ablakban és a scrollback pufferben. Lehetőség van egy vi-szerű teljes képernyős szerkesztő használatára is. Ezzel a szerkesztővel a következő feladatokat végezhetjük el:-
Echo
supercalifragilisticexpialidocious
ascreen
terminálban:echo supercalifragilisticexpialidocious
-
Most másoljuk az öt egymást követő karaktert (balról jobbra) a kurzor fölötti sorba:
Belépés a copy módba: Ctrl+a-[ vagy Ctrl+a-: majd íruk be, hogy
copy
. Ezután ak
-val lépjünk a fölső sorba és a space lenyomásával kezdjük el a kijelölést. Végül menjünk végig a négy karakteren al
segítségével és nyomjuk meg a space billentyűt ismét a kijelölés befejezéséhez. -
Végül illesszük vissza a kijelölést (
stice
) a parancssorba:Ctrl+a-]
-
-
Tegyük fel, hogy egy
tmux
munkamenetet (a mi munkamenetünket) szeretnénk megosztani egy másik felhasználóval. Létrehoztuk a socketet (/tmp/our_socket
) a megfelelő jogosultságokkal, hogy mind mi, mind a másik felhasználó írhasson és olvashasson. Milyen további két feltételnek kell teljesülnie ahhoz, hogy a második felhasználó sikeresen csatolni tudja a munkamenetet aztmux -S /tmp/our_socket a -t our_session
segítségével?Mindkét felhasználónak rendelkeznie kell egy közös csoporttal, pl.
multiplexer
. Ezután a socketet is át kell helyeznünk ebbe a csoportba:chgrp multiplexer /tmp/our_socket
.