Hoppa yfir í efnið

Vinna með skrár

Í Linux eru skrár ekki bara geymsla fyrir texta. Eins og við ræddum í hlutanum um skráakerfið, þá lítur kerfið á nánast allt sem skrá. Í þessum hluta ætlum við að skoða hvernig við lesum, greinum, breytum og pökkum skrám í skeljaglugganum.

Öll dæmin í þessum kafla gera ráð fyrir að þú sért inni í æfingamöppunni ~/examples. Byrjaðu á því að tryggja að þú sért á réttum stað:

cd ~/examples

Innihald skráa

Oft viljum við bara sjá hvað er inni í skrá án þess að opna ritil (e. editor). Nokkrar skipanir eru í boði sem bjóða upp á leiðir til að skoða innihald skráa.

cat

Skipunin cat (stytting á concatenate) skrifar einfaldlega allt innihald skrárinnar beint á skjáinn, en með því að keyra

cat skjal.txt
cat skjal1.txt skjal2.txt
getum við séð innihald einnar eða fleiri skráa um leið.

head og tail

Helsti ókostur cat er að ef skráin er mjög stór getur reynst erfitt að sigta í gegnum gríðarlegt magn af texta sem skrifast á skjáinn og einnig getur það tekið langan tíma. Skipanirnar head og tail bjóða okkur upp á að glugga í skrár, en þær skrifa ýmist fyrstu eða síðustu línur skráarinnar á skjáinn. Sjálfgefinn fjöldi lína er 10, en hægt er að stilla þann fjölda með stillingunni -n líkt og sést þegar við keyrum

head skjal.txt          # skrifar út fyrstu 10 línurnar í skjal.txt
tail skjal.txt          # skrifar út síðustu 10 línurnar í skjal.txt
head -n 5 skjal.txt     # skrifar út fyrstu 5 línurnar í skjal.txt
tail -n 20 skjal.txt    # skrifar út síðustu 20 línurnar í skjal.txt
til að afmarka prentunina við ákveðinn línufjölda.

Annálar

Mörg Linux forrit skrá annála (e. logs) sína í skrár, línu fyrir línu. Í möppunni logs má t.d. sjá dæmi um hvernig vefþjónar skrá annála sína. Ef fylgjast þarf með annálum í rauntíma er hægt að notast við stillinguna -f á tail, en hún gerir það að verkum að tail heldur áfram að fylgjast með skránni og ef ný lína bætist við skrána, þá er hún skrifuð út jafnóðum og henni er bætt við.

Í logs/ er skrifta sem líkir eftir forriti sem skrifar annála í skrá.

Með því að keyra skipunina

./stream.sh
inni í möppunni logs og í kjölfarið
tail -f live.log
sjáum við hvernig annállinn prentast út í rauntíma. Athugaðu að tail -f hættir ekki sjálfkrafa. Til að hætta keyrslu þarf að nota Ctrl+C.

Fram og aftur

Skipunin til að skrifa innihald skráa út í öfugri röð heitir tac. Nafnið á skipuninni er einfaldlega cat aftur á bak, og sjáum við því að Linux er ekki hafið yfir orðagrín!

Síðuflettar

Ef þörf er á að skoða allt innihald skráa er cat nothæft að einhverju leyti, en frekar óhentugt. Allt innihaldið er, vissulega, skrifað út í skelina og í flestum skeljum er hægt að skruna fram og til baka. Það er því möguleiki að skoða stærri skrár þannig. Aftur á móti eru flestar skeljar með takmörk á hversu langt aftur þær geyma það sem skrifað er út. Þannig er ekki hægt að nota þessa aðferð til að nota mjög stórar skrár, í því tilfelli munum við bara sjá öftustu línur skráarinnar.

Síðuflettar eru forrit sem hönnuð eru til að skoða skrár, óháð lengd. Ýmsir síðuflettar eru í boði en langalgengastur er less, en með skipuninni

less löng_skrá.txt
opnum við skrána á þægilegan hátt þar sem hægt er að fletta fram og til baka, leita og ýmislegt fleira:

  • Space: fara niður um síðu.
  • B: fara upp um síðu.
  • G: fara efst.
  • Shift+G: fara neðst.
  • / leitarorð: leita í skránni.
  • N: næsta niðurstaða.
  • Shift+N: fyrri niðurstaða.
  • Q: hætta.

Vissir þú?

Síðuflettirinn less var búinn til sem arftaki síðuflettisins more. Nafnið er orðaleikur á setningunni „less is more“. Í þessu tilviki er less bókstaflega meira en more, því í honum er bæði hægt að fletta fram og til baka.

