Hoppa yfir í efnið

Skeljagluggi og skipanir

Nú þegar við höfum tengst þjóninum erum við komin inn í textaviðmót. Fyrir þá sem eru vanir Windows eða macOS getur þetta virkað dálítið tómlegt: engin tákn, engin mús, bara texti.

Skeljagluggi eða skel

Það er algengt að rugla þessum hugtökum saman og oft eru þau notuð sem samheiti, en í raun er um tvö ólík hugtök að ræða:

  1. Skeljagluggi (e. terminal emulator): Forritið sem sýnir textann og tekur við því sem þú skrifar, t.d. Terminal á macOS, Windows Terminal eða GNOME Terminal.
  2. Skel (e. shell): Forritið sem túlkar skipanirnar þínar og lætur stýrikerfið framkvæma þær. Á fylgiþjóninum notum við Z shell (Zsh).

Skeljaglugganum mætti þannig líkja við símtól, á meðan skelin er þá sá sem svarar í símann.

Skipanakvaðning

Skipanakvaðningin (e. prompt) er oft á þessa leið

skoli5@skoli-linux-intro:~ $

Hún er ekki skipun sjálf, heldur merki um að skelin sé tilbúin. Hún getur verið ólík á milli skelja, og einnig er hægt að stilla hana eftir hentisemi. Í þessu tilfelli gefur hún okkur eftirfarandi upplýsingar.

  • skoli5: Notandanafn þess notanda sem við erum skráð inn sem.
  • skoli-linux-intro: Nafn vefþjónsins eða tölvunnar sem við erum á.
  • ~: Sú mappa sem við erum í .
  • $: Táknar að við séum skráð inn sem venjulegur notandi (í sumum skeljum er hefðin að nota %). Ef þú sérð # þýðir það yfirleitt að þú sért skráður inn sem ofurpaur (e. superuser eða root).

Ekki skrifa $ með skipuninni

Í mörgum leiðbeiningum er $ notað til að sýna kvaðningar, t.d. $ ls. Þá áttu bara að skrifa ls, ekki $ ls.


Af hverju að nota texta?

Með textaviðmóti getum við sagt tölvunni nákvæmlega hvað hún á að gera. Það gerir okkur kleift að endurtaka sömu skipun aftur, vista hana í skrá, breyta henni örlítið eða tengja hana við aðrar skipanir á einfaldan hátt. Þetta er ein ástæða þess að Linux er vinsæll kostur fyrir hýsingu, forritun og gagnaúrvinnslu.

Rætur Linux: Unix

Áður en við skoðum skipanirnar sjálfar er gott að átta sig á því hvaðan þær koma. Linux er stýrikerfi í svokölluðum Unix stíl (e. Unix-like). Unix var afar áhrifamikil fjölskylda stýrikerfa sem þróuð var á sjöunda og áttunda áratugnum. Þegar Linus Torvalds hóf að skrifa Linux árið 1991 vildi hann búa til frjálst kerfi sem hagaði sér eins og Unix. Þess vegna hafa Linux og Unix nánast sama skipanaviðmót, skipulag skráakerfis og byggir á sömu hugmyndafræði.

Unix-hugmyndafræðin

Flest Linux-tól fylgja hugmynd sem varð til í Unix-heiminum: „Gera einn hlut og gera hann vel“ (e. Do one thing and do it well).

Í stað þess að smíða eitt risastórt forrit sem gerir marga ólíka hluti, vinnum við með lítil tól sem gera afmarkaða hluti. Krafturinn felst í að skeyta þeim saman.

Vissir þú?

Unix varð til hjá Bell Labs á sjöunda og áttunda áratugnum. Nafnið „Unix“ var orðaleikur á „Multics“, eldra og miklu stærra stýrikerfi. Linux erfði margar hugmyndir frá Unix, þar á meðal skelina, pípur og skráakerfistréð.


Uppbygging skipana

Langflestar skipanir í Linux má skipta niður í þrjá hluta.

skipun --stillingar viðfang
  1. Skipun: Nafnið á forritinu sem við viljum keyra, t.d. ls, cat eða grep.
  2. Stillingar (e. options eða flags): Breyta hegðun skipunarinnar. Stillingar byrja oft á einu eða tveimur bandstrikum.
  3. Stuttar stillingar: -a, -l, -h
  4. Langar stillingar: --all, --help, --human-readable
  5. Viðfang (e. argument): Það sem forritið á að vinna með, oft skrá, mappa eða texti.

