Hoppa yfir í efnið

Leitað og farið yfir

Skráakerfið getur orðið stórt og flókið. Stundum vitum við að skrá er til, en munum ekki hvar hún er. Stundum vitum við að ákveðið orð er inni í einhverri skrá, en ekki hvaða skrá. Linux býður upp á öflug leitar- og skoðunartól sem spara mikinn tíma.

Öll dæmin í þessum kafla gera ráð fyrir að þú sért inni í æfingamöppunni ~/examples og til að tryggja að við séum á réttum stað getum við byrjað á því að færa okkur þangað með skipuninni

cd ~/examples
sem kemur okkur í rétta vinnslumöppu.

Algildistákn: kraftur stjörnunnar

Áður en við skoðum sérstök leitarforrit þurfum við að skilja algildistákn (e. wildcards eða globs). Þetta eru tákn sem skelin túlkar áður en skipunin sjálf keyrir.

Tákn Merking Dæmi
* Hvað sem er, líka ekkert ls *.txt
? Nákvæmlega einn stafur ls skjal?.txt
[abc] Einn af stöfunum ls kafli[123].md
[0-9] Einn stafur á bili ls mynd[0-9].png

Til þess að sjá algildistáknin í verki getum við prófað að keyra skipanir á borð við

ls *.md
ls verkefni-?.txt
rm temp-*.txt
þar sem skelin finnur sjálfkrafa allar skrár sem passa við viðkomandi munstur og framkvæmir skipunina á þeim.

Algildistákn passa við skráarnöfn í núverandi samhengi. Ef engin skrá passar er hegðunin aðeins mismunandi milli skelja, en í Bash helst mynstrið oft óbreytt. Þess vegna getur villumelding eins og cannot access '*.txt' einfaldlega þýtt að engin .txt skrá hafi fundist á þessari slóð.

Algildistákn eru leyst út fyrst

Þegar þú skrifar rm *.txt sér rm ekki stjörnuna. Skelin breytir fyrst *.txt í lista yfir skrár sem passa. Þess vegna er gott að prófa fyrst með ls *.txt áður en þú notar rm.

Prófaðu: algildistákn

Notaðu ls til að finna allar .txt skrár í notes/ og allar skrár í data/ sem byrja á bókstafnum c.

Lausn

Við getum framkvæmt þessa leit með því að keyra skipanirnar

