tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

Alias tekee oikopolut: .bashrc ja .bash_profile

Alias on tapa tehdä pitkille komentoriveille oikopolkuja, lyhentää niitä. WP-CLI käyttää aliaksia ainoastaan lyhentämään verkkosivujen polkuja, joka sekin on etu, mutta muuta se ei tee. Sen sijaan käyttämääsi linuxiin saa rakennettua huomattavasti laajempia. Ainakin jos laajuus tarkoittaa pitkien komentorivirotlien lyhentämistä. Monimutkaisempiin käytetään skriptejä. Aliaksen teko on periaatteessa hyvinkin helppoa. Tiedät minkä komennon haluat lyhentää, avaat yhden tiedoston, laitat sen sinne haluamasi aliaksen yhteyteen ja homma on sillä selvä. Tai ei. Minulla ei nimittäin aliakset toimineet. Vastaan tuli taas kerran ohjeiden yksioikoisuus ja järjestemien monimuotoisuus.

Ensimmäinen alias, jonka kanssa tuli riitaa, oli WP-CLI:n kommennot, joita ei haluta ajaa root-tunnuksella. Jos niin tekee, niin pitäisi laittaa jokaisen wp-komennon yhteyteen (niitä voi olla lausekkeessa useampi) lippu --allow-root. Ihan pahuksen ärsyttävää. Googlettamalla löytyi ohjeita miten tehdään alias, jossa wp-komennon mukana tuo kulkee.

Alias ei kuitenkaan sovi mihinkään, jossa täytyy asettaa muuttujia. Voit siis tehdä aliaksen komennolle, joka synkkaa tietokannan tuotannosta kehitysversioon aina samassa järjestelmässä, mutta et pysty tekemään aliasta, joka kysyisi minkä sivuston tietokanta siirrettäisiin mihin kehitysversioon.

Aliaksen syntaksihan on helppo. Alias ja perään haluttu termi ja sitten hipsujen väliin määritellään mitä sen pitäisi tehdä. Tässä komento wp tarkoittaakin aidosti wp --allow-root eli enää ei tarvitse lisätä tuota ärsyttävää lippua joka hemmetin wp-komentoon:

alias wp='wp --allow-root'

Tai kun haluan palata hakemistossa pykälän taaksepäin, niin käytän mieluummin komentoa cd.. koska se minulle helpompi kuin cd ..

alias cd..='cd ..'

Mutta se, että mihin moinen laitetaan, olikin monimutkaisempaa.

TL;DR

Avaa oman käyttäjäsi .bashrc

nano ~/.bashrc

Lisää alias. Esimerkki tarkistaa komennolla v-ok Varnishin default.vcl -tiedoston oikeellisuuden.

alias v-ok='varnishd -C -f /etc/varnish/default.vcl'

Kirjaudu ulos shellistä ja takaisin sisään.

.bashrc ja .bash_profile

Osa ohjeista käski laittaa aliaksen ~/.bashrc -tiedostoon, osa ~/.bash_profile -tiedostoon ja osa tarjosi jotain kryptistä source-komentoa, josta ymmärsin vielä vähemmän. Mikään ei toiminut. Olin jo varma, että joku päivitys oli estänyt wp --allow-root laittamisen aliakseksi.

Pikku hyppy perusteisiin. Ilmaisu ~/ tarkoittaa käyttäjän kotihakemistoa. Ubuntussa se on root-tunnuksella sama kuin /root ja muilla /home/tunnus. Absoluuttiset polut voivat kuitenkin vaihdella järjestelmästä toiseen, mutta jokainen systeemi osaa mennä käyttäjän kotihakemistoon, kun polku annetaan ~/. Eli samanlainen oikopolku kuin että / tarkoitaa juurihakemistoa, ./ sitä hakemisto jossa ollaan ja .. siirtää yhden pykälän alaspäin.

Nuo kaksi tiedostoa ovat sama, mutta eivät kuitenkaan. Ja tässä asia monimutkaistuu.

