Mustand: sisu ei ole veel tehniliselt ega keeleliselt täielikult kontrollitud ega toimetatud.

Peatüki vaade

Linux/Unix/macOS käsurea kiirõpik

Praegu loed peatükki Käskude kuju ja argumentide loogika, mis kuulub osasse Osa I: Esimesed sammud.

Käskude kuju ja argumentide loogika

Paljud käsud näevad käsureal välja sarnased. Kui see põhimuster on selge, on hiljem palju lihtsam uusi käske õppida.

Alusta ühest näitest

Võta kõigepealt üks lihtne näide:


ls -la /etc

Siin on kolm eri rolli:

  • ls on käsk
  • -la on lipud ehk valikud
  • /etc on argument ehk koht, mille peal käsk töötab

Sama loogika kordub väga paljudes teistes käskudes.

Näiteks:


cp vana.txt uus.txt

Siin:

  • cp on käsk
  • eraldi lippu ei ole
  • vana.txt ja uus.txt on argumendid

Põhireegel

Enamasti saab käsurea lugeda nii:


käsk [valikud] [argumendid]

See tähendab:

  • kõigepealt tuleb käsu nimi
  • siis tulevad valikud ehk lipud
  • siis tulevad argumendid ehk see, mille peal käsku kasutatakse

Näiteks:


ls -la /etc
grep -n root fail.txt
cp fail.txt koopia.txt

Tüüpilised algaja vead

  • aetakse segi, mis on valik ja mis on argument
  • arvatakse, et kõik lipud töötavad igal käsul ühtmoodi
  • unustatakse jutumärgid siis, kui nimes on tühikud

Kui saad aru valikutest, argumentidest ja jutumärkidest, tuleb üllatusi vähem.

1. Lühikesed ja pikad valikud

Valikud muudavad käsu käitumist.

Lühikesed valikud


ls -l
ls -a
ls -la

Siin:

  • -l on üks lühike valik
  • -a on teine lühike valik
  • -la tähendab, et mõlemad pannakse kokku

Pikad valikud

Mõni käsk toetab pikemaid nimesid:


grep --help
grep --color=auto root fail.txt

Siin:

  • --help on pikk valik ilma väärtuseta
  • --color=auto on pikk valik koos väärtusega

Kõik käsud ei toeta samu kujusid. Mõni toetab -h, mõni --help, mõni mõlemat.

2. Argumendid

Argument on see, mille peal käsk töötab.

Näited:


ls /etc
cat fail.txt
cp vana.txt uus.txt

Siin on argumendid:

  • /etc
  • fail.txt
  • vana.txt ja uus.txt

Need on siin näidetes rajad ja failinimed, millele käsk rakendub. Argument ei ole alati failinimi: see võib olla ka kataloogitee, muster, URL või muu väärtus, mida käsk vajab.

Rusikareegel jääb samaks:


käsk [valikud] [argumendid]

3. Valikute ja argumentide järjekord

Mõne käsu puhul võib järjekord tunduda paindlik, aga alati ei tasu sellele loota.

Turvalisem on kirjutada nii:


grep -n root fail.txt
cp -R kaust koopia
tar -czf varu.tar.gz kaust/

Ehk:

  1. käsu nimi
  2. kõige tavalisemad valikud
  3. sihtfailid või muud argumendid

4. Erimärk --

Kui faili nimi algab miinusega, võib käsk seda valikuna valesti tõlgendada.

Siis aitab --:


touch -- -imelik-fail
ls -- -imelik-fail
rm -- -imelik-fail

-- tähendab siin: “siit edasi ära tõlgenda enam midagi valikuna”.

5. Globbing ehk mustrid failinimedes

Shell oskab mõningaid märke tõlgendada mustritena.

Näited:


ls *.txt
ls words.0?.txt
ls pilt[12].png

Need tähendavad:

  • *.txt valib kõik .txt lõpuga failid
  • words.0?.txt valib failid nagu words.00.txt, words.01.txt, words.02.txt
  • [] sobitab ühe märgi etteantud hulgast

