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 Muutujad, keskkond, PATH ja aliased, mis kuulub osasse Osa II: Süsteemi pilt ja haldus.

Muutujad, keskkond, PATH ja aliased

Shell ei käivita ainult programme. Ta hoiab ka väärtusi, otsustab, kust käske otsida, ja võib anda käskudele lühinimesid.

Loogika

Selles peatükis on neli põhimõtet:

  1. shellimuutuja on väärtus praeguses shellis
  2. keskkonnamuutuja antakse edasi käivitatud programmidele
  3. PATH on kataloogide järjekord, kust väliseid käske otsitakse
  4. alias on lühinimi käsule või käsukujule

Kõige tähtsam on mitte ajada segi väärtust, käsu otsimist ja mugavusnime.

Kiire orientiir

KujuMilleksMida tavaliselt näed
nimi='Mari'loo shellimuutujaedukal juhul vaikne
echo "$nimi"näita muutuja sisuväärtus terminalis
export NIMI='väärtus'anna väärtus alamprotsessideleedukal juhul vaikne
envvaata keskkonnamuutujaidridade loend
echo "$PATH"vaata käsuotsingu teidkoolonitega eraldatud teed
command -v python3vaata, mis käsk leitaksefailitee või tühi väljund
type cdvaata käsu liikibuiltin, alias, failitee või muu
type -a grepnäita kõik sama nimega vastedmitu võimalikku vastet
alias ll='ls -lah'loo lühinimiedukal juhul vaikne
source ~/.zshrcloe seadistusfail uuesti sisseedukal juhul vaikne

Tüüpilised algaja vead

  • pannakse nimi=väärtus juurde tühikud, näiteks nimi = Mari
  • arvatakse, et shellimuutuja on automaatselt kõigile programmidele nähtav
  • muudetakse PATH-i nii, et kogemata varjutatakse süsteemi käsk
  • usaldatakse ainult which käsku ja ei märgata alias't või shelli sisseehitatud käsku
  • lisatakse alias valesse seadistusfaili ja imestatakse, miks uus terminaliaken seda ei tunne
  • kopeeritakse prompti muutmise näide püsivasse faili enne, kui seda ajutiselt prooviti

Shellimuutuja ja keskkonnamuutuja

Shellimuutuja elab praeguses shellis.


nimi='Mari'
echo "$nimi"

Kui käivitad uue programmi, ei pruugi tavaline shellimuutuja sinna kaasa minna.


nimi='Mari'
sh -c 'echo "$nimi"'

Keskkonnamuutuja tehakse alamprotsessidele nähtavaks käsuga export.


export PROJEKT='linux-opik'
sh -c 'echo "$PROJEKT"'

Põhireegel:

  • nimi='Mari' sobib väärtuseks praeguses shellis
  • export NIMI='Mari' sobib siis, kui käivitatav programm peab seda nägema

Hea tava on kirjutada keskkonnamuutujad sageli suurte tähtedega, näiteks PATH, HOME, EDITOR, SHELL.

Tühikud ja jutumärgid

Muutuja omistamisel ei panda võrdusmärgi ümber tühikuid.

Õige:


nimi='Mari'

Vale:


nimi = 'Mari'

Kui väärtuses on tühik, pane väärtus jutumärkidesse.


projekt='Linuxi õpik'
echo "$projekt"

Muutuja lugemisel eelista kuju:


echo "$projekt"

Jutumärgid hoiavad väärtuse koos ka siis, kui sees on tühikuid.

Mis asi käsk on

Terminali kirjutatud nimi ei tähenda alati välist programmi failisüsteemis.

See võib olla:

LiikNäideMärkus
aliasllshell asendab lühinime käsuga
shelli funktsioonmycmdkasutaja või seadistusfaili määratud funktsioon
builtincdshelli sisseehitatud käsk
reserveeritud sõnaif, forshellikeele osa
väline programmgrep, python3fail kuskil PATH kataloogis

