Linuxin etuna on se, että voit halutessasi muokata mitä tahansa. Tämä on projektiivisten järjestelmien etu proseduraalisiin järjestelmiin verrattuna. Kyseessä on eräänlainen konstruktori, joka koostuu yksittäisistä lohkoista, joista jokaista voidaan muokata mielensä mukaan.
Se on erityisen mielenkiintoista, jos et vain kopioi valmiita ratkaisuja, vaan yrität ymmärtää, mikä ja miten se toimii. Ja vaikka ratkaisisit kevytmielisen tehtävän, opit jotain uutta.
Haluat esimerkiksi säätää linux-terminaalin värejä ls-komennon
tulosteeseen.
ls-dokumentaatiosta
voit ymmärtää, että tulosteen värien asettaminen tapahtuu dircolors-apuohjelmalla, joka joko asettaa väriparametrit omasta tietokannastaan tai ottaa ne ~/.dircolors-tiedostosta
. Lisäksi mainittiin, että värien käytön alustaminen tapahtuu ~/.bashrc
:n, komentotulkin asetustiedoston, kautta ja että itse parametrit määritellään LC_COLORS-muuttujan
kautta.
Seuraava skripti löytyi .bashrc-tiedostosta
:
Sen ydin on tarkistaa, onko järjestelmässä dircolors-apuohjelma, antaa muuttujalle arvo ja jos se onnistuu, käyttää --color=auto
-parametria aina kun ls:ää
kutsutaan.
Jos suoritat dircolors-apuohjelman, se antaa LC_COLOR-muuttujan
arvon.
LC_COLORS-muuttujan
arvo on mahdollista tulostaa myös jäsennellyssä muodossa antamalla avain:
$ dircolors -p
Koska tuloste on pitkä, en anna sitä tässä.
Jos ohjaat tulosteen dircolors -p
> ~/.dircolors
, luodaan rakenteinen tiedosto, josta väriasetukset otetaan. Muokkaamalla tätä tiedostoa ja asettamalla väriasetukset ls-tulosteelle
.
Luodussa .dircolors-tiedostossa
on vihje:
Asettamalla järjestys puolipisteen kautta ja saamme tarvitsemamme värin linux-konsoliin listatun mukaan. Linux-päätteen värit ovat 30-37 fontin värin osalta ja 40-47 taustan osalta. Esim:
DIR 01;34 tarkoittaa, että hakemistojen nimet ovat lihavoituja ja sinisiä.
Tällä tavoin saat kuitenkin vain kahdeksan väriä, ja nykyaikaiset terminaali-emulaattorit pystyvät näyttämään vähintään 256 väriä.
On muitakin tapoja asettaa väri. Esimerkiksi EXEC 38;5;208;1 antaa oranssin paksuisen fontin suoritettaville tiedostoille.
Jotta linux-värejä ei tarvitsisi käydä läpi manuaalisesti, on olemassa valmis taulukko väreistä
Korvaamalla väriarvo 38;5;x - jossa x on taulukon väri, saamme tarvittavan tuloksen. Tuloksena saadaan jotakin tällaista:
Miten se toimii? Kyse on siitä, että terminaali-emulaattorissa tulostettavan tiedon värin asettaminen tapahtuu ANSI-estekoodien avulla. Tämä on tietty merkkijono, jota ei tulosteta näytölle, mutta joka vaikuttaa tulostukseen. Sitä kutsutaan näin, koska se alkaa [ - koodilla "Esc". Koska päätelaitteita ja päätelaite-emulaattoreita on monia, nämä ohjauskoodit on standardoitu. ECMA-48-standardi on värinohjaus sekvenssin 30-37 kautta. Tietoa siitä on kohdassa console_codes
.
Kun ymmärrät, miten linuxin värejä asetetaan esc-koodien avulla, kutsukehotuksen uudelleen suunnittelu ja värittäminen on helppoa. ~/.bashrc-tiedostossa
määritelty PS1-muuttuja vastaa sen tulostamisesta.
Linux Mintissä skripti sen alustamiseksi näyttää tältä:
Eli ensin määritetään, onko skriptin suorittanut root vai tavallinen käyttäjä. Koska suurimmassa osassa tapauksia kyseessä on jälkimmäinen vaihtoehto, ensimmäistä 'else'-kohtaa seuraava rivi on muokattava. Rivin muoto puretaan bash-dokumentaatiossa, kohdassa "Promting". Sen mukaan esc-jakson pitäisi alkaa "["-merkillä ja päättyä "]"-merkillä. Näin ollen:
u
- tulostaa käyttäjänimen;h
- tulostaa isännän nimen;w
- tulostaa työhakemiston nimen;Mitä muuta voidaan tulostaa kehotteessa:
d
- päivämäärä, muodossa "ke 28.12.";A
- aika, 24 tunnin muodossa;Otetaanpa käyttöön jotain mielenkiintoisempaa:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
Ja kehotusrivi näyttää seuraavalta: