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 Lihtne veaotsing käsureal, mis kuulub osasse Osa II: Süsteemi pilt ja haldus.

Lihtne veaotsing käsureal

Selles peatükis vaatame, mida kontrollida siis, kui käsk ei tööta nii nagu ootasid.

Loogika

Algajale on tihti raske aru saada, mida üldse kontrollida, kui ekraanile ilmub veateade. Väga sageli ei olegi vaja “suurt häkki”, vaid rahulikku kontrolljärjekorda.

Hea käsurea veaotsing tähendab tavaliselt:

  1. loe veateade lõpuni läbi
  2. kontrolli, kus sa parajasti oled
  3. kontrolli, kas käsk või fail on üldse olemas
  4. kontrolli õigusi
  5. kontrolli, kas probleem on shellis, paketis või teekonnas

Kiirspikker

  • pwd näitab, kus sa oled
  • ls -lah näitab, mis siin olemas on
  • command -v käsk näitab, kas käsk on leitav
  • echo "$SHELL" näitab praegust shelli
  • ls -l fail aitab vaadata õigusi
  • käsk --help või man käsk aitab kinnitada õiget süntaksit

Käivita need käsud


pwd
ls -lah
command -v bash
command -v rg
echo "$SHELL"

Kui mõni skript ei käivitu, siis kontrolli nii:


ls -l skript.sh
bash skript.sh

Kontrolljärjekord

Kui käsk ei tööta, siis alusta sellest:

  1. mis täpselt oli käsk
  2. mis oli täpne veateade
  3. kas oled õiges kaustas
  4. kas fail või käsk, millele viitad, on päriselt olemas
  5. kas sul on vajalikud õigused

See kõlab lihtsana, aga suur osa vigu kukub just siia.

“command not found”

See tähendab tavaliselt üht neist:

  • kirjutasid käsu nime valesti
  • käsk ei ole paigaldatud
  • käsk ei ole sinu PATH-is

Praktilised kontrollid:


command -v rg
command -v python3
echo "$PATH"

Kui command -v ei leia midagi, siis on järgmine küsimus tavaliselt:

  • kas tööriist on puudu
  • või kas ta on olemas, aga sinu shell ei leia seda

“No such file or directory”

See tähendab enamasti:

  • oled vales kaustas
  • failinimi on vale
  • kasutad vale suhtelist või absoluutset teed

Kontrolli:


pwd
ls
ls kahtlane-fail

Kui fail peaks justkui olemas olema, aga käsk ikka ei leia seda, siis vaata, kas:

  • suur- ja väiketähed on õiged
  • kasutad ./fail või ../fail õigesti
  • fail asub hoopis mõnes muus kaustas

“Permission denied”

See tähendab enamasti:

  • sul ei ole õigust faili lugeda, kirjutada või käivitada
  • skriptil puudub täitmisõigus
  • üritad teha midagi süsteemikaustas ilma vajalike õigusteta

Kontrolli:


ls -l fail
ls -ld kaust

Kui probleem on skripti käivitamises, siis on väga tavaline põhjus lihtsalt see, et täitmisõigus puudub.

Vale shell või vale süntaks

Vahel ei ole probleem failis ega õigustes, vaid selles, et käsku tõlgendab teine shell, kui sa arvasid.

Kontrolli:


echo "$SHELL"
bash --version
zsh --version

Kui skript kasutab Bashi süntaksit, siis tasub vaadata, kas tal on korralik shebang, näiteks:


#!/usr/bin/env bash

Ja testi vajadusel nii:


bash skript.sh

Puudu olev pakett

Kui tööriista ei leita ja nimi on õige, siis võib lahendus olla lihtsalt paigaldus.

Näited:


sudo apt install ripgrep
sudo dnf install ripgrep
brew install ripgrep

Siin aitab sind peatükk Paketihaldus: apt, dnf, pacman, brew.

Hea veaotsingu küsimused

Kui tahad end ise kiiresti edasi aidata, siis küsi:

  • kas ma olen õiges kaustas
  • kas see fail on päriselt olemas
  • kas see käsk on masinas olemas
  • kas mul on vajalikud õigused
  • kas ma kasutan õiget shelli

Kui neile küsimustele vastad, on suur osa “müstilistest” vigadest juba pooleldi lahendatud.

Minitest

  1. Kontrolli, kas sinu masinas leitakse käsk python3 käsuga command -v.
  2. Tee meelega üks vale failinimi ja vaata, millise vea saad.
  3. Seleta oma sõnadega, mida tähendab “command not found”.
  4. Seleta oma sõnadega, mida tähendab “permission denied”.