Eksamen vår 2006 Operativsystemer og UNIX
Les nøye gjennom oppgavene før du begynner og pass på å besvare alle spørsmålene. Alle trykte og skrevne hjelpemidler er tillatt. Oppgavene vil ikke bli vektlagt likt ved sensur. En sannsynlig fordeling er at oppgave 1 teller 10% mens oppgave 2, 3 og 4 teller 30% hver. De som ønsker det kan besvare oppgavene eller deler av oppgavene på engelsk. Sett gjerne egne forutsetninger dersom du synes oppgaveteksten er uklar. Beskriv forutsetningene og løs oppgaven utifra dem.

Oppgave 1

I denne oppgaven skal du i alle delspørsmålene løse problemet ved å angi en kommando på en linje, slik du ville ha tastet den inn til bash på en Linux-maskin fra tastaturet (du svarer for eksempel mkdir kat hvis du blir spurt: Opprett en katalog med navn kat).

a) Åpne filen prog.bash med emacs som en bakgrunnsprosess

b) Flytt filen info.txt i katalogen over der du står til katalogen der du står

c) Gi eier og gruppe alle rettigheter og andre brukere ingen rettigheter til filen info.txt i katalogen der du står

d) Skriv ut alle linjer i filen /etc/passwd som inneholder strengen root

e) Finn antall linjer i en lang listing av alle Linux-maskinens prosesser som inneholder strengen root

f) Legg resultatet av kommandoen uname i variabelen $os

g) Studer følgende utdrag av manualsiden for kommandoen date

NAME
       date - print or set the system date and time
SYNOPSIS
       date [OPTION]... [+FORMAT]
DESCRIPTION
       Display the current time in the given FORMAT, or set the system date.

       -d, --date=STRING
              display time described by STRING, not `now'

       -f, --file=DATEFILE
              like --date once for each line of DATEFILE

       -r, --reference=FILE
              display the last modification time of FILE

       -R, --rfc-2822
              output RFC-2822 compliant date string
FORMAT  controls  the  output.  

       %%     a literal %
       %a     locale's abbreviated weekday name (Sun..Sat)
       %A     locale's full weekday name, variable length (Sunday..Saturday)
       %b     locale's abbreviated month name (Jan..Dec)
       %B     locale's full month name, variable length (January..December)
       %c     locale's date and time (Sat Nov 04 12:02:33 EST 1989)
       %C     century (year divided by 100 and truncated to an integer) [00-99]
       %d     day of month (01..31)
       %D     date (mm/dd/yy)
       %e     day of month, blank padded ( 1..31)
       %F     same as %Y-%m-%d
       %m     month (01..12)
       %R     time, 24-hour (hh:mm)
       %s     seconds since `00:00:00 1970-01-01 UTC' (a GNU extension)
       %S     second (00..60); the 60 is necessary to accommodate a leap second
       %T     time, 24-hour (hh:mm:ss)
       %Y     year (1970...)
       %z     RFC-2822 style numeric timezone (-0500) (a nonstandard extension)
       %Z     time zone (e.g., EDT), or nothing if no time zone is determinable
Gi en kommando som gir output av typen 1139839411 der tallet er antall sekunder som har gått regnet fra 1. januar 1970 til tidspunktet filen info.txt sist ble endret.

Du vil ha bruk for denne kommandoen i neste oppgave og følgende eksempel kan klargjøre hva denne kommandoen gir.

$ ls -l eldre nyere
-rw-------  1 haugerud drift 0 Feb 14 11:51 eldre
-rw-------  1 haugerud drift 0 Feb 14 11:56 nyere
Kommandoen du lager vil gi 1139914280 for filen eldre og 1139914564 for filen nyere nyere. Det siste tallet er 284 større enn det første, siden filen nyere ble modifisert 284 sekunder, eller omtrent 5 minutter, etter filen eldre. Forøvrig er de 36 år som har gått siden 1970, omtrent 1136073600 sekunder.

Oppgave 2

USB-enheter som minnebrikker, mp3-spiller og digitale kameraer kan under Linux ofte monteres som en vanlig disk uten at man trenger egne drivere for enheten. Hvis man kobler til et digitalt kamera på denne måten, er det ofte man kun ønsker å laste ned bildene som er tatt siden forrige gang bilder ble lastet ned til harddisken. Dette kan for eksempel gjøres ved å laste ned alle filer på kameraet som er nyere enn det siste bildet du har lastet ned. I denne oppgaven skal du lage to bash-script som sammen kan brukes til dette.

