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 determinableGi 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 nyereKommandoen 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 tilDirDet 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.
cp
for å bevare filenes tidsstempel
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.0Hva 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/dersSiste 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)
På 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 937Noen 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 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 Vihovde</b> . Sturlas v 13, 0772 Oslo . 22 49 62 87 . <!-- RESULT ITEM END --> . <!-- RESULT ITEM START --> . Eva 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:
</b>
og inneholder ellers kun navnet
skiftes ut med mellomrom.
-SLUTT-