Oppgave 1
I denne oppgaven skal du i delspørsmål a) til d) 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) Gi deg selv skrive og leserettigheter og alle andre brukere kun leserettigheter til
filen foto.jpg
i katalogen du står i
b) Flytt filen foto.jpg
i katalogen du står i til ~/www/foto
c) Kopier filen /etc/passwd
til din bruker s123456
på en annen
Linux-maskin med navn nix.iu.hio.no
. Hos denne brukeren skal filen legges i hjemmekatalogen.
d) Logg inn på en annen Linux-maskin med navn nix.iu.hio.no
(men slik at passord ikke sendes i klartekst)
e) Du har en tekstfil readme.txt
og utfører kommandoene
cat readme.txt > /dev/null cat readme.txtForklar kort forskjellen på de to kommandoene og hva de vil resultere i.
f)
Du har en fil /home/hh/.deleted/:home:hh:prosjekt
som tidligere lå i katalogen /home/hh
og da hadde navnet prosjekt
. Du flytter den tilbake med kommandoen
mv /home/hh/.deleted/:home:hh:prosjekt /home/hh/prosjektmen nå finnes det en katalog
/home/hh/prosjekt
. Forklar kort hva som skjer.
g) Studer følgende utdrag av manualsiden for 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 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) %T time, 24-hour (hh:mm:ss) %Y year (1970...)Eksempelvis gir
$ date Tue Nov 29 21:52:14 MET 2005 $ date +%A%B TuesdayNovemberGi en kommando som gir output
2005-11-29_16:04:00
der dette tidspunktet er forrige gang
innholdet av filen sendt.log
ble endret.
$ ls -l sendt.log -rwx------ 1 haugerud drift 54 Nov 29 16:04 sendt.log
Oppgave 2
I denne oppgaven skal du lage to bash-script som skal brukes til å teste en firewall (brannmur).
Scriptene du lager skal ikke foreta selve testingen, men starte programmene som skal utføre testen.
Følgende figur viser at firewall.iu.hio.no
beskytter server.iu.hio.no
på innsiden og er forbundet med
blant andre shadowfax.iu.hio.no
på utsiden. Scriptene du skal lage er angitt. fsend
på shadowfax
sender TCP-pakker, noen stoppes av firewall'en og ftaimot
på server
tar imot de pakkene som passerer.
root
-rettigheter på alle maskinene og at du ikke trenger å skrive passord for å
gå mellom de tre maskinene med ssh
. Figuren viser også hvordan log-filene skal sendes, dette forklares nærmere nedenfor.
a) På maskinen shadowfax.iu.hio.no
skal du i katalogen /root/ftester
lage et bash-script med
navn frun.bash
. Angi først en eller flere kommandoer du bruker for å åpne en editor og skrive
dette scriptet etter at du har logget inn. Dette scriptet skal utføre følgende oppgaver:
/root/ftester
sendt.log
eksisterer skal den endre navn ved at det legges til et tidsstempel for når filen
sist ble endret, slik at den etterpå heter sendt.log.tidsstempel
(se siste deloppgave på oppgave 1)
sendt.log
skal lages og kun inneholde en linje på formen Tue Nov 29 22:10:41 MET 2005
hvor dette er tidspunktet scriptet kjøres
/root/ftester/fsend
skal kjøres (det skriver automatisk til filen sendt.log
)
fsend
er ferdig skal filen sendt.log
som fsend
-programmet skriver til,
kopieres til brukeren root
på maskinen firewall.iu.hio.no
i katalogen /root/ftester
b) I denne deloppgaven skal du lage scriptet /root/ftester/fstart.bash
på firewall.iu.hio.no
.
Dette scriptet kjøres på denne maskinen og styrer derfra hele testen ved at
server.iu.hio.no
startes et program ftaimot
som lytter etter nettverkspakker
fra shadowfax.iu.hio.no
og logger de den mottar i filen mottatt.log
/root/ftester/frun.bash
fra a)-oppgaven startes på
shadowfax.iu.hio.no
. Det starter fsend
som sender en rekke testpakker over nettet til
server.iu.hio.no
og lagrer en log over hva som er sendt i sendt.log
. Til slutt sendes denne log-filen til
firewall.iu.hio.no
.
mottatt.log
hentes fra server.iu.hio.no
og programmet freport
kjøres for å lage en rapport
om hvilke pakker som slapp igjennom utifra filene sendt.log
og mottatt.log
.
/root/ftester/fstart.bash
som skal kjøres på firewall.iu.hio.no
og som gjør følgende:
/root/ftester
/root/ftester/ftaimot
på server.iu.hio.no
/root/firewall.rc
sendt.log
hvis den finnes
/root/ftester/frun.bash
på shadowfax.iu.hio.no
sendt.log
skal komme fra shadowfax.iu.hio.no
.
/root/ftester/mottatt.log
fra server.iu.hio.no
freport sendt.log mottatt.log
slik at output legges i filen report.txt
(freport
sender deafult output til STDOUT)
Oppgave 3
I de tre første deloppgavene av denne oppgaven, skal du tenke deg at du er ansatt i et firma som kun kjører Linux (joda, de finnes!) Du skal velge et programmeringsspråk eller scriptspråk for å løse tre oppgaver. Det finnes ikke eksakte fasitsvar til disse tre oppgavene, men gi en kort begrunnelse utifra dine nåværende kunnskaper. Legg vekt på at du hurtigst mulig skal løse oppgaven og at programmet du lager ikke skal bruke uforholdsmessig mye tid når det kjøres.
a) Du skal lage et stort program som kun ved hjelp av den koden du skriver skal simulerer et nettverk av maskiner som hver har mange brukere. Ved å kjøre tidkrevende simuleringer, skal programmet generere statistikk over hva som skjer. Gi en kort begrunnelse for hvilket programmeringsspråk eller scriptspråk du vil velge for å løse oppgaven.
b) Du skal lage et program som tar kopi av alle filene i en log-katalog til ditt eget område, gjør filene leselig kun for deg selv og deretter starter et program som analyserer disse logfilene. Gi en kort begrunnelse for hvilket programmeringsspråk eller scriptspråk du vil velge for å løse oppgaven.
c) Du får beskjed om å lage et program som ut ifra en stor log-fil fra webserveren skal lage en statistikk over hvor mange ganger hver side er lastet ned, samt hvilke IP'er som forekommer oftest. Linjer fra filen ser ut som
128.39.75.4 - - [19/Oct/2001:13:34:11 +0200] "GET /~truongc/prh2001/bilder/meny.jpg HTTP/1.1" 128.39.75.38 - - [19/Oct/2001:13:34:11 +0200] "GET /~sivaliv/BOTTOM.HTM HTTP/1.1"Og det skal gjøres idag! Gi en kort begrunnelse for hvilket programmeringsspråk eller scriptspråk du vil velge for å løse oppgaven.
d) Forklar kort hvordan et operativsystem (tilsvarende det som ble simulert i andre obligatoriske oppgave) kan gi forskjellig prioritet til forskjellige prosesser.
e) Et operativsystem (tilsvarende det som ble simulert i andre obligatoriske oppgave) kontrollerer tilgangen til en felles variabel ved hjelp av en semafor. Forklar kort hva som skjer når tre prosesser samtidig prøver bruke denne felles variabelen. Er serialiseringen av prosessene avhengig av at prosessene bruker semaforen riktig?
f) Tenk deg at et Perl program som kan startes fra web bruker følgende metode for å unngå at to brukere skriver samtidig til en fil
`touch /tmp/lockfile`; # Lager /tmp/lockfile while(-f /tmp/lockfile) {} # skriver til en felles fil `rm /tmp/lockfile`; # Fjerner /tmp/lockfileI hvilke tilfeller virker ikke denne metoden? Forklar kort.
g) Hva gjør at følgende Mutex-algoritme mellom to prosesser er ubrukelig? Forklar kort.
static boolean[] flag = new boolean[2]; // Begge false i utgangspunktet GetMutex(int t) { int other; other = 1 - t; flag[t] = true; // Ønsker å gå inn i kritisk avsnitt while (flag[other] == true){} } ReleaseMutex(int t) { flag[t] = false; }
Oppgave 4
a) Skriv en Perl-subrutine addLine()
som tar en streng som parameter. Hvis denne strengen ikke er eksakt lik noen av linjene
i tekstfilen data.txt
, skal subrutinen legge strengen til på slutten av filen data.txt
. Hvis
strengen som sendes som parameter er eksakt lik en av linjene i tekstfilen data.txt
, skal subrutinen returnere
uten å gjøre noe.
Bruk deretter subrutinen addLine()
til å lage et Perl-script som for hver linje i filen nyeLinjer.txt
som ikke
finnes i filen data.txt
fra før, legger linjen til på slutten av filen data.txt
. Ingen linjer i nyeLinjer.txt
er like hverandre.
b) I denne oppgaven skal du skrive en Perl-server som skal
strict
og IO::Socket::INET
/p2p/P2P.txt
og sende linje for linje over socket-forbindelsen