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:
- kontrolli, kus oled
- vaata, mis seal juba on
- tee üks väike muudatus
- kontrolli tulemus üle
- 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ärk | Milleks | Mida tavaliselt näed |
|---|---|---|
pwd | näita praegust kataloogi | üks täistee |
ls | loetle kataloogi sisu | nimed või tühi väljund |
cd kataloog | liigu kataloogi | edukal juhul sageli vaikne |
mkdir kataloog | loo üks kataloog | edukal juhul sageli vaikne |
mkdir -p tee/kataloog | loo vajadusel terve puuduv tee | edukal juhul sageli vaikne |
touch fail.txt | loo tühi fail või uuenda ajatemplit | edukal juhul sageli vaikne |
cp a.txt b.txt | kopeeri fail | edukal juhul sageli vaikne |
mv vana uus | nimeta ümber või liiguta | edukal juhul sageli vaikne |
rm fail.txt | kustuta fail ilma prügikastita | edukal juhul sageli vaikne |
rmdir kataloog | kustuta tühi kataloog | edukal 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
pwdjääb vaatamata ja fail luuakse valesse kohta- tühikutega nimi jäetakse jutumärkideta
mvkäsu puhul ei märgata, kas tegu on ümbernimetamise või liigutamisega- arvatakse, et
rmviib 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 kodukataloogimkdir -p ~/tmp/faili-naitedloob vajadusel ka vahekataloogitmp- kui
tmpvõifaili-naitedoli juba olemas, ei ole see viga - viimane
pwdkinnitab, 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.
| Kuju | Tä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:
lsnäitab tavalisi nimesidls -lnäitab detailvaadetls -anäitab ka punktiga algavaid peidetud nimesidls -laühendab detailvaate ja peidetud nimedls -Anäitab peidetud nimesid, aga jätab.ja..välja

ls, ls -a ja ls -al ning nähakse ka olukorda, kus mkdir tmp annab teate File exists.Selles aknas on oluline järjekord:
pwdnäitab praegust asukohtamkdir tmpproovib luua kataloogi, aga saab teateFile exists- see ei ole ohtlik viga, vaid tähendab, et kataloog oli juba olemas
cd tmpliigub olemasolevasse kataloogilsnäitab tavalist sisuls -alisab.ja..ls -alnä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

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
lsei pruugi seda näidata ls -avõils -Ateeb 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.txtloob tühja faili, kui seda veel ei olecp esimene.txt koopia.txtteeb koopiamkdir arhiivloob kataloogimv koopia.txt arhiiv/liigutab faili kataloogiarhiiv
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 .

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:
cd ~/uuskaust/pildidliigub kindlasse kataloogipwdkontrollib asukoha üleopen .avab sama kataloogi Finderistouch uus.txtloob tühja failiecho "siin on ka teksti" > teine.txtloob tekstiga faililsjals -alnäitavad samu faile terminalis- 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:
-rkustutab rekursiivselt-fsunnib 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
- Loo harjutuskataloog
~/tmp/faili-naited. - Mine selle kataloogi sisse ja kontrolli asukohta käsuga
pwd. - Loo fail
readme.txt. - Tee failist koopia nimega
readme.bak. - Nimeta koopia ümber nimeks
vana.txt. - Loo peidetud fail
.salajane. - Võrdle käske
ls,ls -ajals -A. - Kustuta üks tavaline fail alles pärast
pwdjalskontrolli. - Leia
findabil kõik.txtfailid 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 asukohtalsvaata sisumkdir -p ~/tmp/faili-naitedloo terve puuduv teecd ~/tmp/faili-naitedmine harjutamatouch fail.txtloo failcp algne.txt koopia.txttee koopiamv vana.txt uus.txtnimeta ümbermv fail.txt kaust/liiguta kaustarm fail.txtkustuta failrmdir tyhi-kataloogeemalda tühi kataloogfind . -name '*.txt'otsi ohutultshasum -a 256 a.txt b.txtvõrdle sisu macOS-is
Olulisemad lipud, märgid ja kiirnupud
.see kaust..ülemine kaust~kodukataloogls -aka peidetudls -Apeidetud ilma.ja..kirjetetals -ladetailne vaade"fail nimi.txt"nimi tühikugarm -rrekursiivne kustutus