Kataloogid ja failid
Unix-laadsetes süsteemides on failide ja kaustadega töötamine üks põhioskusi.
Loogika
Failidega töötamisel on hea hoida meeles lihtsat rütmi: leia õige koht, tee muudatus, kontrolli tulemus üle. See peatükk on seotud peaaegu kõigi teistega, sest enamik Linuxi tööst toimub lõpuks failide ja kataloogidega.
Liikumine failisüsteemis
pwd
ls
cd kaust
cd ..
Enne kui lood kaustu
Enne käsku mkdir tasub teha kaks lihtsat kontrolli:
pwd
ls
Need kaks küsimust on:
- kus ma praegu olen
- kas see on koht, kus ma tahan päriselt muudatusi teha
Alguses on hea harjutada oma kodukataloogis või selle all olevas eraldi harjutuskaustas. Nii on lihtsam vältida seda, et teed muudatusi mõnes päris projektis või süsteemi tähtsas kohas.
Väga hea praktiline nimi sellise kausta jaoks on näiteks proov, harjutus või faili-naited:
mkdir proov
cd proov
pwd
või:
mkdir faili-naited
cd faili-naited
Kui need nimed on sul juba olemas, vali lihtsalt mõni teine uus nimi. Hiljem näed ka kuju ~/tmp, mis tähendab sinu kodukataloogi all olevat kausta tmp.
Teed: proov, ./proov ja ~/proov
Need kolm kuju on sugulased, aga mitte päris sama asi.
proovtähendab kausta nimegaproovsiin samas praeguses kataloogis./proovtähendab täpselt sama, aga ütleb selle veel selgemalt välja~/proovtähendab kaustaproovsinu kodukataloogi all
Algaja jaoks on sageli kõige lihtsam alustada kujuga proov või ./proov, sest siis on seos käsuga pwd kohe nähtav.
Mida tähele panna
rmkustutab faili ilma prügikastitamvvõib nii ümber nimetada kui ka faili teise kohta liigutadacd ~viib kodukataloogi
Esimesed käsud
pwdnäitab, kus sa oledlsnäitab, mida siin leidub. Nimi tuleb sõnastlist.cd kaustliigutab sind teise kausta. Nimi tuleb väljendistchange directory.mkdir kaustloob uue kausta. Nimi tuleb väljendistmake directory.touch fail.txtloob tühja failicp allikas sihtkopeerib faili või kausta. Nimi tuleb sõnastcopy.mv vana uusliigutab või nimetab ümber. Nimi tuleb sõnastmove.rm failkustutab faili. Nimi tuleb sõnastremove.rmdir kaustkustutab tühja kaustasha256sum failarvutab faili räsi Linuxisshasum -a 256 failarvutab faili räsi macOS-isfind . -name 'muster'otsib faile nime järgi
Samad käsud koos lisadega
ls -lnäitab detailvaadetls -anäitab ka peidetud kirjeidls -lateeb mõlemat korragals -Anäitab peidetuid, aga jätab.ja..väljamkdir -p tee/kaustloob ka puuduva teekonna vahekaustadcp -Rkopeerib kataloogi rekursiivseltrm -r kaustkustutab kausta koos sisuga rekursiivseltfind . -type fpiirab otsingu tavaliste failidegafind . -type dpiirab otsingu kataloogidega
Käivita need käsud
See näide õpetab järgmist loogikat:
- kontrolli, kus sa oled
- loo samasse kohta uus harjutuskaust
- liigu selle sisse
- loo fail ja kopeeri see
- kontrolli tulemust
pwd
ls
mkdir proov
cd proov
mkdir failid
cd failid
touch esimene.txt
cp esimene.txt teine.txt
mkdir arhiiv
mv teine.txt arhiiv/
ls
ls arhiiv
Näide terminalis
Siin on sama loogika kujul, kus on näha prompt, käsk, väljund ja uus prompt:
vilo@macbook ~ % pwd
/Users/vilo
vilo@macbook ~ % ls
Desktop
Documents
Downloads
vilo@macbook ~ % mkdir proov
vilo@macbook ~ % cd proov
vilo@macbook proov % mkdir failid
vilo@macbook proov % cd failid
vilo@macbook failid % touch esimene.txt
vilo@macbook failid % cp esimene.txt teine.txt
vilo@macbook failid % mkdir arhiiv
vilo@macbook failid % mv teine.txt arhiiv/
vilo@macbook failid % ls
arhiiv
esimene.txt
vilo@macbook failid % ls arhiiv
teine.txt
vilo@macbook failid %
Kui proov on juba olemas, siis saad selle asemel lihtsalt teha:
cd proov
Hiljem, kui ~ ja mkdir -p on juba selged, võib sama näite kirjutada ka lühemalt. Alguses on aga parem, kui iga samm on silmaga jälgitav.
touch loob faili või muudab ajatemplit
touch on hea näide käsust, mis võib teha nähtava muudatuse ilma midagi ekraanile kirjutamata.
Oluline loogika on selline:
- kui faili veel ei ole, siis
touch fail.txtloob tühja faili - kui fail on juba olemas, siis
touchei lisa sinna sisu - olemasoleva faili puhul uuendab
touchfaili ajatemplit, tavaliselt muutmisaega
Seepärast on see näide oluline:
touch tyhi.txt
cat tyhi.txt
ls -l tyhi.txt
Siin:
touch tyhi.txttöötab edukaltcat tyhi.txtei näita midagi, sest fail on tühils -l tyhi.txtkinnitab, et fail on olemas
See tähendab, et “midagi ei ilmunud ekraanile” ei ole veel viga. Mõnikord ei ole käsul lihtsalt midagi näidata.
touch ja ls -t
Kuna touch muudab faili ajatemplit, võib see mõjutada ka käsku ls -t.
ls -tsorteerib failid aja järgi- uuem fail või äsja
touch-itud fail liigub tavaliselt ettepoole ls -ltnäitab sama loogikat koos detailvaatega
Näide:
printf 'vana\n' > esimene.txt
sleep 1
printf 'uus\n' > teine.txt
ls -lt
touch esimene.txt
ls -lt
Tõenäoline tulemus on:
- enne
touch-i onteine.txtnimekirjas eespool - pärast
touch esimene.txtvõibesimene.txtminna ettepoole, kuigi faili sisu ei muutunud
See on hea meeldetuletus, et touch puudutab sageli aega, mitte sisu.
Kuvatõmmise lahtilugemine: ls, ls -a ja ls -al
Kuvatõmmise lugemisel ei piisa ainult pildist. Oluline on ka lahti öelda, mis seal samm-sammult juhtus.