Üldreegel nende märkide taga on:

  • * sobitab null või rohkem märki
  • ? sobitab täpselt ühe märgi

Oluline detail on see, et shell laiendab need mustrid enne, kui käsk ise käivitub.

Näiteks:


grep root *.txt

siin ei saa grep argumenti *.txt. Shell teeb sellest enne tegelike failinimede loendi.

6. Jutumärgid ja backslash

Kui failinimes on tühikud või erimärgid, tuleb nimi kaitsta.

Kõige tavalisemad võtted on:


echo '$HOME'
echo "$HOME"
echo fail\ nimega\ tühik.txt

Tähendus:

  • '...' jätab teksti täht-tähelt nii, nagu see on kirjutatud
  • "..." lubab näiteks muutuja asenduse
  • \ kaitseb ühte märki

Näited


mkdir "Minu Kaust"
cd "Minu Kaust"
printf 'tere\n' > "fail nimi.txt"
cat "fail nimi.txt"

ja:


touch Minu\ fail.txt
cat Minu\ fail.txt

Mõlemad töötavad. Pikemate nimede puhul on jutumärgid tavaliselt loetavamad.

7. Üksik- ja topeltjutumärgid ei ole sama asi

Need kaks on shellis erineva tähendusega.


nimi='Mari'
echo 'Tere $nimi'
echo "Tere $nimi"

Tulemus on põhimõtteliselt selline:

  • 'Tere $nimi' jätab teksti muutmata
  • "Tere $nimi" asendab muutuja väärtusega

Praktiline reegel:

  • kasuta '...', kui tahad teksti võtta täht-tähelt nii, nagu see on kirjutatud
  • kasuta "...", kui tahad säilitada ühe argumendi, aga lubada muutujate asendust

8. Failinimed tühikute ja erimärkidega

Kui failinimes on tühik, sulud, tärnid või muud erimärgid, siis shell võib nime valesti tükkideks jagada või mustrina tõlgendada.

Näited:


printf 'sisu\n' > "Minu fail.txt"
mv "Minu fail.txt" "Uus nimi.txt"

Kõige praktilisem soovitus alguses on:

  1. eelista nimedes sidekriipse või alakriipse
  2. kui nimes on tühik või erimärk, kasuta jutumärke

9. Kõige sagedamini korduvad lipud

Paljudes käskudes kohtad samu lühikesi märke, aga nende tähendus ei ole alati täpselt sama.

  • -h võib tähendada abi või inimloetavat kuju
  • -v tähendab sageli jutukamat väljundit
  • -r või -R tähendab sageli rekursiivselt
  • -n tähendab sageli arvu või rea numbrit

Näited:


head -n 5 fail.txt
grep -n root fail.txt
rm -r vana-kaust

Sama lipp ei tähenda kõigis käskudes sama asja. Seepärast tuleb iga käsu abi eraldi vaadata.

Minitest

  1. Käivita ls -la.
  2. Ava mõne käsu abi kujul --help.
  3. Loo fail nimega Minu fail.txt ja kuva selle sisu.
  4. Proovi käsku ls *.md mõnes kaustas, kus on mitu Markdown-faili.
  5. Selgita ühe lausega, mida teeb --.

Peatüki täisspikker

Algaja

Eesmärk

Õpi ühe näite pealt eristama käsku, lippu ja argumenti; siis ei tundu uus käsk iga kord täiesti uus keel.

Üks näide

  • ls -la /etcterve kuju
  • lskäsk
  • -lalipud
  • /etcargument
  • cp vana.txt uus.txtkaks argumenti

Olulised märgid

  • -lühike lipp
  • --pikk lipp või stop
  • "..."hoia koos; muutujad toimivad
  • '...'täht-tähelt nagu kirjas
  • *failimuster
  • ?üks märk

Tüüpilised kujud

  • grep -n 'root' fail.txtlipp + muster + fail
  • cp 'fail nimi.txt' koopia.txtnimi tühikuga
  • rm -- --algab-kriipsuga.txtära tõlgenda lipuna
  • ls *.txtkõik .txt lõpuga failid
  • ls words.0?.txtüks märk keskel