Tartalom
Bevezető
A rendszeres, parancssori felületen végzett munka megterheli az ember szemét, ezért törekednünk kell arra, hogy minél könnyebben olvasható legyen a terminálban lévő szöveg.
Amikor létrehozunk egy shell felhasználót például Debianban, és elkezdjük vele a munkát, alapértelmezetten egyféle színnel jelenik meg minden. Így egy idő után elég fárasztóvá válik például a különböző parancsok kimenetei között keresgélni a határokat, mivel színek hiányában minden összeolvad. Vagy például egy könyvtár listázásánál bogarásznunk kell az alkönyvtárakat, amik egybefolynak a fájlnevekkel.
Vannak terminál programok, amik eltérő színekkel különböztetnek meg bizonyos szövegrészeket, pl. megjelenített IP-címek, vagy a különböző hiba szavak, hogy kiemeljék a fontosabbnak vélt részeket. Ilyen terminál program például a MobaXterm, amit én is használok. Azonban az ilyen automatizált módon történő kiemelés nem mindig elég, ezért saját megoldásokkal kell tarkítanunk a parancssort.
Ebben a leírásban veszünk sorra néhány egyszerű praktikát, amivel színesebbé, kényelmesebbé tehetjük a terminálban végzett munkát.
A jobb szemléltethetőség kedvéért itt a sima Putty terminálban mutatom a kimeneteket, ami nem használ szintaktikai szövegkiemelést, így csak a saját színkezelési megoldások lesznek különböző színekkel kiemelve.
Színezzük a prompt-ot!
Szerintem a legkézenfekvőbb dolog ezen a téren, ha a prompt színezésével kezdjük, mivel ez választja el a parancsok kimeneteit egymástól, így optikailag sokkal tagoltabbá válik a terminál szövege.
Először is járjunk utána, hogy hogyan lehet módosítani a prompt-unk színét.
Ha belenézünk a home könyvtárunkban lévő .bashrc fájlba, akkor láthatunk benne részeket, amik a PS1 környezeti változónak adnak értéket, ami a prompt megjelenését szabályozza:
[...] #force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then # We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would tend to support setf rather than setaf.) color_prompt=yes else color_prompt= fi fi if [ "$color_prompt" = yes ]; then PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt [...]
Ebben a kódrészletben láthatjuk, hogy van itt színes prompt beállítás is, csak éppen ki van kapcsolva. Szerkesszük a fájlt például a nano programmal, majd vegyük ki a kommentet a kódrészlet első értékadó sora elől:
force_color_prompt=yes
Ekkor lefut a fájl első feltétele is, ahol a tput parancs meglétének vizsgálata után bekapcsolja a színes prompt-ot.
Mentsük le, és futtassuk le a .bashrc fájlunkat a source paranccsal:
source ~/.bashrc
Vagy a source parancs rövidítésével a "." -al:
. ~/.bashrc
Ezután már egyből egy színes prompt fogad bennünket:
Ezek a színek csak a "gyári" beállítás részei, természetesen lehetőség van egyéni színek beállítására.
Alapértelmezetten a prompt beállítás így néz ki:
\u@\h:\w\$
Ahol az "u" az Username, a "h" a Host és a "w" pedig a Working directory, azaz az aktuális könyvtár. Persze még van több változó is, amikkel például a dátumot, időt is kiírathatjuk, de most csak ezekkel foglalkozunk.
Ha visszanézünk a fenti kódrészletre, akkor láthatjuk, hogy először egy feltétel második ágában futott le az alapértelmezett beállítás, majd miután kivettük a kommentet az értékadás elől, már a feltétel első ága futott le, amiben az a sok cifra karaktersorozat van, amik között rejtőznek az imént említett prompt változók.
Itt lényegében annyi történik, hogy a terminálnak illetve a Bash parancsértelmezőnek különböző escape azaz vezérlőkarakterekkel lehet megmondani, hogy az utána lévő karakterek milyen színnel/háttérszínnel/attribútummal jelenjenek meg. Majd a színezni kívánt rész után ismét kell egy úgynevezett resetelő karaktersorozat, ami visszaállítja a szín attribútumokat az alapállapotra. Majd utána a következő résznél új szín atribútum jön, ezután jön a következő változó, majd ismét reset. És így tovább.
Hogy egyszerűbben megértsük ennek a logikáját, futtassuk le a következő parancsot:
echo -e "alap \033[01;32m zöld \033[00m alap"
Aminek a kimenetén egyből látható a lényeg:
Az echo parancsnak ilyenkor kell a -e kapcsoló, ami engedélyezi a speciális karakterek értelmezését a karakterláncokban. Enélkül csak simán, egy az egyben írná ki az idézőjelek közti részt.
Így már jobban érthető az egész. A különböző színkódokat és a karakterek speciális viselkedéséért felelős attribútumokat a leírás utolsó fejezetében tárgyaljuk ki részletesen, most térjünk vissza a prompt színeinek állítgatásához.
Tehát láthattuk a működési elvét az egésznek, így most már könnyebben el tudjuk kezdeni magunk is a prompt színeinek variálását. Kísérletezgetésre kiválóan alkalmas a http://ezprompt.net/ Bash PS1 generáló weboldal, ahol vizuálisan állíthatjuk össze a saját prompt-unkat:
Ezen az oldalon kényelmesen rakhatunk össze bármilyen prompt-ot, tetszőleges színekkel (nekem éppen ez a kedvenc összeállításom). Ha elkészült a remekművünk, akkor csak az alsó szövegdobozból kell kimásolnunk a PS1 környezeti változónak értéket adó kódsort, amit behelyettesíthetünk a ~/.bashrc fájlunk fent mutatott kódrészletének a megfelelő sorába (célszerűb inkább kikommentezni az eredeti PS1 értékét beállító sort, és ezt alá másolni, hogy bármikor vissza tudjunk állni a gyári beállításra), majd a fent mutatott source paranccsal ismét lefuttatni a ~/.bashrc fájlt, és már készen is van a színes prompt-unk.
Használjuk a parancsok színes opcióit, ahol lehet!
A következő praktikával a különböző parancsok kimeneteit kelthetjük életre a színek használatával. Sok parancs rendelkezik olyan kapcsolóval, amivel a saját kimenetét emeli ki színek használatával. Vegyünk néhány példát.
ls parancs
Az ls talán az egyik leggyakrabban használt parancs a Linux terminálban, amivel a könyvtárak tartalmát listázhatjuk ki sokféle módon. Az ls súgójában találhatunk egy -C vagy --color kapcsolót, amivel kihasználhatjuk a parancs színkezelő opcióját. Sok esetben a ~/.bashrc fájlban már előre definiálják az ls parancs alias-ában ezt a kapcsolót:
[...] # enable color support of ls and also add handy aliases if [ -x /usr/bin/dircolors ]; then test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" alias ls='ls --color=auto' #alias dir='dir --color=auto' #alias vdir='vdir --color=auto' #alias grep='grep --color=auto' #alias fgrep='fgrep --color=auto' #alias egrep='egrep --color=auto' fi [...]
Ebben a .bashrc fájlban (Debian 8.10) tehát már be van kapcsolva az ls parancs színkezelő opciója alapból (az első alias sor nincsen kikommentezve), aminek hatására például a gyökérkönyvtár listázásának a kimenete:
Viszont a root felhasználónál nincsen bekapcsolva alapértelmezettként. Ha belépünk root-ként és ugyanígy kilistáztatjuk a gyökérkönyvtárat, akkor a kimentünk nem lesz színes:
Itt már bizony nincsenek színek, sőt, még a prompt-unk sem színes. Ugye mennyivel nehezebb olvasni az egészet?
Ezt könnyen orvosolhatjuk, ha megnyitjuk a /root/.bashrc fájlt, és kivesszük a kommentet a következő három sor elől:
[...] export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' [...]
Majd lefuttatjuk a fájlt, hogy érvényesüljenek a változások:
. /root/.bashrc
És most újra kilistázzuk a gyökérkönyvtárat:
Itt már megjelennek a színek a root felhasználó ls parancs kimeneteiben is. Így már sokkal áttekinthetőbb az egész. Ha még ezt megfejeljük egy további könyvtár előre rendezési kapcsolóval is:
[...]
export LS_OPTIONS='--color=auto --group-directories-first'
[...]
és újra futtatjuk a .bashrc fájlt, ahogyan az előbb, akkor a következő könyvtár listázásunk kimenete már egészen barátságos lesz:
Így még áttekinthetőbbé vált az egész, mert a könyvtárakat sorolja előre, ami sokkal jobb olvashatóságot biztosít.
Az ls parancs a színsémáját a dircolors programtól kapja, ami feltölti az "LS_COLORS" környezeti változóba a különböző fájlkiterjesztésekhez társítandó színkódokat. Tehát ha lefuttatjuk ezt a programot:
dircolors
Akkor kapunk egy hosszú, kettőspontokkal szeparált listát, amiben fel vannak töltve a különböző fájlkiterjesztések és a színkódjaik:
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'; export LS_COLORS
Majd a végén az export parancsot lefuttatva tölti fel az LS_COLORS környezeti változóba.
Ezután az ls parancsot használva az innen fogja tudni, hogy a könyvtár listázásakor a könyvtárban talált fájlokat milyen színnel jelenítse meg a fájlkiterjesztésük alapján.
Így ha esetleg valakinek kedve támad variálni ezeken a színeken, akkor csak ezt a két (értékadó és exportáló) sort kell bemásolni a .bashrc fájljába a módosított értékekkel.
grep parancs
A grep parancs segítségével mintákat kereshetünk a fájljainkban, vagy éppen a csővezetéken kapott kimenetben. Ha megnézünk egy egyszerű példát, amivel a felhasználó home könyvtárában megkeressük (rekurzívan az összes fájlban) az "if" szót:
grep -rnw . -e "if"
akkor kapunk egy olvashatatlan, egybefolyó, színtelen kimenetet:
Az ls-hez hasonlóan a grep-nek is van egy ugyanilyen "--color=auto" kapcsolója. Ha most ugyanezt a keresést végrehajtjuk ezzel a színkezelő kapcsolóval:
grep -rnw --color=auto . -e "if"
Akkor már teljesen más lesz a kimenet. Kapunk fájlnév színezést, sorszám kiemelést, és természetesen a keresett mintát is kiemeli nekünk a grep parancs. Tehát megéri használni ezt a kapcsolót. Ha pedig rendszeresen használjuk, akkor a fenti .bashrc fájlban lévő kommentet kell kivenni a grep parancs elől, és futtatni a .bashrc-t és onnantól már alapból lesznek színek a grep-es kereséseknél.
Vannak még egyéb parancsok is, amik tudnak színeket kezelni, ezért a gyakrabban használt parancsoknál keressük a súgójában a kimenet színkezelésére utaló kapcsolókat, mint például az ls és a grep esetén a "--color". Azután a fenti minta alapján beépíthetjük őket a .bashrc fájlunkba, hogy mindig színes kimenetet kapjunk az adott parancsok használatakor.
Lapozó
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 1096 megtekintés