Beetaversioon: sisu on enamasti terviklik ja avalikuks katsetamiseks valmis, kuid vajab veel tehnilist, keelelist ja kasutatavuse kontrolli.

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

Alusta täpsest käsust ja veateatest, mitte juhuslikust parandusest. „Ei tööta“ võib tähendada vale failiteed, puuduvat programmi, õiguste probleemi või vale shelli.

Kontrolli ilma parandusi tegemata

Asenda tabelis näidisnimi oma käsu või failiga.

KüsimusKontroll ja tähendus
Kus töötan?pwd näitab praegust täisteed
Kas fail on siin?ls -lah näitab ka peidetud nimesid, suurusi ja õigusi
Kas programm leitakse?command -v python3 annab leitud nime või tee; tühi väljund tähendab, et käsku ei leitud
Kas nimi on alias?type -a python3 näitab Bashi ja zsh leitud variante
Kas faili saan käivitada?ls -l skript.sh näitab õigusi; head -n 1 skript.sh näitab võimalikku shebang-rida
Milline shell töötab?ps -p $$ näitab praegust shelliprotsessi
Kas Bashi süntaks on korrektne?bash -n skript.sh loeb skripti seda käivitamata

bash -n ei tõenda skripti ohutust ega õiget tulemust. See leiab süntaksivigu; failiteed ja käskude tagajärjed tuleb ikka üle vaadata. Tavaline bash skript.sh seevastu käivitab faili päriselt.

Vali järgmine samm veateate järgi

VeateadeKontrolli enne muutmist
command not foundkirjapilt, paigaldus ja PATH; vaata command -v nimi
No such file or directoryasukoht, suhteline tee, suur- ja väiketähed ning jutumärgid tühikutega nime ümber
Permission deniedfaili ja vanemkataloogi õigused; näiteks ls -ld kataloog vaatab kataloogi ennast
syntax errorkas käsu kuju ja kasutatav tõlgendaja sobivad kokku
package not foundpaketi nimi, valitud hoidlad ja paketinimekirja värskus
database is lockedmilline programm vea andis; põhjus võib olla teine paketihaldur või andmebaasi kirjutav protsess

Lukufaili kustutamine ei lõpeta lukku hoidvat protsessi. Ära eemalda lukke ega lisa käsule sudo enne põhjuse leidmist.

Vale failitee

ls "Minu fail.txt" otsib üht tühikuga nime. Ilma jutumärkideta otsiks käsk kahte nime. Suhteline tee ../andmed/sisend.txt sõltub praegusest asukohast; täistee mitte.

Vale shell

echo "$SHELL" näitab tavaliselt kasutajale seadistatud sisselogimisshelli, mitte tingimata praegu töötavat shelli. Ka praegune shell ei määra üksi skripti tõlgendajat: bash skript.sh valib Bashi, sh skript.sh valib sh, otsekäivitus ./skript.sh kasutab shebang-rida.

Kontrolli skripti sisu enne käivitamist. Kui usaldusväärsel oma skriptil puudub täitmisõigus, selgitab selle lisamist õiguste peatükk.

Programm on paigaldatud, kuid ei leita

Vaata echo "$PATH" abil otsinguteid. Pythoni puhul võib vaja olla õige virtuaalkeskkonna aktiveerimist; mõne paigalduse järel uue shelli avamist. Kontrolli ka, kas paketinimi ja käivitatava programmi nimi üldse kattuvad.

Hea veakirjeldus

Abi küsides lisa eesmärk, täpne käsk, täielik veateade ning operatsioonisüsteem ja töökeskkond. Asukoha kirjeldamisel eemalda paroolid, võtmed, isikuandmed ja tundlikud teed; ka logi ei tasu enne ülevaatamist avalikult jagada.

Minitest

  1. Kontrolli, kust sinu shell leiab python3. Kas paigaldatud variante on mitu?
  2. Kasuta meelega olematut failinime ja selgita saadud veateadet.
  3. Miks bash -n skript.sh ja bash skript.sh ei ole samaväärsed kontrollid?
  4. Koosta lühike veakirjeldus nii, et teine inimene saaks sama olukorra turvaliselt taastada.

Peatüki täisspikker

Baas ja süsteemipilt

Eesmärk

kitsenda viga enne parandamist: täpne veateade, asukoht, olemasolu, käsu leitavus, õigused ja shelli/süntaksi kontroll

Kontrollrada

  • pwdkontrolli, kus oled
  • ls -lahvaata faile, õigusi ja peidetud kirjeid
  • command -v rgkas käsk leitakse
  • type -a rgnäita kõik sama nimega vasted
  • ls -l skript.shvaata skripti õigusi
  • head -n 1 skript.shvaata skripti shebang-rida
  • bash -n skript.shkontrolli süntaksit ilma käivitamata
  • grep --helpkinnita käsu süntaks

Levinud veateated

  • command not foundkäsk puudub, nimi vale või pole PATH-is
  • No such file or directorytee, failinimi või asukoht on vale
  • Permission deniedõigus ei luba lugeda, kirjutada või käivitada
  • syntax errorvale shell või vale käsukuju
  • package not foundpaketinimi või nimekiri on vale
  • database is lockedandmebaasi hoiab teine toiming; põhjus sõltub programmist