Startup-tiedostot
Tässä luvussa käsittelemme shellin startup-tiedostoja (engl. startup files, initialization files). Nämä tiedostot määrittävät ympäristön, jossa shell käynnistyy.
Tip
Olet jo itse asiassa muokannut näitä! Aiemmassa luvussa Ubuntu opiskelukuntoon muokkasit tiedostoa ~/.bashrc useassakin eri kohtaa. Selkein muutos on .bashrc-tiedostoon tehdyt muutokset pyenv-ohjelman asennuksen yhteydessä.
Alla kertauksen vuoksi:
Aiemmat luvut ovat esitelleen sinulle perusteet Bash-komennoista, tiedostoista ja terminaalista, joten on sopiva aika tutustua lähemmin shelliin. Emme käsittele shelliä erityisen yleismaailmallisesti vaan keskitymme lähinnä startup-tiedostoihin, koska näiden muokkaaminen on hyvinkin Linux perusteet -tason taito.
Warning
Tässä luvussa mainittujen tiedostojen muokkaamisen kanssa kannattaa olla tarkkana. Jos aiheutat tiedostoon ikuisen tai syktaksivirheestä johtuvan muun ongelman, voi olla, että et saa esimerkiksi Terminaali-sovellusta auki, koska se ajaa startup-tiedostot. Tällöin joudut käyttämään virtuaaliterminaalia, joka on käytettävissä painamalla ctrl+alt+F3 ja kirjautumalla sisään.
Jos et pääse edes tähän, saatat joutua käyttää Live-USB:ltä käynnistettyä Linuxia tai Recovery Modea.
Eri shellit
Shellin startup-tiedostot vaihtelevat käytetyn shellin mukaan. Tässä dokumentissa tutustutaan rinnakkain kahteen suosituimpaan shelliin: bash ja zsh. Bash on oletusshelli useimmissa Linux-jakeluissa. Bash on tästä syystä tämän dokumentin keskiössä, mutta sivussa käsitellään myös Z-shelliä.
Ohjekirjat
Tulet tarvitsemaan avuksi näiden kummankin ohjekirjat. Alla on linkit näiden PDF-versioihin. Kummastakin löytyy myös HTML-versiot, jos kyseinen formaatti on sinulle sopivampi.
Eri tiedostot
Se, mitä startup-tiedostoja ajetaan, riippuu siitä, kuinka Bash tai Zsh on käynnistetty. Kaksi tärkeintä tekijää ovat se, onko shell käynnistetty "login shellinä" ja onko se "interaktiivinen". Tiivistetty selitys näistä on:
- Login shell: Bash on käynnistynyt login-prosessin yhteydessä. Tämä tapahtuu esimerkiksi, kun kirjaudut sisään terminaaliin. Tämä on helpointa tehdä painamalla ++ctrl+alt+F3++ ja kirjautumalla sisään. Huomaa, että gnome-terminal ei tyypillisesti käynnistä Bashia login-shellinä: GNOME on jo itsessään suorittanut loginin, ja pseudoterminaali on sen child-prosessi.
- Interactive shell: Shell on käynnistetty niin, että käyttäjä voi syöttää komentoja eli sen stdin, stdout ja stderr ovat kiinnitetty terminaaliin.
Näihin tutustutaan alla tarkemmin.
Asetusten kaivaminen esille
Selvitetään shell-komentojen avulla, onko nykyinen istuntosi login että onko se interaktiivinen.
Interaktiivinen?
Muuttuja - kertoo, onko shell interaktiivinen. Voit tarkistaa sen seuraavalla komennolla:
Ympäristöstä riippuen tämä voi palauttaa eri arvoja. Alla on tuoreen Ubuntu 24.04:n tuloste sekä macOS:n Zsh:n tuloste siten, että Zsh:llä on Oh My Zsh -lisäosa asennettuna.
Lista on pitkä ja reilusti tämän kurssin skoopin ulkopuolella. Tässä materiaalissa keskitymme lähinnä yhteen: i-kirjain tarkoittaa, että shell on interaktiivinen. Ja kumpikin näistä on, minkä voisi myös arvata siitä, että käytät sitä interaktiivisesti terminaalissa.
Login?
Z-shellin tapauksessa me tietäisimme tämän jo. Yllä olevassa esimerkissä Zsh on käynnistetty login-shellinä, koska l-kirjain on mukana. Vaihtoehtoisesti voit ajaa tämän komennon, joka löytyy Z-shellin manuaalista:
Bash ei ilmoita "login"-tietoa l-kirjaimella, joten sitä pitää kaivaa vähän kauempaa. Se löytyy muun muassa ympäristömuuttujasta BASHOPTS:
Jos kokeilet yllä olevaa komentoa virtuaaliterminaalissa (esim. Ctrl+Alt+F3 ), saat tulosteen, josta löytyy myös login_shell.
Warning
Huomaa, että login-shellin voi käynnistää myös mikä tahansa prosessi, mikä käynnistää shellin. Esimerkiksi jokin terminaalisovellus voi antaa shellille --login-argumentin, jolloin se käynnistyy login-shellinä.
Mitä ajetaan milloin?
Bash
Nyt kun ymmärrämme, mikä on login shell ja interaktiivinen shell, voimme tarkastella, mitä startup-tiedostoja Bash lukee missäkin tilanteessa. Tähän auttaa yllä mainitun manuaalin luku 6.2, joka käsittelee Bashin käynnistystä.
- Login shell, interaktiivinen:
- Ensin ajetaan:
/etc/profile - Sitten ajetaan, jos löytyy:
.bash_profile - ... jos ei löytynyt:
.bash_login - ... jos ei löytynyt:
.profile
- Ensin ajetaan:
- Non-login shell, interaktiivinen:
- Ensin ajetaan:
.bashrc
- Ensin ajetaan:
- Non-login shell, ei interaktiivinen:
- Ei ajeta mitään startup-tiedostoja.
Jos mietit, missä tilanteessa sinulla on non-login ei-interaktiivinen shell, niin se on esimerkiksi silloin, kun annat sille tiedoston tai komennon inputtina. Tyypillisin tilanne on Bash-skriptin ajaminen.
Tip
Olet ainakin kerran jo ajanut scriptin! Ubuntu opiskelukäyttöön ohjeesta löytyy seuraava rivi:
Olet myös saattanut ajaa skriptin harhoitustöiden ohessa, kuten:
Zsh
Aivan kuten Bashin kanssa, myös Z-shellin kohdalla manuaalin lukeminen auttaa. Luvun 2, What to put in your startup files, alla on selitetty, mitä tiedostoja Zsh lukee. Tarkastellaan tätä taulukkona, jossa vasen sarake on login shell ja oikea sarake on interaktiivinen shell. Skriptit ajetaan ylhäältä alas järjestyksessä sen mukaan, löytyykö niitä vai ei.
| Script | Login | Interactive |
|---|---|---|
/etc/zshenv |
X | X |
~/.zshenv |
X | X |
/etc/zprofile |
X | |
~/.zprofile |
X | |
/etc/zshrc |
X | |
~/.zshrc |
X | |
/etc/zlogin |
X | |
~/.zlogin |
X |
Yhteenveto
Mikä siis kuuluu minne? Jos tarvitset jotakin pysyvää, joka on saatavilla myös virtuaaliterminaalissa (eli GNOME:n ulkopuolella), laita se:
- Bash:
.bash_profiletai.bash_logintai.profile - Zsh:
.zprofiletai.zlogin
Jos tarvitset jotakin, joka on saatavilla ainakin pseudoterminaalissa, laita se:
- Bash:
.bashrc - Zsh:
.zshrc
Z-shellin tapauksessa voit myös käyttää .zshenv-tiedostoa, joka ajetaan aina, kun Zsh käynnistyy. Tämä on hyvä paikka asettaa ympäristömuuttujia, jotka ovat käytettävissä kaikissa Zsh-sessioissa. Tämän käyttö ei kuitenkaan ole millään tavoin pakollista.
Tehtävät
Tehtävä: Hello world
Lisää tiedostoon .bashrc rivi, joka tulostaa "Hello world! I am
Lisättävä rivi on:
Warning
Ole varovainen typojen kanssa. Tämän tiedoston muokkaaminen voi tehdä Terminaalin avaamisen vaikeaksi. Jos et saa jatkossa Terminaalia auki, käy muokkaamassa tiedostoa tekstieditorilla kuten Visual Studio Code.
Tehtävä: Asenna Oh My Zsh
Mene Oh My Zsh -sivulle ja seuraa sieltä löytyviä ohjeita. Sinun tulee ajaa yksi komento, joka asentaa Oh My Zsh:n. Lue komennon tuloste tarkkaan, sillä se saattaa sisältää ohjeita, jotka sinun tulee suorittaa. Yksi näistä on tässä:
Paina Y ja enter, jonka jälkeen sinun default shell on zsh eli /usr/bin/zsh. Voit varmistaa tämän ajamalla grep $USER /etc/passwd.
Tehtävä: Vaihda Oh My Zsh teema
Oh My Zsh tulee oletuksena bobbyrussell teeman kanssa. Voit vaihtaa teemaa muokkaamalla tiedostoa ~/.zshrc. Tutustu tiedoston sisältöön: se sisältää linkkejä ja ohjeita, kuinka voit vaihtaa teemaa tai asentaa plugineita. Vaihda vähintään teemaa, mutta voit kokeilla myös plugineita.
Tehtävä: Vaihda Bashiin (ja halutessasi takaisin)
Huomaa, että muutos ei ole välittömästi täysin käytössä. Tämä siksi, että default shell muutokset astuvat voimaan seuraavan loginin yhteydessä. Loggaa Ubuntusta ulos ja takaisin sisään tai käynnistä koko tietokone uusiksi. Mikäli kerkesit jo tykästyä Zsh:iin, voit vaihtaa takaisin ajamalla saman komennon uusiksi siten, että bash korvataan zsh:lla. Jos alat käyttää Zsh:aa, kannattaa tutustua ainakin pintapuoleisesti ArchWiki: Zsh-sivuun, joka sisältää tiiviin tietopaketin Zsh:sta ja sen käytöstä.