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 Kataloogid ja failid, mis kuulub osasse Osa I: Esimesed sammud.

Kataloogid ja failid

Unix-laadses süsteemis on peaaegu kõik töö lõpuks failide ja kataloogidega töötamine. Selles peatükis teed esimesed päris muudatused, aga teed neid kontrollitult.

Loogika

Failidega töötamisel hoia rütm lihtne:

  1. kontrolli, kus oled
  2. vaata, mis seal juba on
  3. tee üks väike muudatus
  4. kontrolli tulemus üle
  5. kustuta alles siis, kui oled kindel

See rütm on tähtsam kui üksik käsk. Enamik algaja vigu tuleb sellest, et muudatus tehakse vales kataloogis.

Kiire orientiir

Käsk või märkMilleksMida tavaliselt näed
pwdnäita praegust kataloogiüks täistee
lsloetle kataloogi sisunimed või tühi väljund
cd kataloogliigu kataloogiedukal juhul sageli vaikne
mkdir kataloogloo üks kataloogedukal juhul sageli vaikne
mkdir -p tee/kataloogloo vajadusel terve puuduv teeedukal juhul sageli vaikne
touch fail.txtloo tühi fail või uuenda ajatemplitedukal juhul sageli vaikne
cp a.txt b.txtkopeeri failedukal juhul sageli vaikne
mv vana uusnimeta ümber või liigutaedukal juhul sageli vaikne
rm fail.txtkustuta fail ilma prügikastitaedukal juhul sageli vaikne
rmdir kataloogkustuta tühi kataloogedukal juhul sageli vaikne

Tühi väljund ei tähenda automaatselt viga. Paljud failikäsud ütlevad midagi ainult siis, kui midagi läks valesti.

Tüüpilised algaja vead

  • pwd jääb vaatamata ja fail luuakse valesse kohta
  • tühikutega nimi jäetakse jutumärkideta
  • mv käsu puhul ei märgata, kas tegu on ümbernimetamise või liigutamisega
  • arvatakse, et rm viib faili prügikasti
  • kasutatakse rm -rf, sest see “töötab alati”, mõistmata, kui palju see võib kustutada

Tee endale harjutuskataloog

Ära harjuta esimesi kustutamis- ja liigutamiskäske päris projektikataloogis. Tee eraldi harjutuskoht.


pwd
mkdir -p ~/tmp/faili-naited
cd ~/tmp/faili-naited
pwd
ls

Siin:

  • ~ tähendab sinu kodukataloogi
  • mkdir -p ~/tmp/faili-naited loob vajadusel ka vahekataloogi tmp
  • kui tmp või faili-naited oli juba olemas, ei ole see viga
  • viimane pwd kinnitab, et oled õiges kohas

mkdir -p on hea harjutuskäsk just sellepärast, et ta teeb puuduva tee valmis. Ilma -p-ta oskab mkdir luua ainult viimase kataloogi siis, kui vahepealne tee on juba olemas.

Teed: ., .. ja ~

Kolm märki tulevad failitöös pidevalt tagasi.

KujuTähendus
.praegune kataloog
..ülemine kataloog
~sinu kodukataloog

Näited:


pwd
cd ..
pwd
cd ~/tmp/faili-naited
pwd

Kui käsk kasutab kuju ./fail.txt, tähendab see faili fail.txt siinsamas praeguses kataloogis. See on sama fail, mida tähistab ka lihtsalt fail.txt, aga ./ teeb asukoha nähtavamaks.

Failinimed ja tühikud

Shell jagab käsu tühikute kohalt osadeks. Kui faili või kataloogi nimes on tühik, pane nimi jutumärkidesse.


mkdir "Minu failid"
cd "Minu failid"
touch "esimene fail.txt"
ls
cd ..

Algajana on lihtsam kasutada failinimedes sidekriipsu või alakriipsu:


minu-failid
esimene_fail.txt

Tühikutega nimed on lubatud, aga käsureal nõuavad need rohkem tähelepanu.

Kataloogi sisu vaatamine

ls on kõige tavalisem esimene vaade.


ls
ls -l
ls -a
ls -la
ls -A

Nende vahe:

  • ls näitab tavalisi nimesid
  • ls -l näitab detailvaadet
  • ls -a näitab ka punktiga algavaid peidetud nimesid
  • ls -la ühendab detailvaate ja peidetud nimed
  • ls -A näitab peidetud nimesid, aga jätab . ja .. välja
