bild
Skolan för
datavetenskap
och kommunikation

Laboration 1: Protokoll, Unix, XML

Syfte:

Syftet med denna laboration är att ge grundläggande kunskap om hur protokoll, XML och Unix fungerar vilket behövs senare i kursen.

Mål:

Efter laborationen ska ni ha

  • kunskap i vad ett protokoll är och hur sådana fungerar
  • grundläggande Unix-kunskaper
  • kunskap om hur man skapar DTD:er för XML

Genomförande:

Ha med föreläsningsanteckningarna om Unix, och XML som delades ut på föreläsningen samt "Lathund i Unixanvändning på Nada" (Unixanvändning) som kan köpas på Nadas studerandeexpedition.

Laborationen genomföres i grupper om två studenter. Laborationerna utförs i första hand på NADAs Unix-datorer. Om ni vill arbeta utanför NADAs salar behöver ni en telnet som klarar ssh, t.ex. putty som är gratis för PC, eller MacSSHPPC som är gratis för mac, eller openssh som är gratis för Unix och linux. Observera att flera labmoment är beroende av att diverse datorer är igång, att nätverk fungerar osv. Om någon uppgift av någon anledning inte går att utföra så gå vidare och gå sedan tillbaka till den krånglande uppgiften ett par timmar senare.

Krav:

Svar på frågorna redovisas i ett mail till laborationsansvarige (inge@nada.kth.se) med svar på uppgifterna. Jag vill ha ETT mail som ska ha titeln LABORATION: KURSNAMN_lab1

Mailet ska innehålla namn och emailadresser till båda laboranterna (eller den enda laboranten) i gruppen, samt svaren på frågorna.

0. Etablera konto och kurs

Om du har ett nytt NADA-Unix-konto måste du byta lösenord.

Om ni labbar tillsammans ska ni se till att byta lösenord på båda era konton. Det är mycket viktigt, inte bara för en själv, att man väljer ett bra lösenord. Detta gäller även om man inte är rädd om sina egna filer, alla inloggninsmöjligheter är extremt användbara vid datorintrång, till exempel för att dölja förövarens identitet och försvåra spårning.

0.0 Nytt lösenord

Vad som är ett bra lösenord är inte helt självklart. För att komma över andras lösenord används mer och mer avancerade program på snabbare och snabbare, och fler och fler datorer. Alla möjliga och omöjliga ordlistor används, det finns inte längre något ord som är tillräckligt obskyrt eller fackorienterat för att vara säkert. Gamla knep som att byta ut bokstaven O mot siffran noll är inte heller längre gångbart. Enkla felstavningar hör också till sådant som provas. Lösenord som redan tidigare var för dåliga, som bilnummer, telefonummer, med mera, är förstås fortfarande lika dåliga, liksom tricket att vända ett ord baklänges

Hur konstruerar man då ett bra lösenord? En bra metod är att ta någon godtycklig, gärna obskyr, mening och ta initialbokstäverna från varje ord. Välj inte ett berömt citat, i alla fall inte utan att ändra om det lite grand. Gör en del bokstäver stora och en del små (för att minnas kan man tänka på orden med stor bokstav som betonade).

Uppgift 0.0

Hitta på ett bra lösenord.
Logga sedan in på NADAs Unix-datorer med hjälp av de användarnamn och lösenord som du kvitterat ut. Använd sedan kommandot
passwd
för att byta till ditt nya lösenord. (inget "svar" behöver redovisas)

0.1 Checka in i res

Kommandot res används för att kontrollera labrapportering.

Uppgift 0.1

Checka in i res på kursen med kommandot
res checkin KURSNAMN
och svara på frågorna.
(Inget "svar" behöver redovisas)

Med kommandot res show KURSNAMN kan du få reda på vilka av kursens laborationer som rapporterats in för dig.

0.1 Sätt upp kurs-miljön

Uppgift 0.2

