Spôsoby platby Abuse

Farby terminálu Linux

26.09.2021, 22:47

Výhodou Linuxu je, že ak chcete, môžete si čokoľvek prispôsobiť. To je výhoda projektívnych systémov oproti procedurálnym systémom. Ide o druh konštruktora pozostávajúceho z jednotlivých blokov, z ktorých každý možno ľubovoľne prispôsobiť.

Je to zaujímavé najmä vtedy, ak nekopírujete len hotové riešenia, ale snažíte sa pochopiť, čo a ako funguje. A aj pri riešení neserióznej úlohy sa naučíte niečo nové.

Farebnosť výstupu

Napríklad chcete upraviť farby linuxového terminálu vo výstupe príkazu ls.

Z dokumentácie k príkazu ls pochopíte, že nastavenie farieb výstupu sa vykonáva pomocou nástroja dircolors, ktorý buď nastavuje parametre farieb z vlastnej databázy, alebo ich preberá zo súboru ~/.dircolors. Bolo tiež spomenuté, že inicializácia používania farieb sa vykonáva prostredníctvom ~/.bashrc, súboru s nastaveniami shellu, a že samotné parametre sa definujú prostredníctvom premennej LC_COLORS.

V súbore .bashrc bol nájdený nasledujúci skript:

Jeho podstatou je kontrola prítomnosti nástroja dircolors v systéme, priradenie hodnoty premennej a v prípade úspešnosti použitie parametra --color=auto pri každom volaní ls.

Ak spustíte nástroj dircolors, vypíše hodnotu premennej LC_COLOR.

Hodnotu premennej LC_COLORS je možné vypisovať aj v štruktúrovanej podobe, a to zadaním kľúča:

$ dircolors -p

Keďže výstup je dlhý, nebudem ho tu uvádzať.

Ak presmerujete výstup dircolors -p > ~/.dircolors, vytvorí sa štruktúrovaný súbor, z ktorého sa prevezmú nastavenia farieb. Úpravou tohto súboru a nastavením farieb pre výstup ls.

Vo vytvorenom súbore .dircolors sa nachádza nápoveda:

Nastavením postupnosti cez stredník a získame farbu, ktorú potrebujeme v linuxovej konzole, podľa uvedených. Farby linuxového terminálu sú od 30 do 37 pre farbu písma a od 40 do 47 pre farbu pozadia. Napríklad:

DIR 01;34 znamená, že názvy adresárov budú tučné a modré.

Takto však získate len osem farieb, pričom moderné emulátory terminálov ich dokážu zobraziť aspoň 256.

Existujú aj iné spôsoby nastavenia farieb. Napríklad EXEC 38;5;208;1 poskytuje oranžové hrubé písmo pre spustiteľné súbory.

Aby ste nemuseli prechádzať linuxové farby ručne, existuje pripravená tabuľka farieb

Dosadením hodnoty farby 38;5;x - kde x je farba z tabuľky, dostaneme potrebný výsledok. Dostanete niečo takéto:

Ako to funguje? Ide o to, že nastavenie farby výstupných informácií v emulátore terminálu sa vykonáva pomocou escape kódov ANSI. Ide o určitú postupnosť znakov, ktorá sa nevypisuje na obrazovku, ale ovplyvňuje výstup. Nazýva sa tak preto, lebo sa začína [ - kódom "Esc". Keďže existuje veľa terminálov a emulátorov terminálov, tieto riadiace kódy sú štandardizované. Farebná kontrola prostredníctvom postupnosti od 30 do 37 je štandardom ECMA-48. Informácie o ňom nájdete v časti console_codes.

Farebné označenie pozývacieho riadku

Keď pochopíte, ako nastaviť farby linuxu prostredníctvom esc kódov, je jednoduché zmeniť dizajn a farbu výziev. Za jeho výstup je zodpovedná premenná PS1, ktorá je definovaná v súbore ~/.bashrc

V Linux Minte vyzerá skript na jej inicializáciu takto:

To znamená, že sa najprv zistí, či bol skript spustený užívateľom root alebo bežným užívateľom. Keďže v drvivej väčšine prípadov je to druhá možnosť, riadok nasledujúci po prvom 'else' by sa mal upraviť. Formát riadku je dešifrovaný v dokumentácii bash, v časti "Promting". Vyplýva z nej, že sekvencia esc by mala začínať znakom "[" a končiť znakom "]". Teda:

  • [[01;32m]] - nastaví zelenú farbu;
  • u - vypíše meno používateľa;
  • h - vypíše názov hostiteľa;
  • [[00m] - vymaže nastavené atribúty;
  • [[01;34m] - nastaví modrú farbu;
  • w - vypíše názov pracovného adresára;
  • Hi - príklad, že sa môže vypisovať akýkoľvek odvodený text.

Čo všetko ešte môže byť vypísané vo výzve:

  • d - dátum vo formáte "st 28. decembra";
  • A - čas v 24-hodinovom formáte;
  • ! - číslo aktuálneho príkazu v histórii;
  • - prenos výstupu na iný riadok;

Predstavíme si niečo zaujímavejšie:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

A riadok výzvy bude vyzerať takto: