Løsningsforslag Eksamen vår 2004 Operativsystemer og UNIX

Oppgave 1

a) rm /tmp/fil.txt

b) chmod 744 /tmp/open

c) wget http://www.vg.no/index.html

d) grep sport index.html | wc -l

e) bash: ls: No such file or directory

f) $0 er scriptets navn. Så det starter seg selv om og om igjen.

g) Dette scriptet starter to instanser av seg selv som igjen starter to instanser og så videre. Dermed vil flere og flere prosesser startes og raskt vil maskinen overstrømmes av prosesser og alt annent vil få store problemer med å kjøre.

Oppgave 2

a)

#!/bin/bash 
utelatt....

b)

#! /bin/bash

if [ $# -ne 2 ]
then
	echo "Syntaks: $0 fra-endelse til-endelse"
	exit
fi

fra=$1
til=$2

for fil in *.$fra
do 
   if [ -f $fil ]
   then
      name=`basename $fil .$fra`
      mv $fil $name.$til
      echo "Endrer $fil til $name.$til"
      found=true
   fi
done

if [ ! $found ]
then
	echo "Fant ingen filer med filendelse $fra"
fi

Oppgave 3

a) javac kompilerer programmet og generer bytecode som lagres som filen Hello.class. Kommandoen java starter en JVM som tolker Hello.class og skriver "Hello world!" til terminal-vinduet.

b) Ja, hvis Java er installert på Sun-maskinen, startes det en Sun-JVM som tolker bytekoden i Hello.cass og skriver "Hello world!" til terminal-vinduet.

c) Ja, hvis Java er installert på Windows-maskinen, startes det en Windows-JVM som tolker bytekoden i Hello.cass og skriver "Hello world!" til et terminal-vindu.

d) a.out er maskinkode og den lastes i minnet og utføres direkte, instruksjon for instruksjon.

e) Nei, programmet vil ikke kunne kjøres her, fordi en Sun-maskin har en helt annen arkitektur og den vil ikke kunne forstå instruksjonene i a.out som er for en X86-prosessor. Programmet må kompileres på Sun-maskinen for at det skal kunne kjøres og da trenger man kildekoden.

f) Nei, programmet vil ikke kunne kjøres her. Selv om prosessoren i prinsippet forstår instruksjonene i a.out, er formatet på binær-filen og all kommunikasjon med OS helt uforstålig. OS må kontaktes for f. eks. å kunne skrive til et terminal-vindu.

g) Shellet /bin/bash startes og tolker koden linje for linje. Det fører til at shellet skriver "Hello world!" til terminal-vinduet.

h) Det samme vil skje på en Sun-maskin. Det forutsetter at /bin/bash er installert og det er vanlig i en standard installasjon.

i) På en standard Windows-installasjon er bash et helt ukjent begrep og scriptet vil ikke kunne kjøre. Men det er mulig å installere en bash-klone fra cygwin.com og da vil den kunne kjøre bash-script.

Oppgave 4

#! /bin/perl

$host = $ARGV[0];
die "Syntaks: $0 host\n" if($#ARGV != 0);

while($i < 100)
   {
     $i++;
     open(PING,"ping -w 1 -c 1 -t $i $host 2>&1 |");
     $line = <PING>;
     if($line =~ /unknown host/)
        {
	  print "Ukjent host $host\n";
	 last;
       }
     $line = <PING>;
     close(PING);
     $line =~ /(\S+ \(.*\))/;
     print "$i $1\n";
     if($line !~ /Time to live exceeded/)
        {
	 last;
       }
   }



Hårek Haugerud 2004-12-01