Dæmi: ls (list)

Til að sjá þessar stillingar í verki getum við prófað skipanir á borð við

ls
ls -l
ls -a
ls -lah /etc
þar sem

  • ls sýnir skrár í núverandi möppu.
  • ls -l sýnir skrárnar í löngu formi.
  • ls -a sýnir líka faldar skrár sem byrja á punkti.
  • ls -lah /etc sameinar nokkrar stuttar stillingar: -l, -a og -h.

Sameining stuttra stillinga

Flestar skipanir fylgja þeirri hefð að stuttar stillingar megi sameina. Eins og í dæminu að ofan þá hefur ls -l -a -h og ls -lah sömu merkingu. Þetta gildir þó ekki um allar skpianir, svo gott er að skoða --help eða man <skipun> ef þú ert óviss.

Þegar ekkert birtist

Sumar skipanir skrifa ekkert á skjáinn eftir að þær eru keyrðar villulaust. Það kann að vera ruglingslegt í byrjun, en ein Unix hugmyndafræðin er á þá leið að „engar fréttir eru góðar fréttir“, sem þýðir að ef skipun keyrir án þess að villa komi upp, þarf ekki að senda nein skilaboð til notanda. Ef við keyrum til dæmis skipanirnar

mkdir -p ~/examples/playground/empty-demo
rm -r ~/examples/playground/empty-demo
og ekkert birtist, þá gekk aðgerðin líklega upp. Ef eitthvað fer úrskeiðis færðu yfirleitt villumeldingu.

Fjölyrtar skipanir

Margar Linux skipanir bjóða upp á stillingu sem gerir skipunina fjölyrta (e. verbose), oft -v eða --verbose. Í því tilfelli skrifast meiri upplýsingar um keyrslu skipunarinnar út á skjáinn. Þetta getur hjálpað t.d. við kembingu (e. debugging).

Skilagildi skipunar

Allar skipanir skila af sér tölu, eftir að keyrslu þeirra er lokið, sem kallast skilagildi (e. exit status). Talan 0 merkir yfirleitt að allt hafi gengið vel, en allar aðrar tölur merkja að eitthvað hafi farið úrskeiðis eða ákveðin skilyrði hafi ekki verið uppfyllt við keyrslu skipunarinnar. Við sjáum þetta ef við keyrum

cd ~/examples
ls welcome.txt
echo $?
ls thessi-skra-er-ekki-til.txt
echo $?
þar sem breytan $? geymir skilagildi síðustu skipunar.

Skilagildi á fylgiþjóninum

Á fylgiþjóninum, ef skilagildi skipunar er ekki 0, birtist það niðri í hægra horninu með rauðum stöfum, t.d. sem exit:2.

Við notumst ekki við skilagildi að verulegu leyti til að byrja með, en þau geta reynst gagnleg þegar skrifa á skelskriftur.


Hagnýt ráð

Þessi atriði, sem verða talin upp hér, geta sparað mikinn tíma þegar unnið er í skelinni. Þú þarft ekki að leggja þau öll á minnið, en þú skalt endilega prófa þau þegar þú vinnur í skelinni.

Sjálfútfylling

Sjálfútfylling (e. autocomplete) klárar nöfn á skipunum, skrám og möppum fyrir þig. Til að virkja hana er hægt að nota Tab dálkahnappinn (e. tab key) (oft merktur með ↹). Sem dæmi, ef við sláum inn

ls exa<tab>
og aðeins ein skrá eða mappa hefst á exa í þeirri möppu sem við erum stödd í, þá klárar skelin að fylla út nafnið (ef þú ert í rót heimasvæðis þíns ætti að fyllast út example). Ef margir möguleikar stemma við það sem við höfum skrifað, áður en ýtt var á Tab dálkahnappinn, er hægt að ýta aftur á hann til að renna í gegnum alla valkostina sem stemma við forskeytið.

Skipanasaga

Flestar skeljar muna skipanirnar sem þú hefur skrifað áður. Til að sjá alla skipanasöguna getum við notað skipunina