ls, ls -a ja ls -al ning nähakse ka olukorda, kus mkdir tmp annab teate File exists.Sellise akna puhul tasub tähele panna näiteks seda järjekorda:
- prompt muudeti lühemaks, et pildil oleks vähem isiklikku infot ja rohkem ruumi käsule endale
pwdnäitas, et kasutaja oli kodukataloogis, näiteks/Users/vilomkdir tmpproovis luua kausta nimegatmp, aga sai teateFile exists, mis tähendab, et see kaust oli juba olemascd tmpliikus olemasoleva kausta sisse ja prompt muutus kujule~/tmp %lsnäitas ainult tavalist nähtavat sisu, selles näites failiwords.txtls -anäitas lisaks ka peidetud kirjeid.ja..ls -alnäitas sama sisu pika detailvaatena koos õiguste, omaniku, suuruse ja ajaga
Olulised tähelepanekud sellest samast pildist on:
.tähendab praegust kausta..tähendab ülemkaustalsjals -aei näita sama piltimkdirvõib ebaõnnestuda täiesti mõistlikul põhjusel, näiteks siis, kui kaust on juba olemas
rm kustutab vaikselt
rm on veel üks tähtis näide käsust, mis edukal juhul sageli midagi ei kuva.
See tähendab:
rm fail.txtkustutab faili- kui kõik õnnestub, siis uut teadet ei tule
- tavaliselt näed lihtsalt järgmist käsuviipa
Näide:
printf 'ajutine\n' > proov.txt
rm proov.txt
ls -l proov.txt
Siin:
rm proov.txtvõib töötada täiesti vaikselt- alles järgmine käsk näitab, et faili enam ei ole
See on seotud varasema põhireegliga: kui käsul ei ole midagi näidata, siis ta ei näita midagi, isegi siis, kui ta töötas edukalt.
Miks rm ei kustuta kataloogi
Tavaline rm on mõeldud failide eemaldamiseks.
Kui proovid kustutada kataloogi nii:
mkdir testkaust
rm testkaust
siis saad tavaliselt veateate, sest kataloog ei ole tavaline fail.
See on hea kaitsekiht: süsteem ei lase kataloogi vaikimisi sama lihtsalt eemaldada nagu üksikut faili.
Kuidas kustutada tühi kataloog
Kõige ohutum viis on:
- kustuta vajadusel failid eraldi
- kustuta tühi kataloog käsuga
rmdir
Näide:
mkdir -p naide/arhiiv
printf 'sisu\n' > naide/arhiiv/fail.txt
rm naide/arhiiv/fail.txt
rmdir naide/arhiiv
rmdir töötab ainult siis, kui kataloog on tühi. See on algajale väga hea, sest vähendab juhusliku liigse kustutamise riski.
rm -r ja rm -rf
Kui tahad kustutada kataloogi koos sisuga, kasutatakse rekursiivset kustutamist:
rm -r vana-kaust
Oluline loogika:
-rtähendab, et käsk läheb kataloogi sisse ja eemaldab selle sisu rekursiivselt- see puudutab korraga paljusid faile ja alamkatalooge
Veel agressiivsem kuju on:
rm -rf vana-kaust
Siin:
-rkustutab rekursiivselt-ftähendabforce, ehk ära küsi kinnitust ja ära peatu väiksemate hoiatuste juures
See on põhjus, miks rm -rf on ohtlik:
- see võib eemaldada väga palju korraga
- tavaliselt ei ole prügikasti ega tagasivõtmise nuppu
- vale tee või vale kataloog võib teha suure kahju
Kas siin on turvavõrk
Üldreegel on: käsureal ei ole vaikimisi Finderi või Windows Exploreri moodi prügikasti.
See tähendab:
rmei vii faili prügikastirm -rei vii kataloogi prügikasti- kui kustutamine õnnestub, siis failid on tavakasutuse mõttes kohe läinud
Mõnes süsteemis võib olla alias nagu rm -i, mis küsib üle, aga sellele ei tasu kindlalt lootma jääda. Parem harjumus on:
- kontrolli enne
pwd - vaata üle
ls - alles siis kasuta
rm - eelista kataloogi eemaldamisel alguses
rmdir, kui see on võimalik
Hea algaja rusikareegel on:
- üksik fail:
rm fail.txt - tühi kataloog:
rmdir kaust - kataloog koos sisuga:
rm -r kaust rm -rfkasuta ainult siis, kui saad täpselt aru, miks seda vajad
ls, ls -a ja ls -la
See on üks esimesi kohti, kus algaja näeb, et terminal ja graafiline failivaade ei näita alati täpselt sama asja.
Põhireegel on lihtne:
lsnäitab tavalist kaustasisuls -anäitab ka peidetud kirjeidls -lanäitab peidetud kirjeid ja lisab detailvaate
Oluline detail:
-atähendaball- see näitab ka kirjeid
.ja.. .tähendab praegust kataloogi..tähendab ülemkataloogi
Sageli on mugavam kasutada ka:
ls -A
See näitab peidetud faile, aga jätab . ja .. välja.
Näide:
mkdir -p ~/tmp/peidetud-naide
cd ~/tmp/peidetud-naide
touch tavaline.txt .peidetud.txt
mkdir .seaded
ls
ls -a
ls -la
ls -A
Tüüpiline tulemus on selline:
lsnäitab ainulttavaline.txtls -anäitab....peidetud.txt.seadedtavaline.txtls -lanäitab sama detailse õiguste- ja omanikuväljaga