Etablera sedan kursen med kommandot
course join KURSNAMN
Om ni labbar tillsammans skall ni skaffa en gemensam labb-katalog genom att sedan båda gjort ovanstående, båda logga ut, logga in igen och ge kommandot
course labdir KURSNAMN labkompisens användarnamn
(Inget "svar" behöver redovisas)

1. Protokoll

Telnet och SSH

Telnet är ett program som huvudsakligen används till att få en textterminaluppkoppling mot en annan dator, vanligtvis en Unix-dator. Telnet är dock inte begränsat till just textterminaluppkopplingar utan kan användast till att koppla upp sig mot andra servertjänster, såsom en webserver eller en mailserver. Detta är mycket användbart om man vill "avlusa" program som använder nätverkskommunikation, eller som i detta fall få djupare förståelse för hur kommunikationsprotokoll fungerar

ssh är en variant av telnet som dessutom klarar av krypterade förbindelser.

Om allt gått rätt till är du nu inloggad på NADAs Unix-system och har bytt lösenord. Härifrån kan du sedan skriva Unix-kommandon. Ett exempel på kommando är host som översätter mellan hostnamn (t.ex. www.gnu.org) och IP-adresser (t.ex. 199.232.41.10). Testa att skriva
host www.gnu.org.
Du bör då få svaret
www.gnu.org. has address 199.232.41.10

Kommandot host fungerar även tvärt om, dvs man kan skriva in en IP-adress och få hostnamnet.

Uppgift 1.1

  1. Vilken IP-adress har datorn www.gt.kth.se?
  2. Vilket hostnamn har datorn med IP-adressen 198.182.196.56 ?

Med Telnet kan man alltså få en textterminaluppkoppling mot en Unix-dator. Detta kommer du att använda senare i laborationen. Ovan nämns att man kan kommunicera med exempelvis en mailserver med hjälp av Telnet. Mailservers körs dock ofta på en Unix-dator. Hur kan datorn känna skillnad på om en användare vill koppla upp sig mot mailservern eller vill ha en vanlig terminaluppkoppling? Lösningen är något som kallas portar.

Portar

Så kallade "portar" har till syfte att fungera som en sorts filter vilka möjliggör för en dator att skicka nätverkstraffik som kommer in till datorn, till rätt program. Portar uttrycks som heltal (noll och uppåt). Ett program på en serverdator kan allokera upp en eller ett antal portar till sin kommunikation. Exempelvis kommunicerar serverdelen av programmet telnet på port 23 och krypterade förbindelser med SSH använder port 22.

Det lättaste sättet att testa beteendet på olika portar är att använda telnet-applikationen som finns inbyggd i alla Unix-datorer. Detta gör du genom att logga in på NADAs Unix-datorer enligt ovan, och sedan i terminalfönstret skriva

telnet hostnamn portnummer t.ex.
telnet mail1.nada.kth.se 25

(skriv "quit" för att avsluta)

På en Unix-dator (något beroende på vilken exakt Unix-dialekt som används) kan man ta reda på vilka portar som används av standardprogram genom att skriva kommandot

more /etc/services

Uppgift 1.2

  1. Vilken port använder programmet echo?
  2. Koppla upp dig mot echo-porten på datorn nada.kth.se. Testa att skriva lite text. Vad verkar echos uppgift vara? (observera att du nog måste "döda" terminalfönstret för att avsluta).

SMTP - Simple Mail Transfer Protocol

SMTP är ett protokoll som sköter om mail-kommunikation mellan system. Det är ett utmärkt exempel på ett protokoll på nivå 7, "Application layer", i OSI-modellen. Det är således ett protokoll som används direkt av applikationer. Applikationerna som använder SMTP är mailservers (programmet Sendmail i Unix-världen och exempelvis AIMS (Apple internet Mail Server) i Macvärlden) som pratar med varandra samt med mailklienter såsom Eudora och Outlook.

SMTP kommunicerar på port 25. Koppla upp dig mot port 25 på mail1.nada.kth.se. Kör först kommandot