Seetõttu on õppimisel väga kasulik:


type cd
type grep
type ll
command -v python3

type ütleb käsu liigi. command -v ütleb lühidalt, mida shell käivitaks.

Kui sama nimega vasteid on mitu:


type -a python3
type -a grep

See aitab näha, kas eespool on näiteks Homebrew, Conda, süsteemi Python või sinu enda skript.

PATH: kust käsk leitakse

Kui kirjutad käsu:


python3

siis shell otsib väliseid programme muutujas PATH loetletud kataloogidest.


echo "$PATH"

Tüüpiline kuju on selline:


/Users/kasutaja/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin

Oluline reegel:

  • teed on eraldatud kooloniga
  • otsitakse vasakult paremale
  • esimene sobiv käivitatav fail võidab

Kontrolli alati päris vastet:


command -v python3
command -v grep

Kui käsk ei leidu, on tavaliselt üks kahest põhjusest:

  • programm pole paigaldatud
  • programmi kataloog pole PATH-is

Oma bin kataloog

Oma väikesed skriptid võib panna näiteks kataloogi ~/bin või ~/.local/bin.

Loo kataloog:


mkdir -p "$HOME/bin"

Lisa see praeguses shellis otsingutee ette:


export PATH="$HOME/bin:$PATH"

Ette lisamine tähendab, et sinu ~/bin vaste leitakse enne süsteemi sama nimega käsku. See on mugav, aga nõuab tähelepanu.

Ettevaatlikum kuju on lisada oma kataloog lõppu:


export PATH="$PATH:$HOME/bin"

Sel juhul jäävad süsteemi tavalised käsud eelisjärjekorda.

Väike oma käsk

Tee üks väike käsurea tööriist oma ~/bin kataloogi.


mkdir -p "$HOME/bin"
cat > "$HOME/bin/opik-tere" <<'EOF'
#!/bin/sh
echo "Tere oma bin-kataloogist"
EOF
chmod +x "$HOME/bin/opik-tere"
export PATH="$HOME/bin:$PATH"
command -v opik-tere
opik-tere

Siin:

  • fail opik-tere on väike shelliskript
  • chmod +x teeb selle käivitatavaks
  • PATH lisamine lubab käivitada seda nimega opik-tere
  • command -v opik-tere kinnitab, kust käsk leitakse

Kui see töötab ainult praeguses aknas, on põhjus lihtne: export PATH=... oli ajutine. Püsivaks muutmiseks lisa rida shelli seadistusfaili.

Seadistusfailid

Shell loeb käivitumisel seadistusfaile. Täpne fail sõltub shellist ja sellest, kas tegu on login-shelli või interaktiivse shelliga.

Praktiline algaja jaotus:

ShellKuhu panna alias'ed ja mugavusedKuhu panna sageli PATH
zsh~/.zshrc~/.zprofile või ~/.zshrc
bash~/.bashrc~/.bash_profile või ~/.bashrc

Kui sa ei taha veel startup-failide nüanssidesse süveneda, alusta oma aktiivse shelli interaktiivsest failist:

  • zsh: ~/.zshrc
  • bash: ~/.bashrc

Näide zsh jaoks:


cat >> ~/.zshrc <<'EOF'
export PATH="$HOME/bin:$PATH"
alias ll='ls -lah'
EOF
source ~/.zshrc

Näide bash jaoks:


cat >> ~/.bashrc <<'EOF'
export PATH="$HOME/bin:$PATH"
alias ll='ls -lah'
EOF
source ~/.bashrc

Shelli seadistusfailide põhjalikumad näited on lisas Lisa F: shelli seadistusfailid bash ja zsh jaoks.

Alias'ed

Alias on lühinimi sagedase käsu jaoks.


alias ll='ls -lah'
alias la='ls -A'
alias gs='git status'
alias h='history | tail -n 20'