ls, ls -a ja ls -al, seejärel luuakse peidetud fail .peidetud.txt ja vaadatakse sama kausta sisu uuesti.Selle pildi lugemisel tasub jälgida seda järjekorda:
lsnäitab alguses ainult nähtavat failitere.txtls -alisab nähtavale ka.ja..ls -alnäitab sama sisu pika detailvaatena- käsk
echo "näiteks seaded" > .peidetud.txtloob uue peidetud faili - järgmine
lsei näita seda endiselt, sest nimi algab punktiga - alles
ls -apaljastab, et.peidetud.txton päriselt olemas
See pilt õpetab hästi üht tähtsat asja: peidetud fail ei ole kadunud fail. Ta on olemas, aga tavaline ls ei näita teda vaikimisi.
Mis need punktiga algavad failid ja kataloogid on
Punktiga algavad nimed nagu:
.zshrc.ssh.git.config
on tavaliselt peidetud faili- või katalooginimed.
See ei tähenda, et need oleksid “erilised failitüübid” või kuidagi paremini kaitstud. See on eelkõige kokkulepe:
- kui nimi algab punktiga, siis paljud tööriistad ei näita seda vaikimisi
- tavaliselt hoitakse seal seadeid, metaandmeid või kasutajakeskkonna konfiguratsiooni
Hea mõtteviis on:
- tavalised tööfailid ei alga punktiga
- seadistus- ja tööriistafailid algavad sageli punktiga
Kuidas neid shellis vaadata
Shellis on kõige tavalisemad võtted:
ls
ls -a
ls -la
ls -A
Kui tahad näha ainult punktiga algavaid nimesid käesolevas kaustas, siis üks lihtne võte on:
find . -maxdepth 1 -name '.*'
Kui tahad vaadata oma kodukataloogi peidetud seadistusfaile, siis on väga tavaline:
cd ~
ls -la
Just nii näed näiteks:
~/.zshrc~/.ssh~/.gitconfig
Kuidas neid Finderis vaadata macOS-is
macOS Finder peidab punktiga algavad failid ja kaustad tavaliselt ära. See on ainult kuvamisreegel, mitte failide päris kadumine.
Kõige praktilisem töövoog on:
- ava sama kaust Finderis
- ava sama kaust Terminalis
- tee Terminalis väike muudatus
- vaata Finderist, mis muutus
Terminalist saad praeguse kausta Finderis avada 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.Selle pildi sees toimub samm-sammult järgmine:
cd ~/uuskaust/pildidliigub kausta, mida tahetakse korraga vaadata nii Finderis kui ka Terminalispwdkinnitab, et töökoht on õigeopen .avab selle sama kausta Finderistouch uus.txtloob tühja failiecho "siin on ka teksti\n" > teine.txtloob teise faili ja kirjutab sinna ühe realsjals -alnäitavad terminalis, et mõlemad failid on olemas- Finderi aknas on näha seesama tulemus graafilises vaates
See on algajale väga hea harjutus, sest siin on korraga näha, et Terminal ja Finder ei tööta eri maailmades. Nad näitavad sama kausta kahe erineva kasutajaliidese kaudu.
Finderis saad peidetud failide kuvamist lülitada klahvikombinatsiooniga:
Command-Shift-.
See tähendab:
- kui peidetud failid olid peidus, siis need muutuvad nähtavaks
- kui need olid nähtavad, siis need peidetakse uuesti ära
See on väga hea algaja harjutus, sest siis näed otse, kuidas näiteks .zshrc või .git kaust päriselt olemas on, kuigi Finder ei näita neid alati vaikimisi.
Miks see oluline on
See teema on seotud paljude järgmiste peatükkidega:
~/.zshrcja~/.bashrcilmuvad muutujate ja aliaste peatükis~/.sshilmub SSH peatükis.gitilmub Git-i peatükis
Kui punktiga algavate nimede loogika on selge, siis muutuvad ka need peatükid palju arusaadavamaks.
Faili sisu võrdlemine räsi abil
Mõnikord tahad teada, kas kaks faili on sisult täpselt samad. Selleks saab kasutada krüptoräsi.
Levinud näited:
sha256sum fail.txtshasum -a 256 fail.txtmd5sum fail.txtvõimd5 fail.txt, kui vajad ainult kiiret kontrolli
Kui kahe faili SHA-256 räsi on sama, siis on need praktilises mõttes sama sisuga.
Näide:
printf 'tere\n' > a.txt
cp a.txt b.txt
sha256sum a.txt b.txt
Kui muudad ühe faili sisu, muutub ka räsi:
printf 'juurde\n' >> b.txt
sha256sum a.txt b.txt
Räsi kasutatakse sageli:
- failide võrdlemiseks
- allalaaditud faili tervikluse kontrolliks
- selleks, et näha, kas sisu on muutunud
Oluline märkus:
SHA-256sobib hästi tervikluse kontrolliksMD5on vanem ja nõrgem, seega eelistaSHA-256
Failide leidmine käsuga find
Kui ls näitab ainult käesoleva kausta sisu, siis find suudab otsida sügavamalt.
Näited:
find . -name '*.md'
find . -type f
find . -type d
find . -name '*.log'
Kui tulemused on õiged, siis alles seejärel:
find . -name '*.log' -delete
Viimane näide on võimas ja ohtlik. Enne -delete kasutamist tasub alati kõigepealt kontrollida, mida find päriselt leiab.
Kasulikud variandid:
find . -iname '*.jpg'tõstutundetu nimeotsingfind . -maxdepth 2 -type fpiira sügavustfind . -size +10Motsi suuri failefind . -type f -mtime -7otsi viimase 7 päeva jooksul muudetud faile
Veel üks väga praktiline lühikuju on:
ls -lt | head
See aitab kiiresti näha, mis siin kaustas viimati muutus.
Kui tahad suuremaid faile:
find . -type f -size +100M
Kui tahad hiljuti muudetud faile:
find . -type f -mtime -7
Need on väga head “mis siin üldse toimub?” tüüpi esimesed kontrollkäsud.
Minitest
- Loo kaust
harjutus. - Loo sinna fail
readme.txt. - Tee failist koopia nimega
readme.bak. - Nimeta koopia ümber nimeks
vana.txt. - Loo kausta peidetud fail nimega
.salajane. - Võrdle käske
lsjals -a. - Arvuta kahe sama faili räsi ja võrdle tulemusi.
- Leia
findabil kõik.txtfailid oma harjutuskaustast.