Prófaðu: cat, head, tail og less

Skoðaðu stutta og langa textaskrá í æfingagögnunum.

Lausn
cat welcome.txt
head notes/long_story.txt
tail notes/long_story.txt
less notes/long_story.txt

Inni í less geturðu prófað /Tíunda til að leita og síðan q til að hætta.


Að telja og mæla skrár

Skipunin wc (stytting á word count) er notuð til að gefa yfirsýn yfir innihald skráa, þar á meðal fjölda lína, orða og bæta. Ólíkt því sem nafnið bendir til telur hún ekki bara orð. Ef hún er keyrð án nokkurra stillinga gefur hún okkur fjölda lína, orða og bæta í skránni. Ef við viljum eingöngu fá að sjá línufjölda, orðafjölda eða bætafjölda getum við notað -l, -w eða -c fánana, en með því að keyra

cd data
wc paragraphs.txt        # línur, orð og bæti
wc -l paragraphs.txt     # bara línufjöldi
wc -w paragraphs.txt     # bara orðafjöldi
wc -c paragraphs.txt     # fjöldi bæta
sjáum við nákvæmlega hvernig forritið greinir skrána.

Ef úttakið úr fyrstu skipuninni hér að ofan er skoðað, sjáum við eitthvað í líkingu við

  4  36 257 paragraphs.txt

sem þýðir að skráin inniheldur 4 línur, 36 orð og er 257 bæti í heildina.

Prófaðu: telja línur

Hversu margar línur eru í data/names.txt?

Lausn
wc -l data/names.txt

Að telja og mæla skrár

Við höfum þegar séð að við getum fundið stærð skráa með ls (sjá kaflann um ls), en við munum að sú skipun hentar ekki til að finna stærð mappa. Skipunin du (stytting á disk usage) reiknar og tekur saman hversu mikið pláss möppur og skrár taka á disknum. Ef hún er keyrð án stillinga sýnir hún stærð núverandi möppu og allra undirmappa. Til að fá stærðir á lesanlegra formi en fjölda bæta getum við notað stillinguna -h eða --human-readable. Til að fá eingöngu stærðina á núverandi möppu, eða þeirri möppu sem gefin er upp sem viðfang, er hægt að nota -s eða --summarize, en með skipununum

du                  # Sýnir stærð vinnumöppu og allra undirmappa
du -sh              # Sýnir stærð vinnumöppu í læsilegra formi
du -s search        # Sýnir stærð möppunnar search í bætum
fáum við bæði heildarstærðir og nákvæma mælingu á völdum möppum.


Hvers konar skrá er þetta?

Í Windows skipta endingar miklu máli, t.d. .exe, .jpg og .txt og eru þær notaðar til að greina á milli skráategunda. Til dæmis er .exe keyrsluskrá, .jpg er mynd, o.s.frv. Skráaendingar ákvarða hvaða forrit eru notuð til að opna skrár, og margt fleira.

Það er vissulega hefð fyrir skráaendingum í Linux líka, en þar eru gögnin sjálf einnig skoðuð til að ákvarða innihald skráa. Margar skráargerðir byrja á ákveðnum bætum sem kallast skráarauðkenni (e. file signature eða magic number) sem auðkenna innihaldið.

Skipunin file (stytting á file) les fyrstu bæti skráa og ákvarðar, út frá þekktum mynstrum og skráarauðkennum, tegund skráarinnar. Það ber að hafa í huga að file er ekki fullkomin leið til að ákvarða innihald skráa og skipunin getur haft rangt fyrir sér, enda ekki neinn formlegur staðall sem greinir tegund skráa, heldur hefðir og venjur.

Inni í möppunni file-types eru dæmi um ýmsar tegundir skráa en með því að nota file skipunina og keyra

file archive.zip
file ascii.txt
file tiny.png
getum við fengið greiningu á því hver innri uppbygging þeirra er. Dæmi um úttak síðustu skipanarinnar gæti verið

tiny.png: PNG image data, 1 x 1, 8-bit gray+alpha, non-interlaced

Texti vs. tvíundagögn

Þegar öllu er á botninn hvolft eru allar skrár runur af bætum. Það eina sem skilur að skrá sem geymir ljósmynd og skrá sem geymir Word skjal er hvernig þessi bæti eru túlkuð. Algengt er að flokka tegundir skráa í tvo flokka.

  1. Textaskrár: Skrár sem innihalda aðeins bæti sem túlka má sem kóðuð rittákn samkvæmt stöðlum eins og ASCII eða UTF-8.
  2. Tvíundaskrár: Gögn sem eru ekki beint læsilegur texti, t.d. myndir, hljóð, gagnasöfn eða keyranleg forrit. Hlutar þessara skráa geta þó innihaldið kóðaðan texta.