HELO datorn 
där
datorn
är datorn du befinner dig på. (det gör inget om du skriver fel namn här).

och Kör därefter kommandot HELP för att få reda på vilka kommandon som kan utföras. Gå sedan igenom den tämligen torftiga hjälpen för alla alternativ som dyker upp genom att exempelvis skriva HELP HELO. För att avsluta, skriv QUIT på en ensam rad.

Uppgift 1.3

  1. Med ledning av ovanstående information, koppla upp dig mot mailservern som finns på datorn mail1.nada.kth.se
  2. Skicka ett mail till din egen mailadress med något godtyckligt innehåll från adressen test@gt.kth.se genom att använda kommandona HELO, MAIL, RCPT och DATA. När du bekräftat att mailet kommit fram ska du skicka ett mail till adressesen inge@nada.kth.se med avsändare test@gt.kth.se. (ange adressen enbart som 'inge', dvs utelämna '@nada.kth.se'). Skriv båda laboranternas för- och efternamn i själva meddelandet. NOTERA att mailet sänds genom att i DATA-delen skriva en punkt ensam på en rad och trycka return.

HTTP - HyperText Transfer Protocol

http är protokollet som används för att föra över filer via World Wide Web. Även detta protokoll ligger på nivå 7 i OSI-modellen. Porten som används är oftast port 80. Det vanligaste kommandot är GET vilket används för att hämta websidor, bilder och liknande.

Uppgift 1.4

Koppla upp dig mot datorn och kör kommandot
telnet www.nada.kth.se 80
Detta kopplar upp dig mot webservern på datorn. Hämta hem filen gurka.txt från Inges nät-area med hjälp av kommandot
GET /~inge/gurka.txt
  1. Vad innehåller filen?
  2. Vilken URL ska du ange för att titta på samma fil i din webbläsare (t.ex. Mozilla, Netscape eller Explorer)?

TCP och UDP

Alla ovanstående protokoll använder i sin tur protokollet TCP (Transmission Control Protocol). TCP ligger på nivå 4 i OSI-modellen, dvs transportnivån. TCP har som pricipiell uppgift att se till att informationen verkligen överförs till mottagardatorn. Följade garanteras av TCP:

  • Att data levereras utan luckor, dvs om ett paket av någon anledning inte kommer fram efter en viss tid sänds paketet i fråga om.
  • Att data mottages i rätt ordning, dvs de mottagna paketen sorteras.
  • Att paketen som mottages är korrekta och innehåller de data som faktiskt sändes iväg.

För att klara av allt ovanstående krävs ganska mycket overhead I form av felkoll och liknande. Ibland är det viktigare att data levereras snabbt än att allt verkligen förs över. Exempel på detta är realtidsljud (det är bättre att få lite brus pga borttappade eller felaktiga paket, än att få stopp i överföringen pga felaktiga paket måste sändas om). För applikationer såsom ljud och video används därför ofta UDP (User Datagram Protocol).

Både TCP och UDP använder sig i sin tur av protokollet IP på nätverksnivån (nivå 3 i OSI-modellen). Det är I IP-paketen som IP-adressen och portnumren lagras.

Uppgift 1.5

Programmet traceroute som finns till Unix kan användas för att se hur IP-paket verkligen åker genom cyberjymden. Programmet ger tre uppskattningar på tur och returtiden.
Koppla upp dig mot datorn och kör kommandot
/usr/sbin/traceroute www.caltech.edu
  1. Hur många hopp tar det att komma till Caltechs webserver i Californien?
  2. Mellan vilka maskiner tror du "hoppet" över Atlanten sker? Ange båda datorernas hostname samt motivera varför du tror hoppet sker just där.
  3. Antag att överföringshastigheten i en fiberkabel är 200000 km/s. Hur "bred" är i så fall Atlanten? Tänk på att det är tur-och-returtiden som mäts. Stämmer detta värde någorlunda med verkligheten?