Alias sobib hästi siis, kui ta lühendab tuttavat käsku, aga ei peida olulist loogikat.

Vaata olemasolevaid alias'eid:


alias
type ll

Eemalda alias praeguses shellis:


unalias ll

Väldi alias'eid, mis teevad ohtliku käsu liiga “mugavaks”. Näiteks rm ümberkirjutamine võib aidata ühes shellis, aga tekitada vale turvatunde teises masinas.

Miks which võib petta

Paljud kasutavad käsku:


which grep

Õppimiseks eelista:


type grep
command -v grep

Põhjus:

  • which keskendub sageli välistele programmidele
  • type näitab ka alias'ed, built-in käsud ja shelli vaatenurga
  • command -v on lühike ning sobib hästi kontrolliks

Kui “käsk käitub imelikult”, alusta kontrollist:


type käsk
type -a käsk

Prompt ja ajalugu lühidalt

Prompt on tekst enne käsu sisestamist. See ei ole käsu osa.

Näide:


~/projekt %

Kui prompt näitab üht asja ja oled ebakindel, kontrolli käsuga:


pwd

Ajutine lihtne prompt zsh-is:


export PROMPT='%# '

Ajutine lihtne prompt bash-is:


export PS1='$ '

Proovi prompti muutmist alguses ainult jooksvas shellis. Püsiv prompt kuulub hiljem ~/.zshrc või ~/.bashrc faili.

Ajaloo vaatamiseks piisab alguses:


history

Kui torud ja filtrid on juba tuttavad:


history | tail -n 20

Mõned sagedased keskkonnamuutujad

MuutujaTähendus
PATHkust väliseid käske otsitakse
HOMEsinu kodukataloog
SHELLsinu shelli programm
EDITORvaikimisi tekstiredaktor paljude tööriistade jaoks
LANGkeele- ja lokaadiseadistus

Näited:


echo "$HOME"
echo "$SHELL"
echo "$LANG"
export EDITOR=nano

Kui mõni programm avab ootamatult teise redaktori, kontrolli EDITOR muutujat.

Minitest

  1. Loo shellimuutuja nimi='Mari' ja kuva see.
  2. Loo keskkonnamuutuja DEMO=1 ning kontrolli seda käsuga env.
  3. Vaata oma PATH muutujat.
  4. Kontrolli, kust leitakse python3 või bash.
  5. Võrdle käske type cd ja command -v cd.
  6. Loo alias ll='ls -lah' ja kontrolli seda käsuga type ll.
  7. Lisa ~/bin ajutiselt PATH-i ette ja kontrolli, et rida muutus.
  8. Selgita ühe lausega, miks PATH järjekord võib olla ohtlik.

Peatüki täisspikker

Baas ja süsteemipilt

Eesmärk

erista shellimuutujat, keskkonnamuutujat, käsuotsingu teed ja aliast; PATH-i järjekord otsustab, milline väline käsk esimesena leitakse.

Põhikujud

  • nimi='Mari'; echo "$nimi"shellimuutuja kehtib selles shellis
  • export DEMO=1anna muutuja edasi käivitatavatele programmidele
  • env | grep DEMOkontrolli, kas muutuja on keskkonnas
  • echo "$PATH"vaata käskude otsinguteed
  • command -v python3leia esimene väline vaste
  • type cdvaata käsu liiki
  • type -a grepnäita kõik vasted
  • export PATH="$HOME/bin:$PATH"pane oma käskude kataloog otsingutee ette
  • alias ll='ls -lah'loo lühinimi sagedasele käsule
  • source ~/.zshrcloe zsh seadistus uuesti

Olulised mõisted

  • nimi='Mari'shellimuutuja
  • export NIMI='Mari'keskkonnamuutuja
  • PATHotsinguteede järjekord
  • $HOME/binoma käskude koht
  • typealias, builtin või programm
  • ~/.zshrczsh seadistusfail
  • ~/.bashrcbash seadistusfail