Þegar skelin fer að tala tungum

Ef þú keyrir cat á tvíundaskrá getur skeljaglugginn farið að sýna furðutákn, gefa frá sér hljóð eða breyta litum og staðsetningu bendilsins. Tvíundaskrá inniheldur hrá bæti og sum þeirra eru túlkuð af skelinni sem stjórntákn (e. control characters) sem skeljaglugginn túlkar, í stað þess að sýna þau sem venjulegan texta. Þú ert því ekki að „skemma skelina“ — skeljaglugginn er bara að túlka hluta gagnanna eins og þau séu skipanir fyrir skelina.

Til að koma skeljaglugganum aftur í eðlilegt horf getum við keyrt skipunina

reset
og ef textinn birtist skringilega eða alls ekki er hægt að slá inn reset í blindni og ýta á Enter til að endurstilla skeljagluggann.

Þess vegna er mun betra og öruggara að nota sértæk tól til að rannsaka tvíundaskrár en að varpa þeim beint á skjáinn með cat.

Að finna læsilegan texta

Í mörgum tilfellum viljum við leita að lesanlegum textabútum inni í skrám sem annars innihalda flókin tvíundagögn. Með því að nota skipunina

strings forrit
strings mynd.jpg | less
getum við látið strings reyna að finna og birta alla textabúta sem hún finnur inni í tiltekinni skrá, jafnvel þótt skráin sjálf sé í raun ekki textaskrá heldur keyranlegt forrit eða ljósmynd.

Hex-skoðun með hexdump og xxd

Þegar við þurfum að rýna beint í hráu bætin inni í tvíundaskrám er algengt að sýna þau í sextándakerfinu með hjálp viðeigandi tækja. Keyrsla á borð við

hexdump -C skrá.bin
xxd skrá.bin
nýtir annaðhvort hexdump með -C fánanum eða xxd til að varpa fram gildi hvers bætis í sextándakerfi ásamt samsvarandi textatúlkun hlið við hlið.

Prófaðu: hrá bæti

Skoðaðu sömu tvíundaskrá með því að nýta skipanirnar strings, hexdump og xxd.

Lausn

Til þess að bera saman mismunandi sjónarhorn á hráu gögnunum í skránni getum við keyrt skipanirnar

strings binary/small.bin
hexdump -C binary/small.bin
xxd binary/small.bin
sem sýnir okkur muninn á því að sía út einungis texta annars vegar og að skoða hvert einasta bætisskipulag hins vegar.

Kóðun með base64

Hægt er að nota Base64 kóðun til að breyta flóknum tvíundagögnum yfir í einfaldan texta sem auðvelt er að senda eða afrita á milli tölvukerfa. Með því að keyra skipanir á borð við

base64 mynd.png > mynd.txt
base64 -d mynd.txt > mynd-afrit.png
getum við annars vegar kóðað mynd yfir í textaskrá og hins vegar notað -d fánann til að afkóða textann aftur yfir í upprunalega myndasniðið.

Prófaðu: afkóða skilaboð

Skráin binary/message.b64 geymir Base64-kóðaðan texta og markmið okkar er að komast að því hvaða skilaboð leynast þar inni.

Lausn

Við getum afkóðað og lesið innihald skráarinnar með því að keyra

base64 -d binary/message.b64
sem varpar lesanlegum texta beint á skjáinn okkar.


Að bera saman skrár

Þegar við viljum bera saman tvær mismunandi skrár og skoða hvað greinir þær að koma skipanirnar diff og cmp sérstaklega vel í not. Skipunin diff (stytting á difference) er notuð til að bera saman innihald tveggja skráa línu fyrir línu, en cmp (stytting á compare) ber skrárnar saman bætastærð fyrir bætastærð.

diff gömul.txt ný.txt
cmp skrá1.bin skrá2.bin

Skipunin diff sýnir okkur nákvæmlega hvað breyttist á milli útgáfa, þannig að línur sem byrja á < tilheyra fyrri skránni en línur sem hefjast á > sýna texta úr þeirri síðari.

Prófaðu: bera saman afrit

Prófaðu að búa til nýtt afrit af notes/todo.txt, gera á því minniháttar breytingar og bera svo skrárnar saman.

Lausn

Til þess að sjá muninn á upprunalegu skránni og breyttu afriti getum við fylgt ferlinu