history
en aðrar leiðir eru einnig í boði til að fletta upp í skipanasögunni.

  • Örvahnapparnir Up / Down fletta í gegnum eldri skipanir og setja þær beint inn í skipanalínuna. Til að keyra síðustu skipun aftur er þannig hægt að ýta á Up og Enter.
  • Ctrl+R leitar í skipanasögunni í öfugri tímaröð, þannig að þær skipanir sem síðast voru keyrðar birtast fyrst. Leitin virkar á þá leið að þú slærð fyrst inn Ctrl+R, skrifar svo þann texta sem þú vilt leita að. Ef margar skipanir stemma við þann texta sem þú slærð inn getur þú flett í gegnum þær með því að halda áfram að ýta á Ctrl+R.

  • !! keyrir síðustu skipun aftur.

Flýtileiðir í skipanalínunni

Ýmsar flýtileiðir eru í boði á skipanalínunni. Þær geta þó verið mismunandi eftir skeljum og stillingum á skeljum, en eftirfarandi eru mjög algengar.

  • Ctrl+A: fara fremst í línu.
  • Ctrl+E: fara aftast í línu.
  • Ctrl+U: klippa alla línuna.
  • Ctrl+K: klippa frá bendli út að enda línu.
  • Ctrl+Y: líma úr klippiborðinu því sem var klippt með Ctrl+K eða Ctrl+U.
  • Ctrl+L eða clear: hreinsar skjáinn af öllu sem hefur verið skrifað út á hann hingað til.
  • Ctrl+C: hættir við innsláttinn á skipanalínuna og gefur þér nýja hreina skipanalínu.

Að hætta

Með því að keyra aðra hvora skipunina

exit
logout
lokum við núverandi skel. Ef við erum tengd við skel með SSH, skrá þessar skipanir okkur út af þjóninum, en ekki þeirri skel sem við notuðum til að tengjast þjóninum með SSH.


Gæsalappir og sérstök tákn

Skelin sem við notum túlkar textann sem settur er á skipanalínuna áður en forritið (skipunin) fær hann. Það er því mikilvægt að þekkja hvernig skelin túlkar ákveðin tákn.

Gæsalappir

Skelin túlkar orðabil sem aðskilnaðartákn fyrir viðföng eða stillingar. Við höfum séð dæmi eins og ls welcome.txt. Skelin skiptir þessari skipun upp efter bilum. Það sem er fyrir framan fyrsta bilið er túlkað sem skipun, ls í þessu tilfelli, og er leitað að forriti sem ber það nafn. Restin er túlkuð sem stillingar og viðfang sem eru afhent forritinu ls til að moða úr.

En segjum sem svo að við höfum skrá sem heitir hello world.txt. Ef við keyrum þá ls hello world.txt, mun skelin túlka það sem tvö viðföng, þ.e. hello annars vegar og world.txt hins vegar. Forritið ls mun þá leita að þessum tveimur skrám og finna hvoruga.

Til þess að segja skelinni að túlka texta sem eina heild, en ekki skipta upp eftir bilum, má nota gæsalappir. Bæði einfaldar og tvöfaldar gæsalappir virka, en virkni þeirra er samt ekki að öllu leyti sú sama. Þetta má sjá ef við prófum að keyra

cd ~/examples/notes
ls file with spaces.txt
ls 'file with spaces.txt'
ls "file with spaces.txt"
þar sem tvær síðari skipanirnar virka rétt vegna gæsalappanna.

Viðföng

Í skelinni hefur dollaramerkið, sem kallast dollarvirkinn (e. dollar operator) $, sérstaka merkingu. Hann er hægt að nota til að sækja gildi (e. parameter expansion) úr svokölluðum viðföngum (e. parameters). Þessi viðföng geta komið úr ýmsum áttum og velta á því samhengi sem skipun er keyrð í. Við ætlum ekki að kafa djúpt í það núna, en ein uppspretta þessara viðfanga eru svokallaðar umhverfisbreytur (e. environment variables). Þetta eru breytur sem stýrikerfið, skelin og við sjálf getum haft áhrif á. Til að sjá lista yfir allar umhverfisbreytur sem eru settar í skelinni má keyra skipunina env. Eitt dæmi um algenga umhverfisbreytu er $HOME sem hefur að geyma slóðina á heimamöppu þess notanda sem er innskráður. Við getum sótt gildi hennar á skipanalínunni með því að keyra

