Oppgave 1
a) emacs prog.bash&
b) mv ../info.txt .
c) chmod 770 info.txt
d) grep root /etc/passwd
e) ps aux | grep root | wc -l
f) os=`uname`
g) date -r info.txt +%s
Oppgave 2
a)
#! /bin/bash maxTid=0 for fil in `find $1 -type f` do sec=`date -r $fil +%s` if [ $sec -gt $maxTid ] then maxTid=$sec fi done echo "$maxTid"
b)
#! /bin/bash if [ $# -ne 2 ] then echo "Syntaks: $0 dato-fil til-dir" exit fi fraDir=$1 tilDir=$2 fotoKat="/home/hh/foto" if [ ! -d $1 -o ! -x $1 -o ! -r $1 ] then echo "$1 ikke dir eller kan ikke nås/skrives til" exit fi if [ ! -d $2 -o ! -x $2 -o ! -w $2 ] then echo "$2 ikke dir eller kan ikke nås/skrives til" exit fi newestTime=`newest $fotoKat` # Sec siden 1970. Nyere filer skal kopieres for fil in $fraDir/* do if [ -f $fil -a -r $fil ] then fileTime=`date +%s -r $fil` if [ $fileTime -gt $newestTime ] then echo "Kopierer $fil til $2" cp -p $fil $2 fi fi done
Oppgave 3
a) Man trenger en C-kompilator som man kompilerer kildekoden. Den resulterenede kildekoden kan da kjøres direkte. (man kan også trenge en linker for å linke den eksekverbare koden sammen med eventuelle eksterne bibliotek)
b) Man trenger en Java-kompilator som lager Java bytecode fra kildekoden. For å kunne kjøre programmet trenger man så en Java Virtual Machine (JVM).
c) Man trenger en bash-tolker, et program som leser og kjører bash-script, installert på maskinen. Deretter kan scriptet kjøres, uten at det er behov for kompilering.
d) Filen s.out
vil være størst, fordi den også inneholder biblioteket. Filen d.out
er mindre fordi den
linkes dynamisk til biblioteket og trenger derfor ikke å inneholdet dette..
e) Det er paging-tabellen i MMU som hele tiden holder rede på hvor programmets sider er. CPU kan derfor bruke logiske adresser og disse blir oversatt av MMU til riktig fysisk adresse. Nåre page to flyttes inn igjen, oppdateres MMU-tabellen slik at logisk adresse fra CPU blir oversatt til riktig fysisk adresse når det skal hoppes til page to.
f) Du bør be om mer internminne. Når slike vindusprogrammer går så sagte at de er ubrukelige, skyldes det høyst sannsynlig at deler av RAM hele tiden må skyfles til virtuelt minne. En raskere CPU ville hjelpe noe, men selv om den gikk 2-3 ganger raskere, ville ikke det være nok. Størrelsen på harddisk er ikke et problem når programmer går sagte; med nok RAM er det stort sett bare ved oppstart av programmet at harddisken er aktiv.
g)
IP-adressen er 115.43.12.3
, MAC-adressen er 00:90:27:11:67:23
og netmask 255.255.254.0
.
h) Netmasken sier at de 9 siste bit'ene i IP-adressen er hostnummeret og de 23 første er nettverket. De
23 første bitene i både 115.43.12.3
og 115.43.13.22
er de samme (det som skiller 12 og 13 er at 13
har en en'er som siste bit) og de er på samme nettverk. Pakker mellom dem vil derfor gå direkte.
i) Den viktigste forskjellen er at alle nodene i P2P- nettverket (eller ihvertfall mange av dem) er med på å lagre filene som skal distribueres. I et rent P2P-nettverk er også informasjonen om hvor filene ligger spredt rundt på nodene i nettverket, mens et hybrid P2P-nettverk har sentrale servere som har informasjonen om på hvilke noder filene ligger.
Oppgave 4
a)
#! /usr/bin/perl open(PASSWD,"/etc/passwd"); open(TMP,">/tmp/passwd"); while(my $line = <PASSWD>) { my @info = split(":",$line); my $shell = $info[6]; chomp($shell); if($shell eq "/bin/false" or $shell eq "/bin/bash") { print TMP $line; } else { #$info[6] = "/bin/bash"; # Alternativ #$line = join(":",@info); #print TMP "$line\n"; print TMP "$info[0]:$info[1]:$info[2]:$info[3]:$info[4]:$info[5]:/bin/bash\n"; } } close(PASSWD); close(TMP); `mv /tmp/passwd /etc/passwd`;
b)
#! /bin/perl $http = "http://www.gulesider.no/gsi/whiteSearch.do?etter=@ARGV"; open(TEL,"$lynx -source \"$http\"|"); while($line = <TEL>) { if($line =~ /RESULT ITEM START/) { while($line !~ /RESULT ITEM END/) { $line = <TEL>; $line =~ s/\ / /g; if($line =~ /(.*?)<\/b>/) { print "$1, "; } elsif($line =~ /(\d\d\d \d\d \d\d\d)/) { print "Mobil: $1 "; } elsif($line =~ /(\d\d \d\d \d\d \d\d)/) { print "Fast: $1 "; } elsif($line =~ /\d\d\d\d \w+/) { print "$line"; } } print "\n"; } }