sh vs. bash : Yhteenveto

huhti 18, 2021
admin

Jos luet tätä, on hyvin mahdollista, että olet aiemmin törmännyt termeihin shell, sh, bash jne. Nämä termit saattavat kuulostaa hämmentäviltä, ja koska ne liittyvät läheisesti toisiinsa, se pahentaa ongelmaa entisestään. Niinpä päätin kirjoittaa tämän postauksen, jonka tarkoituksena on yrittää selittää niiden väliset erot.

Shell vs. Kernel

Ennen kuin siirrymme eteenpäin, on tärkeää, että ymmärrämme, mitä termit shell ja kernel tarkoittavat.

Kernel

Kernel on käyttöjärjestelmän keskus. Se vastaa muun muassa vuorovaikutuksesta laitteiston kanssa, tiedostojen I/O:n tekemisestä ja prosessien käynnistämisestä.

Shell

Shell toimii rajapintana käyttäjän ja ytimen välillä. Teknisesti ottaen komentotulkki on komentorivin tulkki eli ohjelma, joka joko tulkitsee terminaali-emulaattoriin syötetyn komennon (interaktiivinen tila) tai käsittelee komentosarjoja (komentoja sisältäviä tekstitiedostoja).

Nyt kun meillä on käsitys siitä, mitä shell ja kernel ovat, voimme yrittää ymmärtää sh:ää ja Bashia.

sh

Suoraan sanottuna sh (eli Shell Command Language, Shellin komentokieli) on POSIX-standardin kuvaama ohjelmointikieli. Keskeistä tässä on se, että sh ei sinänsä ole varsinainen ohjelmointikieli. Se on vain määrittely. Spesifikaatio on yksityiskohtainen kuvaus kyseisen kielen syntaksista ja semantiikasta. Spesifikaatio ei sisällä toteutusta.

Bash

On olemassa erilaisia käyttöjärjestelmiä, joilla on omat kuorensa ja ytimensä. Bash on GNU-käyttöjärjestelmän komentotulkki. Mutta voimme myös sanoa, että bash on ohjelmointikieli.

Odota, eikö tämä olekin sekavaa? Onko bash sekä komentotulkki että ohjelmointikieli?

Ajattele pythonia. Voimme myös käynnistää Pythonin interaktiivisessa tilassa ja se käyttäytyy kuin komentotulkki. Tai JavaScript, tai Ruby tai mikä tahansa skriptikieli.

Menee järkeen?

Bash on siis ohjelmointikieli, jonka voi ajatella olevan sh:n toteutus (tosin se on muuttunut ajan myötä).

Yhteenvetona voidaan sanoa, että sh on spesifikaatio, bash on toteutus.

Vastaa

Sähköpostiosoitettasi ei julkaista.