Hoppa yfir í efnið

Netið úr skelinni

Linux-skelin er ekki bara til að vinna með skrár á eigin tölvu. Hún getur líka talað við önnur forrit og aðrar tölvur yfir net. Í þessum hluta ætlum við að skoða nokkur einföld tól sem leyfa okkur að sækja vefsíður, hlaða niður skrám, spyrja um lén og prófa einfalda textatengingu.

Við förum ekki djúpt í netfræði hér. Hugmyndin er bara að fá tilfinningu fyrir því að netið er líka eitthvað sem við getum skoðað og notað úr skelinni.

Stóra hugmyndin: beiðni og svar

Þegar við opnum vefsíðu í vafra gerist í grófum dráttum þetta:

  1. Tölvan okkar sendir beiðni (e. request) til annarrar tölvu.
  2. Hin tölvan, oft kölluð þjónn, sendir svar (e. response) til baka.
  3. Vafrinn birtir svarið sem vefsíðu.

Skipanalínutól eins og curl og wget gera svipað, nema þau sýna okkur gögnin beint í skelinni eða vista þau í skrá.

Nokkur hugtök sem gott er að kannast við:

  • Vefslóð (e. URL) segir hvar eitthvað er á netinu, t.d. https://example.com/index.html.
  • Lén (e. domain name) er læsilegt nafn eins og example.com.
  • DNS er eins konar símaskrá sem þýðir lén yfir í IP-tölur.
  • IP-tala (e. IP address) er tölulegt vistfang tölvu á neti.
  • Tengi (e. port) er númer sem segir hvaða þjónustu á tölvunni við viljum tala við.

Vissir þú?

Lén eru til af því að fólk er betra í að muna nöfn en tölur. Það er miklu þægilegra að muna example.com en langa IP-tölu.


curl: sækja gögn og skoða svör

Skipunin curl (stytting á client URL) er eitt algengasta tólið til að sækja gögn af netinu, en með því að keyra skipunina

curl https://example.com
skrifar curl svarið sjálfgefið beint á skjáinn. Ef svarið er HTML-vefsíða sérðu HTML-textann, ekki fallega vefsíðu eins og í vafra.

Skoða bara hausa

Stundum viljum við ekki sækja alla síðuna, heldur bara skoða stuttar upplýsingar um svarið sem kallast hausar (e. headers). Ef við keyrum

curl -I https://example.com
þá gætirðu séð línur eins og:

HTTP/2 200
content-type: text/html

Við þurfum ekki að skilja allt hér strax. Talan 200 merkir í grófum dráttum „þetta gekk vel“.

Vista svar í skrá

Ef við viljum vista svarið í skrá getum við notað -o til að segja curl hvert á að vista gögnin og keyrt

curl -o playground/example.html https://example.com
sem gerir nákvæmlega það.

Ef skipunin virðist hanga

Nettól bíða stundum eftir svari. Ef ekkert gerist í langan tíma má stöðva með Ctrl + C.


Æfingavefur í heimamöppunni

Til að æfa okkur án þess að treysta á ytra internet getum við ræst lítinn vefþjón í heimamöppunni okkar. Python getur gert það með einni skipun.

Opnaðu einn skeljaglugga og skrifaðu:

cd ~/examples/web
PORT=$((8000 + $(id -u) % 1000))
python3 -m http.server "$PORT" --bind 127.0.0.1

Við notum litla reikniformúlu til að velja tengi út frá notandanúmerinu þínu. Á sameiginlegum þjóni minnkar það líkurnar á að tveir nemendur reyni að nota sömu tengið. --bind 127.0.0.1 þýðir að vefþjónninn hlustar bara á sömu tölvu, ekki á allt netið.

Þessi skipun heldur áfram að keyra. Hún er nú að þjóna skránum í ~/examples/web á http://localhost:$PORT.

Opnaðu annan skeljaglugga á sama þjón og prófaðu:

PORT=$((8000 + $(id -u) % 1000))
curl "http://localhost:$PORT"
curl "http://localhost:$PORT/hello.txt"
curl "http://localhost:$PORT/data.json"

Þegar þú ert búin/n að prófa má stöðva vefþjóninn í fyrri glugganum með Ctrl + C.

Prófaðu: sækja æfingaskrá

Ræstu litla vefþjóninn í ~/examples/web og sæktu files/info.txt með curl.

Lausn

Í fyrsta glugga:

cd ~/examples/web
PORT=$((8000 + $(id -u) % 1000))
python3 -m http.server "$PORT" --bind 127.0.0.1

Í öðrum glugga:

PORT=$((8000 + $(id -u) % 1000))
curl "http://localhost:$PORT/files/info.txt"


wget: hlaða niður skrám

Skipunin wget (stytting á web get) er annað klassískt tól til að sækja gögn af netinu og er sérstaklega þægilegt þegar við viljum vista skrá. Ef við keyrum

wget https://example.com/
þá vistar wget yfirleitt svarið í skrá í núverandi möppu, en ef við viljum velja skráarnafn sjálf getum við nýtt okkur -O fánann og keyrt
wget -O playground/example.html https://example.com/
til að afmarka nákvæmlega hvar skráin á að lenda.

Munurinn á curl og wget

Í mjög grófum dráttum:

  • curl er oft notað til að skoða svör, senda beiðnir og vinna með gögn í pípum.
  • wget er oft notað til að hlaða niður skrám.

Bæði tól geta samt gert margt af því sama.

Prófaðu: hlaða niður frá eigin vefþjóni

Ræstu aftur litla vefþjóninn í ~/examples/web og notaðu wget til að vista hello.txt í playground/.

Lausn

Í fyrsta glugga:

cd ~/examples/web
PORT=$((8000 + $(id -u) % 1000))
python3 -m http.server "$PORT" --bind 127.0.0.1

Í öðrum glugga:

PORT=$((8000 + $(id -u) % 1000))
wget -O playground/hello-downloaded.txt "http://localhost:$PORT/hello.txt"
cat playground/hello-downloaded.txt


dig: spyrja DNS

Þegar við skrifum lén eins og example.com þarf tölvan að finna hvaða IP-tölu það vísar á. Til þess notar hún DNS.

Skipunin dig (stytting á domain information groper) leyfir okkur að spyrja DNS beint til að finna til dæmis IP-tölu fyrir lén, en ef við keyrum

dig example.com
getur úttakið stundum orðið full langt. Til að fá stutt svar megum við því nota +short fánann og keyra
dig +short example.com
þar sem við fáum þá oftar en ekki eina eða fleiri IP-tölur prentaðar skýrt á skjáinn.

Prófaðu: flettu upp léni

Notaðu dig +short til að fletta upp example.com.

Lausn
dig +short example.com

Svarið getur breyst eftir stað og tíma. Það er eðlilegt.

Ef dig er ekki uppsett

Sum mjög lítil Linux-kerfi eru ekki með dig. Þá má stundum nota host example.com eða nslookup example.com, ef þau eru til staðar.


ping: einföld spurning um hvort eitthvað svari

Skipunin ping (dregið af nafni sónarhljóðsins ping) sendir litla spurningu til annarrar tölvu og mælir hvort svar komi til baka, þar sem keyrsla á

ping example.com
heldur yfirleitt áfram í Linux þar til við stöðvum hana handvirkt með Ctrl + C.

Stundum er betra að senda bara nokkrar spurningar, en með því að keyra

ping -c 4 example.com
getum við afmarkað fjölda sendinga nákvæmlega.

Ekki öll kerfi svara ping

Ef ping fær ekkert svar þýðir það ekki endilega að vefsíðan sé niðri. Sum kerfi og net slökkva á ping-svörum.


nc / netcat: hrá textatenging

