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:
- Tölvan okkar sendir beiðni (e. request) til annarrar tölvu.
- Hin tölvan, oft kölluð þjónn, sendir svar (e. response) til baka.
- 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
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
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
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/
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/
Munurinn á curl og wget
Í mjög grófum dráttum:
curler oft notað til að skoða svör, senda beiðnir og vinna með gögn í pípum.wgeter 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
+short fánann og keyra
dig +short example.com
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
Stundum er betra að senda bara nokkrar spurningar, en með því að keyra
ping -c 4 example.com
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"
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"
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
ss -tln
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:
curlogwgetfyrir vefslóðir og niðurhal,scpeðasftpfyrir skráaflutning yfir SSH,rsyncfyrir 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 -oeðawget -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 addrogss -tln.