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
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
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*
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 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
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 {} \;
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"
Í 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
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 {} \;
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
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
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
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
| 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
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
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" .
Fljótleg leit með locate og fzf
Á sumum kerfum er hægt að nota skipunina locate (stytting á locate)
locate passwd
Auk þess er gagnvirka tólið fzf (stytting á fuzzy finder) mjög vinsælt, en með því að keyra skipunina
fzf
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
Í 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
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,-maxdepthog-exec, - fundið texta með
grep,-i,-n,-r,-vog-l, - notað nokkur einföld regex-mynstur,
- flett upp hjálp með
man,--helpoghelp.