a) Lag et bash-script med navn nyest som tar et katalognavn som argument. Scriptet skal finne den nyeste filen av alle i denne katalogen og dens underkataloger. Output skal være tidspunktet den nyeste filen sist ble endret, gitt som antall sekunder etter 1. januar 1970. Bruk date-kommandoen du lagde i siste deloppgave på oppgave 1. Hint: kommandoen find dir -type f lister alle filer i katalogen dir og alle filer i dens underkataloger.

b) Lag et bash-script med navn datocp som fra komandolinjen skal kunne kjøres slik:

$ datocp fraDir tilDir
Det første argumentet er katalogen filer skal kopieres fra og det andre argumentet er katalogen filer skal kopieres til. Alle filer som har er en nyere dato enn den nyeste filen i katalogsystemet under katalogen /home/hh/foto skal kopieres. Bruk scriptet nyest fra oppgave a) til å finne den nyeste filen.

Oppgave 3

Anta at du har en datamaskin med et ikke nærmere spesifisert operativsystem. I deloppgave a), b) og c) skal du forklare kort hvilken programvare du må ha og hvilke operasjoner kildekoden eventuelt må igjennom før du kan kjøre programmet/scriptet, når du i utgangspunktet har:

a) kildekoden til et C-program

b) kildekoden til et Java-program

c) kildekoden til et bash-script

d) Du kompilerer et C++ program, linker det med et statisk bibliotek og får en kjørbar fil s.out. Du gjentar operasjonen, men linker nå mot en dynamisk utgave av det samme biblioteket og får en kjørbar fil d.out. Hvilken av de kjørbare filene s.out og d.out blir størst? Forklar kort.

e) Du kjører et C-program der den kjørbare koden er 7 Kbytes. På systemet programmet kjører er page-størrelsen 4 Kbytes og programmet ditt buker derfor to pages. I programkoden er det ett sted hvor det hoppes fra en instruksjon i første page til en instruksjon i andre page. Tenk deg at page nummer to blir lastet ut (paging) og senere legges inn på et annent sted i internminnet. Programmet kommer så til instruksjonen hvor det hoppes til page nummer to. Hvordan sørges det for at programkontrollen hopper til riktig fysisk adresse i internminnet etter at page to har blitt flyttet til et annent sted i RAM? Forklar kort.

f) Du har fått tildelt en PC av oppdragsgiver for ditt hovedprosjekt. Du må installere Visual Studio og når du tar det i bruk, går alt veldig sakte. Det tar svært lang tid fra du klikker til noe skjer og lang tid å åpne nye vinduer, slik at Visual Studio er helt ubrukelig. Hva bør du be oppdragsgiver om for å løse problemet: Større harddisk, raskere CPU eller mer internminne? Forklar kort.

g) På en Linux-maskin er de to første linjene med output fra ifconfig som følger:

$ /sbin/ifconfig
eth0      Link encap:Ethernet  HWaddr 00:90:27:11:67:23
          inet addr:115.43.12.3  Bcast:115.43.13.255  Mask:255.255.254.0
Hva er denne maskinens IP-adresse, MAC-adresse og netmask?

h) Vil IP-pakker mellom maskinen i forrige delspørsmål og en maskin med IP-adresse 115.43.13.22 gå via en gateway eller direkte? Forklar kort.

i) Tidligere har den vanligste måten å distribuere filer på Internett vært å legge dem på en web eller ftp-server med et navn som for eksempel ftp.gnu.org. I de senere årene har fildeling ved hjelp av Peer-to-Peer(P2P) teknologi overtatt store deler av Internett-trafikken. Forklar kort prinsippene for P2P-fildeling.

Oppgave 4

a) Du er root på en Linux-maskin med mange hundre brukere hvor de til nå har fått lov å endre sitt innloggings-shell selv ved hjelp av kommandoen chsh. Siden du har en del sære og nerdete typer som brukere, har de benyttet seg av dette og begynnelsen av /etc/passwd ser nå slik ut:

root:x:0:0:root:/root:/bin/bash
sshd:x:101:65534::/var/run/sshd:/bin/false
hh:x:1000:1000:Hårek Haugerud:/home/hh:/bin/tcsh
eva:x:1001:1001:Eva Hadler Vihovde:/home/eva:/bin/ksh
diego:x:1002:1002:Diego Armando Maradona:/home/diego:/bin/ash
jonh:x:1003:1003:Jon Haugsand:/home/jonh:/bin/bash
falsk:x:1004:1004:Herodes Falsk:/home/falsk:/bin/false
kjell:x:1005:1005:Kjell Inge Røkke:/home/kjell:/bin/there
runel:x:1006:1006:Rune Zelow Lundquist:/home/runel:/bin/ær
osama:x:1007:1007:Osama bin Laden:/home/osama:/bin/laden
aylar:x:1008:1008:Aylar Lie:/home/aylar:/bin/meg
johan:x:1009:1009:Johan Vaaler:/home/johan:/bin/ders
Siste kolonne i filen angir default shell og kolonnen avsluttes av linjeskift; ingen mellomrom på slutten av linjen.

At brukerne har så mange forskjellige shell gjør brukeradministrasjon vanskligere og du vil nå gi alle /bin/bash som default shell, slik brukerne root og jonh allerede har. Men du ønsker at brukere som har /bin/false som shell skal beholdet det. Det hindrer dem i å logge inn, men brukerkontoen beholdes.

Lag et Perl-script som gjør disse endringene og lager en ny /etc/passwd der alle brukere har /bin/bash som default shell, bortsett fra at de som opprinnelig hadde /bin/false beholder det. Du kan anta at du har root-rettigheter slik at du kan overskrive /etc/passwd.

b) www.gulesider.no finnes det nå en gratis tilgjengelig web-basert telefonkatalog. I denne oppgaven skal du lage en kommandolinje-telefonkatalog ved å skrive et Perl-script som trekker ut informasjon fra kildekoden til web-sidene som gulesider lager. Scriptet skal hete tel.pl og følgende er et typisk resultat når du bruker det:

$ tel.pl Eva Vihovde
Eva Vihovde, Sturlas v 13, 0772 Oslo
Mobil: 928 88 788
Eva Vihovde, Sturlas v 13, 0772 Oslo
Fast: 22 49 62 87
Eva Aske, Vihovde, 5554 Valevåg
Mobil: 952 79 937
Noen forsøk viser at Linux-kommandoen

$ lynx -source "http://www.gulesider.no/gsi/whiteSearch.do?etter=Eva Vihovde"
skriver til STDIN (vanligvis terminalvinduet) kildekoden til web-siden du ville fått om du tastet inn "Eva Vihovde" i en browser. For hver match på et navn vil kildekoden inneholdet et avsnitt som begynner med en linje som inneholder strengen RESULT ITEM START og avsluttes med en linje som inneholder strengen RESULT ITEM END og kan for eksempelet over se slik ut:
.
<!-- RESULT ITEM START -->
.
Eva&nbsp;Vihovde</b>
.
Sturlas v 13, 0772 Oslo
.
<a href="https://login.gulesider.no/gsi/sms.do?n=92888788" title="Send SMS til nummer">928 88 788</a><br>
<!-- RESULT ITEM END -->.
.
<!-- RESULT ITEM START -->
.
Eva&nbsp;Vihovde</b>
.
Sturlas v 13, 0772 Oslo
.
22 49 62 87
.
<!-- RESULT ITEM END -->
.
<!-- RESULT ITEM START -->
.
Eva&nbsp;Aske</b>
.
Vihovde, 5554 Valevåg
.
<a href="https://login.gulesider.no/gsi/sms.do?n=95279937" title="Send SMS til nummer">952 79 937</a><br>
.
<!-- RESULT ITEM END -->
.
Linjer med bare en prikk (punktum) betyr at det her står en eller flere linjer med html-formatering som vi ikke trenger. Ved å studere output fra noen tester med forskjellige navn, finner du ut følgende om linjene innenfor START og END-taggene: Bruk dette til å trekke ut navn, adresse og telefonnummer slik at Perl-scriptet gir output tilsvarende eksempelet over. I tillegg skal forekomster av &nbsp; skiftes ut med mellomrom.

-SLUTT-



Hårek Haugerud 2006-11-23