TCP och UDP är protokoll som sänder information från EN sändare till EN mottagare. Om man vill sända data till flera (N) mottagare som exempelvis vid internetkonserter eller videokonferenser kan man naturligtvis göra N sändningar. Detta innebär dock att exakt samma information sänds flera gånger genom samma fysiska kablar vilket är slöseri med nätverkskapacitet. Därför finns något som kallas IP Multicast.

IP Multicast

IP Multicast har till syfte att minska mängden data som onödigt sänds vid gruppkommunikantion. Ett antal datorer som vill kommunicera kommer överens om en gemensam IP-adress (som tilldelas automatiskt och dynamiskt) som de kommer att lyssna på förutom sina vanliga IP-adresser. Ett visst antal av de adresser som existerar på Internet är reserverade för just IP multicast. IP Multicast kommer dock inte att laboreras på i denna laboration.

2. Unix

Delmål:

Efter detta moment ska ni förstå Unix uppbyggnad, förstå vad ett shell är, förstå vad STDIN och STDOUT är samt hur de kan omdirigeras, förstå pipes samt kunna använda vanliga användarkommandon i Unix.

I uppgiften kommer ni editera en textfil på datorn och behöver därför kunna använda en texteditor. De flesta editorer går att använda, men jag rekomenderar emacs som finns tillgänglig på de flesta datorer. Det tar ett tag att lära sig emacs, men i gengäld kan emacs användas för de flesta sorters editering. På sista sidan i Unixanvändning finns en en lathund till emacs.

På windowsdatorerna måste ni använda emacs i telnetfönstret.

Att få hjälp

Unix-kommandon är skrivna av programmerare för programmerare. De är ofta mycket kraftfulla, vilket betyder att de bara kan göra en sak, men de kan göra den bra och på många olika sätt. Exakt hur ett kommando beter sig beror på vilka så kallade väljare (eller flaggor) som det får. Exempelvis används ls för att lista filerna i en katalog. ls kan ha följande flaggor: aAbcCdfFgilLmnopqrRstux1

Eftersom det är svårt att komma ihåg alla kryptiska kommandonamn och deras respektive parametrar, finns det inbyggda manualblad och ett hjälpsystem. Dessa är alldeles utmärkta och en rik källa till information. Följande kommandon är bra att känna till:

  • man - skriver ut hela manualbladet för ett kommando på skärmen
  • which - talar om vilken fil i filsystemet som exekveras när ett visst kommando ges
  • kommandonamn --help - brukar också kunna ge hjälp
  • apropos namn - skriver ut enradsinformation om kommandon som har att göra med 'namn'.

Lär dig använda dessa så får du säkert nytta av dem i resten av laborationen.

Uppgift 2.1

Vilka kommandon besvarar följande frågor? Vad blir resultatet?
  1. Vad gör kommandona head och tail?
  2. I vilken katalog ligger den fil som exekveras så du gör kommandot ls?
  3. Vad betyder ls -lar?

Filsystemet

Läs igenom avsnitt 7.3, Filhantering i Unixanvändning.

Uppgift 2.2

Målet med denna uppgift är att du ska behärska de vanligaste kommandona: ls, cd, pwd, mv, cp, rm, mkdir, rmdir, more, chmod. Redovisning sker genom att ni i mailet visar de kommandon ni skrivit på respektive del, samt det output datorn svarade med.
  1. Flytta dig till din hemkatalog med cd.
  2. Ta reda på sökvägen till din hemkatalog med pwd
  3. Lista alla filer som ligger i din hemkatalog, även de vars namn börjar med '.'
  4. Skapa en underkatalog till din hemkatalog med mkdir
  5. Kommandot mv används inte bara för att byta namn på filer, men även för att flytta filer från en katalog till en annan. Prova båda varianterna.
  6. Kommandot more visar innehållet i en fil. Titta t.ex. på /usr/dict/words
  7. Använd dig av rm och rmdir för att ta bort den katalog du skapade i uppgift d). Titta i manualbladen eller fråga om hjälp vid behov.

