Oppgave 1
I denne oppgaven skal du i delspørsmål a) og b) 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 f.eks. mkdir kat
hvis du blir spurt: Opprett en katalog med navn kat).
a) Gi en kommando som endrer på navnet til en fil i katalogen du står fra current.version til old.version.
b) Gi en kommando som for filen readme.txt i katalogen du står gir: kun lese og skriverettigheter til eieren, kun leserettigheter til gruppen og ingen rettigheter til andre brukere.
c) I en tom katalog med navn ~/tmp
utføres følgende Unix-kommandoer:
$ cp /proc/cpuinfo . $ mkdir hosts $ cp /etc/passwd passwd $ cp /etc/hosts hosts $ mkdir info $ mv cpuinfo info $ mv info hostsTegn en liten skisse som viser katalogstrukturen under
~/tmp
med
navn på alle kataloger og filer etter at disse kommandoene er utført.
d) Du gjør følgende i et bash-shell og får kun den output som du ser.
$ cd /tmp $ cd tmp 2> /dev/null $ cd tmp 2> /dev/null $ /bin/pwd /tmp $Angi tre forskjellige katalogstrukturer under
/tmp
som vil gi dette resultatet.
Oppgave 2
Lag et bash-script pidkill
som tar ett argument fra kommandolinjen og
betrakter argumentet som en prosess-PID. Hvis ingen eller flere enn ett argument gis, skal
scriptet avslutte med en passende feilmelding. Ellers skal scriptet drepe
alle prosesser som har en PID som er høyere enn den som
er gitt ved argumentet. Kun prosesser som eies av den som kjører scriptet skal drepes.
Ved f. eks.
$ pidkill 1456skal alle prosesser brukeren eier som har PID høyere enn 1456 drepes. For hver prosess som drepes, skal det gis en melding om det til skjermen. Unngå at scriptet dreper seg selv og eventuelle prosesser det selv starter. Output fra kommandoen
ps aux
ser slik ut:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND haugerud 3671 0.0 0.1 5748 1616 ? S 08:31 0:00 /usr/sbin/sshd haugerud 3672 0.0 0.1 2260 1304 pts/1 S 08:31 0:00 -bash
Oppgave 3
a) En CPU bruker 20-bits registere til å adressere en byte i internminnet. Hvor mange Mbytes kan da adresseres?
b) Hvilken av lagringsenhetene RAM, register og harddisk bruker CPU henholdsvis kortest og lengst tid på å hente en byte fra?
c) Hva er linking av programmer? Forklar kort.
d) Hva er et dynamisk bibliotek. Forklar kort.
e) Du har filen Kernel.class
i hjemmekatalogen din på en Linux-maskin
og kjører den med $ java Kernel
. Etter en stund er programmet helt uvirksomt, men
ikke ferdig med å kjøre. OS slipper andre til ved å fjerne det helt fra minnet ved hjelp av paging.
Hvor legger da OS alt som fjernes fra minnet?
f) Swap-partisjonen har under Linux et litt anderledes filsystem enn partisjoner som brukes til vanlige filer. Hva er grunnen til det?
g) Forklar kort hvorfor du kan kjøre den samme Java byte-koden på en Intel Windows-PC som på en Sun Unix-maskin.
h) Du kompilerer et C-program på en Intel Windows-PC og får en exe-fil. Du kopierer denne til en Sun Unix-maskin og kjører den der. Forklar kort hvorfor programmet ikke vil virke.
i) Forklar kort hva systemkallet fork()
gjør.
j) Anta at du kjører følgende perl-script:
#! /bin/perl print "\nfork() er komplisert! \n"; $i = 1; $pid = fork(); $i++; if ($pid == 0) { sleep(5); print "A: i = $i\n"; $i++; } print "B: i = $i\n"; $pid = fork(); if ($pid == 0) { sleep(5); print "C: i = $i\n"; }Angi hva output fra scriptet blir med tidspunkt siden scriptet startet (anta det ikke kjøres noe annent samtidig) i hele sekunder for hver linje. Start slik:
fork() er komplisert! (0 sek.)
Oppgave 4
I denne oppgaven skal du skrive tre Perl subrutiner som skal kjøres på en Linux-maskin og som skal brukes i neste oppgave (ikke skriv dem på nytt der!). Alle subrutinene skal benytte lokale variabler.
a) Lag en Perl-subrutine getFile()
som tar ett filnavn som argument.
Subrutinen skal returnere en streng som begynner med en linje hvor det står
FILE: filnavnder
filnavn
er navnet som er gitt i argumentet. Resten av strengen som
returneres skal være inneholdet av filen.
Hvis filen ikke kan åpnes for lesing, skal strengen som returneres kun inneholde
FILENOTFOUND: Can't open file filnavnder
filnavn
er navnet som er gitt i argumentet.
b)
Lag en Perl-subrutine getCommand()
som tar en skalar streng som argument.
Subrutinen skal returnere en streng som begynner med en linje hvor det står
COMMAND: kommandoder
kommando
er strengen som er gitt i argumentet. Resten av strengen som
returneres skal inneholde output som denne kommandoen gir når den kjøres på Linux-maskinen.
c)
Lag en Perl-subrutine getIP()
som skal returnere maskinens IP-adresse om den
klarer å finne den og strengen "IP unknown" om den ikke finner den. Subrutinen skal finne
IP-adressen ved å bruke programmet /sbin/ifconfig
. Output fra dette programmet
inneholder bl. a. en linje
inet addr:128.39.89.9 Bcast:128.39.89.255 Mask:255.255.255.0der tallet
128.39.89.9
er maskinens IP-adresse. Dette er den første linjen i
output som inneholder strengen "inet addr".
Oppgave 5
Etter din avsluttende eksamen ved IU spredte ryktene seg om dine glitrende resultater og du fikk snart et tilbud om jobb ved Microsofts hovedkontor i Seattle. Første dag på jobb kom selveste Bill Gates innom kontoret ditt og fortalte at de hadde valgt deg p.g.a. ditt kjennskap til Linux. Han fortalte at de nå kontinuerlig mottok informasjon fra alle i verden som hadde installert Windows XP, men at de visste for lite om den lille men potensielt farlige konkurrenten Linux. De hadde laget en såkalt MISS (Microsoft Information Spy Server) som skulle stå og kjøre på maskinen miss.microsoft.com og du fikk utlevert MISS sin kildekode:
#! /bin/perl use IO::Socket::INET; use Crypt::CBCeasy; $my_key = "miss"; my $server_port = 6686; $server = IO::Socket::INET->new(LocalPort => $server_port, Reuse => 1, Listen => 5) or die "Can't start MISS at port $server_port\n"; $BUFFSIZE = 1000000; print "Starting MISS on port $server_port.\n"; while ($client = $server->accept()) { $buffer = ""; while(true) { recv($client,$newbuffer,$BUFFSIZE,"0"); $buffer .= $newbuffer; last if($buffer =~ s/ENDOFTRANSMISSION$//) } $buffer = Blowfish::decipher($my_key,$buffer); open(FIL,">>LinuxWorld.log"); print FIL $buffer; close(FIL); }Det var viktig at informasjone skulle krypteres, slik at ingen fant ut hva som foregikk. Gates gav deg så i oppdrag å skrive en klient som skulle kunne kjøres på en hvilken som helst Linux-maskin i verden og sende informasjon om maskinen den kjørte på til spy-serveren på miss.microsoft.com. Han fortalte et en samarbeidspartner ved navn Kram Segrub hadde skrevet et GPL-program enignefc som er med i alle Linux-distribusjoner og som skulle sørge for at din klient ble startet en gang hver time. Siden du var nyansatt, skulle du få hele 40 minutter på oppgaven.
Skriv en slik Perl-klient som gjør følgende (bruk subrutinene fra oppgave 4):
-SLUTT-