echo $HOME
echo "Heimamappan er $HOME"
echo 'Heimamappan er $HOME'
þar sem við sjáum í síðasta tilfellinu að á skjáinn prentast $HOME en ekki /home/skoli.... Þarna höfum við hitt á stærsta muninn á einföldum og tvöföldum gæsalöppum í skelinni.

  • Tvöfaldar gæsalappir (") halda orðum saman, en leyfa skelinni að túlka hluti eins og viðföng.
  • Einfaldar gæsalappir (') halda orðum saman og túlka á allt innan þeirra bókstaflega.

Hægt er að afmarka viðföng inni í slaufusvigum, þ.e. ${HOME}. Þetta getur reynst gagnlegt ef við viljum skeyta t.d. texta við viðföng, eins og sést í eftirfarandi dæmum

echo $USERextra          # Leitar að viðfangi sem heitir $USERextra og finnur ekki
echo ${USER}extra        # Skeytir extra aftan við viðfangið $USER
þar sem svigarnir afmarka breytuna nákvæmlega.

Öfugt skástrik

Öfugt skástrik (\) í skelinni segir til um að næsta tákn eigi að túlka bókstaflega (og þessa hefð má finna ansi víða). Því má beita á öll tákn sem hafa sérstaka merkingu, eins og $, orðabil og jafnvel öfuga skástrikið sjálft.

echo \$HOME
echo "Backslash is: \\"
cd ~/examples/notes
ls file\ with\ spaces.txt

Algildisstafir

Flestar skeljar bjóða upp á algildisstöfun skráa (e. filename globbing). Ákveðin tákn má þannig nota til að vísa í ákveðnar skrár og möppur án þess að fullt nafn þeirra sé gefið upp.

Stjarna

Stjarnan * vísar til allra stafaruna, þar með talið tómu stafarununnnar.

cd ~/examples/notes
ls *.txt

Í þessu dæmi skoðar skelin *.txt, leitar að öllum skrám sem bera heiti sem endar á .txt (þ.e.a.s. „einhver texti“ og svo .txt). Þegar skelin hefur fundið nöfn allra skráa sem stemma við þetta mynstur, afhendir skelin ls þær niðurstöður sem viðföng.

Spurningamerki

Spurningamerkið ? vísar til nákvæmlega eins tákns sem má vera hvaða tákn sem er. file?.txt stemmir þannig við file1.txt en ekki file10.txt eða file.txt.

Hornklofar (mengi)

Hornklofa má nota til að skilgreina svokölluð mengi (e. set) sem segja til um hvaða tákn eigi að stemma við. file[123].txt stemmir þannig við file1.txt, file2.txt og file3.txt, en ekkert annað.

Mengi má einnig skilgreina sem svið með hæsta og lægsta gildi. file[a-z].txt stemmir þannig við filea.txt, fileb.txt, o.s.frv. upp í filez.txt.

Gæsalappir hafa líka áhrif á algildistákn. Án gæsalappa reynir skelin að þenja * út í skráarnöfn en innan einfaldra gæsalappa heldur hún bókstaflega gildi sínu.

Prófaðu: gæsalappir og dálkahnappinn

Í notes möppunni er skrá sem heitir file with spaces.txt. Prófaðu að lesa hana með gæsalöppum og síðan með öfugu skástriki. Notaðu Tab til að láta skelina hjálpa þér með nafnið. Til að fara inn í notes möppuna getur þú keyrt cd ~/examples/notes.

Lausn
cat "examples/notes/file with spaces.txt"
cat examples/notes/file\ with\ spaces.txt

Prófaðu líka:

cat notes/fi<tab>
Skelin ætti að fylla út eins mikið af nafninu og hún getur.


Samskipti við forrit í keyrslu

Stundum þurfum við að hafa áhrif á forrit á meðan það er að keyra.

Að stöðva forrit

Ef forrit tekur of langan tíma eða virðist fast, er hægt að ýta á Ctrl+C. Þetta sendir rof (e. interrupt signal) til forritsins og biður það um að hætta.

Lok inntaks

Ctrl+D merkir „ég er búinn að skrifa“ og sendir svokallað endamerki skrár (e. end-of-file eða EOF) til skeljarinnar. Ef forrit bíður eftir texta frá þér segir þetta því að inntakinu sé lokið. Ef þú sendir EOF í skel, þar sem skipanalínan er auð, skráir þú þig út úr skelinni (ef þú ert tengdur við skelina yfir SSH þá lokar þetta tengingunni!).

Vissir þú?

Heitið „Terminal“ kemur frá gömlum útstöðvum: einföldum skjám og lyklaborðum sem voru tengd við stóra miðlæga tölvu. Nútíma skeljagluggar herma enn eftir þessum gömlu tækjum að mörgu leyti.