Pipes och omdirigering

I Unix kan man lätt dirigera om utdata från ett kommando så att det blir indata till ett annat kommando. Dessutom kan man använda filer både som indata och som utdata. Läs mer om det i avsnitt 9, Kommandotolken i Unixanvändning.

Uppgift 2.3

Redovisningen sker även i denna del genom att ni i mailet visar de kommandon ni skrivit på respektive del, samt det output datorn svarade med.
  1. Använd head for att ta reda på de 17 första orden i filen /usr/dict/words
  2. Använd tail for att ta reda på de 17 sista orden i filen /usr/dict/words
  3. Använd head och tail ihopkopplade med en pipe för att ta reda på det 4711e ordet i ordlistan.
  4. Utöka kedjan i förra uppgiften med att mata ut resultatet till en fil. Hur ser hela kommandokedjan ut?

grep

Kommandot grep letar efter mönster i en fil eller i sitt indata.
grep '^a' /usr/dict/words
skriver ut alla ord som börjar på 'a'.

För övningarna ska du lägga varje svar i en egen fil. Om t.ex. den tredje uppgiften är att skriva ut alla ord som börjar på 'a', så ska svaret ligga i en fil (en skript-fil) som heter grep.3 och består av följande rad:
grep '^a' $*
"$*" är skriptvariabeln som innehåller argumenten till skriptet. Alla dina skriptfiler skall se ut på detta sätt. Det som skiljer är vilket mönster som grep skall leta efter.

Du kan då provköra ditt miniskript med tex:
sh grep.1 /usr/dict/words

För att nogrannare testa dina skript skall du använda kommandot tool-test. Om du står i den katalog som innehåller dina skriptfiler så testar tool-test grep alla grep-skripten och tool-test grep.4 testar svaret på den fjärde uppgiften.

tool-test skapar en katalog som heter :pref. I denna katalog skapas 4 filer för varje uppgift som testas. För uppgift 4 skapas:

  • grep.4.output innehåller vad ditt skript skrivit ut
  • grep.4.expected innehåller vad som borde skrivits ut
  • grep.4.dif innehåller skillnaden mellan de två föregående
  • grep.4.error innehåller eventuella fel-meddelanden
Med hjälp av dessa är det lättare att lista ut hur skriptet skall rättas.

Uppgift 2.4

Övningar i att använda grep.

Den indatafil du lämpligen testar dina alster på är "/usr/dict/words". Orden där är på engelska och detta språk har bara fem vokaler: a e i o u. Bokstaven 'y' är faktiskt inte en vokal i engelska språket. Ni får utnyttja att det bara finns ord i filen. Det finns två typer av konstiga ord, dock. Den ena typen är "5th" o.d. Den andra typen är "you're" o.d. Dvs siffror, apostrof och vissa andra tecken kan förekomma i orden.

Ni kan alltså förutsätta:

  • Rader innehåller exakt ett ord
  • Vokalerna som finns är "aeiou"
  • Konsonanterna är de som finns i engelska språket (dvs inklusive 'y')
Några råd:
  • Ni kan inte testa på konsonant genom att testa på icke vokal.
  • Ibland är det bättre (eller nödvändigt) att ange vilka rader man inte vill ha och sedan använda flaggan -v till grep.
  • För att jämföra en del av en rad med en annan del av samma rad, så kan man använda \( \) tillsammans med \1 där 1 kan vara någon siffra. (se föreläsnigsanteckningar om sed)
Skriv ut alla rader som:
  1. Är tre tecken långa.
  2. Innehåller siffror eller apostrof.
  3. Innehåller tre vokaler direkt efter varandra.
  4. Börjar och slutar med en vokal, och som bara innehåller en konsonant.
  5. Består av tre vokaler.
  6. Inte innehåller några andra konsonanter än "t".
  7. Raderna behöver inte innehålla några konsonater alls.
  8. Inte innehåller någon av bokstäverna a, g, h, i, j, k, l, z som första tecken.
  9. Har samma följd av tre bokstäver i början av raden som i slutet.