ls notes/*.txt
ls data/c*
sem sía skrárnar út á fljótlegan hátt.


Að finna skrár með find

Skipunin find (stytting á find) leitar kerfisbundið í skráartrénu út frá ýmsum eiginleikum skráa og mappa, þar sem grunnhugmyndin fylgir forminu

find hvar skilyrði hvað-á-að-gera
sem við getum svo útfært á margvíslegan hátt.

Sem dæmi getum við notað sérhæfða fána og skilyrði eins og

find . -name "secret.txt"          # eftir nafni
find . -iname "*.JPG"              # nafn, óháð há/lágstöfum
find ~/verkefni -type f             # bara skrár
find ~/verkefni -type d             # bara möppur
find . -maxdepth 2 -type f          # bara tvö fyrstu dýptarstig
find . -size +10M                   # stærri en 10 MB
find . -mtime -1                    # breytt síðasta sólarhring
til að afmarka leitina okkar mjög nákvæmlega.

Auk þess getur find framkvæmt aðgerðir beint á þær skrár sem finnast með því að keyra til dæmis

find . -name "*.tmp" -delete
find . -name "*.txt" -exec wc -l {} \;
sem annaðhvort eyðir bráðabirgðaskrám eða telur línufjölda í hverri textaskrá fyrir sig.

Prófaðu áður en þú eyðir

Áður en þú notar eyðingarfánann -delete er skynsamlegt að keyra leitina fyrst óbreytta með skipuninni

find . -name "*.tmp"
svo þú sjáir nákvæmlega hvaða skrár munu hverfa áður en þú framkvæmir eyðinguna.

Í dæminu þar sem við notum -exec táknar {} hverja skrá sem fannst, á meðan \; segir find að skipuninni sé lokið.

Prófaðu: finna nálina

Ein skrá í search/ heitir needle.txt. Finndu hana og lestu innihaldið.

Lausn

Við getum fundið skrána og lesið hana með því að keyra skipanirnar

find search -name "needle.txt"
cat search/mystery/deep/path/needle.txt
sem leiðir okkur beint að leyndu innihaldi hennar.

Prófaðu: stærðir og tími

Finndu allar textaskrár undir search/ og láttu wc -l telja línurnar í þeim.

Lausn

Til að finna skrárnar og telja línurnar samtímis getum við beitt skipuninni

find search -name "*.txt" -exec wc -l {} \;
sem skilar okkur heildarfjöldanum á fljótlegan hátt.


Að finna forrit: which, type og command -v

Þegar þú skrifar ls þarf skelin að finna nákvæmlega hvaða forrit á að keyra. Til að kanna hvar forritin búa í kerfinu og hvernig þau eru skilgreind getum við keyrt skipanir á borð við

which grep
command -v python3
type cd
type ls
þar sem which (stytting á which) og command -v sýna slóðina að sjálfu forritinu, á meðan type (stytting á type) greinir hvort um sé að ræða innbyggða skipun í skelinni, samnefni (e. alias) eða sjálfstætt forrit.

Prófaðu: innbyggt eða forrit?

Berðu saman skipanirnar cd, ls og grep til að sjá hvernig þær eru skilgreindar í kerfinu þínu.

Lausn

Við getum borið þær saman með því að keyra

type cd
type ls
command -v grep
en niðurstaðan sýnir að cd er yfirleitt innbyggt í skelina sjálfa, þar sem það þarf að eiga beint við stöðu og vinnslumöppu skeljarinnar.


Að finna texta með grep

Skipunin grep (stytting á global regular expression print) leitar að mynstri inni í texta og prentar út þær línur sem passa. Til að leita að tilteknum orðum eða villuboðum getum við keyrt skipanir á borð við

grep "ERROR" logs/error.log
grep -i "error" logs/error.log       # óháð há/lágstöfum
grep -n "ERROR" logs/error.log       # sýna línunúmer
grep -v "ERROR" logs/error.log       # sýna línur sem passa ekki
grep -r "leit" .                     # leita endurkvæmt í möppum
en gott er að hafa í huga að ef ekkert finnst mun grep ljúka keyrslu án þess að sýna nokkuð á skjánum.

Gagnlegar stillingar:

  • -i: hunsa mun á há- og lágstöfum.
  • -n: sýna línunúmer.
  • -r: leita endurkvæmt í möppum.
  • -v: snúa leitinni við, sýna það sem passar ekki.
  • -l: sýna bara skráarnöfn sem innihalda samsvörun.

Nokkur gagnleg mynstur

Við getum einnig látið grep nota reglulegar segðir (e. regular expressions) til að leita að flóknari mynstrum í texta. Með skipunum eins og

grep "^root" /etc/passwd       # línur sem byrja á root
grep "bash$" /etc/passwd       # línur sem enda á bash
grep -E "[0-9]{3}" skrá.txt    # þrír tölustafir í röð
grep -E "cat|dog" skrá.txt     # cat eða dog
getum við síað texta út frá staðsetningu orða í línum eða ákveðnum stafabilum.

Mynstur Merking
^ byrjun línu
$ endir línu
. hvaða einn stafur sem er
[0-9] einn tölustafur
a|b a eða b, með grep -E

Ekki læra allt regex í einu

Reglulegar segðir eru lítið tungumál út af fyrir sig. Hér er nóg að kunna nokkur mynstur og vita að þú getur flett upp restinni þegar þú þarft.

Prófaðu: grep

Finndu orðið norðurljós í öllum skrám undir search/. Sýndu líka línunúmer.

Lausn

Við getum leitað endurkvæmt og látið fylgja með línunúmer með því að keyra

grep -rn "norðurljós" search
sem prentar allar samsvaranir á skjánum.

Prófaðu: einfalt regex

Í data/scores.csv eru nöfn, hópar og stig. Finndu línur sem enda á tölu á bilinu 90–99.

Lausn

Við getum notað reglulega segð með -E fánanum og keyrt skipunina

grep -E "9[0-9]$" data/scores.csv
til að fá einungis þær línur sem enda á viðeigandi tölubili.

Prófaðu: hvaða skrár nefna Linux?

Finndu skráarnöfn, ekki línur, undir heimamöppunni sem innihalda orðið Linux eða linux.

Lausn

Við getum látið grep birta eingöngu skráarnöfn með því að keyra

grep -ril "linux" .
sem listar upp allar viðeigandi skrár.


Fljótleg leit með locate og fzf

Á sumum kerfum er hægt að nota skipunina locate (stytting á locate)

locate passwd
til að leita í fyrirfram byggðum og fljótvirkum skráagagnagrunni, en gallinn er sá að hann uppfærist ekki alltaf í rauntíma.

Auk þess er gagnvirka tólið fzf (stytting á fuzzy finder) mjög vinsælt, en með því að keyra skipunina

fzf
opnast gagnvirk leit þar sem við getum síað skrár á einfaldan hátt beint í flugunni.

Hins vegar ber að hafa í huga að þessi tól eru ekki alltaf til staðar á öllum kerfum, svo það er ávallt mikilvægast að ná góðum tökum á grunnverkfærunum find og grep fyrst.


Að fá hjálp

Enginn man allar stillingar skipana utanað og þess vegna er mikilvægt að kunna að leita í handbókunum með því að nota skipunina man (stytting á manual), flaggið --help, og innbyggðu skipunina help (stytting á help) fyrir innbyggðar skeljaskipanir:

man grep           # ítarleg handbók
ls --help          # stutt hjálp
help cd            # hjálp fyrir Bash-innbyggðar skipanir
info coreutils     # stundum ítarlegri skjöl
sem veitir okkur skjóta aðstoð beint í skelinni.

Í man og less virka sömu grunnlyklar:

  • Space: fletta niður.
  • /orð: leita.
  • n: næsta leit.
  • q: hætta.

Að lokum er hægt að nota snöggt tól eins og tldr (stytting á too long; didn't read) ef það er uppsett í kerfinu, en með keyrslu á borð við

tldr tar
tldr grep
fáum við einföld og hagnýt dæmi um notkun skipananna án þess að þurfa að lesa heilu handbækurnar.

Vissir þú?

Nafnið grep kemur úr gamla textaritlinum ed. Þar var skipunin g/re/p notuð fyrir „global regular expression print“. Það hljómar dularfullt, en hugmyndin er einföld: finna línur sem passa við mynstur og prenta þær.

Smá samantekt

Eftir þennan hluta ættirðu að geta:

  • notað algildistákn eins og *, ? og [0-9],
  • fundið skrár með find, -name, -type, -maxdepth og -exec,
  • fundið texta með grep, -i, -n, -r, -v og -l,
  • notað nokkur einföld regex-mynstur,
  • flett upp hjálp með man, --help og help.