Skipunin nc (stytting á netcat), oft kölluð netcat, er einfalt tól sem getur opnað hráa tengingu milli tveggja enda. Það er stundum kallað „svissneski vasahnífurinn“ fyrir netið, því það er lítið en sveigjanlegt.

Við getum notað það til að sjá að netgögn eru í grunninn oft bara straumur af bætum, svipað og pípur í skelinni.

Tveir skeljagluggar tala saman

Opnaðu fyrsta skeljagluggann og keyrðu

PORT=$((9000 + $(id -u) % 1000))
nc -l -p "$PORT"
þar sem þetta lætur nc hlusta á tengi sem er valin út frá notandanúmerinu þínu.

Opnaðu síðan annan skeljaglugga og tengdu þig við fyrri gluggann með því að keyra

PORT=$((9000 + $(id -u) % 1000))
nc localhost "$PORT"
og nú geturðu skrifað texta í öðrum glugganum og séð hann birtast í hinum. Prófaðu að skrifa nokkrar línur og stöðvaðu svo með Ctrl + C.

Ef nc -l -p virkar ekki

Til eru nokkrar útgáfur af netcat. Á sumum kerfum þarf skipunin að vera aðeins öðruvísi. Ef fyrra dæmið virkar ekki skaltu prófa:

PORT=$((9000 + $(id -u) % 1000))
nc -l "$PORT"

Prófaðu: senda skilaboð með netcat

Láttu tvo skeljaglugga tala saman með nc. Sendu línuna Halló net! úr öðrum glugganum yfir í hinn.

Lausn

Í fyrsta glugga:

PORT=$((9000 + $(id -u) % 1000))
nc -l -p "$PORT"

Í öðrum glugga:

PORT=$((9000 + $(id -u) % 1000))
nc localhost "$PORT"
Halló net!


Að skoða eigin netupplýsingar létt

Við ætlum ekki að kafa djúpt í netstillingar núna, en sumar skipanir eru sérstaklega gagnlegar til að kannast við netviðmót. Með því að keyra

ip addr
fáum við yfirlit yfir netviðmót og IP-tölur tölvunnar en með skipuninni
ss -tln
sjáum við þær TCP-tengi sem eru að hlusta í kerfinu. Ef litli Python-vefþjónninn er í gangi gætirðu séð línu sem inniheldur tengið þína.

Prófaðu: sérðu vefþjóninn?

Ræstu litla Python-vefþjóninn í ~/examples/web og notaðu ss til að sjá hvort eitthvað hlustar á tengið þína.

Lausn

Í fyrsta glugga:

cd ~/examples/web
PORT=$((8000 + $(id -u) % 1000))
python3 -m http.server "$PORT" --bind 127.0.0.1

Í öðrum glugga:

PORT=$((8000 + $(id -u) % 1000))
ss -tln | grep "$PORT"


Hvað með FTP?

FTP (e. File Transfer Protocol) er gamall staðall til að flytja skrár. Hann er sögulega mikilvægur, en í dag er hann sjaldnar notaður í nýjum verkefnum, meðal annars vegna þess að hann var hannaður fyrir eldri tíma internetsins.

Í nútíma Linux-vinnu sjáum við oftar:

  • curl og wget fyrir vefslóðir og niðurhal,
  • scp eða sftp fyrir skráaflutning yfir SSH,
  • rsync fyrir skilvirka afritun og samstillingu.

Við þurfum ekki að læra þessi tól öll strax. Hér er nóg að kunna fyrstu skrefin með curl, wget, dig og nc.

Smá samantekt

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

  • sótt vefsíðu eða skrá með curl,
  • vistað niðurhal með curl -o eða wget -O,
  • ræst einfaldan staðværan vefþjón með python3 -m http.server,
  • flett upp léni með dig +short,
  • prófað einföld svör með ping,
  • sent texta milli tveggja skeljaglugga með nc,
  • skoðað léttar netupplýsingar með ip addr og ss -tln.