Kommandot tool-test grep skapar förutom :pref även filerna grep.report och grep.result. Redovisningen sker i denna del genom att ni i mailet inkluderar grep.report och grep.result.

sed

Kommandot sed är en 'stream' editor som normalt används som ett editerande filter. Se exempel i slutet av föreläsningsanteckningarna om Unix.

För uppgifterna skall du, på samma sätt som för grep-uppgifterna ovan, lägga varje svar i en egen fil och även här avsluta skriptfilen med $*

Uppgift 2.5

Övningar i att använda sed.

Övningarna 1-5 testas lämpligen med /usr/dict/words. Övning 6 testas med /info/KURSNAMN/labbar/lab1/indenteras

  1. Skriv ut de 13 första raderna.
  2. Skriv ut rad 25 t.o.m. 34.
  3. Skriv ut alla rader från rad 25100 till slutet.
  4. Skriv ut alla rader från och med den som innehåller "abrupt" till och inklusive den som innehåller "absolute".
  5. Byt plats på de två första och de två sista tecknen på en rad. "elastic" skall bli "icastel". (rader som är mindre än fyra tecken långa lämnas orörda)
  6. Indentera alla rader ett tab-steg, som innehåller synlig text (dvs. inte tomma rader eller rader som bara innehåller blanka eller tab-tecken).

Kommandot tool-test sed skapar förutom :pref även filerna sed.report och sed.result. Redovisningen sker i denna del genom att ni i mailet inkluderar sed.report och sed.result.

Processer

Lite förenklat kan man säga att ett program som körs på en Unix-dator lever sitt eget liv som en självständig process. En del processer startas när datorn sätts på, och sköter livsviktiga saker som virtuellt minne, eller nätverkskommunikation. Andra processer körs också hela tiden, men är inte fullt så viktiga. Dit hör t.ex. HTTP-servrar och dylikt. Slutligen startar användare egna processer.

Kommandot ps används för att ta reda på vilka processer som körs. I sin grundform listar den alla processer du kör i just detta terminalfönster. Varje process identifieras av en unik processid (förkortat PID). ). ps har en väljare -a vilken gör att alla dina processer listas, även de som du kör i ett annat terminalfönster, eller från en annan dator. Väljaren -A listar alla användares processer, medan väljaren -u används när man vill leta efter de processer som körs av en viss användare. Utan några flaggor alls listas de processer som körs under det aktuella inloggnings-shellet.

Kommandot kill används bl.a. för att avsluta processer. Detta är något man ibland vill göra när processer löpt amok, eller för att städa bland bakgrundsprocesser. Vanliga användare kan inte avsluta annat än sina egna processer. root kan naturligtvis avsluta alla andra användares processer.

Uppgift 2.6

Vilka kommandon besvarar följande frågor? Vad blir resultatet?
  1. Vilka processer äger du?
  2. Vilka processer kör användaren root
  3. Processen sshd är en bakgrundsprocess som sköter om krypterade inloggnngar. Använd ps och grep för att ta reda på vad sshd har för PID/PIDar?

Användare

Unix är ett fleranvändarsystem. Ett antal användare kan vara inloggade samtidigt och exekverar sina program oberoende av varandra. Det finns kommandon för att ta reda på vilka användare som är inloggade, vad de heter i verkliga livet, när de senast läste mail och annat smått och gott. Dessutom kan man prata med andra användare, både på den dator man själv kör på, och på godtycklig dator som är ansluten till Internet. Detta är nyttigt när man t.ex. samarbetar inom ett projekt.

Uppgift 2.7

Vilka kommandon besvarar följande frågor? Vad blir resultatet?
  1. Använd whoami för att ta reda på vem du är. Detta är inte bara nyttigt för folk med multipla personligheter, utan även när man håller och byter användarid fram och tillbaka, vilket Unix-utvecklare ofta gör.
  2. Använd who för att ta reda på vilka användare som är inloggade just nu.
  3. Prova finger ingeför att ta reda på vad den användaren har för namn, samt när var han senast inloggad?
  4. Kommandot last visar en logfil över vilka som loggat in på datorn och när. Prova last | grep root för att ta reda på när root senast loggade in på datorn.

Filrättigheter

Filer kan huvudsakligen ha tre typer av rättigheter: Läsrättigheter ("r"), skrivrättigheter ("w") och execute-rättigheter ("x"). Dessa kan ges på tre nivåer: Dig själv, din grupp samt "övriga användare". Ändringar görs med kommandot chmod som finns beskrivet i 7.2.9 Behörighet i Unixanvändning.

Uppgift 2.8

Kopiera filen /info/KURSNAMN/bin/tool-test till valfri plats på ditt konto. Ändra sedan så att
  1. du själv kan läsa, exekvera men ej skriva
  2. gruppen läsa, skriva och exekvera
  3. "övriga användare" inte har några rättigheter alls.
Redovisa kommandona du utfört, samt skicka med den rad som skrivs ut av kommandot ls -l tool-test.

tar/gzip

Programmet tar används för att packa ihop katalogstrukturer till en enda fil. Namn på tarfiler ska sluta på ".tar".

Programmet gzip används för att komprimera filer. gzippade filer ska ha namn som slutar på .gz. En gzippad, tarad fil ska således sluta på .tar.gz.

Uppgift 2.9

Använd tar för att packa ihop katalogen /info/KURSNAMN/tooltest
  1. Hur stor blir filen
Använd gzip för att komprimera filen du nyss genererat.
  1. Hur stor blir den gzippade filen.

Shell skript

Shell skript används för att göra egna program som kombinerar ihop andra program. grep.1, grep.2 etc. ovan är exempel på enkla skript.

Uppgift 2.10

Gör ett shell-skript som skriver ut vem du är, vilken katalog du står i, dagens datum samt de fem senaste inloggningarna. T.ex.
elvira>mittprogram
I am:
bjornh
I am currently in the directory:
/home0/dok00/lab3
The current date is:
Wed Apr 12 12:41:23 CEST 2000
Last logged-in users
pim99eru ftp   client05.gt.kth. Wed Apr 12 12:18 - 12:18 (00:00)
bjornh   pts/3 media.gt.kth.se  Wed Apr 12 12:09 still logged in
root     pts/0 media.gt.kth.se  Wed Apr 12 12:01 still logged in
pim99eru ftp   client05.gt.kth. Wed Apr 12 08:51 - 08:51 (00:00)
pim99eru ftp   client05.gt.kth. Wed Apr 12 08:49 - 08:49 (00:00)

Tänk på att "execute-rättigheter" måste vara satta på filen för att du ska kunna exekvera den.

Bifoga hela shell-skriptet i ditt mail, samt den absoluta sökvägen till ditt skript.

Något mer användbara shellskript

Ovanstående skript är egentligen bara en form av alias för funktionalitet man kan få genom att skriva exakt samma kommandon på en kommandorad. Något mer användbart blir det när man kan använda variabler och flödeskontroll, t.ex. loopar.

Ett exempel på ett shellskript som går igenom ett antal filer i en katalog innehållande en mailadress på varje rad (t.ex. ett antal mailinglistor som brukar läggas upp i filer i en viss katalog) och lagrar samtliga mailadresser sorterat i en fil. Därefter gås filen igenom rad för rad. Om adressen på rad[i+1] är skiljd från adressen på rad[i] skrivs den ut, annars går man vidare. Detta kan vara bra exempelvis om man vill generera en mailainglista "everyone@någon-dator" men vill se till att personer som finns på flera mailinglistor endast kommer med en gång i everyone-listan.