cp notes/todo.txt playground/todo-afrit.txt
echo "læra diff" >> playground/todo-afrit.txt
diff notes/todo.txt playground/todo-afrit.txt
sem mun sýna okkur nákvæmlega þá línu sem við bættum við í afritið.


Pökkun og þjöppun

Oft fáum við sendar margar skrár samtímis í einu skjalasafni (e. archive) eða í sérstakri þjappaðri skrá (e. compressed file).

tar

Forritið tar safnar mörgum skrám saman í eina staka skrá sem við getum svo einnig þjappað með gzip-þjöppun. Til þess að meðhöndla slík söfn notum við skipanir eins og

tar -cf safn.tar mappa/       # búa til óþjappað tar-safn
tar -tf safn.tar              # skoða innihald án þess að taka út
tar -xf safn.tar              # taka út
tar -czf safn.tar.gz mappa/   # búa til gzip-þjappað safn
tar -tzf safn.tar.gz          # skoða innihald þjappaðs safns
tar -xzf safn.tar.gz          # taka út þjappað safn
þar sem fánarnir gegna mismunandi hlutverkum: c stendur fyrir create til að búa til safn, x stendur fyrir extract til að taka út gögn, f merkir file til að tilgreina skráarheitið sem fylgir á eftir, og z virkjar sjálfvirka gzip-þjöppun.

zip og unzip

Ef við erum að vinna með hefðbundin .zip söfn getum við notað skipanirnar

zip -r safn.zip mappa/
unzip -l safn.zip      # skoða innihald án þess að afþjappa
unzip safn.zip
til að búa til eða opna söfn sem eiga auðvelt með að ferðast á milli ólíkra stýrikerfa eins og Windows, macOS og Linux.

Prófaðu: taka út safn

Prófaðu að afþjappa bæði tar.gz og zip söfnin sem við höfum undirbúið og komdu þeim fyrir á skipulagðan hátt inni í playground/ möppunni.

Lausn

Við getum stofnað viðeigandi undirmöppur og dregið innihaldið úr söfnunum með því að keyra skipanirnar

mkdir -p playground/archive-test/tar playground/archive-test/zip
tar -xzf archives/source.tar.gz -C playground/archive-test/tar
unzip archives/source.zip -d playground/archive-test/zip
find playground/archive-test -type f
sem sýnir okkur allar skrárnar sem komu úr báðum skjalasöfnunum.

Vissir þú?

Nafnið tar stendur fyrir tape archive. Forritið var upphaflega hannað til að vista skrár á segulbönd. Skipunin lifir enn góðu lífi, löngu eftir að segulbönd hurfu af skrifborðum flestra.


Ritillinn nano: að breyta skrám

Þegar við þurfum að búa til nýjar skrár eða eiga við stillingarskrár getum við opnað einfaldasta textaritilinn í Linux-umhverfinu með því að slá inn

nano skjal.txt
og hefja þar ritun beint í flugunni.

Mini-guide fyrir nano

  1. Skrifa: Byrjaðu bara að slá inn texta.
  2. Vista: Ýttu á Ctrl + O. Nano spyr um nafn; ýttu á Enter.
  3. Hætta: Ýttu á Ctrl + X.
  4. Leita: Ýttu á Ctrl + W.
  5. Klippa línu: Ctrl + K.
  6. Líma línu: Ctrl + U.

Prófaðu: búa til skrá með nano

Stofnaðu nýja og stutta dagbókarskrá inni í playground/ möppunni þinni.

Lausn

Við getum opnað ritilinn á nýju skránni með því að keyra skipunina

nano playground/dagbok.txt
þar sem við skrifum stuttan texta, vistum með Ctrl + O, staðfestum með Enter, og lokum ritlinum með Ctrl + X. Að því loknu getum við prentað innihald skráarinnar á skjáinn með skipuninni
cat playground/dagbok.txt
til að ganga úr skugga um að skráin hafi vistast rétt.

Fyrir lengra komna

Þótt þú munir ábyggilega heyra mikið rætt um öfluga ritla á borð við vim eða emacs er nano fullkominn staður til að stíga fyrstu skrefin. Ef þú lendir einhvern tímann fyrir slysni inni í vim og veist ekki hvernig á að sleppa út er hægt að ýta á Esc, slá inn :q og ljúka með því að ýta á Enter.

Smá samantekt

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

  • valið milli cat, head, tail og less,
  • notað wc, file, strings, hexdump og xxd til að rannsaka skrár,
  • afkóðað einföld Base64-gögn,
  • borið saman textaskrár með diff,
  • tekið út og búið til einföld tar og zip skjalasöfn,
  • breytt textaskrá með nano.