A Linux előnye, hogy bármit testre szabhatsz, ha akarsz. Ez a projektív rendszerek előnye a procedurális rendszerekkel szemben. Ez egyfajta konstruktor, amely egyedi blokkokból áll, amelyek mindegyike tetszés szerint testre szabható.
Különösen érdekes, ha nem csak kész megoldásokat másolsz, hanem megpróbálod megérteni, hogy mi és hogyan működik. És még egy komolytalan feladat megoldása közben is tanulsz valami újat.
Például az ls
parancs kimeneténél a linux terminál színeit szeretnénk beállítani.
Az ls
dokumentációjából megértheted, hogy a kimenet színeinek beállítása a dircolors segédprogrammal történik, amely vagy a saját adatbázisából állítja be a színparamétereket, vagy a ~/.dircolors
fájlból veszi azokat. Azt is említették, hogy a színhasználat inicializálása a ~/.bashrc
, a shell beállítási fájlján keresztül történik, magukat a paramétereket pedig az LC_COLORS
változóval határozzuk meg.
A .bashrc
állományban a következő szkriptet találtuk:
Ennek lényege, hogy ellenőrzi a dircolors segédprogram jelenlétét a rendszerben, értéket rendel a változóhoz, és ha ez sikeres, akkor az ls
minden egyes meghívásakor a --color=auto
paramétert használja.
Ha a dircolors segédprogramot futtatjuk, akkor az kiadja az LC_COLOR
változó értékét.
Az LC_COLORS
változó értékét strukturált formában is ki lehet adni, a kulcs megadásával:
$ dircolors -p
Mivel a kimenet hosszú, itt nem adom meg.
Ha a dircolors -p -p
> ~/.dircolors
kimenetet átirányítjuk, akkor egy strukturált fájl jön létre, amelyből a színbeállításokat vesszük. Ennek a fájlnak a szerkesztésével és az ls
kimenet színbeállításainak beállításával.
A létrehozott .dircolors
fájlban van egy utalás:
A sorrend beállítása pontosvesszőn keresztül, és a linux konzolban a felsoroltak szerint kapjuk meg a kívánt színt. A linux terminál színei 30-tól 37-ig terjednek a betűtípus színére, és 40-től 47-ig a háttér színére. Például:
DIR 01;34 azt jelenti, hogy a könyvtárnevek félkövér és kék színűek lesznek.
De így csak nyolc színt kapunk, a modern terminál emulátorok pedig legalább 256 szín megjelenítésére képesek.
A színek beállításának más módjai is vannak. Például: EXEC 38;5;208;1 narancssárga vastag betűtípust ad a futtatható fájlok számára.
Hogy ne kelljen kézzel végigmenni a linux színein, van egy kész színtáblázat a színekről
A 38;5;x - ahol x a táblázatban szereplő szín - színértéket behelyettesítve megkapjuk a szükséges eredményt. Valami ilyesmit kapunk:
Hogyan működik ez? A lényeg az, hogy a terminál emulátorban kimenő információ színének beállítása ANSI escape kódok segítségével történik. Ez egy bizonyos karaktersorozat, amely nem jelenik meg a képernyőn, de befolyásolja a kimenetet. Azért hívják így, mert [ - "Esc" kóddal kezdődik. Mivel sok terminál és terminálemulátor létezik, ezek a vezérlőkódok szabványosítva vannak. A 30-tól 37-ig terjedő sorozaton keresztül történő színvezérlés az ECMA-48 szabvány. Erről a console_codes
szakaszban találhatók információk.
Ha már megértette, hogyan lehet a linux színeit az esc kódokon keresztül beállítani, akkor könnyen áttervezheti és színezheti a promptot. A ~/.bashrc
fájlban definiált PS1 változó felelős a kimenetéért.
Linux Mintben az inicializáló szkript így néz ki:
Vagyis először megállapításra kerül, hogy a szkriptet root vagy normál felhasználó futtatta-e. Mivel az esetek túlnyomó többségében ez a második lehetőség, az első 'else' utáni sort kell szerkeszteni. A sor formátuma a bash dokumentációban, a "Promting" részben megfejthető. Ebből kiderül, hogy az esc-sorozatnak "["-val kell kezdődnie és "]"-val kell végződnie. Tehát: "A": "A": "A": "A": "A": "A": "A": "A":
u
- kiadja a felhasználónevet;h
- a hoszt nevét adja ki;w
- a munkakönyvtár nevét adja ki;Mit lehet még kiadni a promptban:
d
- a dátum, "Wed Dec 28" formátumban;A
- az idő, 24 órás formátumban;Mutassunk be valami érdekesebbet:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
És a prompt sor így fog kinézni: