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:
- shellimuutuja on väärtus praeguses shellis
- keskkonnamuutuja antakse edasi käivitatud programmidele
PATHon kataloogide järjekord, kust väliseid käske otsitakse- 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
| 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 | builtin, 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 | loe seadistusfail uuesti sisse | edukal juhul vaikne |
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
whichkä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 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 |
| builtin | 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äivitatavaksPATHlisamine lubab käivitada seda nimegaopik-terecommand -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 login-shelli või interaktiivse shelliga.
Praktiline algaja jaotus:
| Shell | Kuhu panna alias'ed ja mugavused | Kuhu 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:~/.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.
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:
whichkeskendub sageli välistele programmideletypenäitab ka alias'ed, built-in käsud ja shelli vaatenurgacommand -von 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
| Muutuja | Tähendus |
|---|---|
PATH | kust väliseid käske otsitakse |
HOME | sinu kodukataloog |
SHELL | sinu shelli programm |
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 python3leia esimene väline vastetype 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, builtin või programm~/.zshrczsh seadistusfail~/.bashrcbash seadistusfail