Oppgave 1
a) mv /tmp/fil.txt .
b) wc -l /etc/group
Eventuelt cat /etc/group | wc -l
som kun gir antallet
c)
112 mark 120 sigmundsfordi sort defalut sorterer alfabetisk og da kommer 11 før 78. Derimot ville
sort -n IQ.txt | head -n 2
gitt
78 haugerud 112 mark
d)
For å kunne skrive til en katalog (eller en fil) må rettigheten w
være satt.
e) For å kunne kopiere noe til en katalog, må katalogen kunne aksesseres (f. eks. gå dit med cd) og da må x-rettigheten være satt.
f) chmod 300 dir
da settes x og w, begge må være satt. r er kun nødvendig for
å lese filer i katalogen.
g)
Med cp
settes et nytt tidsstempel på filen som kopieres mens
cp -p
bevarer tidsstempelet (og andre egenskaper). -p
står for preserve.
Oppgave 2
#! /bin/bash if [ $# -ne 2 ]; then echo "Syntax: $0 file directory" exit fi times=10 fil=$1 dir=$2 if [ ! -f $fil ]; then echo "$fil er ikke en fil" exit fi if [ ! -r $fil ]; then echo "Kan ikke lese $fil" exit fi if [ ! -d $dir ]; then echo "$dir er ikke en katalog" exit fi if [ ! -w $dir -o ! -x $dir ]; then echo "Kan ikke skrive til katalog $dir" exit fi navn=`basename $fil` if [ -f $dir/$navn ]; then (( i = $times - 1 )) while [ $i -gt 0 ] do if [ -f $dir/$navn.$i ]; then (( ipp = $i + 1 )) cp -p $dir/$navn.$i $dir/$navn.$ipp fi (( i = $i - 1 )) done cp -p $dir/$navn $dir/$navn.1 elif [ -e $dir/$navn ]; then echo "$dir/$navn eksisterer, men er ikke en fil" exit fi cp -p $fil $dir
Oppgave 3
a) byte (= 4294967296 = 4 x 1073741824 = 4 x 1G) = 4 Giga byte
b) Når det fysiske minnet (RAM) er oppbrukt, begynner programmene å bruke virtuelt minne på harddisken (swapping). Det går veldig mye saktere å lese til og fra disk enn til og fra internminne.
c)
d) Java er plattformuavhengig og Java byte-kode kan generelt kjøres på alle plattformer
uansett hvilken plattform den er kompilert på:
Java-program kompilert på | Windows | Linux | Solaris |
Kjører på Windows | X | X | X |
Kjører på Linux | X | X | X |
Kjører på Solaris | X | X | X |
e) Et kompilert C-program er maskinkode som kun kan kjøre på arkitekturen det er
kompilert for. Makinkoden kommuniserer med OS, så den vil også være OS-avhengig.
C-program kompilert på | Windows | Linux | Solaris |
Kjører på Windows | X | ||
Kjører på Linux | X | ||
Kjører på Solaris | X |
f) Uten hjelp fra hardware kan ikke en slik prosess tvinges til å avbrytes. En hardware timer sender med jevne mellomrom et interrupt som gjør at neste instruksjon er et hopp til kjernekode som gir OS kontrollen slik at det kan vurdere hvilken prosess som skal slippe til neste gang.
g) Hvis et vanlig brukerprogram kunne switche til superusermodus, ville det kunne gjøre hvilken som helst instruksjon og manipulere på hvilken som helst del av minne og dermed kunne overta kontrollen over CPU'en. Moderne OS bruker en maskininstruksjon (trap for x86) som switcher til superusermodus og hopper til kjernekode i samme operasjon.
Oppgave 4
#! /bin/perl use strict; use IO::Socket::INET; my $file = "/tmp/chat"; my $host = $ARGV[0]; $host or die "Oppgi navn på server!"; my $port = 9002; # Portnummer på server som client skal kobles til my $socket = IO::Socket::INET->new("$host:$port") or die "Kan ikke koble til $host på port $port\n"; my $pid = fork(); if(! $pid) { # De to neste linjene er ikke påkrevet men nyttige $socket->close(); # I denne prosessen skal socketen ikke brukes `touch $file`; # I fall den ikke finnes ellers feilmelding `xterm -e tail -f $file`; exit; } my $name = `whoami`; my $host = `hostname`; chomp($name); chomp($host); my $prompt = "$name\@$host> "; print "$prompt"; while (my $line = <STDIN>) { last if($line =~ /^\s*quit\s*$/); $socket->send("$prompt$line"); addLine($file,"$prompt$line"); print "$prompt"; } $socket->close(); # Avslutter forbindelsen sub addLine() { my ($fil,$line) = @_; if(open(FIL,">>$fil")) { print FIL $line; close(FIL); } else { print STDERR "Kan ikke skrive til $fil\n"; } }