Bash csere ZSH-ra Linux alatt

Zsh is shell, de nem ilyen...
Zsh is shell, de nem ilyen...

Ebben a cikkben azokat a lépéseket ismerjük meg, amivel le tudtod cserélni az alapértelmezett shell-t Linux alatt egy fejlettebb (azaz nekem jobban tetsző) zsh-ra.
Lecseréljük. De nem azért mert nem jó, hanem azért mert van jobb is. A legtöbb Linuxban alapértelmezett a bash héj, ami egy nagyon jó dolog, de nekem jobban tetszik a zsh. Ami természetesen szubjektív tény, és ha neked más jobban tetszik, akkor használd azt. Amit érdemes tudni, hogy bár elméletileg bármelyik shell-t használhatod (vagy fél tucat elterjedt létezik), de nem mindegyikkel kompatibilis minden szkript, vagy program. Picit mindegyik más, így ha valami a shell, a parancsértelmező csere után nem működik, akkor itt lesz a hiba. Az a tapasztalatom, hogy a legtöbb szkript, amit találni az interneten jellemzően jól működik, de a nagy része bash-hoz készült

OK, akkor egy alapozó, pár mondatos bevezető is kellene. Mi is az a shell, azaz a rendszerhéj? Ami itt nagyon fontos: én csak nagyon leegyszerűsítem a témát, így a guruk, és a mélyebb ismeretekkel rendelkezők kíméljenek…

Mi az a shell, azaz parancsértelmező Linuxon?

Természetes, hogy van egy hardverünk, amiben ott az összes használható eszköz: printer, CPU, billentyűzet, videokártya és más sok olyan, amiről tudomásunk sincs, hiszen a gépház rejti. Ha kíváncsi vagy, mi van a gépedben, akkor sem kell szétszedni, az inxi parancs szépen kilistázza a főbb alkotóelemeket. Ezeket az elemeket kezeli a kernel, azaz a rendszermag. Minden Linuxban ott van, és folyamatosan frissül. Mi, legalábbis a legtöbb disztribúcióban készen kapjuk, így nincs vele teendő. Ennek a kernelnek, a rendszermagnak van egy sorszáma, jelenleg az 6,2-es sorozat a fő verzió. Alapesetben nem kell, sőt kezdőknek ellenjavallt a kernel fordítása, azaz a forrásból való építése. Erre akkor van szükség, ha az alapértelmezett kernel nem támogat valamilyen eszközt a gépedben, és azt csak úgy tudod majd használni, ha saját rendszermagot fordítasz. Lehet... nem is nehéz..., de ez inkább haladó feladat olyanoknak, akik tudják, hogy mit is csinálnak.
Általában a modernebb disztribúciókban nincs is szükség a kernel kézi fordítására, hiszen a disztribútor előrecsomagolt "konyhakész", a rendszer csomagkezelőjével telepíthető kernelcsomagokat ad. Kövessük a kitaposott utat, telepítsük (ha kell) ezeket. Egy grafikus telepítést mutatok itt be Linux Mint alatt.
Mi közvetlenül a kernellel nem tartjuk a kapcsolatot, arra van a shell, azaz a rendszerhéj, parancsot értelemező réteg. Ez jellemzően úgy jelenik meg egy felhasználónak, mint egy terminálablak, vagy maga a parancssoros része a Linuxnak. Itt adjuk meg a parancsokat, amit a shell értelmez, majd továbbadja a feladatot végrehajtásra. Ezt a shell-t egészítik ki grafikus felülettel, hogy kényelmes legyen a használat, ami máris adja a felvetést, hogy érdemes a shell-t megismerni és használni, hiszen egyszerű felhasználóként ezzel állunk a legközelebb a tényleges munkát végző hardverhez. Itt nincs erőforrásokat lefoglaló grafikus felület, vagy program, ezért sok esetben gyorsabban tudjuk a feladatokat elvégezni. Az esetek egy részében. Bár szeretem a shell-t használni, jó pár cikket is írtam ilyen-olyan egyszerű, vagy bonyolultabb CLI, azaz parancssoros programokról, de nem csak ez az egy út létezik! Akinek kedvesebb a grafikus felület, az is megtalálja a számára megfelelőt programot. Azaz grafikus felület – shell – kernel – hardver, valahogy így jön egymásra az a pár réteg, ami magát a rendszerünket alkotja.

Melyik a jobb shell?

Ha már fontos a shell, amivel dolgozunk, akkor érdemes olyant használni, ami neked megfelelő, és még kényelmes is. A parancssoros, a "terminálos", CLI megoldások ellen nagy „érv”, hogy kényelmetlenek. Ez első időben így is van, sokat kell gépelni, sok mindent tudni kell. De pár kényelmetlenségen lehet segíteni, hiszen sok rutin munkát lehet a Linux alatt automatizálni, lehet egy hosszú parancsot lerövidíteni aliasokkal, vagy szkriptekkel (mini programokkal). Ezekhez sem kell semmi olyan tudás, amit egy egyszerű Linux használó el ne tudna sajátítani.

