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
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
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
logs og í kjölfarið
tail -f live.log
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
- 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
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
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
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.
- 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.
- 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
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
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
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
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
-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
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
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
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
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
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
Mini-guide fyrir nano
- Skrifa: Byrjaðu bara að slá inn texta.
- Vista: Ýttu á Ctrl + O. Nano spyr um nafn; ýttu á Enter.
- Hætta: Ýttu á Ctrl + X.
- Leita: Ýttu á Ctrl + W.
- Klippa línu: Ctrl + K.
- 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
cat playground/dagbok.txt
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,tailogless, - notað
wc,file,strings,hexdumpogxxdtil 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
tarogzipskjalasöfn, - breytt textaskrá með
nano.