#!/bin/sh
cat $1/* | sort > /tmp/alla
this=
for i in `cat /tmp/alla` do
  if [ "$i" != "$this" ] then
    echo $i
    this=$i
  fi
done

Vad händer i programmet ovan: FAQ

$1 är första argumentet till programmet.

this= definierar att vi ska använda en variabel med namn "this", som till att börja med ska vara tom

`cat /tmp/alla` kommer, tack vare fnuttarna, expanderas till att vara de värden som nyligen lagrats i filen /tmp/alla. Observera att det ska vara en "grav accent", dvs en bakåtlutande fnutt.

Du kan även leta på nätet efter ytterligare exempel och tutorials!

3. XML

Ni ska nu göra ett CD-skivregister i XML. Du ska göra dels en dtd som beskriver reglerna för hur skivregistret får se ut, dels göra en xml-fil som innehåller själva registret. För att testa att du inte gjort några fel ska du verifiera och validera din kod med en XML-processor.

I uppgiften kommer du att arbeta med filer som skall vara tillgängliga från WWW. Filerna ska därför läggas i katalogen "public_html" som finns i din hem-katalog. En fil med namn test.html som läggs i den katalogen blir åtkomlig på adressen

http://www.nada.kth.se/~pub02aba/test.html

om ditt inloggningsnamn är pub02aba.

Börja med att fundera igenom vilka element och vilka element-attribut som kan ingå i ett skivregister. Du måste gå ner på så pass låg nivå att de enskilda låtarna ingår. Låtarna ska dessutom ha minst ett attribut i form av låtens längd. Modellerandet kan givetvis göras utan en dator.

Börja med att från katalogen /info/KURSNAMN/labbar/lab1 kopiera filerna addressbook.xml och addressbook.dtd till din public_html-katalog.

Du kan göra det genom följande kommandon:

cd ~/public_html
cp /info/KURSNAMN/labbar/lab1/addressbook.* .

Starta en webbläsare och gå in på urlen

http://www.stg.brown.edu/service/xmlvalid

På denna url kan du kontrollera om din xml-fil är "well formed", dvs alla start-tags har slut-tags och så vidare, samt om den är "valid" dvs om den uppfyller de regler som är uppställda i DTDn. Testa att skriva in följande adress (där pub01apa är ersatt med ditt användarnamn):

http://www.nada.kth.se/~pub01apa/addressbook.xml

URLen pekar på filen addressbook.xml du just kopierade

Klicka i valideringsrutan och klicka på submit-knappen. Ett fel (eller två beroende på hur man ser på saken) bör uppstå. Gå in i filen addressbook.xml och rätta felet samt byt ut 'inge' mot ditt eget användarnamn så att filen hänvisar till din egen addressbook.dtd och inte till min.

Uppgift 3.1

Vilket var felet och hur åtgärdade du det?

Skivregister

Uppgift 3.2

Skapa nu två nya filer som du sparar i katalogen public_html. De ska heta skivregister.dtd respektive skivregister.xml. För att skapa en ny fil i emacs begär man i emacs att få editera filen, om den inte finns skapas den då automatiskt.

Den första filen ska innehålla dtdn för skivregistret och den andra filen ska innehålla själva skivregistret. Du måste mata in minst två hela skivor. Titlar inklusive tracks kan du hitta på www.cdnow.com.

Ett hett tips är att inte försöka skriva in hela dtdn och skivregistret på en gång, utan lägga till något element + data per gång, och validera efter varje förändring.

Som svar på denna deluppgift ska ni skicka urlarna till de båda filerna. Filerna MÅSTE ligga kvar tills ni fått BEKRÄFTAT att ni är godkända på laborationen.

Logga ut

Uppgift 3.3

Glöm inte att logga ut när du är klar.
Sidansvarig: Inge Frick <inge@nada.kth.se>
Uppdaterad 2006-03-24