Minulla oli kaikennäköistä hauskaa tiedostossa ~/.bashrc ja tiedosto ~/.bash_profile puuttui kokonaan. Koska aikaisemmin kokeilemani joku source-komento siirsi wp --allow-root aliaksen nimenomaan tiedostoon .bashrc ja siellä oli muitakin aliaksia, niin kokeilin sitä. Ei toiminut. Poistin alias-rivit ja koska yhdessä ohjeessa oli sanottu, että tiedoston .bash_profile voi huoletta tehdä, niin tein ja kokeilin – ei toiminut.

Tein muutaman virheen.

Sama ja ei kuitenkaan

.bashrc ja .bash_profile voivat ja pitävät samanlaisia asioita sisällään. Niillä on käyttöero, joka on minulle hyvin epäselvä.

.bash_profile pitää sisällään asiat, jotka tehdään kun kyseessä kirjautumista vaativa asia, on jonkilainen login. Eli kun käynnistetään terminaali, SSH, PuTTY tai misi sitä haluat kutsuakaan, niin joka kerta tavalla tai toisella halutaan kirjautumistiedot.

.bashrc pitää sisällään asiat, jotka tehdään kun kirjautumista ei tarvita. Tietokoneissa tuo ero on selvä. Jos olet asentanut jonkun linuxin omalle koneellesi ja käynnistät terminaalin, niin kirjautumista ei tarvita ja .bashrc tulee kuvioihin mukaan. Omissa töissäni shellissä minulta kysytään aina kirjautumistiedot, joten .bashrc ei olisi koskaan käynnissä – paitsi ilmeisesti yhdessä tilanteessa: kun annetaan su-komento.

  • sudo antaa kohteen oikeudet, mutta varmistetaan antajan salasanalla (antajan .bash_profile)
  • su kysyy kohteen salasanan, mutta käyttää antajan ympäristöasetuksia (antajan .bashrc)
  • su - kysyy kohteen salasanaa ja tekee uuden shell-istunnon, jossa on kohteen ympäristöasetukset (kohteen .bash_profile)

Suhtaudu listaan hyvinkin skeptisesti. En todellakaan varmuudella tiedä mitä selitän, kunhan pähkäilen.

Kumpaan alias lisätään

Yhden ohjeen mukaan

  • henkilökohtaiset aina .bash_profile
  • yleiset .bashrc
  • aliakset aina .bash_profile (tai voidaan tehdä erillinen .bash_aliases)

Ja taas tipahdin vauhdista. Mitkä yleiset, kun molemmat tiedostot ovat henkilökohtaisia? Jos haluan, että vaikka jokin alias olisi kaikilla tunnuksilla käytössä, niin alkaisin etsimään jotain aidosti yleistä bash_profile tai bashrc -tiedostoa /etc -hakemistosta.

Kokeilin.

  • Laitoin aliakset ~/.bashrc -tiedostoon, kirjauduin ulos ja sisään, ja testasin: nada. Ei toimi.
  • Siirsin samat aliakset ~/.bash_profile -tiedostoon, samat kevätjuhlaliikkeet kirjautumisen suhteen ja testi: nyt toimi.

Tähän voisi tyytyä, sillä systeemi toimii. Jos tuo riittää sinulle, niin muista laittaa seuraava rivi ~/.bash_profile tiedostoon, jos käytät WP-CLI:tä:

export PATH=/root/.wp-cli/bin:$PATH

Omat kokeilut

Itse en tyytynyt, koska tiedän, että minulla toimi hetken aikaa wp-alias. Sitten se vaan lakkasi toimimasta. Samaan aikaan minulla lakkasi toimimasta pari muutakin aliasta, jotka taatusti ennen toimivat kuin junan vessa. Halusin tietää miksi.