Terminali näide, kus võrreldakse käske `ls`, `ls -a` ja `ls -al` ning nähakse ka olukorda, kus `mkdir tmp` annab teate `File exists`.
Terminali näide, kus võrreldakse käske ls, ls -a ja ls -al ning nähakse ka olukorda, kus mkdir tmp annab teate File exists.

Selles aknas on oluline järjekord:

  1. pwd näitab praegust asukohta
  2. mkdir tmp proovib luua kataloogi, aga saab teate File exists
  3. see ei ole ohtlik viga, vaid tähendab, et kataloog oli juba olemas
  4. cd tmp liigub olemasolevasse kataloogi
  5. ls näitab tavalist sisu
  6. ls -a lisab . ja ..
  7. ls -al näitab sama pika detailvaatena

Punktiga algavad nimed

Punktiga algavad nimed on tavaliselt peidetud:

  • .zshrc
  • .ssh
  • .git
  • .config

Need ei ole kadunud ega erilise kaitse all. See on kuvamiskokkulepe: paljud tööriistad jätavad punktiga algavad nimed vaikimisi näitamata.


mkdir -p ~/tmp/peidetud-naide
cd ~/tmp/peidetud-naide
touch tavaline.txt .peidetud.txt
ls
ls -a
ls -A
Terminali näide, kus kõigepealt võrreldakse käske `ls`, `ls -a` ja `ls -al`, seejärel luuakse peidetud fail `.peidetud.txt` ja vaadatakse sama kausta sisu uuesti.
Terminali näide, kus kõigepealt võrreldakse käske ls, ls -a ja ls -al, seejärel luuakse peidetud fail .peidetud.txt ja vaadatakse sama kausta sisu uuesti.

Pildi põhisõnum on lihtne:

  • punktiga algav fail on olemas
  • tavaline ls ei pruugi seda näidata
  • ls -a või ls -A teeb peidetud nimed nähtavaks

macOS Finderis saab peidetud failide kuvamist lülitada klahviga:


Command-Shift-.

Loo, kopeeri, nimeta ümber ja liiguta

Nüüd tee väike tervikharjutus samas harjutuskataloogis.


cd ~/tmp/faili-naited
pwd
touch esimene.txt
cp esimene.txt koopia.txt
mkdir arhiiv
mv koopia.txt arhiiv/
ls
ls arhiiv

Siin:

  • touch esimene.txt loob tühja faili, kui seda veel ei ole
  • cp esimene.txt koopia.txt teeb koopia
  • mkdir arhiiv loob kataloogi
  • mv koopia.txt arhiiv/ liigutab faili kataloogi arhiiv

Kui käsk õnnestub, ei pruugi ta midagi öelda. Tulemuse kontrollimiseks kasuta ls.

mv teeb kaks eri asja

mv võib tähendada ümbernimetamist:


mv vana.txt uus.txt

Sama käsk võib tähendada liigutamist:


mv fail.txt arhiiv/

Eristus tuleb viimasest argumendist:

  • kui lõpus on uus failinimi, nimetad ümber
  • kui lõpus on kataloog, liigutad sinna sisse

Kui kahtled, tee enne:


ls -l
ls -l arhiiv

touch ja ajatempel

touch teeb kaks asja:

  • kui faili ei ole, loob tühja faili
  • kui fail on olemas, uuendab tavaliselt faili muutmisaega

Näide:


touch tyhi.txt
cat tyhi.txt
ls -l tyhi.txt

cat tyhi.txt ei näita midagi, sest fail on tühi. See on normaalne.

Kui tahad näha, millised failid on viimati muutunud, kasuta:


ls -lt

ls -lt sorteerib detailvaate aja järgi.

Terminal ja Finder näitavad sama kohta

Terminal ja graafiline failihaldur ei ole eri maailmad. Nad võivad näidata sama kataloogi.

macOS-is ava praegune kataloog Finderis nii:


open .
Finder ja Terminal sama kausta peal: Terminalis liigutakse kausta, avatakse sama koht käsuga `open .`, luuakse tühi fail `uus.txt`, kirjutatakse faili `teine.txt` üks rida ja võrreldakse siis tulemust nii Finderis kui ka terminalis.
Finder ja Terminal sama kausta peal: Terminalis liigutakse kausta, avatakse sama koht käsuga open ., luuakse tühi fail uus.txt, kirjutatakse faili teine.txt üks rida ja võrreldakse siis tulemust nii Finderis kui ka terminalis.

Selles näites:

  1. cd ~/uuskaust/pildid liigub kindlasse kataloogi
  2. pwd kontrollib asukoha üle
  3. open . avab sama kataloogi Finderis
  4. touch uus.txt loob tühja faili
  5. echo "siin on ka teksti" > teine.txt loob tekstiga faili
  6. ls ja ls -al näitavad samu faile terminalis
  7. Finder näitab sama tulemust graafiliselt

