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.
Kiire orientiir
| Kuju | Milleks | Mida tavaliselt näed |
|---|---|---|
nimi='Mari' | loo shellimuutuja | edukal juhul vaikne |
echo "$nimi" | näita muutuja sisu | väärtus terminalis |
export NIMI='väärtus' | anna väärtus alamprotsessidele | edukal juhul vaikne |
env | vaata keskkonnamuutujaid | ridade loend |
echo "$PATH" | vaata käsuotsingu teid | koolonitega eraldatud teed |
command -v python3 | vaata, mis käsk leitakse | failitee või tühi väljund |
type cd | vaata käsu liiki | sisekäsk, alias, failitee või muu |
type -a grep | näita kõik sama nimega vasted | mitu võimalikku vastet |
alias ll='ls -lah' | loo lühinimi | edukal juhul vaikne |
source ~/.zshrc | käivita faili käsud praeguses zsh-s | tulemus sõltub faili sisust |
Tüüpilised algaja vead
- pannakse
nimi=väärtusjuurde tühikud, näiteksnimi = Mari - arvatakse, et shellimuutuja on automaatselt kõigile programmidele nähtav
- muudetakse
PATH-i nii, et kogemata varjutatakse süsteemi käsk - usaldatakse ainult käsku
whichega märgata aliast või shelli sisseehitatud käsku - lisatakse alias valesse seadistusfaili ja imestatakse, miks uus terminaliaken seda ei tunne
- kopeeritakse viiba 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 shellisexport 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:
| Liik | Näide | Märkus |
|---|---|---|
| alias | ll | shell asendab lühinime käsuga |
| shelli funktsioon | mycmd | kasutaja või seadistusfaili määratud funktsioon |
| sisekäsk | cd | shelli sisseehitatud käsk |
| reserveeritud sõna | if, for | shellikeele osa |
| väline programm | grep, python3 | fail 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-tereon väike shelliskript chmod +xteeb selle käivitatavaks- kataloogi lisamine muutujasse
PATHlubab skripti käivitada nimegaopik-tere command -v opik-terekinnitab, 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 sisselogimisshelli või interaktiivse shelliga.
Praktiline algaja jaotus:
| Shell | Kuhu panna aliased ja mugavused | Kuhu pannakse sageli PATH-i muudatused |
|---|---|---|
zsh | ~/.zshrc | ~/.zprofile või ~/.zshrc |
bash | ~/.bashrc | ~/.bash_profile või ~/.bashrc |
Kui sa ei taha veel käivitusfailide üksikasjadesse süveneda, alusta aktiivse shelli interaktiivsest failist:
zsh:~/.zshrcbash:~/.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.
Aliased
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 aliaseid:
alias
type ll
Eemalda alias praeguses shellis:
unalias ll
Väldi aliaseid, mis teevad ohtliku käsu liiga „mugavaks“. Näiteks rm ümberkirjutamine võib aidata ühes shellis, kuid 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:
whichkeskendub sageli välistele programmideletypenäitab ka aliaseid ja sisekäske ning arvestab shelli vaatenurkacommand -von lühike ning sobib hästi kontrolliks
Kui „käsk käitub imelikult“, alusta kontrollist:
type käsk
type -a käsk
Viip ja ajalugu lühidalt
Viip (prompt) on tekst enne käsu sisestamist. See ei ole käsu osa.
Näide:
~/projekt %
Kui viip näitab üht asja ja oled ebakindel, kontrolli asukohta käsuga:
pwd
Ajutine lihtne viip zsh-is:
PROMPT='%# '
Ajutine lihtne viip bash-is:
PS1='$ '
Viiba mall on shellimuutuja, mitte terminaliakna seadistus. Vaata seda muutmata kujul printf '%s\n' "$PS1"; zsh-s sobib ka print -r -- "$PROMPT". Näed malli koode, mitte tingimata ekraanile joonistatud viipa.
terminal.cs.ut.ee laadse ajutise viiba jaoks vali üks, oma shelli kuju:
PROMPT='user@terminal:%~$ '
PS1='user@terminal:\w$ '
Need nimed on viiba näidistekst, mitte kasutajakonto ega arvuti nime muutmine. Proovi ainult praeguses shellis. Püsiseadistusi selgitab shelli seadistusfailide lisa.

pwdnäitab kataloogi täielikku teed.- Viiba mall asendatakse lühikese dollarimärgiga.
- Järgmine
pwdkinnitab, et kataloog jäi samaks. - zsh mall
%~ %#toob viipa tagasi lühendatud tee ja lõpumärgi.
Ajaloo vaatamiseks piisab alguses:
history
Kui torud ja filtrid on juba tuttavad:
history | tail -n 20
Mõned sagedased keskkonnamuutujad
| Muutuja | Tähendus |
|---|---|
PATH | kust väliseid käske otsitakse |
HOME | sinu kodukataloog |
SHELL | kontole seadistatud sisselogimisshell; ei pruugi olla praegu töötav shell |
EDITOR | vaikimisi tekstiredaktor paljude tööriistade jaoks |
LANG | keele- 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
- Loo shellimuutuja
nimi='Mari'ja kuva see. - Loo keskkonnamuutuja
DEMO=1ning kontrolli seda käsugaenv. - Vaata oma
PATHmuutujat. - Kontrolli, kust leitakse
python3võibash. - Võrdle käske
type cdjacommand -v cd. - Loo alias
ll='ls -lah'ja kontrolli seda käsugatype ll. - Lisa
~/binajutiseltPATH-i ette ja kontrolli, et rida muutus. - Selgita ühe lausega, miks
PATHjä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 shellisexport DEMO=1anna muutuja edasi käivitatavatele programmideleenv | grep DEMOkontrolli, kas muutuja on keskkonnasecho "$PATH"vaata käskude otsinguteedcommand -v python3näita käsu lahendust, ka alias või sisekäsktype cdvaata käsu liikitype -a grepnäita kõik vastedexport PATH="$HOME/bin:$PATH"pane oma käskude kataloog otsingutee ettealias ll='ls -lah'loo lühinimi sagedasele käsulesource ~/.zshrcloe zsh seadistus uuesti
Olulised mõisted
nimi='Mari'shellimuutujaexport NIMI='Mari'keskkonnamuutujaPATHotsinguteede järjekord$HOME/binoma käskude kohttypealias, sisekäsk või programm~/.zshrczsh seadistusfail~/.bashrcbash seadistusfail