A bash shell az alapértelmezett shell sok Linuxban. Ezzel nincs is gond. De van olyan, ami talán kényelmesebb, és jobban kezelhető.

Miért váltsunk zsh-ra Linux alatt?

  • rendelkezik automata kiegészítővel, ami az útvonal, vagy parancs első betűinek leütése után a TAB segítségével kiegészíti intelligensen. Ha több lehetséges kiegészítés van, akkor azt felsorolja és a TAB-bal lépkedve kiválaszthatjuk a kívántat (ezt próbáld majd ki, mert leírva nem egy nagy szám, de ha ha megszeretjük, akkor nehéz lesz élni nélküle).
  • bizonyos fokig kezeli, javítja az elütéseket, ami gyorsabb munkát eredményezhet
  • témák és pluginok használathatóak hozzá, ami nagyon kényelmessé teszi a munkát
  • szerintem gyorsabb, de ez szubjektív vélemény

Természetesen a többi, fejlettebb shell is tudja ezeket, vagy ezek egy részét, de kérdés a mértéke, illetve a használhatóságának foka!

Zsh telepítése Linux rendszeren

Amit leírok azt MX Linux alatt biztosan így kell csinálni, de más disztribúcióban más telepítés is elképzelhető.

sudo apt install zsh

Elvileg ez is jó, de én azt ajánlom, hogy a kedvenc MX Package Installer-ben, vagy a synaptic-ben, vagy amit használsz, keress rá a zsh-ra, és minden olyan kiegészítőt tegyél fel, ami logikusan hozzá tartozik. Így több olyan is felkerül, ami kényelmesebbé teheti a használatot.

Arch Linux alatt vagy használd a kedvenc grafikus felületedet, vagy a

sudo pacman -S zsh

parancsot.

Zsh legyen az alapértelmezett a Linuxunk alatt

Már csak alapértelmezetté kell tenni, hiszen jelenleg a bash az alapértelmezett shell.

chsh -s $(which zsh)

A jelszó megadása után megteszi, amit kell. Egy fontos feladatunk van: újra kell indítani a gépet, de legalábbis kilépni, és vissza. Ezután már a zsh lesz a shell.
A gyors váltás két shell közt máris ad egy jó gondolatot: nem kell azonnal eldönteni, hogy a sokféle shell közül melyiket használd. Ha valami miatt az egyik nem tetszik, csak egy sor és máris váltani tudsz. Vagy akár használhatsz két shellt is párhuzamosan, mindig arra váltva amit használni akarsz.

echo $SHELL

Leellenőrizzük, hogy valóban jól dolgoztunk. Valami ilyent kell kapni:

laci:~/ $ echo $SHELL
/usr/bin/zsh

zsh –version

Biztos, ami biztos kérdezzük le verziót, bár valószínű, hogy megfelelő lesz. Fontos, hogy 5.1.1 feletti legyen, mert egy kiegészítőt is felrakunk, hogy olyan legyen a környezetünk, ami nekünk megfelelően néz ki. Majdnem biztos, hogy elég friss lesz, mert szerintem minden disztribúció gyorsan frissíti a shell csomagokat.

Amikor először megláttam, kicsit csalódtam, mert hááát… szóval elég bénán nézett ki, nem olyan, mint a képeken. A kinézetén segítsünk a legelején. Erre több megoldás is van, én az Oh My Zsh-t használom, sok téma, sok plugin tartozik ehhez a csomaghoz.

Vagy a

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

vagy

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

telepíthetjük. Ha sem a curl, sem a wget nincs fenn, akkor előbb azt fel kell telepíteni. Amúgy is tedd meg, mert sok szkript, program használja ezt a két letöltő eszközt.

Zsh beállítása

Majd nyissuk meg a saját könyvtárunkban a .zshrc rejtett fájlt. Ha nem látod, akkor a fájlkezelődben engedélyezd a rejtett fájlokat. Ha véletlenül nincs ilyen fájlod, akkor a .oh-my-zsh/templates könyvtárban lévő mintát másod át ide .zshrc néven. Én is így jártam el Arcolinux alatt. Ha pedig nincs gyakorlatod a konfig szerkesztésben, ezt mindenképp olvasd el!

ZSH_THEME="robbyrussell"

Ilyen sort keress.

Ezután már csak annyit kell eldöntened, hogy a sok-sok téma közül melyik az ami neked tetszik. A témákat itt nézheted meg. Igen, van róluk kép! Mindegyiknek van egy neve, amit ha beírsz (bemásolsz) a fenti sorba, akkor az fog megjelenni azonnal. Ha nem (és ennek nagy a valószínűsége), akkor becsukod a terminált és újra megnyitod és már kívánt kinézető a Linuxos terminálod.

A témák a ~/.oh-my-zsh/themes/ könyvtárban vannak, ha "kézzel" telepítesz, akkor érdemes ide tenni őket. Illetve itt is nézelődhetünk témák területén, akár át is írhatjuk őket. Itt, ebben a könyvtárban található fájlnevet kell megadni a ZSH_THEME= sorban.