Õppetund: kui fail tekib Terminalis, näed seda tavaliselt ka Finderis, ja vastupidi.

Kustutamine: rm, rmdir, rm -r

Kustutamine on selle peatüki kõige riskantsem osa.

Enne kustutamist tee alati:


pwd
ls

Üksik fail:


rm fail.txt

Tühi kataloog:


rmdir tyhi-kataloog

Kataloog koos sisuga:


rm -r vana-kataloog

rmdir on algajale hea, sest ta töötab ainult tühja kataloogiga. Kui kataloogis on midagi sees, käsk peatub.

rm -r läheb kataloogi sisse ja kustutab rekursiivselt ka selle sisu. Seda kasuta ainult siis, kui oled teinud pwd ja ls kontrolli.

Miks rm -rf on eraldi ohtlik

Kuju:


rm -rf vana-kataloog

tähendab:

  • -r kustutab rekursiivselt
  • -f sunnib kustutamist ja vähendab küsimist

Käsureal ei ole vaikimisi Finderi või Windows Exploreri prügikasti. Kui rm õnnestub, on fail tavakasutuse mõttes kohe läinud.

Hea algaja rusikareegel:

  • fail: rm fail.txt
  • tühi kataloog: rmdir kataloog
  • kataloog koos sisuga: rm -r kataloog
  • rm -rf: ainult siis, kui saad täpselt aru, miks seda vajad

Failide leidmine

ls näitab praegust kataloogi. find otsib kataloogipuu seest.

Ohutud otsingud:


find . -name '*.txt'
find . -type f
find . -type d
find . -maxdepth 2 -type f

Kui näed juhendis kuju:


find . -name '*.log' -delete

siis ära käivita seda pimesi. Esmalt tee sama otsing ilma -delete osata:


find . -name '*.log'

Alles siis otsusta, kas kustutamine on tõesti õige. find-i ohutumad töövood tulevad hiljem eraldi peatükis.

Faili sisu kiire võrdlus räsi abil

Kui tahad kontrollida, kas kaks faili on sisult samad, saab kasutada räsi.


printf 'tere\n' > a.txt
cp a.txt b.txt
shasum -a 256 a.txt b.txt

Kui kahe faili SHA-256 räsi on sama, on nende sisu praktilises mõttes sama.

Linuxis näed sageli ka käsku:


sha256sum a.txt b.txt

macOS-is on levinud:


shasum -a 256 a.txt b.txt

Selle teema põhjalikum koht on hiljem andmete tervikluse ja allalaadimiste juures. Siin piisab mõttest: sama sisu annab sama räsi.

Minitest

  1. Loo harjutuskataloog ~/tmp/faili-naited.
  2. Mine selle kataloogi sisse ja kontrolli asukohta käsuga pwd.
  3. Loo fail readme.txt.
  4. Tee failist koopia nimega readme.bak.
  5. Nimeta koopia ümber nimeks vana.txt.
  6. Loo peidetud fail .salajane.
  7. Võrdle käske ls, ls -a ja ls -A.
  8. Kustuta üks tavaline fail alles pärast pwd ja ls kontrolli.
  9. Leia find abil kõik .txt failid oma harjutuskataloogist.

Peatüki täisspikker

Algaja

Eesmärk

Failitöö põhiharjumus on: kontrolli asukohta, tee üks väike muudatus, vaata tulemus üle ja kustuta alles pärast teadlikku pausi.

Põhikujud

  • pwdkontrolli asukohta
  • lsvaata sisu
  • mkdir -p ~/tmp/faili-naitedloo terve puuduv tee
  • cd ~/tmp/faili-naitedmine harjutama
  • touch fail.txtloo fail
  • cp algne.txt koopia.txttee koopia
  • mv vana.txt uus.txtnimeta ümber
  • mv fail.txt kaust/liiguta kausta
  • rm fail.txtkustuta fail
  • rmdir tyhi-kataloogeemalda tühi kataloog
  • find . -name '*.txt'otsi ohutult
  • shasum -a 256 a.txt b.txtvõrdle sisu macOS-is

Olulisemad lipud, märgid ja kiirnupud

  • .see kaust
  • ..ülemine kaust
  • ~kodukataloog
  • ls -aka peidetud
  • ls -Apeidetud ilma . ja .. kirjeteta
  • ls -ladetailne vaade
  • "fail nimi.txt"nimi tühikuga
  • rm -rrekursiivne kustutus