Googlen mukaan Ubuntu naittaa jollain tavalla molemmat .bashrc ja .bash_profile yhteen, vaikka niillä onkin suoritusjärjestys. Se voidaan tehdä komentamallakin. Näytti kuitenkin vakaasti siltä, että .bash_profile toimi ja .bashrc ei – siis minulle, en minä mitään ymmärrä jostain non-logging interaktiivisista shelleistä. Moisissa saattoi toimiakin, en minä tiedä.

Joten siirsin alias-rivit takaisin ~/.bashrc -tiedostoon ja poistin ~/.bash_profile -tiedoston. Kirjautumiskuviot ja testi: aliakset toimivat.

Se, että jossain vaiheessa toimi ja jossain vaiheessa ei, eli ne alussa mainitsemani virheet, olivat:

  • en ollut kirjautunut ulos/sisään muutosten jälkeen
  • olin omalla tunnuksellani kirjautuneena, muokkasin rootin .bash_profile tiedostoa ja kokeilin toimintaa sudo-komennolla
  • .bashrc lakkaa toimimasta, jos .bash_profile on olemassa

Homma oli sillä selvä, ainakin minulle. Löysin syyt miksi asiat eivät toimineen ja tein ratkaisun. Se, että oliko ratkaisu oikea, selviää varmaan ajan myötä. Nyt ja tässä se on toimiva ratkaisu.

Poistin tiedoston ~/.bash_profile ja alon käyttämään vain ~/bashrc. Syitä on kaksi:

  1. systeemissä ei ollut oletuksena alunperinkään tiedostoa .bash_profile
  2. on helpompaa muista vain yksi muokattava paikka

Mutta. Aina se mutta.

Lopullinen ratkaisu

Otsikolla on paha kaiku yleisessä puheessa. Ja IT-hommissakaan harvempi asia on lopullinen, ellei sellaiseksi lasketa muruiksi jyrättyä kovalevyä. Lopullinen tarkoittaa sitä, että tein tämän ja lopetin asian penkomisen.

Minua nimittäin vaivasi kuitenkin edelleen se, että jokin sellainen asia, jota en ymmärrä, tekee tai osallistuu sellaiseen, jota en tajua. Jossain vaiheessa ymmärrän ja tajuan, mutta sitä ennen se jokin ei kuitenkaan ole sillä missä pitäisi. Plus minulta puuttui nyt WP CLI:n mahdollisesti kaipaama polku – joka ei kylläkään ollut haitannut käyttöä.

Avataan uudestaan ~/.bash_profile

nano ~/.bash_profile

Lisää tämä tiedoston alkuun, jos sinulla on käytössä WP CLI:

export PATH=/root/.wp-cli/bin:$PATH

Laita tämä tiedoston loppuun (en minä oikeasti tiedä onko paikalla väliä):

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

Kirjaudu ulos ja takaisin sisään. Nyt aliaksetkin toimii, vaikka ne olisivat .bashrc -tiedostossa JA on olemassa .bash_profile.

Bash ja alias-esimerkkejä

Kaikki aliakset toimivat vain sillä tunnuksella, jonka kotihakemiston .bashrc -tiedostoon ne on lisätty. Joten aliakset joutuu erikseen lisäämään kaikkiin, koska ne ovat eräällä tavalla henkilökohtaisia. Minulla esimerkiksi on oikopolut jokaiseen web-kotihakemistoon henkilöni tunnukselle, mutta root saa pari aliasta lisää, joista yksi on wp --allow-root.

Avaa sen tunnuksen .bashrc, jolla olet kirjautuneena:

nano ~/.bashrc

Lisää johonkin haluamasi aliakset, itse laitan ne sellaiseen paikkaan, jossa niitä oli jo aikaisemmin. Jos käytät aliaksena sellaista komentoa tai lippua, joka on jo olemassa, niin saat aikaiseksi mielenkiintoisia efektejä…


alias wp='wp --allow-root'
alias saitti='cd /var/www/html'
alias cd..='cd ..'
alias vd='cd'

Ja sitten kun unohdat mitä aliaksia on käytössä, niin aika simppeli komento auttaa:

alias