Előfordul, hogy lesz olyan téma, ami nem úgy néz ki, mint a képen. Ilyenkor telepítsd a Powerline fontkészletet.

sudo apt-get install fonts-powerline

Ha nincs a terjesztésedben, akkor itt olvashatsz róluk.

Még egy fontos teendőnk van. Alap értelmezettként ez a sor le van tiltva:

# If you come from bash you might have to change your $PATH.
#export PATH=$HOME/bin:/usr/local/bin:$PATH

Az export elől vegyük ki a # jelet, így engedélyezzük a PATH-ot. Ha máshol is van olyan könyvtár, melyet bele szeretnénk foglalni az elérési útba, akkor egészítsük ki. Nekem az ~/bin-ben vannak a saját futtatható állományaim, így pluszt nem kell beleírni.

Akinek van kedve és érdekli a téma, annak érdemes az egész beállító fájlt átnézni, illetve a leírást is nézegetni. Sok hasznos, vagy kevésbé hasznos beállítás van.  Mivel nagyon jól dokumentált és egyszerű, így csak két lehetőségre hívom fel a figyelmet. Az egyik az alias megadási lehetőség. Aki bash alatt megszokta ezt a rövidítést, annak itt is módja lesz megadni a kedvenc alias-okat. Akinek még fogalma nincs ezekről, annak érdemes ezt elolvasni.

Arcolinux használóknak érdemes végignézni a ~/.bashrc-ben az összes aliast átnézni, amit Erik készített, mert sok hasznost találsz ott. Ezek nem exportálódnak be a zsh.rc-be, így kézzel kell átmásolni.

Akit zavar, hogy időnként a terminál indításakor a zsh frissítené magát, annak érdemes az export UPDATE_ZSH_DAYS= sorban egy szép nagy számot megadni.

A zsh pluginjai Linux alatt

Ezek olyan kis kiegészítők, melyek nagyon megkönnyítik a munkát. Viszonylag sokféle van, a legtöbb jól dokumentált, így csak a telepítésükre térek ki. Amire figyelni kell, hogy eltérhet a disztribúcióknál az elérési út, így mindig vedd figyelembe, ha valami nem megy, akkor ez lehet az oka. Amit leírok, az MX Linuxon és Arcolinux alatt így működik, máshol sem lehet nagyon másképp...

A pluginok a ~/.oh-my-zsh/plugins könyvtárban lesznek, itt mindegyikhez van egy leírás is.
Az installálásuk egyszerű, csak a már ismert .zshrc-t kell szerkeszteni, és nem meglepő mód a plugins= sorban kell felsorolni.

Én az archlinux plugint használom (logikusan, ha Arch alapot futtatok éppen), ami nagyon jó közelítéssel egy egyszerű alias beállítási csomag, ahol több, a rendszer karbantartással kapcsolatos műveletet rövid, pár karakteres paranccsal meg tudunk oldani. Bár én úgy neveztem, hogy „egyszerű”, de természetesen nem csak alias felsorolásokból áll. Az ilyen plugin fájlok viszonylag egyszerűek, így akinek kedve van, annak érdemes belenézni. Ilyen rendszer-karbantartó pluginok a legtöbb Linux disztribúcióhoz elérhetőek.

A másik kedvencem a sudo. Ez nem tesz mást, csak a parancssorba beírt parancs elé teszi a sudo-t, vagy ha üres a sor, akkor az előző parancs elé rakja. Nem egy nagy szám, de sokszor elfelejtek rendszergazdává átlépni, vagy a sudo-t beírni. Ilyenkor szól a rendszer, hogy kevés a jogosultságunk, és kétszer megnyomjuk a ESC-et, és a parancs elé odakerül a sudo. Nem kell újra begépelni az egész parancsot...

Arra mindenképp figyelj, hogy csak olyan plugineket aktiválj, amikről tudod is, hogy mit tesznek. Illetve arra is figyelj, hogy vannak disztribúció függő pluginek is, amik értelemszerűen más disztribúcióban nem használhatóak!

Az interneten sok példa, bemutató, és leírás van a zsh-ról, és a Oh My Zsh-ról. Ezeket érdemes átfutni.

Ha van egy program, ami telepítésénél azt írják elő, hogy a .bashrc-be kell írni valamit, akkor itt értelemszerűen a .zshrc-be kell azt tenni. Amit kiemelek: tüb programnál találkoztam olyan leírással, hogy eltérő shell-ben eltérő kódrészletet kellett beírni valahovy, vagy akár eltérő szkriptet kell használni. Nem árt a megfelelő shell-hez valót végrehajtani, mert ha ennyire ki van emelve, akkor annak oka van. Ahogy mondtam: egy picit mindegyik más.

A leírtakat Arcolinux és MX linux alatt teszteltem 2019. decemberében.
Egy hasonló cikket találtam: https://linuxmint.hu/blog/2021/10/zsh-telepitese-neofetch-csel