Unix forelesningsnotater. Hårek Haugerud avdeling for ingeniørutdanning Høgskolen i Oslo

Størrelse: px
Begynne med side:

Download "Unix forelesningsnotater. Hårek Haugerud avdeling for ingeniørutdanning Høgskolen i Oslo"

Transkript

1 Unix forelesningsnotater Hårek Haugerud avdeling for ingeniørutdanning Høgskolen i Oslo

2 Contents 1 Forelesning 5/1-22(2 timer). Om kurset. Unix-shell, Unix-filsystem Om kurset Eksamen Obligatoriske gruppe-innleveringer Obligatoriske individuelle innleveringer Nyttige personer Introduksjon til den virtuelle lab en Hva er Unix? Hvorfor Unix? Fordeler Ulemper Shell - skallet rundt Unix-kjernen Hva er et shell? Hvorfor shell? Forelesning 9/1-22(2 timer). Unix-filsystem, Unix-kommandoer Sist Innlogging Å lage et shell-script Unix-shellscript Hva er shell-script? Unix filsystem Hvordan man flytter seg i et Unix-filtre Absolutt og relativ path Prosesser Unix-maskiner Filbehandling (Viktig!) Spesielle mapper i

3 2.12 Mer filbehandling Sletting av filer og mapper Enda mer filbehandling Lovlige filnavn Praktiske Unix-tips Forelesning 16-22(2 timer). Rettgheter, brukere og grupper Sist Dagens faktum: Passord-kryptering Hashing-algoritmer Passord-cracking Orientering: Hvem, hva, hvor /proc - et vindu til kjernen Filrettigheter Hvordan forstå filrettigheter Endre filrettigheter umask root og sudo Brukere Grupper Rettighetsprinsipper i Linux/UNIX miljøer Forelesning 23/1-22(2 timer). Variabler, omdirigering Sist Dagens faktum: Unix s opprinnelse og Unix-versjoner Online hjelp; apropos og man Shell-variabler Hvor ligger alle kommandoene egentlig? Svar: PATH Globale shell-variabler Prosesser ii

4 4.8 Apostrofer Tilordne output fra kommando til en variabel Symbolske linker til filer (symbolic links) Symbolske linker til mapper Omdirigering (viktig!) Omdirigering til og fra filer Omdirigering til og fra kommandoer; pipes if-test if-eksempel; fil-testing Flere filtester og sammenligning Forelesning 30/1-22(2 timer). Script programmering, Munin Sist Dagens Howto: hvordan installere Munin Shell-programmering Eksempel: Munin plugin Telle-variabler eller nå-variabler? Eksempel plugin Installere et plugin Husk: Plugins kjører som brukeren munin, ikke som deg, eller root Numerikk Logiske operatorer for-løkke Script og argumenter Argumenter i for-løkke og exit-verdier Forelesning 6/2-22(2 timer). Munin, for, argumenter Sist Dagens faktum: X windows system/x while iii

5 6.4 Input fra bruker Lese filer og output med while og read sort Sortert alfabetisk Sortert alfabetisk etter andre kolonne Sortert numerisk etter tredje kolonne head og tail Oversikt over shell-typer Oppstartsfiler Kommandoer brukt under forelesningen pr-plugin svar.sh test.sh Forelesning 13/2-22(2 timer). cut, while og read Sist Dagens faktum: bash completion cut scp og wget funksjoner funksjoner (referansestoff) case (referansestoff) Arrays (bash 2.x, referansestoff) gzip,bzip2, tar og zip Break og Continue Signaler og trap awk (ward) source Fjerne feilmeldinger iv

6 7.15 Cron ssh-copy-id Shell-programmering, oppsummering Hastighet til programmer skrevet i sh, bash, php, perl, Java og C Forelesning 27/2-22(2 timer). Introduksjon til Perl Hvem, Hva, Hvorfor Perl vs shell script? Å kjøre et Perl-program Hva skjer når man kjører et Perl-program Variabler Array Viktig funksjon: split for If-test Sammenligning foreach Lese fra fil Skrive til fil input fra tastatur Eksempel Perl-script Forelesning 5/3-22(2 timer). Perl: Hash, filtester, argumenter Sist Logiske operatorer Sannhet Hash Bruk av hash som datastruktur Variabler: oppsummering Operatorer v

7 9.8 Filtester Argumenter Kommunisere med Unix-prosesser Perl-script fra forelesningen hash.pl pwh.pl adduser.pl Forelesning 12/3-22(2 timer). Perl og Unix Sist Dagens faktum: TIMTOWTDI -There Is More Than One Way To Do It Sende input til en Unix-kommando Vekselvirkning med Unix Unix fork() Forelesning 19/3-22(2 timer). Perl: subrutiner, regulære uttrykk Spesielle variabler Funksjoner og kontekst Subrutiner Subrutiner, parameteroverføring Parameter overføring av arrays(referansestoff) Forelesning 25/3-22(2 timer). Perl: moduler, regulære uttrykk Moduler(referansestoff) Regulære uttrykk Spesielle tegn i Regulære uttrykk Kvantifisering i Regulære uttrykk II Spesielle koder i Regulære uttrykk Intern refereranse Flere eksempler vi

8 12.8 Plukke ut og bytte ut deler av regexp Forelesning 16/4-22(2 timer). Windows og PowerShell Kort Windows historikk Windows brukere Windows grupper Local Security Policy Windows fil rettigheter Windows kommandolinje script Windows Script Host VBScript VBScript-eksempler(referansestoff) Input og popup-menyer(referansestoff) Windows PowerShell Verdens korteste Hello World program De to viktigste kommandoene Likheter med bash Omdirigering Variabler Environmentvariabler Apostrofer Objekter og Get-Member Forelesning 22/4-22(2 timer). Powershell, Windows registry Fra sist: Viktige kommandoer Undersøke typen til et objekt Foreach og ps array og strenger Summere antall bytes i filer nkill.ps vii

9 14.7 Lese og sette registry verdier Forelesning 30/4-22(2 timer). PowerShell Dagens sitat:jeffrey Snover - PowerShell Architect Script Editorer WMI-Objekter Windows og Linux brukere Brukere i Linux Brukere i Windows Logge inn passordløst med ssh, Resten av forelesningen bør lese på egen hånd og brukes som referansestoff Linjeskift i Unix og Windowsfiler Bruke Windows Com-objekter fra PowerShell One-liner for å vise alle Com-objekter Format-table Mer om løkker og logiske operatorer Forelesning 7/5-22(2 timer). Repitisjon Operativsystemer Innlogging Filsystemer Hvordan forstå filrettigheter i Unix Endre filrettigheter Windows fil rettigheter Scriptspråk, Bash, Perl og Powershell

10 1 Forelesning 5/1-22(2 timer). Om kurset. Unix-shell, Unix-filsystem Forelesning slides Om kurset Kurset består av to relativt uavhengige deler 1. Unix/Linux, Forelesning mandag 2. Operativsystmer(OS), Forelesning torsdag Foreleser OS: Hårek Haugerud, rom PS431 Foreleser Linux: Amir Ahmed, rom PS330 All kursinfo: Fronter eller (/osa for anvendt) grunnlag for valgfaget System- og nettverksadministrasjon (høst 21) grunnlag for vår mastergrad i Nettverk og Systemadministrasjon Viktig: Jobb med oppgaver!! 1.2 Eksamen 3 timers skriftlig eksamen (teller 100%) Alle skriftlige hjelpemidler tillatt 1.3 Obligatoriske gruppe-innleveringer Uke-oppgavene som er markert som obligatoriske for hver uke samles opp og leveres ved hver innlevering. Alle oblig er MÅ være godkjent for å kunne melde seg opp til eksamen 1.4 Obligatoriske individuelle innleveringer Individuelle Multiple Choice tester med tidsbegrensining. 3-4 korte Multiple Choice tester (7-10 minutter) Trekkes tilfeldig fra en database av spørsmål Må svare riktig på minst 7 av 10 for å få godkjenning Hvis ikke MÅ studentassistent kontaktes. Han går igjennom svarene og anbefaler hva som bør jobbes med og oppdaterer databasen slik at du får en ny sjanse 1 haugerud/os/forelesning/amir/unix1.pptx 2

11 1.5 Nyttige personer Hårek og Amir Studentassistenter, i øvingstimene ved systemproblemer Martin Kot, rom PS?? - VMer/Unix-drift 1.6 Introduksjon til den virtuelle lab en Den virtuelle lab en består av seks Linux-servere som ved hjelp av virtualiseringsteknologien Xen lager 60 små nettverk bestående av en Ubuntu Linux virtuell maskin og en Windows XP virtuell maskin. Disse maskinene kan man komme inn på ved hjelp av VNC (Virtual Network Computing) som er programvare som vanligvis brukes til skrivebordsdeling. VNC benytter RFB (Remote FrameBuffer) protokollen til å kontrollere en annen maskin over et nettverket. Tastetrykk og museklikk sendes til maskinen som kontrolleres og den overfører i retur oppdaterte skjermbilder over nettet.vnc er plattform-uavhengig slik at en VNC-viewer på hvilket som helst operativsystem kan koble seg til en VNC server på hvilket som helst annent operativsystem. Kyrre Begnum har utviklet denne lab en ved hjelp av sitt eget konfigurasjonsverktøy MLN og har illustrert dette ved noen slides Hva er Unix? Unix er et operativsystem = et stort og komplisert program som styrer en datamaskin. Mange varianter Unix: Linux, FreeBSD, NetBSD, OpenBSD, Solaris, AIX, HP-UX etc. ligner på hverandre Windows er et annet og anderledes operativsystem. Mac OS X bygger på FreeBSD kjernen Man kan velge om man vil la Linux eller Windows styre sin PC. Unix mye brukt i servere (web, mail, fil-servere) 1.8 Hvorfor Unix? Fordeler + Stabilitet + Sikkerhet + Nettverk - Internett er bygd rundt Unix. ++ Linux: Fritt OS (gratis og åpen kildekode), eksplosiv vekst + Kraftig verktøy - setter sammen mange små programmer, f. eks. $ lynx -source grep sport wc -l 2 haugerud/osa/forelesning/mln-oscourse-slides.pdf 3

12 1.8.2 Ulemper - Brukervennlighet - Lite programvare f. eks. spill - Vanskelig å kommunisere med Windows Bedring med Linux på alle punkter. 1.9 Shell - skallet rundt Unix-kjernen Tidligere gikk all kommunikasjon med et Unix-system gjennom et shell Hva er et shell? kommandobasert verktøy tar imot kommandoer fra tastatur Grensesnitt mot Unix-kjernen Et program som tolker input som kommandoer Utfører ordre ved å snakke med Unix-kjernen gjennom ett sett systemkall (system-api) mv ls Shell UNIX kjernen lpr cp cat Figure 1: Unix-kommandoene sendes til shellet som er et skall rundt Unix-kjernen. Shellet sørger for at oppdraget det får blir utført ved å gjøre et sett av systemkall til kjernen Hvorfor shell? Idag er vindusystemer med pek & klikk applikasjoner mer vanlig, men et shell er uunnværlig for systemarbeid og for avanserte brukere. Stor frihetsgrad; Alt er mulig å gjøre 3 Spørsmål: Tilsvarer et shell-script i Unix et DOS batch-program (Som f. eks. autoexec.bat)? Svar: Ja, men shell-script er et mye kraftigere verktøy; flere muligheter 4

13 Kompliserte oppgaver kan løses effektivt, ved å sette sammen mange små Unixprogram; sort, grep, sed, cp, mv et programmeringsspråk: shell-script som kombinerer Unix-kommandoer; systemprogrammering 2 Forelesning 9/1-22(2 timer). Unix-filsystem, Unix-kommandoer 2.1 Sist Unix er et operativsystem = et stort og komplisert program som styrer en datamaskin Jobb med oppgaver! (minst 4 timer per uke!) Shell 2.2 Innlogging Hver bruker på et Unix-system har entydig brukernavn passord Oversikt over alle brukere på systemet ligger i filen /etc/passwd og de krypterte passordene ligger i filen /etc/shadow Kan ikke leses av vanlige brukere, kun av root (superuser) Passordet settes/endres på IU via web. 2.3 Å lage et shell-script $ jed script.sh #! --> nå kommer et script /bin/bash --> skal tolkes av /bin/bash Rettigheter må settes slik at filen er kjørbar (x) 5

14 Figure 2: script.sh i jed [os]studssh:~$ script.sh -bash:./script.sh: Permission denied [os]studssh:~$ ls -l script.sh -rw-r--r-- 1 os student :23 script.sh [os]studssh:~$ chmod 700 script.sh [os]studssh:~$ ls -l script.sh -rwx os student :23 script.sh [os]studssh:~$ script.sh Linux studssh generic #1 SMP Tue Dec 1 18:37:31 UTC 2009 i686 GNU/Linux tmp /iu/cube/u4/os/mappe total 4 drwxr-xr-x 2 os student :11 tmp [os]studssh:~$ 2.4 Unix-shellscript Hva er shell-script? Samling av kommandolinjer program som utføres linje for linje Kompileres ikke + Raskt å lage. + Fint for små oppgaver. 6

15 - Langsomt i forhold til kompilert kode. - Mangler avanserte datastrukturer. - Kryptisk syntaks - Vanskelig å feilsøke/debugge 2.5 Unix filsystem Filer er et helt sentralt Unix-begrep. Alle data lagres som filer og strømmer av data fra tastatur og andre devicer blir behandlet som om de var filer. / rot katalogen bin var usr tmp boot home etc bin man local per liv passwd shadow /usr/bin /home/per/www www kat bin Figure 3: Et typisk Unix-filtre 2.6 Hvordan man flytter seg i et Unix-filtre Unix-kommando Virkning $ pwd gir mappen/katalogen man står i (Print Working Directory) $ cd home change directory til home (kun fra /) $ cd /etc flytter til /etc $ cd.. flytter en mappe opp $ cd../.. flytter to mapper opp $ cd går til hjemmemappen $ ls -l viser alt som finnes i mappen 2.7 Absolutt og relativ path En path (bane) til en mappe eller en fil angis alltid absolutt eller relativt til posisjonen man er i filtreet. Absolutt path begynner alltid med / som er rot-mappen som alle de andre henger på. $ pwd / 7

16 $ cd home $ pwd /home $ cd etc <----- Relativ path bash: cd: etc: No such file or directory $ cd /etc <----- Absolutt path Alt I: Relativ path AltII: Absolutt path Fra / Fra hvor som helst $ cd usr $ cd /usr/bin $ cd bin $ pwd $ pwd /usr/bin /usr/bin Begynner ikke med / Begynner med / / rot-katalogen usr boot /usr/bin bin man local Figure 4: Mappen /usr/bin i filtreet. 2.8 Prosesser ps ps aux ps aux grep root man ps top 2.9 Unix-maskiner Hver Unix-maskin kalles en host (vert) Flere brukere kan logge inn og bruke samme host samtidig. Hver host har et navn: studssh (Linux, fil og www-server), nexus (Solaris), os68, rex, etc. Entydig adresse som kan nås fra hele verden krever domenenavn i tillegg: nexus.iu.hio.no Man kan logge inn fra hvorsomhelst i verden til en annen maskin: 8

17 ssh s password: [os]studssh:~$ Når man logger inn med ssh (Secure Shell) krypteres alt som sendes Filbehandling (Viktig!) Alt i Unix er filer; vanligvis ASCII-filer. Unix-kommando resultat $ ls lister filer/mapper i mappen der du står $ ls -l ekstra info $ ls -a lister skjulte filer (.fil) $ ls /etc lister alt i /etc $ mkdir mappe lager en mappe $ cat fil1 skriv innhold til skjermen $ touch fil2 lag en tom fil med navn fil2 /oppdaterer tidsstempel hvis den fins $ jed fil3.txt editer en fil med navn fil3.txt. Rask og effektiv editor som også kan brukes fra putty. $ gedit fil4.txt editer en fil med navn fil4.txt. Mer omfattende GUI-editor. $ cp fil1 fil2 kopierer fil1 til fil2 $ cp -i fil1 fil2 Spørr om fil2 skal overskrives $ mv fil1 fil2 Endrer navn fra fil1 til fil2 $ mv fil2 /tmp Flytter fil2 til /tmp 2.11 Spesielle mapper betegnelse Mappe. den du står i.. den over../.. den over den igjen Din hjemmemappe Bruk av : $ echo ~ /iu/nexus/ud/haugerud $ cat ~/.bashrc (skriver din.bashrc til skjermen.) $ echo ~mark /iu/nexus/ud/mark $ cd ~/www {# gå til din hjemmesidemappe. 9

18 2.12 Mer filbehandling Unix-kommando resultat $ tree viser den underliggende mappe-strukturen $ sudo apt-get install tree Installerer programmet tree om det ikke finnes fra før $ mv dir1 dir2 flytter mappen dir1 til mappen dir2 $ cp /bin/c* /tmp Kopier alt som begynner på c i /bin til /tmp $ cp -R dir1 dir2 Kopier dir1 med undermapper til dir2 Før Kommando Etter dir1 min dir2 $ pwd /min $ mv dir1 dir2 min dir2 www dir1 www dir1 www min min $ pwd kat /min $ mv dir1 dir2 dir2 kat www Figure 5: mv av hele mapper 2.13 Sletting av filer og mapper NB! Fjernes for godt (ingen undelete) Unix-kommando resultat $ rm fil1 sletter fil1 (umulig å få tilbake) $ rmdir Mappe kun tom mappe $ rm -R Mappe sletter mappe og alle undermapper. Farlig $ rm -i fil2 ber om bekreftelse først 10

19 Før Kommando Etter dir1 min dir2 $ pwd min $ cp R dir1 dir2 dir1 min dir2 www fil.txt www fil.txt dir1 www fil.txt dir1 min kat $ pwd min $ cp R dir1 dir2 dir1 min kat dir2 www fil.txt www fil.txt www fil.txt Figure 6: cp -R av hele mapper 2.14 Enda mer filbehandling Unix-kommando resultat $ locate noe finner alle filer og mapper med navn som inneholder tekststrengen noe $ find tmp -name fil.txt finner alt under tmp med navn som inneholder fil.txt $ find. -name "*fil*" finner alt under mappen du står som inneholder strengen fil i navnet $ more fil1 skriv til skjerm; en side av gangen $ grep group /etc/passwd skriv til skjerm alle linjer som inneholder strengen group $ wc -l /etc/passwd tell antall linjer i /etc/passwd $ grep group /etc/passwd wc -l tell antall linjer som inneholder strengen group Mens find bruker 319 sekunder på å finne alle filer på cube som inneholder hhfil2.tex, bruker locate 1.4 sekunder 2.15 Lovlige filnavn Alle tegn untatt / er lov// unngå spesielle tegn som æ,ø,å og mellomrom for de må spesialbehandles (som en fin fil ) Bruk A-Z a-z 0-9. fil1 fil1.txt Index.html VeldigLangeFilnavn.help fil2.ver3.tekst 11

20 Unix er case-sensitiv. fil1 er IKKE den samme filen som FIL Praktiske Unix-tips Copy = Merk område med venstre tast Paste = høyre musetast (putty) eller midtre musetast(linux) Windows varianten: cut=ctrl-x copy=ctrl-c og paste=ctrl-v virker i de fleste nyere applikasjoner Tidligere kommandoer kan gjentas og endres med piltaster og vanlig editering $ exit og CTRL-d avslutter et shell. Bruk Ctrl-C Hvis du skal stoppe et program som går i et shell Eks.: Skal flytte til mappen kjempelangtnavn: $ cd kj [TAB] $ cd kjempelangtnavn Hvis du også har en mappe der du står som heter kjiipt, piper det etter TAB $ cd kj [TAB] [TAB] kjempelangtnavn/ kjiipt/ $ cd kje [TAB] $ cd kjempelangtnavn $ loc [TAB] local locale localedef locate lockfile 3 Forelesning 16-22(2 timer). Rettgheter, brukere og grupper 3.1 Sist Shell-script Unix filsystem filbehandling kommandoer: ls, cp, mv, grep 3.2 Dagens faktum: Passord-kryptering Alle brukere har en linje i /etc/passwd. For eksempel: haugerud:x:285:102:hårek Haugerud:/iu/nexus/ud/haugerud:/bin/bash 12

21 tidligere stod det krypterte passord HH3XcvkMhd5gM der istedet for x. Det ligger nå i /etc/shadow, kan bare leses av root. Det kan (med rett salt ) genereres med kommandoen mkpasswd: $ mkpasswd -S HH Password: HH3XcvkMhd5gM Ved login: 1. Man taster passord 2. Login-shellet krypterer passordet 3. Sjekker mot /etc/shadow 4. Hvis likt login Passord Krypterings algoritme HH3XcvkMhd5gM Umulig! Figure 7: Passordkryptering Hashing-algoritmer Dette er enveisalgoritmer som for et gitt passord generere en entydig lengre streng av tegn. DES var tidligere standard, men har delvis blitt avløst av MD5 som er noe bedre. Det samme gjelder for Windows-innlogging, Der lagres hash-strengene i SAM-databasen eller i Active Directory. Tidligere var LM-hash(DES) standard, men er etterhvert avløst av NTLM-hash(MD5) Passord-cracking Hvis man har tilgang til shadowfilen på Linux eller SAM-databasen på Windows, kan et crack-program kryptere alle ord og kombinasjoner av ord i en ordbok og sammenligne med de krypterte passordene. 3.3 Orientering: Hvem, hva, hvor Unix-kommando Gir deg $ whoami brukernavn $ hostname maskin-navn $ uname Operativsystem (Linux, Solaris,...) $ uname -a OS, versjon, etc. $ who hvem som er logget inn $ finger info om brukere $ finger haugerud info om brukeren haugerud $ history tidligere kommandoer 13

22 3.4 /proc - et vindu til kjernen Linux tilbyr oss en enkel måte å undersøke tilstanden til operativsystemet på. Det finnes nemlig en mappe /proc som egentlig ikke finnes på harddisken, men som likevel inneholder filer som vi kan lese innholdet fra. Hver gang vi åpner en av filene i /proc, kjøres en metode i kjernen som skriver ut innholdet der og da. Man får altså et øyeblikksbildet av hva som skjer. Her er en liste over interessante filer og mapper i /proc: cpuinfo meminfo interrupts Hver prosess har en egen mappe som har samme navnsom prosessens PID. Spennende filer i en slik mappe kan være: uptime status - Navn og status på prosessen stat - Teller prosessorbruk, minnebruk osv. se man proc oom score version net/ 3.5 Filrettigheter Alle filer tilhører en bruker og en gruppe av brukere. For hver mappe og fil kan eieren sette rettighetene for brukeren filen tilhører (seg selv) gruppen filen tilhører alle andre $ ls -l -rwxrw-r-- 1 haugerud drift 7512 Aug 30 14:20 fil.exe - fil (d = mappe, l = link) rwx fileier sine rettigheter (r = read, w = write, x = executable) rw- gruppens rettigheter (kan lese og skrive) r- - alle andre sine rettigheter (kan bare lese filen) 1 antall hard links haugerud eiers brukernavn drift gruppen som filen tilhører (definert i /etc/group) 7512 antall byte Aug 30 14:20 tidspunkt filen sist ble endret fil.exe filnavn For mapper betyr x at man har tilgang til mappen. Er ikke x satt, kan man ikke gå dit. Og da kan man heller ikke liste filer der eller kopiere noe dit. 14

23 3.6 Hvordan forstå filrettigheter Rettighetene til eier, gruppe og andre er representert med kun tre bit. Dette begrenser hvor mange forskjellige rettigheter man kan ha, samtidig gjør det det enkelt å representere rettighetene som tall og å regne ut rettigheter i hodet. Dette gjør man på følgende måte: kjørerettigheter = 1 skriverettigheter = 2 leserettigheter = 4 Ved hjelp av disse tallene (og tallet 0) kan vi telle fra 0 til 7 ved å kombinere dem på forskjellige måter. F.eks: Kjørerettigheter + leserettigheter = 5 Kjøre + lese + skrive = 7 (maks) skrive og kjøre, men ikke lese = Endre filrettigheter Numerisk endring av filrettigheter: $ chmod 644 fil.txt <- gir rw-r--r-- $ chmod -R 755 dir <- gir rwxr-xr-x til dir og alle filer og mapper under dir Tallene betyr: rwx octal tekst x w w x r r - x r w r w x For mapper: Rettighet x (execute) gir tilgang til mappen. Alternativt: $ chmod a+xr fil.txt <- gir read og execute til alle (a) $ chmod g-w fil.exe <- fratar gruppen skriverettigheter u = user, g = group, o = other, a = all (både u, g og o) 15

24 x / x home x www x bilder /home/www/bilder Figure 8: Man må ha tilgangsrettighet (x) til alle mappene i path for å kunne lese en fil (her: se et web-bilde i /home/www/bilder). 3.8 umask Kommandoen umask setter hva som skal være standard rettigheter for nye filer og mapper. $ umask 0022 $ mkdir dir $ touch fil $ ls -l total 1 drwxr-xr-x 2 haugerud drift 512 Aug 30 23:52 dir -rw-r--r-- 1 haugerud drift 0 Aug fil umask er en maskering. For hver brukergruppe settes rettighet 111 minus mask for mapper og 110 minus mask for filer. Bit som er satt i mask, settes alltid til null. $ umask 027 $ mkdir dir2 $ touch fil2 $ ls -l total 2 drwxr-x--- 2 haugerud drift 512 Aug 30 23:53 dir2 -rw-r haugerud drift 0 Aug fil2 Det er ikke så viktig å vite detaljene i hvordan umask virker, for man kan raskt teste ut hva resultatet blir om man har en hvis forståelse. Slik beregnes rettighetene: 16

25 For mappe 7 = = = 111 minus mask 0 = = 0 7 = 111 resultat 7 = = 1 0 = 000 rettighet 7 = r w x 5 = r - x 0 = og for filer For fil 6 = = = 110 minus mask 0 = = 0 7 = 111 resultat 6 = = = 000 rettighet 6 = r w - 4 = r = Spørsmål Gir skriverettighet leserettighet? Har man automatisk leserettigheter hvis man har skriverettighet? Svar: Nei, r, w og x settes uavhengig av hverandre. Men-w- (kun skriverettigheter) brukes i praksis aldri. Kan man sette bare skriverettigheter på en fil? Ja. chmod 200 fil Da kan man skrive til filen, men ikke lese den. Hvilke rettigheter trenger man for å kunne slette en fil? w, skriverettigheter. Kan man slette en fil man selv ikke har skriverettigheter til? Ja, om man har skriverettigheter til mappen den ligger i, men man får en advarsel og blir spurt først. Det samme gjelder en fil med ingen rettigheter, 000. Hva skjer med eierskapet om man kopierer en annens fil? Da blir man selv eier til den kopierte filen. 3.9 root og sudo Dette er administratorbrukeren på Unix, som har alle rettigheter på systemet. For å bli root kan man logge inn direkte med root-passordet. Alternativt kan man logge inn med sudo hvis man er tildelt rettigheter for å gjøre dette. På Ubuntu-VM vil du som den vanlige group-brukeren for eksempel ikke få lov til å se på shadowfilen: $ whoami group10 $ cat /etc/shadow cat: /etc/shadow: Permission denied Men fordi group-brukeren er en såkalt sudo-user som har root-rettigheter om han ønsker det, kan han likevel se shadow-filen med kommandoen 17

26 sudo cat /etc/shadow [sudo] password for group10: etter å ha skrevet inn sitt vanlige passord. Det er også mulig for en sudo-user å få opp et root-shell ved å gjøre sudo su Man bør være forsiktig med å jobbe fra et root-shell, siden man da lettere glemmer at man har de allmektige root-rettighetene som potensielt kan føre til store feilgrep Brukere En bruker på et UNIX/Linux system består av følgende: En linje i filen /etc/passwd som inneholder bl.a Bruker id - UID. Må være unik. Brukernavn Hjemmekatalog En linje i filen /etc/shadow som inneholder md5sum av passordet En hjemmekatalog (vanligvis i /home) Eventuelle gruppemedlemskap i filen /etc/group Man kan lage nye bruker med kommandoen adduser eller useradd. Sistnevnte er kun anbefalt dersom man skal legge til en bruker via et script eller lignende. Kommandoen adduser fungerer mer interaktivt og passer best for å legge til en og en bruker. br br Et UNIX/Linux system har vanligvis en del brukere i tillegg til de menneskelige brukerne. Den mest kjente av dem er root, som har UID 0. De øvrige brukerne representerer tjenester som ikke bør kjøre som brukeren root av risikohensyn. Eksempler på slike brukere er nobody, sshd og gdm. Dersom man installerer flere tjenester på et system, f.eks en webserver, vil man sansynligvis få opprettet de tilsvarende brukerne automatisk Grupper gruppe av brukere Definert i /etc/group må defineres av root Spørr om å opprette grupper på studssh $ groups mark # lister gruppene mark er med i $ chgrp studgruppe fil.txt # fil.txt tilhører nå studgruppe $ chmod 770 fil.txt # alle rettigheter til alle i studgruppe $ sudo adduser s studgruppe # Gjør s til medlem av studgruppe 18

27 3.12 Rettighetsprinsipper i Linux/UNIX miljøer Følgende regler gjelder mellom brukere: Alle prosesser/programmer som startes av en bruker vil være eid av den brukeren og filrettigheter vil være i forhold til eierskapet. Unntaket er kommandoen su som forandrer bruker og tjenester som forandrer status på seg selv, f.eks sshd (startes som root, men blir til sshd kort tid etter). Brukere kan kun sende signaler til sine egne prosesser (f.eks med kommandoen kill). Unntak er root. Brukere kan kun forandre på rettighetene til filer som de eier selv. Unntak er root. Brukere kan ikke gi filer til andre brukere ved å forandre hvem som er eier av filen med kommandoen chown. Root kan. Brukere KAN forandre hvilken gruppe som eier en fil med kommandoen chgrp, men KUN til grupper som den selv er medlem av. Root kan uansett. Brukere kan ikke lage nye brukere. Bare root kan det. Det finnes to måter å bli root på. Den ene er å bruke kommandoen su, som ber deg om root sitt EGET passord. Denne metoden er mest kjent. I de nyeste versjonene av Linux er det blitt mer vanlig å bruke sudo, som gir rettigheter til vanlige brukere dersom de kan autentisere seg. Man må vanligvis være medlem av en spesiell gruppe for å få lov til å kjøre kommandoen sudo su, som ber brukeren om sitt eget passord istedefor root sitt passord. br Det er også mulig å logge seg rett på systemet som root dersom man har root passordet. Det er derimot ikke anbefalt av følgende årsaker: Alt den brukeren gjør vil bli gjort med root-rettigheter. Ved å bruke su eller sudo su kan vi se i logfilene HVEM som ble root. Denne typen informasjon kan være veldig viktig når man vil finne ut hva som har skjedd (og hvem som skal få skylden). Root skal kun brukes når man har behov for det, og ikke behandles som en normal bruker/person. 4 Forelesning 23/1-22(2 timer). Variabler, omdirigering 4.1 Sist filrettigheter Brukere og grupper root og sudo 4.2 Dagens faktum: Unix s opprinnelse og Unix-versjoner Unix ble opprinnelig skrevet i PDP-7 assembler av Ken Thompson i 1969 ved AT&T Bell Laboratories. Han gjorde det for å kunne kjøre spillet space travel på minicomputeren PDP-7 (9 Kbytes internminne). Progrmmeringsspråket C ble laget av Dennis Ritchie rundt 1970 for å kunne skrive UNIX i et plattformuavhengig språk; noe som ble gjort i Online hjelp; apropos og man Apropos: finner kommandoer relatert til et emne. 19

28 cube$ apropos compare # (eller man -k) diff (1) - find differences between two files diff3 (1) - find differences between three files difftime (3) - calculate time difference sdiff (1) - find differences between two files and merge interactively wdiff (1) - display word differences between text files cube$ man diff DIFF(1) GNU Tools DIFF(1) NAME diff - find differences between two files SYNOPSIS diff [options] from-file to-file DESCRIPTION In the simplest case, diff compares the contents of the two files from-file and to-file. A file name of - stands etc. Options -i Ignore changes in case; consider upper- and lowercase letters equivalent. Alt som er listet i [] er opsjoner som kan men ikke må tas med. Tast q for å avslutte. cube$ diff -i fil1 fil2 4.4 Shell-variabler I et Linux-shell finnes det systemvariabler som $HOME, $PATH, $PS1, $CLASSPATH og mange andre som systemet og mange applikasjoner som f. eks. Jbuilder bruker. En bruker kan også definere sine egne lokale variabler med selvlagde variabelnavn. Det er vanlig, men ikke påkrevet å bruke små bokstaver i variabelnavnet til lokale variable. $ os=linux $ dato= Thu Jan 25 Det må ikke være mellomrom før og etter =. Variabler refereres til med et $-tegn foran navnet: $ echo $os Linux $ echo $dato Thu Jan 25 Navnet kan avgrenses med $ echo $osfrelst $ echo ${osfrelst Linuxfrelst 20

29 Kommandoer for å liste og fjerne variabler: $ set # Lister alle definerte variabler $ unset os # Fjerner definisjonen av os 4.5 Hvor ligger alle kommandoene egentlig? Svar: PATH $PATH er en global variabel som inneholder en streng med alle mapper (separert med kolon) som shellet leter i for å finne kjørbare filer når et kommandonavn tastes inn til shellet vorlon$ echo $PATH /opt/bin:/local/iu/bin:/local/gnu/bin:/local/bin:/usr/x11r6/bin:/usr/bin:/bin:.: vorlon$ type ls # type gir hvilket program shellet starter ls is /bin/ls Når du taster inn $ ls leter bash igjennom alle mappene i $PATH etter en fil med navn ls helt til det finner en i den nest siste (/bin) og kjører den. Hvis du gjør PATH tom: $ PATH="" vil shellet ikke finne vanlige kommandoer som mv og ls fordi mappen /bin ikke er med i $PATH. 4.6 Globale shell-variabler I utgangspunktet er shell-variabler lokale og bare kjent i det shellet de har blitt definert. Man kan gjøre variabler globale med kommandoen export: $ date= 30. januar $ os=linux $ export os $ export nyglobal= ny global verdi Variabelene $os og nyglobal er nå globale og vil arves av nye shell som startes, men det vil ikke $date: $ bash $ echo $os Linux $ echo $nyglobal ny global verdi $ echo $date 21

30 men som vi ser kjenner det nye shellet ikke til variabelen $date, den er lokal og bare kjent i shellet den ble definert i. vanlig å skrive globale variabler med store bokstaver kalles ofte ENVIRONMENT varibler ($HOME, $PATH, $EDITOR, $CLASSPATH) leses av programmer som ønsker å vite default editor, classpath, etc Globale variabler kan listes med export Variabler kan defineres direkte som globale i bash: $ export os=linux 4.7 Prosesser Hver gang vi starter et program lager Unix en uavhengig prosess: $ emacs Starter vi fra et shell, venter shellet på at programmet skal bli ferdig. $emacs& $ Dette starter emacs som en bakgrunnsprosess kommando virkning $ ps Lister shellets prosesser $ ps aux (eller -Al) Alle prosesser $ top Dynamisk ps -aux $ kill 1872 Drep prosess med PID 1872 $ kill Forsert drap av 1872 $ time mittscript.bash Måler tidsforbruket 4.8 Apostrofer I bash brukes 3 forskjellige typer apostrofer, og " som alle har forskjellig betydning: $ dir=mappe $ echo ls $dir -> Gir eksakt tekststreng ls $dir $ echo "ls $dir" " -> Variabler substitueres; verdien av $dir skrives ut. ls mappe $ echo ls $dir -> utfører kommando! fil1 fil2 fil.txt Huskeregel -> / -> Unix -> vet hva man får -> \ -> Windows -> aner ikke hva man får Alternativ når en kommando skal utføres: echo $(ls $dir) 22

31 4.9 Tilordne output fra kommando til en variabel $ mappe= pwd $echo $mappe /iu/nexus/ud/haugerud $ tall= seq 5 10 $ echo $tall Alternativt: $ mappe=$(pwd) $ tall=$(seq 5 10) 4.10 Symbolske linker til filer (symbolic links) $ ln -s fil1 fil2 $ ls -l -rw haugerud drift 20 Sep 4 18:44 fil1 lrwxrwxrwx 1 haugerud drift 4 Sep 4 18:43 fil2 -> fil1 $ cat fil2 Denne teksten står i fil Symbolske linker til mapper Ved å lage en link til en mappe kan man lage en snarvei i filtreet. $ pwd /home/min/dir1 $ ln -s /usr/bin mbin $ ls -l lrwxrwxrwx 1 haugerud drift 8 Sep 4 19:02 mbin -> /usr/bin dir1 Før home min dir2 / usr bin Kommando $ pwd /home/min/dir1 $ ln s /usr/bin mbin Etter home min dir1 dir2 mbin / usr bin Figure 9: Symbolsk link fra mbin til /usr/bin 23

32 $ cd mbin $ ls 822-date giftopnm nawk rcsmerge Esetroot giftrans ncftp rdist...etc... # alle filene i /usr/bin $ $ pwd /home/min/dir1/mbin # /bin/pwd gir path relativt til linken $ type pwd pwd is a shell builtin # kommandoen pwd er bygd inn i bash $ /bin/pwd # /bin/pwd gir absolutt path til der du er /usr/bin $ cd.. $ pwd /home/min/dir1 # ikke /usr 4.12 Omdirigering (viktig!) Den store fleksibiliteten det gir å kunne dirigere datastrømmer til og fra filer og programmer har alltid vært en sentral og nyttig egenskap ved Unix. De fleste Unix programmer og kommandoer har alltid tre åpne kanaler: nummer navn fullt navn funksjon default 0 stdin standard in input kanal fra tastatur 1 stdout standard out output kanal til skjerm 2 stderr standard error kanal for feilmelding til skjerm Dataene som strømmer inn og ut av disse kanalene (streams) kan omdirigeres til og fra filer og programmer. STDIN Unix kommando STDOUT STDERR Figure 10: Unix datakanaler Omdirigering til og fra filer Eks: stdout for echo er terminal. $ echo hei hei $ echo hei > fil1 $ cat fil1 24

33 hei $ echo hei2 >> fil1 $ cat fil1 hei hei2 omdirigering virkning > fil.txt omdirigerer stdout til fil.txt. Overskriver >> fil.txt legger stdout etter siste linje i fil.txt >& fil.txt sender også stderr til fil.txt 2> err.txt sender stderr til err.txt 2> /dev/null stderr sendes til et sort hull og forsvinner > fil.txt 2> err.txt stdout - fil.txt stderr - err.txt find / -name passwd 2>&1 grep -v Permission sender stderr til samme kanal som stdout prog < fil.txt sender fil til stdin for program Flere eks: $ ehco hei ehco: Command not found $ ehco hei >& fil1 $ cat fil1 ehco: Command not found $ echo hei > fil1 2> err.txt # Sender error til err.txt $ mail haugerud < fil Omdirigering til og fra kommandoer; pipes En pipe er et data-rør som leder et programs stdout til et annent programs stdin. Uten pipe: $ ps aux > fil $ more fil Med pipe: $ ps aux more Dette gjør at man kan kombinere alle Unix-kommandoene på en rekke måter. Noen eksempler: $ ps aux grep haugerud more $ cat /etc/passwd sort > fil.txt $ sort /etc/passwd > fil.txt $ ps aux awk {print $1 sort uniq wc -l $ ps -eo user sort uniq wc -l Forklaring til det siste eksempelet: ps -eo user gir bare brukernavnet i ps-listingen. sort sorterer listen med brukernavn alfabetisk. uniq fjerner identiske linjer, men kun de som kommer etter hverandre, derfor sort først. wc -l returnerer antall linjer. En slik pipeline gir dermed antall brukere som kjører prosesser på maskinen. 25

34 STDIN ps aux STDOUT STDERR STDIN more STDOUT STDERR STDIN cat STDOUT STDERR STDIN sort STDOUT STDERR /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh fil.txt agnesh:x:941:10:agnes Lorange Hayman:/iu/nexus/ub/agnesh:/bin/bash agneter:x:421:10:agnete Reenaas:/iu/nexus/ub/agneter:/bin/bash andrea:x:2434:100:andre Aubert:/iu/cube/u4/andrea:/bin/bash Figure 11: Øverst:$ ps -aux more. Nederst: $ cat /etc/passwd sort > fil.txt if-test if test1 then kommando1 elif test2 then kommando2 else kommando3 fi 4.15 if-eksempel; fil-testing #! /bin/bash fil=$1 if [ -f "$fil" ] then echo $fil er en fil elif [ -d "$fil" ]; then 26

35 echo $fil er en mappe else echo $fil er hverken fil eller mappe fi Man må ha mellomrom før og etter [ og før ] i if-testene. Semikolon adskiller generelt to kommandoer på samme måte som et linjeskift. Følgende script prøver å teste om det ikke er gitt noe argument: #! /bin/bash argument1=$1 if [ $argument1 = "" ] then echo "Ingen argumenter" fi Men det gir en feilmelding når det kjøres uten argumenter $./script./script: line 5: [: =: unary operator expected fordi det ikke er anførselstegn rundt $argument1 og da ser bash en linje som ser ut som if [ = "" ] og gir feilmelding. Analogt vil testen if [ -f ] alltid slå til. Bruk derfor alttid anførselstegn rundt det som skal testes, slik at det blir en tom streng og dermed syntaktisk riktig om variabelen du tester ikke eksisterer eller er tom Flere filtester og sammenligning Filtest Sann hvis -L fil fil er en link -r fil fil er lesbar -w fil fil er skrivbar -e fil fil eksisterer -x fil fil er eksekverbar s1 = s2 strengene s1 og s2 er like s1!= s2 strengen s1 og s2 er forskjellige x -eq y heltallene x og y er like x -lt y x er mindre enn y 4 x -gt y x er større enn y t1 -a t2 Logisk og - sann hvis t1 OG t2 er sanne t1 -o t2 Logisk eller - sann hvis t1 ELLER t2 er sanne 27

36 5 Forelesning 30/1-22(2 timer). Script programmering, Munin 5.1 Sist Globale og lokale shell variabler Prosesser Apostrofer Linker Omdirigering 5.2 Dagens Howto: hvordan installere Munin Munin er et avansert overvåkingssystem for Linux. Hvert femte minutt blir informasjon om viktige deler av operativsystemet hentet inn og plottet som tidsserier på en webside. Munin kan for oss fungere som en enkel måte å lage historikk av våre data på. Denne oppskriften må gjøres som root: 1. Før du setter igang: er du sikker på at ingen andre allerede har installert munin på systemet ditt? Sjekk om mappen /var/www/munin finnes. Hvis den finnes, så er munin allerede installert. 2. Kjør kommandoene: apt-get update apt-get install apache2 apt-get install munin munin-node 3. Siden munin oppdaterer seg hvert femte minutt må du gjerne vente litt før du ser noe resultat. For at Munin-sidene skal kunne sees fra hvor som helst, må du endre linjen Allow from localhost /8 ::1 i filen /etc/munin/apache.conf til Allow from all og restarte apache med /etc/init.d/apache2 restart. Deretter kan dine munin-sider sees fra hvor som helst ved å følge med på siden: hvor GRUPPE er ditt gruppenummer. Etterhvert skal det begynne å dukke opp grafer fra høyre. 5.3 Shell-programmering Vi kan lage script som er nye kommandoer oppstartsprogrammer/program som gjør systemarbeid innstallasjonsprogrammer daemons; prosesser som alltid går i bakgrunnen og utfører tjenester. 28

37 $mittprog& vil fortsette å kjøre etter logout. Men på skolen fjernes jobber som kjører lenge av cfengine. Når du skriver script: begynn med et skjelett (som f. eks. kun behandler argumentene) og få det til å virke utvid med en detalj av gangen; test for hver gang test små deler med copy&paste til et kommandovindu Debugging: bash -x mittscript viser hva som skjer Legg inn linjer som echo "Har nå kommet hit" Feilmeldinger fra bash er ofte kryptiske og misvisende, så det er vanskelig å finne feil i et stort script. Spørsmål: Hva er cron? Svar: Cron er en deamon som starter jobber på gitte tidspunkt som angitt i crontabfiler. 5.4 Eksempel: Munin plugin Alle verdier som munin lager grafer av, kommer fra såkalte plugins. Disse plugins kan være script eller programmer skrevet i vilkårlige programmeringsspråk. Det eneste kravet er at utskriften til pluginet skal følge en standard. På denne måten trenger ikke munin tenke på hvilket språk pluginet er skrevet i, så lenge det skriver ut det den skal på en måte munin forstår. Det betyr også, at vi kan lage script som oppfører seg som et plugin og teste det fra kommandolinjen før vi installerer det i munin. Et munin plugin kan deles inn i to deler. Den første delen, som vi kan kalle config -delen er ansvarlig for å skrive ut informasjon som munin trenger for å kunne lage en passende graf, slik som navn på aksene, overskrift og hvor mange verdier (grafer) som skal vises i samme bildet. Config informasjonen hentes ut ved å kjøre plugin med argument config. Da skal pluginet skrive ut informasjon og avslutte. Her er et eksempel på kjøring av et plugin med config som argument: config graph_title Grafens tittel graph_vlabel Navn på y-aksen graph_info Litt mer beskrivelse av hva denne grafen skal vise graph_category custom verdi1.label transactions verdi1.type GAUGE verdi1.info Number of transactions verdi2.label accounts verdi2.type DERIVE verdi2.min 0 # Unngår negative tall om telleren nullstilles verdi2.info Number of accounts config 29

38 Dette pluginet inneholder to verdier: verdi1 og verdi2. Verdier kan selvfølgelig ha bedre navn en dette, men de kan ikke ha mellomrom i navnet. Feltet graph category custom betyr at denne grafen skal vises i kategorien custom i websidene. Man kan definere egne kategorier her. Den andre delen kan vi kalle for verdi-delen. Her skal pluginet hente og skrive ut den verdien som pluginet handler om. Hvis f.eks pluginet skal skrive ut valuta verdien til kronen, så må det i denne delen hente tallet fra et sted og så skrive det ut. Et plugin kan ha flere verdier. Hver av verdiene må allerede ha blitt definert i config-delen av pluginet. For å kjøre et plugin i såkalt verdi-modus så skal man bare kjøre det uten argumenter. Pluginet skal da skrive ut en linje for hver verdi som er definert. Her er et eksempel: verdi1.value 51 verdi2.value 68 Legg merke til at det skal stå.value etter hver av verdiene Telle-variabler eller nå-variabler? Hvordan verdi-delen av pluginet skal bli programmert avhenger litt av hva slags tall man er ute etter. Noen variabler er nå-variabler, slik som temperatur, valutakurs, ledig minne eller antall prosesser. Hvis et plugin skal vise en nå-variabel er det rett frem å programmere: Man må bare hente ut verdien og deretter vise den. En variabel som er vanskeligere er såkalte telle-variabler. Disse viser ikke her-og-nå, men øker konstant fordi den summerer ett eller annet. Eksempler på telle-variabler er antall reisende totalt for oslo sporveier, antall interrupts i kjernen eller bytes som har blitt sendt over nettet. Det som gjør telle-variabler litt mer komplisert, er at vi ikke er interessert i å vise selve variablen, men FORANDRINGEN i variablen siden sist gang pluginet ble kjørt. Det ordnes enkelt ved å definere typen for variabelen til DERIVE. Da ordner Munin selv esten og regner ut differansen. Det kan være lurt å definere verdi.min 0, da unngår man negative verdier om telleren resettes. Det viktigste er bare at man vet om den verdien man skal skrive ut kommer fra en telle-variabel eller nå-variabel, slik at man velger riktig type, GAUGE eller DERIVE Eksempel plugin Det enkleste er å ta utgangspunkt i et av de enkleste pluginene som følger med installasjonen og så gjøre de nødvendige endringer på det. Her ser vi på /etc/munin/plugins/processes som viser antall prosesser som kjører på systemet. if [ "$1" = "config" ]; then echo graph_title Number of Processes echo graph_args --base l 0 echo graph_vlabel number of processes echo graph_category processes echo graph_printf %3.0lf ; # Gir heltall echo graph_info This graph shows the number of processes in the system. echo processes.label processes echo processes.draw LINE2 30

39 echo processes.info The current number of processes. exit 0 fi echo -n "processes.value " find /proc -maxdepth 1 -name [1-9]* -print wc -l sed s/\t +// sed s/ *// Installere et plugin For å installere et plugin trenger du kun å kopiere det til mappen /etc/munin/plugins. Pass på at scriptet er kjørbart og lesbart for alle. Etter at skriptet er kopiert til den mappen må du restarte tjenesten munin-node som root: /etc/init.d/munin-node restart Vanligvis må du da vente til neste gang munin gjør en oppdatering(hvert femte minutt), men du kan fremskynde dette ved å kjøre # sudo -u munin /usr/bin/munin-cron Husk: Plugins kjører som brukeren munin, ikke som deg, eller root Det er derfor ikke en god ide å ha refreanser til din egen hjemmekatalog osv. Da vi pluginet vanligvis ikke kjøre. Dersom du må kjøre plugin som en bestemt bruker, f.eks root, så må du editere filen /etc/munin/plugin-conf.d/munin-node og legge til følgende tekst: [mittplugin] user root Restart tjenesten munin-node som root etter at du har lagret endringene: /etc/init.d/munin-node restart En annen endring som kan være nødvendig å legge til er timeout-tiden. Default er den satt til 10 sekunder og hvis plugin et bruker lenger tid, vil resultatet forkastes. Denne tiden kan settes med parameteren timeout som følger: [mittplugin] user root timeout 90 Dermed kan plugin et bruke inntil 90 sekunder på å kjøre ferdig og likevel bli registrert. 5.5 Numerikk Tungt å bruke expr som er eneste alternativ i Bourne-shell: 31

40 a= expr $a + 1 # increment a a= expr \* 5 # 4+10*5 Enklere innenfor (( )) for da kan Java-syntaks for numerikk brukes(men bare i bash 2.x). $ (( x = 1 )) $ echo $x 1 $ (( x += 1)) $ echo $x 2 $ (( total = 4*$x + x )) # Virker med x uten $ foran! $ echo $total 10 Den numeriske testen if ((x < y)) er et Bash 2.x alternativ til if [ $x -lt $y ] 5.6 Logiske operatorer Operator betydning! logisk NOT -a logisk AND -o logisk OR 5.7 for-løkke for variable in list do kommandoer done hvor list er en liste av ord adskilt av mellomrom. F. eks. gir for var in h1 h2 h3 do echo $var done til output 32

41 h1 h2 h3 Eksempler på list: ls cat fil * dir/*.txt $filer # ( filer="fil1 fil2 fil3") Vanligvis splittes en liste med mellomrom. Variabelen IFS kan settes om man ønsker å splitte på et annent tegn. Det skjer ved at IFS-tegnet byttes ut med mellomrom når verdien av en shellvaribael benyttes. Den må fjernes med unset om man ønsker å splitte på mellomrom igjen. $ var=fil1:fil2:fil3 $ echo $var fil1:fil2:fil3 $ IFS=: $ echo $var fil1 fil2 fil3 $ for fil in $var > do > echo $fil > done fil1 fil2 fil3 I bash 2.X kan man også skrive vanlige for-løkker med en syntaks som ligner mer på Java: for (( i=1;i < 30;i++ )) do echo $i done 5.8 Script og argumenter Argumenter blir lagret i spesielle variabler. Kjøres scriptet argscript.bash med tre argumenter: $ argscript.sh fil1 fil2 fil3 vil følgende variabler bli satt: 33

42 variabel innhold verdi i eksempelet $* hele argumentstrengen fil1 fil2 fil3 $# antall argumenter 3 $1 arg nr 1 fil1 $2 arg nr 2 fil2 $3 arg nr 3 fil3 5.9 Argumenter i for-løkke og exit-verdier. $ cat forarg #!/bin/bash if [ $# -lt 1 ] then echo No arguments exit 1 fi # Avsluttet scriptet for arg in $* do echo $arg was an argument done echo total number: $# $ forarg hei du hei was an argument du was an argument total number: 2 $ echo $? 0 $ forarg No arguments $ echo $? 1 Variabelen $? inneholder exit-verdien til programmet/kommandoen som sist ble utført. 6 Forelesning 6/2-22(2 timer). Munin, for, argumenter 6.1 Sist shell-script for-løkke Munin 6.2 Dagens faktum: X windows system/x11 Man kan logge inn på hvilken som helst Unix host i verden (man har tilgang til) og få alle vinduer sendt til skjermen man sitter ved. 34

43 ssh -X s password: [os]studssh:~$ xload - xload vinduet tegnes på din skjerm. Opsjonen -X skrur på X11 forwarding. For å skrive til en skjerm, ber man X-serveren om lov. X serveren er grensesnittet mot hardware 6.3 while og må tilpasses alle skjermkort. Requests til syntaks: serveren er like. while test do kommandoer done Eksempel; alternativ måte å behandle argumenter: bedre hvis strenger med mellomrom er blant argumentene #! /bin/bash while [ $# -gt 0 ] # Så lenge det er noe i $* do echo "arg: $1" shift # skyver ut $1 og legger neste argument i $1 done Deamon-eksempel #! /bin/bash while [ "true" ] # evig løkke; en streng er alltid sann do echo "Running $0, a process with PID $$" # Kan være nyttig for å lage entydige filnavn sleep 5 # sover i 5 sekunder done 6.4 Input fra bruker #!/bin/bash echo -en "svar: \a" # -n dropper linjeskift read answer echo "Du svarte $answer" opsjonen -e muligjør bruk av kontrolltegn som \a, som gir ett pip. 35

44 6.5 Lese filer og output med while og read Veldig ofte ønsker man å gå igjennom og prosessere en fil eller tekstoutput fra en kommando linje for linje. Da kan while brukes til å lese input og read til å behandle linje for linje, read.bash: #! /bin/bash i=0 while read LINE do (( i++ )) echo "Linje nr $i: $LINE" done read leser linje for linje fra STDIN slik at $ read.bash < /etc/passwd vil lese passordfilen. read LINE returnerer 0 (alt OK) helt til EOF og da stopper while. IFS kan endre hvordan read leser inn dataene og filen kan også sendes til read inne i scriptet:: #! /bin/bash #haugerud:x:285:102:hårek Haugerud:/iu/nexus/ud/haugerud:/bin/bash IFS=: while read brnavn x ID GR NAVN HOME SHELL do echo "$brnavn: $NAVN" done < /etc/passwd read leser fra STDIN og dit kan linjene også sendes med en pipe: #! /bin/bash #haugerud pts/2 S 12:52 0:00 /bin/bash # Sender all output fra ps aux til \verb+read+: ps aux while read bruker PID x x x x x x x x prog do if [ "$bruker" = "haugerud" ] then echo "ProsessID = $PID $prog" fi done 6.6 sort I tillegg til at man kan sende output fra en Unix-kommando inn til input for en annen, kan man også legge til en rekke opsjoner. På denne måten kan man få til veldig mye med enlinjers sammensatte kommandoer. 36

45 Manualsiden til sort avslører at opsjonen -k gjør at man kan velge hvilken kolonne man vil sortere med hensyn på, mens -n gjør at man sorterer numerisk slik følgende eksempel viser. Utgangspunktet er filen biler som ser slik ut: $ cat biler student bmw haugerud berlingo kyrre elbil Denne filen kan man nå sortere som man ønsker med de rette opsjoner Sortert alfabetisk $ sort biler haugerud berlingo kyrre elbil student bmw Sortert alfabetisk etter andre kolonne $ sort -k 2 biler haugerud berlingo student bmw kyrre elbil Sortert numerisk etter tredje kolonne $ sort -n -k 3 biler kyrre elbil haugerud berlingo student bmw Default sender sort output til shellet, hvis man ønsker at reaultatet skal lagres i en fil må man be om det sort -n -k 3 biler > sortertfil 6.7 head og tail Hvis man ønsker å se kun de 6 første linjene av en utgave av passordfilen på studssh sortert etter femte kolonne kan man bruke head for å få til det: studssh:~$ sort -t: -k 5 /etc/passwd head -n 6 aasej:x:2748:10:aase Jenssen:/iu/nexus/uc/aasej:/bin/bash s137153:x:2603:100:aasmund Solberg:/iu/cube/u2/s137153:/bin/bash s103726:x:1089:100:abdi Farah Ahmad:/iu/cube/u3/s103726:/bin/false s133988:x:1695:100:abdi Hassan Abdulle:/iu/cube/u2/s133988:/bin/bash s123860:x:1090:100:abdinasir Omar Kahiye:/iu/cube/u2/s123860:/bin/bash s141546:x:3449:100:abdiqadir Said Jama:/iu/cube/u3/s141546:/bin/false 37

46 Legg merke til at -t: gjør at tegnet : betraktes som skilleledd mellom kolonnene. Evalueringen av en slik pipeline går fra venstre til høyre så hvis man istedet ønsker å se en sortert utgave av de 6 første linjene, får man det med: studssh:~$ head -n 6 /etc/passwd sort -t: -k 5 bin:x:2:2:bin:/bin:/bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/sh games:x:5:60:games:/usr/games:/bin/sh root:x:0:0:root:/root:/bin/bash sync:x:4:65534:sync:/bin:/bin/sync sys:x:3:3:sys:/dev:/bin/sh Kommandoen tail gir i motsetning til head de siste linjene. En spesielt nyttig bruk av tail er for å se på slutten av log-filer. Hvis man i tillegg tilføyer opsjonen -f vil man kontinuerlig følge med på om det kommer nye linjer til logfilen, for eksempel slik: sudo tail -f /var/log/auth.log 6.8 Oversikt over shell-typer Det finnes mange forskjellige typer shell og det shellet som nå brukes her ved skolen er bash (vi skiftet fra tcsh i 20). Det er en forbedring og utvidelse av det originale Unix-shellet Bourne Shell (sh) Bourne-shell type C-shell type sh Bourne-shell, Det opprinnelige Unix-shell csh C-shell, C-syntaks bash Bourne-again-shell, forbedret sh tcsh forbedret csh, bedre interaktivt ksh Korn-shell, utvidet sh, mye fra csh De fleste Linux/Unix system-script er skrevet i Bourne-shell, /bin/sh Bourne-again-shell (bash), er default Linux-shell bash kan kjøre alle Bourne-shell script bash er Free Software Foundation s (FSF) Unix-shell Under Linux: ls -l /bin/sh lrwxrwxrwx 1 root root :34 /bin/sh -> dash Debian Almquist shell (dash) er et mindre og hurtigere shell enn bash. Det ligger nærmere det originale Bourne-shell og har for Ubuntu blitt brukt som Bourne-substitutt siden Oppstartsfiler Hver gang et nytt terminalvindu (f. eks. xterm) startes, startes bash og du får et prompt som du kan taste inn kommandoer ved. Hver gang bash startes leses en konfigurasjonsfil som ligger øverst i brukerens hjemmemappe og heter.bashrc. Alle kommandoer som står der blir utført. Hver gang du logger inn, utføres kommandoene i /etc/profile og ~/.bash_profile. Et nytt shell startes hver gang 38

47 man logger inn på en maskin (ssh, telnet) et nytt terminalvindu åpnes (xterm) et nytt shell startes eksplisitt($ bash) Shellet utfører først kommandoer i noen oppstartsfiler: /etc/profile ved hver innlogging, systemfil ~/.bash_profile ved hver innlogging ~/.bashrc for hvert nytt shell, men ikke ved innlogging Ved innlogging fra grafisk terminal (X, kdm) Kun ~/.xsession leses ikke.bash_profile og.bashrc I disse filene kan f. eks. definisjoner av shell-variabler og alias er legges.// Eksempel på innhold: PS1="\h:\w$ " alias move=mv alias cp="cp -i" Legges dette i ~/.bashrc vil move alltid bety mv og promptet blir: $ bash cube:~/www/os$ exit exit $ source ~/.bashrc cube:~/www/os$ source starter ikke et nytt shell, men utfører alt i det eksisterende shellet. Spørsmål Hvordan fjerne et alias? Svar: med unalias: unalias move 6.10 Kommandoer brukt under forelesningen Kommandoer pr-plugin #!/bin/bash if [ "$1" = "config" ]; then 5 haugerud/os/forelesning/forelesningskommandoer/mon html 39

48 echo graph_title Antall Prosesser på os2.vlab echo graph_vlabel Antall Prosesser echo graph_info Viser totalt antall prosesser på os2.vlab echo graph_category OS echo "graph_printf %3.0lf"; echo os2pr.label Antall prosesser echo os2pr.type GAUGE exit 0 fi res= ps aux sort uniq grep -v ps aux grep -v uniq wc -l echo "os2pr.value $res" exit svar.sh #!/bin/bash echo -en "svar: \a" read answer echo "Du svarte $answer" exit test.sh #!/bin/bash while [ $# -gt 0 ] do echo "arg: $1" shift done 7 Forelesning 13/2-22(2 timer). cut, while og read 7.1 Sist shell-script for-løkke Munin 7.2 Dagens faktum: bash completion Om man kjører /etc/bash_completion vil man kunne fullføre en rekke kommandoer som for eksempel apt-get ved å taste TAB. I en default ubuntu-installasjon er ikke disse med: $ cat /etc/bash.bashrc 40

49 # enable bash completion in interactive shells #if [ -f /etc/bash_completion ] &&! shopt -oq posix; then #. /etc/bash_completion #fi 7.3 cut Cut brukes til å klippe ut deler av linjer. Cut leser fra standard input. En vanlig anvendelse er å klippe ut enkelte kolonner fra en tabell. $cat /etc/passwd cut -d: -f2 tail -n 4 group16 mroot noob munin Her pipes innholdet i /etc/passwd til cut, som bruker : som kolonneskille (gitt ved -d:) og som klipper ut kolonne 2 (gitt ved -f2). Dette pipes videre til head, som viser de fire nederst linjene. $cat /etc/passwd cut -c -3 tail -n 4 gro mro noo mun Med switchen -c angir vi at vi ønsker å klippe ut characters. Med -n, der n er et tall, klipper vi ut bare de n første tallene. n- tar tegnene fra tegn n og ut linja, n-m tar alle tegnene mellom tegn n og m. 7.4 scp og wget scp (secure copy) kopierer filer mellom maskiner og sender alt kryptert: [os]cube:~$ scp s password: tcpip.pdf 100% ******************************************************************* 158 KB 00: [os]cube:~$ kan erstatte ftp i mange tilfeller. wget henter web (og ftp) sider fra kommandolinjen. wget På denne måten kan store nedlastninger kjøres i bakgrunnen. Opsjonen -O - sender output til STDOUT, slik at det kan brukes i en pipe. wget -r -o log.txt 41

50 Opsjonen -r henter hele web-stedet rekursivt (default dybde er 5). Med opsjonen --mirror og kjørt regelmessig, kan man opprettholde en mirror-site. 7.5 funksjoner En funksjon (function) brukes nesten på samme måte som et selvstendig script. Må inkluderes først i scriptet. #!/bin/bash users() { #deklarasjon av funksjon date #skriver ut dagens dato finger # Må ha linjeskift før users # kall paa en funksjon; ETTER deklarasjon 7.6 funksjoner (referansestoff) Parametre overføres som til bash-script. Og som for script kan kun exit-verdier (tall) returneres, men med return og ikke exit. #!/bin/bash finduser() #deklarasjon av funksjon { echo "funk-arg: $*" local bruker # Lokal variabel bruker=$1 # 1. argument, dette er en lokal $1, uavhengig av den $1 # som er 1. argument til hovedscriptet funn= grep $bruker /etc/passwd if [ "$funn" ] then return 0 # Alt ok fi return 1 # Hovedprog fu, syntaks: $ fu bruker1 bruker 2... echo "Script-arg: $*" for user in $* do echo -e "\nleter etter $user" # -e tillater \n finduser $user # $user blir $1 i prosedyren if [ $? = 0 ] # Returnverdi fra finduser i $? then echo "$user finnes" echo $funn # $funn er global else echo "$user finnes ikke" fi 42

51 done echo -e "\nscript-arg: $*" #BUG: $ fu au -> slår til på linjen haugerud i /etc/passwd # Må bruke while read -konstruksjonen nedenfor for å trekke ut brukernavn fra linjene Funksjoner kan også defineres direkte i et terminalvindu, men forsvinner når shellet avsluttes. Man kan lagre egne funskjoner i en fil, f. eks. funk.bash og inkludere funskjonene i flere script ved å starte scriptene med som følger: #! /bin/bash. funk.bash # Alternativt source funk.bash I begge tilfeller tilsvarer # det å taste inn all koden i filen funk.bash inn i # begynnelsen av dette scriptet 7.7 case (referansestoff) #!/bin/bash echo -n "Answer y or n: " valid=false while [ $valid = false ] do read answer case $answer in esac done y* Y*) echo Yes! valid=true;; # syntaks krever to ; n* N* ) echo No! valid=true;; *) echo -n "Answer y or n: " 7.8 Arrays (bash 2.x, referansestoff) Ord innenfor en parentes adskilt av mellomrom definerer et array: $ colors=(red green blue) $ colors[3]="yellow" $ echo ${colors[0] red $ echo ${colors[*] red green blue yellow $ echo ${#colors[*] gzip,bzip2, tar og zip gzip komprimerer en fil mens gunzip dekomprimerer den. 43

52 $ ll -rw-r--r-- 1 haugerud drift Oct 5 20:11 passwd $ gzip passwd $ ll -rw-r--r-- 1 haugerud drift Oct 5 20:11 passwd.gz $ gunzip passwd.gz $ ll -rw-r--r-- 1 haugerud drift Oct 5 20:11 passwd De nyere bzip2 og bunzip2 gjør det samme, er ikke like raskt, men komprimerer bedre. $ bzip2 passwd $ ll -rw-r--r-- 1 haugerud drift Oct 5 20:11 passwd.bz2 $ bunzip2 passwd.bz2 Kommandoen tar pakker en hel mappestruktur til en enkelt fil. $ tar cf dir.tar dir # Pakker alt ned i dir.tar, c = create $ tar xf dir.tar # Pakker alt opp, lager dir, x = extract Man kan kjøre gzip på en tar fil, men det er enklere å gjøre alt på en gang: $ tar cfz dir.tgz dir # Pakker alt ned i dir.tar, c = create, z = gzip $ tar xfz dir.tgz # Pakker alt opp, lager dir, x = extract, z = gzip $ tar cfz ob1.tgz snort.bash info.bash # Pakker de to filene i ob1.tgz $ tar cfj dir.tbz dir # j = bzip2 Man kan gjøre det samme med kommandoen zip som kan kjøre på mange plattformer og er kompatibel med windows sin PKZIP. $ zip -r dir.zip dir # -r = rekursivt i mappen dir $ unzip dir.zip tar cfz komprimerer noe mer: -rw haugerud drift Sep 27 00:58 forelesning.tgz -rw haugerud drift Sep 27 :00 forelesning.zip 7.10 Break og Continue Break og Continue kan brukes mellom do og done til å avbryte for og while løkker: continue Fortsett med neste runde i for/while løkke. break Avslutt for/while løkke; hopp til etter done break n Hopp ut n nivåer 44

53 7.11 Signaler og trap En prosess kan stoppes av andre prosesser og av kjernen. Det gjøres ved å sende et signal. Alle signaler bortsett fra SIGKILL (kill -9) kan stoppes og behandles av bash-script med kommandoen trap. Følgende script kan bare stoppes ved å sende (kill -9) fra et annent shell. #! /bin/bash # definisjoner fra fra /usr/src/linux /include/asm-i386/signal.h: #define SIGHUP 1 /* Hangup (POSIX). */ #define SIGINT 2 /* Interrupt (ANSI). */ #define SIGKILL 9 /* Kill, unblockable (POSIX). */ #define SIGTERM 15 /* Termination (ANSI). */ #define SIGTSTP 20 /* Keyboard stop (POSIX). */ trap echo -e "\rsorry; ignores kill -1 (HUP)\r" 1 trap echo -e "\rsorry; ignores kill -15 (TERM)\r" 15 trap echo -e "\rsorry; ignores CTRL-C\r" 2 trap echo -e "\rsorry; ignores CTRL-Z\r" 20 trap echo -e "\rsorry; ignores kill \r" trap echo -e "\rcannot stop kill -9\r" 9 while [ true ] do echo -en "\a quit? Answer y or n: " read answer if [ "$answer" = "y" ] then break fi done 7.12 awk (ward) Syntaks: awk awk program fil $ ps u haugerud pts/1 S 09:07 0:00 -bash $ ps aux awk /haugerud/ {print $ $ ps aux awk /haugerud/ {print $2,$ bash 4403 ps 4404 awk $ ps aux awk {if ($1 == user) {print $2 user= whoami $ awk -F: { if ($1 == "haugerud") {print $NF /etc/passwd /bin/bash 45

54 7.13 source $ emacs change #! /bin/bash cd /usr/bin pwd $ pwd / $ change /usr/bin $ pwd / Når scriptet change kjøres, starter en ny prosess; et nytt shell som utfører cd /usr/bin og avsluttes. All shell-info blir da borte (variabler og posisjon i filtreet). bash shell $ change $ $ pwd / nytt bash shell $ cd /usr/bin $ pwd /usr/bin $ exit Figure 12: Når et script kjøres startes ett helt nytt shell. Alt som har skjedd i dette shellet blir borte når scriptet avsluttes (exit utføres selvom det ikke står eksplisitt på slutten av scriptet). Kommandoen source utfører linje for linje i argumentfilen uten å starte noe annent shell. $ pwd / $ source change /usr/bin $ pwd /usr/bin I Bourne-shell er. og source ekvivalent: $. change # samme som $ source change 46

55 7.14 Fjerne feilmeldinger $ rm *.* 2> /dev/null # fjerner feilmeldinger, stderr = kanal 2 $ rm *.* >& /dev/null # all output, stdout og stderr /dev/null er et sort hull; alle feilemeldinger forsvinner. Hvis man prøver å greppe feilmeldinger, går det ikke fordi pipe bare sender STDOUT videre. $ find / -name hei grep pulse find: /lib/modules/ : Ikke tilgang find: /tmp/.esd-108 : Ikke tilgang find: /tmp/pulse-pkdhtxmmr18n : Ikke tilgang find: /tmp/atop.d : Ikke tilgang find: /tmp/orbit-gdm : Ikke tilgang $ find / -name hei & grep pulse find: /tmp/pulse-pkdhtxmmr18n : Ikke tilgang Men konstruksjonen & gjør at også STDERR sendes gjennom pipe Cron 7.16 ssh-copy-id 7.17 Shell-programmering, oppsummering + Fint til enkle oppgaver der Unix-kommandoer gjør jobben + Slipper å kompilere + Pipes, omdirigering: Kraftige verktøy + bra til enkle systemscript - dårlig programstruktur (variabel-typer, parameter-overføring, klasser, etc.) - dårlige feilmeldinger/debugging vanskelig - kryptisk syntaks - Veldig langsom sammenlignet med kompilert kode 7.18 Hastighet til programmer skrevet i sh, bash, php, perl, Java og C Sammenligning av sh, bash, php, perl, Java og C-program som utfører følgende kode: for(j=0;j < TIMES;j++) { sum = 0; for(i=0;i < 20000;i++) { tall = (i + 1)*(i + 1) - i*i; sum = sum + tall; 47

56 Resultater på cube (Linux) og nexus (Solaris): Språk CPU-tid i sekunder på cube CPU-tid i sekunder på nexus TIMES sh bash php perl Java C/C ? Disse testene er gjort for noen år siden. Er forskjellen den samme idag? Å finne ut av det ble overlatt til øvingsoppgavene. Men det er viktig å teste på nøyaktig det man er ute etter. Følgende kode leser en fil og skriver den til en annen fil med linjenummer: #! /bin/bash echo "" > /tmp/ny.fil nr=0 while read line do (( nr++ )) echo "$nr: $line" >> /tmp/ny.fil done < /tmp/stor echo "Read $nr lines" Testes dette på å lese en 13 Mbyte tekstfil på studssh gir det: Språk CPU-tid i sekunder på cube bash Java php perl C++ 8 Forelesning 27/2-22(2 timer). Introduksjon til Perl 8.1 Hvem, Hva, Hvorfor HVEM Larry Wall utviklet Perl versjon først i 1987(noen år før Linux) Dagens versjon (helt nyskrevet Perl tolker enn v1.000) 48

57 HVA Perl står for Practical Extraction and Reporting Language Perl er et tolket programmeringsspråk(script språk) Har stort antall biblioteker og moduler(kode skrevet på forhånd som kan brukes av brukeren) Har ett eget pakkesystem CPAN - Comprehensive Perl Archive Network brukt for nedlasting av moduler Sannsynligvis Den mest diskuterte/brukte script språk på web(med PHP) og brukt av system administratorer HVORFOR Larry Wall var misfornøyd med c, sed, awk og shell script og deres muligheter Perl er ofte kalt Swiss army knife eller LIMET som binder ting sammen Kan utføre shell-kode, men mye bedre og mer moderne språk enn bash Mindre ressurskrevende enn shell script(bash) Finnes for de fleste plattformer, Win, Unix, Mac etc Meget velegnet til bl.a tekstprossesering dermed enkelt å konfigurere Unix-systemer(Konfigurasjonsfiler er ASCII tekstfiler) Meget effiktiv og enkel filhåndtering Make the easy job easy, without making the hard jobs impossible IKKE MINST GPL (GNU public license) åpen kildekode Perl versjon tidslinje 1.0 (1987) 5.0 (1994) 5.6 (2000) 5.8 (2002) 6.0 (20??) Skrevet om helt fra scratch Perl litteratur og ressurser Kamel-boken utgitt av O REILLY = Perl bible Ressurser og diskusjonsforum på nett The taming of the camel, en presentasjon av Larry Wall om Perls utvikling 8.2 Perl vs shell script? LIKHETER Skrives som tekstfiler som kan kjøres fra kommandolinje og tolkes av en såkalt interpreter Kan kjøre rene linux kommandoer fra scriptene Komplext å skrive Object Oriented kode 49

58 ULIKHETER Perl, mer elegant enn shell script Som regel, shell script for enkle oppgaver hvor Perl brukes til mer intrikate script Shell script(rene linux kommandoer), Perl mye mer(feks floating point Aritmetikk) Ingen bibliotek for shell script mens Perl har CPAN HVILKET SKAL MAN BRUKE? Nettopp, det er det store spøsrmålet? Avhenger litt av hva oppgaven går ut på? Som regel, shell script for enkle oppgaver hvor Perl brukes til mer komplekse oppgaver 8.3 Å kjøre et Perl-program $ jed prog.pl #! /usr/bin/perl # Kommentarer som i bash $var = "Hello world!"; # Variabler som i PowerShell og PHP print "$var \n"; 8.4 Hva skjer når man kjører et Perl-program Kjøres med $./prog.pl Perl er et interpretert språk, som Java /usr/bin/perl kompilerer koden, sjekker syntaks, optimerer, lager byte-kode /usr/bin/perl inneholder en Perl Virtual Machine (stack-maskin som JVM) som så utfører bytekoden 8.5 Variabler variabler må ikke deklareres (men man kan tvinge seg selv med use strict, deklarerer da med my $var ) variabler er tomme strenger ( ) når de opprettes Bruker alltid $ når vi refererer til, eller setter verdien til, en skalar variabel. Perl tolker hva en variabel er utifra kontekst Opsjonen -w gir flere warnings; bruk den! 50

59 Perl-kode Output til skjerm #! /usr/bin/perl -w Name main::var3 used only once: possible typo at./variable.pl line 11. $hei = "Hei"; # streng $var = "$hei du!"; # "" --> $var tolkes $var2 = $hei du! ; # --> som bash $x1 = 125; # Integer $x2 = 12.15; # float print "$var\n"; Hei du! print "$var2\n"; $hei du! Use of uninitialized value in concatenation (.) at./variable.pl line 11. print "$var3 $x1 $x2\n"; Array Perl-kode Output til = ("null","en","to"); print \n"); null en to print "$tall[0] $tall[2]\n"; null to print "$#tall \n"; 2 $tall[4] = fire; print \n"); null en to fire print "$#tall \n"; 4 $#tall = index til siste element i tall-arrayet $ Når man refererer til ett Når man refererer til hele arrayet 8.7 Viktig funksjon: split Funksjonen split() sitt 1. argument, avgjør hvilke(t) skilletegn strengen blir splittet opp etter. Perl-kode $line = "null en = $line; print "$tall[1] \n"; print "$tall[0] = split(" ",$line); print "$tall[1] \n"; print "$tall[0] \n"; ($null,$en,$to) print "$en \n"; Output til skjerm null en to en null en 51

60 8.8 for En for-løkke har C-syntaks: for($i = 0;$i < 5;$i++) { print "$i\n"; 8.9 If-test $a = 1; if($a < 0) { print "negativt\n"; elsif($a > 0) { print "positivt\n"; else { print "null\n"; 8.10 Sammenligning tall tekst == eq!= ne < lt > gt <= le >= ge 8.11 foreach foreach VAR (LIST) {... 52

61 Perl-kode Output til skjerm #! /usr/bin/perl $line = "en to tre"; foreach $num ($line) { print "$num \n"; en to = split(" ",$line); foreach $num { print "$num \n"; en to & tre 8.12 Lese fra fil Det er veldig enkelt å lese en tekstfil linje for linje. Man må først opprette en filpeker som peker på filen man ønsker å lese fra. Denne kan man kalle hva man vil, i eksempelet under er den kalt FIL. Deretter kan man lese linje for linje med den spesielle lese-operatoren <>. Man leser da en linje med <FILPEKER>. open (FIL,"/etc/motd"); $line = <FIL>; # <FIL> returnerer en linje fra filen while ($line = <FIL>) # <FIL> returnerer false ved fil-slutt { print "LINJE: $line"; # Skriver linje for linje. close(fil); 8.13 Skrive til fil Man bruker det samme prinsippet når man skriver til en fil. Åpne en filpeker til filen man ønsker å skrive til. open (NEW,">fil.txt"); print NEW "1. linje.\n"; close(new); # Skriver over om filen eksisterer open (ADD,">>fil.txt") ; # Adderer print ADD "2. linje.\n"; close(add); Dette gir filen fil.txt: 1. linje 2. linje 53

62 8.14 input fra tastatur En kanal inn: STDIN, to ut STDERR og STDOUT. Perl-kode Output til skjerm print "\nskriv et tall: "; Skriv et tall: 8 $nummmer = <STDIN>; # Filehandle til tastatur print STDOUT "$nummer er tallets verdi\n"; 8 er tallets verdi chomp($nummmer); # fjerner linjeskift print "$nummer er tallets verdi\n"; 8 er tallets verdi print STDOUT "Hei!\n" # Filehandle til skjerm (default) Hei! print STDERR "Feil!\n";# KAn omdirigeres med 2> fra Unix Feil! chomp() kutter av siste tegn i strengen hvis det er et kontrolltegn (her linjeskift). STDOUT er default og her overflødig Eksempel Perl-script #! /usr/bin/perl # kommentar print "Hallo world!\n"; $dir = "."; $res1 = ls $dir ; $res2 = ls $dir ; print "res: $dir\n"; print "res: $res1\n"; print "res: = ("null","en","to"); print "$tall[1]\n$tall[2]\n"; $tall[6] = "seks"; $nr print "$nr\n"; print print "$#tall\n"; for($i= 0;$i <= $#tall;$i++){ print "$i: $tall[$i]\n"; foreach $element print "Element: $element\n"; # split: viktig funksjon for å dele opp en # tekststreng og legge den i et array $line = "dette er tekst i = split(" ",$line); 54

63 print "$array[1]\n"; print "Skriv tall: "; $input = <STDIN>; print STDOUT "Fikk $input\n"; print STDERR "Stygg feil\n"; open(newfile,">nyfil.txt"); print NEWFILE "Linje nr 1\n"; open(filpeker,"/etc/passwd"); while($line = = split(":",$line); if($arr[0] eq "root"){ print "Admin konto: $arr[0]\n"; print NEWFILE $line; close(filpeker); close(newfile); 9 Forelesning 5/3-22(2 timer). Perl: Hash, filtester, argumenter 9.1 Sist array Foreach split Lese til og fra fil open open(fil, fil.txt ); # Leser fra fil open (NEW,, fil.txt ); # Skriver til fil 9.2 Logiske operatorer if($a < 0 or $a > 10) {... Operator Alternativ or && and! not 55

64 9.3 Sannhet Sannhet testes på strenger(tilsvarende gjelder i PowerShell): if ($true) { #DO IT! 1. Alle strenger er TRUE untatt og 0 2. Alle tall er TRUE untatt 0 3. Alle udefinert variabler er og dermed FALSE En test som -f $fil returnerer en tom streng hvis $fil ikke er en fil. 9.4 Hash En hash er et array som har en nøkkel og en verdi(key value). Meget nyttig i mange sammenhenger, f. eks. med brukernavn som nøkkel. Perl-kode #! /usr/bin/perl -w $kone{"per" = "Kari"; $kone{"lars" = "Line"; $kone{ Ole = "Liv"; print "$kone{ Per \n"; print = keys %kone; print = sort keys %kone; print = values %kone; print = sort values %kone; print \n"; Output til skjerm Kari Liv Ole Lars Per Lars Ole Per Liv Line Kari Kari Line Liv %kone = ("Per" => "Kari", "Lars" => "Line", "Ole" => "Liv"); Vanlig metode: anta at %fulltnavn er en hash med brukernavn som index (keys) og fullt navn som verdi. $fulltnavn{haugerud = "Hårek Haugerud"; // etc. foreach $bruker (sort keys %fulltnavn) { print "$bruker $fulltnavn{$bruker\n"; gir da en liste sortert på brukernavn. 56

65 9.5 Bruk av hash som datastruktur #! /usr/bin/perl open(filpeker,"/etc/passwd"); while($line = <FILPEKER>) = split(":",$line); $bruker = $arr[0]; $navn = $arr[4]; $fulltnavn{$bruker = $navn; close(filpeker); foreach $user (sort keys %fulltnavn) { print "$user FN: $fulltnavn{$user\n"; 9.6 Variabler: oppsummering Skalare variabler navn $var $nr $pi verdi Hei indeks navn $kone[0] $kone[1] $kone[2] verdi Kari Liv Line hash %kone indeks Per Ole Lars navn $kone{per $kone{ole $kone{lars verdi Kari Liv Line 57

66 9.7 Operatorer Perl-kode Output til skjerm #! /usr/bin/perl $a = 123; $b = 456; print "$a + $b \n"; print $a + $b; print "\n"; 579 print $a. $b; print "\n"; $fill = "#"; $fill x= 25; print "$fill\n"; ######################### $verdi = "2"; # verdi <- 2 hvis tom 9.8 Filtester if(-d "/bin") #mappe {print "Det var bra...\n"; -r Lesbar -w Skrivbar -f fil -T "$ENV{HOME/.bashrc" and print "Har.bashrc. \n"; #tekstfil -e "/etc/passwd" or warn "Ingen passordfil!\n";#eksisterer; warn = print STDERR -M "/etc/passwd" #dager siden endring relativt til script-start -A "/etc/passwd" #dager siden aksessering -s "/etc/passwd" #størrelse i bytes 9.9 Argumenter Veldig likt bash. mottas i første argument: $ARGV[0] indeks til siste argument: $#ARGV Siste element $ARGV[$#ARGV] Antall argumenter $#ARGV Eksempel: 58

67 Perl-kode Output til skjerm $ arg.pl hei og hopp $ arg.pl #! /usr/bin/perl print Arg: hei og hopp Arg: print "1. arg: $ARGV[0]\n"; 1. arg: hei 1. arg: print "2. arg: $ARGV[1]\n"; 2. arg: og 2. arg: print "Siste arg: $ARGV[$#ARGV]\n"; Siste arg: hopp Siste arg: print "Siste indeks: $#ARGV\n"; Siste indeks: 2 Siste indeks: Kommunisere med Unix-prosesser Motta output fra en Unix-kommando: open (PS,"ps aux "); # output fra ps sendes til PS while ($line = <PS>) # <PS> gir linje for linje med ps-output = split(" ",$line); if($words[0] eq "haugerud") { print "hh: PID: $#words]\n"; close(ps); Perl definerer en hash som inneholder alle environment-variable: %ENV. I stedet for haugerud kunne man brukt $ENV{USER for å referere til brukeren som kjører scriptet Perl-script fra forelesningen hash.pl #! /usr/bin/perl $kone[0] = "Kari"; $mann[0] = "Lars"; $kone[1] = "Klara"; $mann[1] = "per"; for($i=0;$i<2;$i++){ print "Kona til $mann[$i] heter $kone[$i]\n"; $kone{lars = "Kari"; $kone{per = "Klara"; $kone{arne = "Beate"; foreach $mann (sort keys %kone){ print "Kona til $mann heter $kone{$mann\n"; 59

68 pwh.pl #! /usr/bin/perl #root:x:0:0:root:/root:/bin/bash #daemon:x:1:1:daemon:/usr/sbin:/bin/sh open(pw,"/etc/passwd"); while($line = <PW>){ = split(":",$line); $user = $arr[0]; $navn = $arr[4]; $shell = $arr[6]; $navnhash{$user = "$navn bruker shell $shell"; foreach $user (sort keys %navnhash){ print "$user: $navnhash{$user"; adduser.pl #! /usr/bin/perl -w $user = $ARGV[0]; $user or die "Oppgi brukernavn\n"; #hh:x:1002:1002:,,,:/home/hh:/bin/bash $fil = "/etc/passwd"; open(pw,"$fil") or die "Kan ikke lese $fil"; while($line = <PW>){ $sistelinje =$line; # print "$sistelinje"; # Alternativ måte å finne siste linje: #$line = tail -n 1 /etc/passwd = split(":",$sistelinje); $uid = $arr[2]; $uid++; $gid = $arr[3]; $gid++; close(pw); if(-w $fil){ open(pw,">>$fil"); print PW "$user:x:${uid:${gid::/home/$user:/bin/bash\n"; close(pw); # ${gid:: for at ikke :: skal tolkes som del av variabelnavn else{ print "Kan ikke skrive til $fil\n"; 60

69 10 Forelesning 12/3-22(2 timer). Perl og Unix 10.1 Sist hash %kone indeks Per Ole Lars navn $kone{per $kone{ole $kone{lars verdi Kari Liv Line foreach Filtester sannhet operatorer Argumenter 10.2 Dagens faktum: TIMTOWTDI -There Is More Than One Way To Do It Mange måter å løse et problem med Perl $ er deafult skalar, brukes av print, split, etc Dette gir kompakt, men ofte kryptisk kode Eksempelet fra forrige uke #! /usr/bin/perl open (PASSWD,"/etc/passwd"); while ($line = <PASSWD>) = split(":",$line); $bruker = $array[0]; $Navn = $array[4]; $Navneliste{$bruker = $Navn; close(passwd); foreach $bruker (sort keys %Navneliste) { print "$bruker $Navneliste{$bruker\n"; # Skriver alfabetisk sortert liste over alle brukere kan løses på en annen måte med mye mindre kode #! /usr/bin/perl open(passwd,"/etc/passwd"); 61

70 @arr = <PASSWD>; foreach $line = split(":",$line); print "$_[0] $_[4]\n"; og ved å bruke den defaulte og $_ kan det samme gjøres med enda mindre kode #! /usr/bin/perl open(passwd,"/etc/passwd"); foreach (sort <PASSWD>) { split(":"); print "$_[0] $_[4]\n"; Dette git kompakt, men ikke særlig lesbar kode. Ikke programmer slik i 1. omgang og helst ikke til eksamen Sende input til en Unix-kommando #! /usr/bin/perl -w open(mail," /usr/sbin/sendmail or die "Can t send mail\n"; print MAIL "Subject: Melding fra mail.pl\n"; print MAIL "Reply-To: print MAIL "From: print MAIL "Hei du din dust!\n"; print MAIL "Hade!\n"; close(mail); Det er lett å fake avsender og reply-to, men det kommer likevel frem hvem som har sendt den hvis man ser nøyere etter i mail-headeren. Gjør uansett ikke dette, men ikke stol 100% på at mailavsender er den han utgir seg for Vekselvirkning med Unix #! /usr/bin/perl $var = echo "hei" ; # Unix-kommandoen echo hei blir gjort, legges i $var $exitval = system(echo,"hei sys"); # samme, men output til STDOUT. returnerer exit-verdien print "var: $var exit:$exitval\n"; $host = hostname ; 62

71 print "HOST:"; print "$host"; # hash %ENV $ENV{"PRINTER" = "virtual-light"; # # tilsvarer i bash: $ export PRINTER="virtual-light" print "PRINTER er satt til $ENV{PRINTER\n"; foreach $dir (split(":",$env{path)) { print "$dir \n"; Et Perl-program er ikke så nær Unix-shellet som en er vant til fra bash-script. Derfor må man i noen tilfeller bruke egne Perl-kommandoer, for eksempel når man flytter seg i filsystemet, for at Perl skal få det med seg. #! /bin/perl cd /etc ; # Utføres i et shell. Merkes ikke av perl $pwd = pwd ; print "Er i $pwd \n"; chdir "/etc"; # Intern Perl-cd kommando $pwd = pwd ; print "Er i $pwd \n"; 10.5 Unix fork() I Unix lages en ny prosess (en child-prosess) alltid med systemkallet fork(). fork() lager en kloning, identisk prosess med kopi av program, data og PCB (bortsett fra PID, PPID og noen andre). PCB Parent program parent Minne data parent PCB child program child data child fork(): OS lager kopi Struktur: #! /usr/bin/perl 63

72 $pid = fork(); # fork() starter en ny prosess, en eksakt kopi og # begge(!) kjører resten av koden! # eneste forskjell er : # fork() returnerer 0 til den nye klonede child-prosessen # fork() returnerer child-prosessens PID til parent-prosessen print "hei\n"; # Utføres av begge if($pid == 0){ # Utføres dermed kun av child-prosessen else{ # Utføres kun av parent-prosessen Eksempel: #! /usr/bin/perl print "\n"; print "Fork demo! \ni am the parent (pid = $$) \n"; sleep(2); $pid = fork(); # Prosessen lager nå en ny uavhengig prosess # I den nye barne-prosessen er $pid = 0 # I foreldre prosessen er $pid = barnets PID if ($pid == 0){ $ppid = getppid(); print " I am the child (cid = $$) of parent with pid = $ppid.\n"; print " Here variable \$pid is $pid.\n"; for ($i = 1;$i < 10;$i++){ print " $i \n"; sleep(3); print " This is the child process exiting.\n"; exit(0); else{ sleep(2); print "Parent $$ waiting for child $pid here...\n"; wait; print "Child finished, Parent quitting too!\n"; 11 Forelesning 19/3-22(2 timer). Perl: subrutiner, regulære uttrykk 11.1 Spesielle variabler $$ $0 osv 64

73 Perl-kode Output til skjerm use English; #Ellers skrives ikke det i parentes ut print "Running $0 ($PROGRAM_NAME)\n"; Running misc.pl (misc.pl) print "Process ID: $$ ($PID)\n"; Process ID: 563 (563) print "OS: $^O ($OSNAME)\n"; OS: linux (linux) my $OS = uname ; print "OS: $OS\n"; OS: Linux print "Perl version: $] \n"; Perl version: print "User: $ENV{USER\n"; User: hh 11.2 Funksjoner og kontekst Hva en Perl-funksjoner returnerer er avhengig av om den blir kalt i en skalar eller liste-kontekst. Et array er en typisk liste. Perl-kode Output til skjerm #! /usr/bin/perl use strict; my $tid = localtime(); = localtime(); print "$tid\n"; Fri Nov 15 00:28: print my $skalar print "$skalar\n"; 9 my ($day,$month) = $tid =~ /(\w+) (\w+)/; print "$day $month\n"; Fri Nov Når operatorer ikke er gruppert med parenteser, velger Perl (og alle andre språk) rekkefølgen operatorene skal utføres etter visse regler. F. eks. gir $tall = * 2; # tall = 10 fordi gangeoperatoren binder sterkere enn pluss. Ønsker man svaret 14, må det programmeres slik: $tall = (4 + 3) * 2; # tall = 14 Operatoren or er den som binder svakest av alle i Perl og dette er eneste grunn til at den er forskjellig fra som binder sterkere (f. eks. enn =). Fulstendig liste over operator presedens i Perl: Høyest til Lavest left terms and list operators (leftward) left -> nonassoc right ** right! ~ \ and unary + and - left =~!~ left * / % x left + -. left << >> nonassoc named unary operators nonassoc < > <= >= lt gt le ge nonassoc ==!= <=> eq ne cmp left & 65

74 left ^ left && left nonassoc..... right?: right = += -= *= etc. left, => nonassoc list operators (rightward) right not left and left or xor 11.3 Subrutiner Subrutiner har i utgangspunktet ikke lokale variabler. Gitt følgende program scope.pl: #! /usr/bin/perl $global = "global"; Hallo(); print "Fra hoved: $global $lokal\n"; sub Hallo() { $lokal = "lokal"; $global = "GLOBAL"; print "Hallo fra sub: $global $lokal\n"; Her vil både $global og $lokal være globale og kunne brukes fra overalt: $./scope.pl Hallo fra sub: GLOBAL lokal Fra hoved: GLOBAL lokal Derfor bør man bruke use strict som tvinger en til å deklarere variabler med my og da blir variablene i subrutinene lokale, slik de bør være Subrutiner, parameteroverføring Følgende kode viser hvordan man overfører skalare parametre; det er kun verdien som overføres. #! /usr/bin/perl use strict; # Tvinger deg til å deklarere med my my $bruker = "mark"; my $pas = lagpas($bruker,"xx"); print "Passord for $bruker: $pas\n"; sub lagpas() 66

75 { my $navn = $_[0]; # 1. parameter. my => lokal variabel my $salt = $_[1]; # 2. parameter, settes til "xx" i eksempelet over # Alternativ: my ($navn,$salt) my ($krypt,$i,$pass); $krypt = crypt($navn,$salt); # Standard krypteringsalgoritme = split("",$krypt); # Splitter på ingenting -> tegn for tegn for($i=1;$i<5;$i++) { $pass.= $array[$i]; return($pass); Parameter overføring av arrays(referansestoff) Et array overføres default by value, men om man setter en backslash foran navnet på en array kan man sende med pekeren til arrayet og endringene i subrutinen skjer da direkte på arrayet. Men når man får tilsendt en peker til et array i subrutinen, må elementene omtales som $array->[], slik neste eksempel viser. #! /usr/bin/perl use strict; # Tvinger deg til å deklarere med my = ("null","en","to"); my $nr = 2; sub printut() { my my $i; for($i = 0;$i <= $n;$i++) { print "$i = $array[$i]\n"; sub konverter() { my ($n,$arrayref) my $i; for($i = 0;$i <= $n;$i++) { $arrayref->[$i] = "$arrayref->[$i]-$i"; 67

76 Kjøring av dette gir: $ arrayparameter.pl 0 = null 1 = en 2 = to 0 = null-0 1 = en-1 2 = to-2 12 Forelesning 25/3-22(2 timer). Perl: moduler, regulære uttrykk 12.1 Moduler(referansestoff) I perl er det 2 måter en modul kan defineres og brukes. 1. Objekt-Orientert 2. Tradisjonelt Her tar vi for oss den tradisjonelle måten. Ved hjelp av nøkkelordet use kan man laste inn moduler og bruke dens funksjoner og variabler. use Socket # Laster inn Socket-funksjonene use strict # Tvinger deg til å deklarere variabler med my Man kan definere sine egne moduler ved å legge subrutiner i en fil som MÅ ha filendelse pm Og filen MÅ avsluttes med true(1). Vi kan lage en modul Password.pm av subrutinene fra forrige uke: package Password; require = = qw(hello lagpas $salt); $salt = "xx"; sub Hello() { print "Hello \n"; sub lagpas($$) { # Som før 1; # Må ende med true Legg merke til at subrutinene må prototypes med antall parametre. 68

77 #! /usr/bin/perl -I/home/hh/moduler use Password; $bruker = "mark"; Hello(); $pas = lagpas($bruker,$salt); # $salt definert i Password.pm print "Passord for $bruker: $pas\n"; -I /home/hh/moduler informerer Perl om hvor modulene ligger Regulære uttrykk Dette er et meget kraftig verktøy for å gjenkjenne tekstmønstre i strenger. Det kan ta litt tid å mestre det, men man når langt med litt kunnskap. open (REG,"regexp.txt"); while ($line = <REG>) { if($line =~ /ho/) # TRUE om $line inneholder ho { print "$line"; close(reg); Struktur: $line =~ /REGEXP/; Nøyaktig det som står innenfor // blir matchet, hverken mer eller mindre Spesielle tegn i Regulære uttrykk Tegn betydning ^ matcher begynnelsen av strengen $ matcher slutten av strengen skiller alternativer. matcher alt untatt \n \ neste tegn skal ikke tolkes (\$ matcher $) () grupperer Regexp test matcher $line =~ /^ho/ ho på starten av strengen $line =~ /ho$ hi$/ ho eller hi på slutten av strengen $line =~ /.\$/ Vilkårlig tegn fulgt av $ 12.4 Kvantifisering i Regulære uttrykk II /a/ en a /a+/ en eller flere a er 69

78 Kvantifisering tegnet før må forekomme {n,m minst n og maksimalt m ganger {n, minst n ganger {n eksakt n ganger * 0 eller flere ganger (= {0,) + 1 eller flere ganger (= {1,)? 0 eller 1 gang (= {0,1) Regexp matcher /[A-Z]+ho/ en eller fler store bokstaver fulgt av ho /ho{3/ hooo /(ho){3/ hohoho 12.5 Spesielle koder i Regulære uttrykk Kode Matcher betydning \w [a-za-z_0-9] ord-tegn \W ikke \w \s [ \t\n\r] mellomrom (eller tab, newline,return) \S ikke \s \d [0-9] siffer \D ikke \d Regexp matcher /ho\d/ ho fulgt av siffer /\D\d\sho/ Ikke siffer fulgt av siffer, mellomrom og ho /[a-z]\w/ liten bokstav fulgt av ord tegn Kvantifiseringen er grådig og matcher så mye som mulig. Et? etter gjør at de stopper etter første matching. Perl-kode Output til skjerm #! /usr/bin/perl $line = "Time 3 Proc 4"; print "$1 $2\n" if ($line =~ /\w+ (\d+) \w+ (\d+)/); 3 4 $line = "en % to % tre % fire"; print "$1 $2\n" if ($line =~ /(.*)%(.*)%/); print "$1 $2\n" if ($line =~ /(.*?)%(.*)%/); print "$1 $2\n" if ($line =~ /(.*?)%(.*?)%/); print "$1 $2\n" if ($line =~ /(.*)%(.*?)%/); en % to tre en to % tre en to en % to tre Settes parenteser () rundt deler av en regexp blir disse delene fortløpende lagt i spesielle nummererte variabler $1, $2, $3 etc Intern refereranse Perl-kode $line = "<B>Bold</B>"; print "$line\n" if ($line =~ /<(.*?)>.*?<\/\1>/); Output til skjerm <B>Bold</B> Internt i en regexp er ennå ikke $1 satt, men verdien kan omtales som \1, slik som i det siste eksempelet. 70

79 12.7 Flere eksempler tekst regexp matcher http: /\w+:/ http: ftp: ftp: 1 /\d{2,3/ /\D\d{2,3\D/ 123 /(\D ^)\d{2,3\d/ I nest siste eksempel ser man at \D ikke matcher begynnelsen av linjen, slik at dette må tas med som et alternativ (som i det siste regulære uttrykket) hvis alle forekomster av 2 eller 3 siffer skal matches Plukke ut og bytte ut deler av regexp Perl-kode $line = "Very old, old, old"; $line =~ s/old/new/; print "$line\n"; $line =~ s/old/new/g; print "$line\n"; $line =~ s/(\s+)\s+(\s+)/$2 $1/; print "$line\n"; Output til skjerm Very new, old, old Very new, new, new new, Very new, new $line = "Ja og ha"; $line =~ tr/(a,g)/(o,f)/; print "$line\n"; Jo of ho s står for substitute. tr oversetter bokstav for bokstav, bruker ikke regexp. g står for global, bytt ut alle forekomster. Tilsvarende står i for ignore case (store/små bokstaver) 71

80 13 Forelesning 16/4-22(2 timer). Windows og PowerShell 13.1 Kort Windows historikk Microsoft ble grunnlagt av to PC entusiaster Bill Gates og Paul Allen i I 1980 kom de ut med ett IKKE grafisk OS kalt MS-Dos(Microsoft Disk Operating System). De skjønner fort at ett OS må være mer brukervennlig, Grafisk Windows 1.0 gis ut i Helt ny Windows kjerne introduseres med Windows NT i Idag er Windows 7 den siste versjonen med scripting mulighet kalt Powershell Windows brukere Brukere kan defineres i Control Panel System and Security Administrative Tools Computer Management Local Users and Groups Users. Det er som i Linux grovt sett to typer kontoer,administrator og Standard. Administator-typen(Linux root) har alle rettigheter mens standard har begrensede. Som i Linux, vanlig brukere kan bruke systemet men har begrenset mulighet til å endre systemet. Figure 13: Under Computer Management kan man lage brukere og grupper 13.3 Windows grupper Grupper kan også defineres i Control Panel Administrative Tools Computer Management Local Users and Groups Groups. På samme måte som i Linux finnes det noen predefinerte grupper som Administrators og users. Administrator brukeren kan lage nye grupper. For at en bruker skal ha administrator-rettigheter må han være medlem av gruppen Administrators. 72

81 Under Control Panel User Accounts kan man endre noen egenskaper for brukerkontoer. Under Local Users and Groups får man tilgang til en mer omfattende og detaljert styring av brukere. For eksempel kan man stenge en konto for en bruker eller forlange at brukeren skal skifte passord ved neste innlogging Local Security Policy Under Administrative Tools Local Security Policy kan man i stor detalj definere hvilke sikkerhetsregler som skal gjelde for brukerne på maskinen og for eksempel sette krav til lengden på passord bestemme hvor lang tid det skal gå før et passord må skiftes kreve at man ikke bruker tidligere passord omigjen velge at en konto stenges automatisk etter et gitt antall mislykkede forsøk på å logge seg inn Alt dette er metoder for å gjøre bruken av passord sikrere slik at det blir vanskligere for hackere å komme seg inn. Figure 14: Under Administrative Tools Local Security Policy kan man definere regler for passordbruk Windows fil rettigheter Hvilke fil rettigheter i Windows(eller andre OSer) kan settes, er bestemt av filsystemet som er i bruk. Feks, Med FAT filsystem er det relativt begrenset hva som kan settes av rettigheter. Med FAT har man for eksempel ikke mulighet for å definere en mappe som privat slik at andre brukere ikke kan lese innholdet. NTFS som støtter bl.a Access Control Lists(ACL) har man derimot mulighet til å styre i stor detalj hvilke rettigheter brukere og grupper skal ha til enhver fil og mappe. Dette kan gjøres ved å høyreklikke på en fil eller katalog velge Properties og deretter velge Security fanen. Dette valget vil man ikke ha med et FAT-filsystem. Filsystemet velges under installasjonen av OSet, men man kan i noen tilfeller konvertere filsystemet. ext3 eller ext4 filsystemer som brukes av Linux, støtter ACL, men må slås på. Uten ACL, har ext et enklere og mer begrenset rettighetssystem der hver fil eller mappe kan gis rettigheter for eier, en gruppe og alle andre brukere på systemet. 73

82 Figure 15: Med FAT filsystem vil man ikke kunne velge så detaljerte rettigheter som man her kan gjøre for en mappe på en NTFS-partisjon Windows kommandolinje script Fra kommandolinjen man får opp ved å kjøre cmd.exe kan man utføre en rekke kommandoer som ipconfig og tracert. På samme måte som man skriver Linux bash-script kan man skrive Windows batch script som utføres linje for linje. Det følgende eksempelet viser et script som rebooter PC en etter 5 sekunder: shutdown -r -t 05 Forøvrig gir shutdown -? info om denne kommandoen. Generelt gir søk på nettet som inneholder windows commandline og det du ser etter en bra fremgangsmåte Windows Script Host Det er relativt begrenset hva man kan få til fra standard kommandolinje i Windows. Spesielt får man ikke tak i objektene som Windows-OS er bygget opp av. Rammeverket Windows Script Host (WSH) gir tilgang til noe av dette og støtter en rekke forskjellige scriptspråk inkludert, VBScript, JavaScript, Perl og Python, men det er bare VBScript og JScript (Windows egendefinerte JavaScript) som støttes i en default Windows XP-installasjon. Av disse er VBScript mest brukt og er standard scriptspråk for OS-relaterte oppgaver på samme måte som bash er det på Linux. Mens /bin/bash er programmet som tolker Linux shellscript, er det C:\Windows\system32\cscript.exe og C:\Windows\system32\wscript.exe som gjør 74

83 dette i Windows. Wscript bruker Windows-GUI og viser output fra script i popup-vinduer. Cscript gir output på kommandolinjen på samme måte som bash i Linux. WSH Windows Script Host. Støtter flere scriptspråk. VBScript Standard scriptspråk for WSH, mest brukte i OS-sammenheng WScript Default script-tolker(som bash), Wscript.exe,.vbs assosieres med denne CScript Script-tolker som kjører script fra kommandolinjen, Cscript.exe 13.8 VBScript Det er nyttig å kjenne til VBScript siden dette er standard og mest utbredt. Et VBScript har filendelse vbs og vil om man kjører det som C:\> test.vbs tolkes av Wscript. Ønsker man å få output til kommandolinjen, kan man eksplisitt kjøre det med Cscript ved kommandoen C:\> cscript test.vbs 13.9 VBScript-eksempler(referansestoff) Ett objekt er allerede forhåndsdefinert når du kjører et VBScript og det er WScript-objektet. Det har mange metoder som man kan bruke, for eksempel metoden echo som brukes som brukes i følgende Hello.vbs script: WScript.Echo "Hello!! WScript-objektet har også andre metoder som sleep og quit. Som i bash deklarerer man ikke variabler, men i VBScript refereres de ikke til med $-tegn foran. Følgende eksempel viser de viktigste språkkonstruksjonene: inttall = 4 WScript.Echo "taller er: " & inttall &... Kommentar: Der er ikke forskjell på for og For i et VBScript For counter = 1 To 3 WScript.Echo counter Next For Each element in WScript.Arguments WScript.Echo element Next i=4 while i > 0 WScript.Echo i 75

84 i = i - 1 wend if i > 0 then WScript.Echo "ja" else WScript.Echo "nei" end if Input og popup-menyer(referansestoff) Å lese input fra en bruker er rett frem: input = InputBox("Skriv noe") wscript.echo "Du skrev " & input For å bruke mer avanserte metoder enn de som WScript-objektet har, må man opprette disse objektene. For å lage popup-bokser må man for eksempel lage et WScript.Shell-objekt: Lager shell-objekt Set objshell = WScript.CreateObject("WScript.Shell") strtext = "Vil du lage backup?" strtitle = "Valg" ntype = vbyesnocancel + vbquestion intresult = objshell.popup(strtext,,strtitle,ntype) Select Case intresult Case vbyes WScript.Echo "OK. Kopierer" objshell.run "cmd.exe /C copy popup.vbs backup.vbs" Case vbno WScript.Echo "Neivel" Case vbcancel WScript.Echo "Avbryter..." Følgende er konstanter som kan brukes i popup-menyer: BUTTONS vbokonly = 0 vbokcancel = 1 vbabortretryignore = 2 vbyesnocancel = 3 vbyesno = 4 vbretrycancel = 5 DEFAULT BUTTONS vbdefaultbutton1 = 0 vbdefaultbutton2 = 256 vbdefaultbutton3 = 512 vbdefaultbutton4 =

85 ICONS vbcritical = 16 vbquestion = 32 vbexclaimation = 48 vbinformation = 64 RETURNS vbcancel = 2 vbabort = 3 vbretry = 4 vbignore = 5 vbyes = 6 vbno = 7 intro.html er praktisk for å slå opp VBScript-syntaks Windows PowerShell Windows PowerShell er fremtidens kommandolinje og scriptspråk for Windows. Må lastes ned fra Microsoft på XP og Vista, men er default installert på 2008 Server og Windows 7. Det finnes en rekke aliaser som gjør at man kommer veldig langt med å skrive vanlige bash kommandoer. Det finnes fire kategorier kommandoer i PowerShell: Cmdlets Tilsvarer bash shell builtins som pwd og echo (og er en del av shellet). De fleste kommandoer er Cmdlets. Applications Eksisterende Windowsprogrammer som ping og ipconfig. (tilsvarer /bin/mv) Scripts Tekstfiler med endelse.ps1 (også for PS versjon 2), tilsvarer bash-script Functions Tilsvarer funksjoner i bash Operativsystemet Windows er i utgangspunktet objektorientert og konfigurasjonen er ikke basert på tekstfiler som i Unix, men på binære filer og databaser. Derfor må et kraftig Windows shell også være objektorientert og det er PowerShell. Som bash er PowerShell bygd opp av mange små programmer eller Cmdlets som gir en fleksibel måte å løse oppgaver på. Under Unix har vi sett at disse kommandoene kan settes sammen med pipes og omdirigering og det er da tekst som streames mellom kommandoene. PowerShell tar dette ett steg videre og sender hele objekter mellom Cmdlets med pipes Verdens korteste Hello World program "Hello World!" Lagrer man dette som en fil med for eksempel navnet hello.ps1 har man laget verdens korteste Hello World program. PowerShell script må ha filendelse ps1. Det gjelder også for versjon 2 av PowerShell. Med tanke på script som lastes ned av virus og ormer er det i utgangspunktet ikke lov å kjøre script i det hele tatt fra PowerShell. Men hvis du setter PS> set-executionpolicy remotesigned vil du kunne kjøre egne script. 77

86 13.12 De to viktigste kommandoene De to viktigste kommandoene i powershell er de som gir deg hjelp: Get-Command gir liste over alle kommandoer og Get-Help kommando gir informasjon om kommandoene. Disse kan sammenliknes med man og help i bash. Get-Command CommandType Name Definition Alias % ForEach-Object Alias? Where-Object Function A: Set-Location A: Alias ac Add-Content Cmdlet Add-Computer Add-Computer [-DomainName] <... Cmdlet Add-Content Add-Content [-Path] <String[ Uten argument listes alle kommandoene Get-Command ls CommandType Name Definition Alias ls Get-ChildItem Med kommando som argument listes informasjon om kommandoen. Get-Help Get-ChildItem NAME Get-ChildItem SYNOPSIS Gets the items and child items in one or more specified locations. SYNTAX Get-ChildItem [[-Path] <string[]>] [[-Filter] <string>] [-Exclude <string[] Likheter med bash Det er definert en rekke alias som gjør at mange av de kjente bash-kommandoene kan brukes direkte i powershell. Dette gjør at en del bash-script lett kan oversettes. Her er noen av de vanligste fra en standard profile.ps1 fil som er powershells svar på.bashrc: set-alias cat get-content 78

87 set-alias cd set-alias cp set-alias history set-alias kill set-alias ls set-alias mv set-alias ps set-alias pwd set-alias rm set-alias rmdir set-alias echo set-location copy-item get-history stop-process get-childitem move-item get-process get-location remove-item remove-item write-output Omdirigering Omdirigering og pipes virker på samme måte som i bash. For eksempel er PS> ls sort > fil.txt en gyldig powershell-kommando. Vanlig output og feilmeldinger er også delt på samme måte, slik at omdirigering virkning følgende virker som i bash: > fil.txt omdirigerer stdout til fil.txt. Overskriver >> fil.txt legger stdout etter siste linje i fil.txt 2> err.txt sender stderr til err.txt > fil.txt 2> err.txt stdout - fil.txt stderr - err.txt ps 2>&1 grep iexplorer sender stderr til samme kanal som stdout Men som vi skal se senere er det ikke tekst som streames mellom Cmdlets, men hele objekter! Variabler Variabler lages som i PHP ved å sette et $-tegn foran navnet: PS > $var = "min nye var" PS > echo $var min nye var PS > $var min nye var Slike variabler er lokale. PowerShell er ikke så nøye på mellorom som bash, men teksstrenger må skrives innenfor apostrofer. Legg merke til at echo er overfløding, en tekststreng blir skrevet ut selvom du ikke skriver echo først. Cmdlet en Get-Variable (kan forkortes til gv) viser hvilke variabler som er definert, følgende viser et utdrag: PS > Get-Variable Name Value MaximumErrorCount

88 MaximumVariableCount 4096 MaximumFunctionCount 4096 MaximumAliasCount 4096 null false False true True PWD C:\Documents and Settings\group10\My Documents\ps MaximumHistoryCount 4000 HOME C:\Documents and Settings\group10 PSVersionTable {CLRVersion, BuildVersion, PSVersion, PSCompatible... PID 3976 Culture nb-no ShellId Microsoft.PowerShell PSHOME C:\WINDOWS\system32\WindowsPowerShell\v1.0\ ErrorView NormalView NestedPromptLevel 0 OutputEncoding System.Text.ASCIIEncoding CommandLineParameters { args { PROFILE C:\Documents and Settings\group10\My Documents\WindowsPowerShell\Microsoft.PowerShell_p var min nye var dir mappe Environmentvariabler I tillegg finnes det et sett med environmentvariabler i namespace et env: som kan listes ut med ls: PS > ls env: Name Value Path C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32... TEMP C:\DOCUME~1\group10\LOCALS~1\Temp PATHEXT.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;... USERDOMAIN IU-VM PROCESSOR_ARCHITECTURE x86 SystemDrive C: APPDATA C:\Documents and Settings\group10\Application Data windir C:\WINDOWS TMP C:\DOCUME~1\group10\LOCALS~1\Temp USERPROFILE C:\Documents and Settings\group10 ProgramFiles C:\Program Files HOMEPATH \Documents and Settings\group10 COMPUTERNAME IU-VM USERNAME group10 NUMBER_OF_PROCESSORS 1 PROCESSOR_IDENTIFIER x86 Family 16 Model 4 Stepping 2, AuthenticAMD SystemRoot C:\WINDOWS ComSpec C:\WINDOWS\system32\cmd.exe LOGONSERVER \\IU-VM ALLUSERSPROFILE C:\Documents and Settings\All Users OS Windows_NT HOMEDRIVE C: Dette betyr at det for eksempel finnes en variabel $env:path 80

89 PS > $env:path C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\system32\WindowsP owershell\v1.0\;c:\program Files\OpenSSH\bin;C:\lcc\bin Legg merket til at variabler og cmdlets ikke er case-sensitive som de er i bash. Tilsvarende kan man liste funksjoner og aliaser med ls function: og ls alias: PS > $alias:pwd Microsoft.PowerShell.Management\Get-Location PS > & $alias:pwd Path ---- C:\Documents and Settings\group10\My Documents\ps Her ser vi at en & i starten av en linje gjør at innholdet av en streng kjøres. Nyttig om man må ha apostrofer rundt en path fordi den inneholder mellomrom Apostrofer Apostrofer virker stort sett som i bash: PS> $dir="mappe" PS> echo ls $dir # -> Gir eksakt tekststreng ls $dir PS> echo "ls $dir # " " -> Variabler substitueres; verdien av $dir skrives ut. ls mappe PS> echo "Filer: $(ls $dir)" fil fil2.txt # utfører kommandoen \verb+ls mappe+ inne i strengen Objekter og Get-Member Det som virkelig gir Power i PowerShell er at hele objekter sendes mellom Cmdlets. Dette gjør det veldig intuitivt og enkelt å trekke ut informasjon fra for eksempel lister av prosesser og filer. Og det geniale er at det kan gjøres på mer eller mindre samme måte uansett hvilke objekter vi ser på, objektene har bare litt andre egenskaper og metoder. For eksempel returnerer en listing av filene i en mappe PS > ls Mode LastWriteTime Length Name d :38 mappe -a :26 73 ps.ps1 ikke bare tekst som viser filene i mappen slik som i bash. Egentlig returneres et array av objekter, ett for hver fil eller mappe. Om man ønsker kun et objekt for filen ps.ps1, kan man slik legge det i variabelen $fil: 81

90 PS > $fil = ls ps.ps1 Hvis man på kommandolinjen nå skriver $fil. kan man tabbe seg gjennom alle metoder og properties for dette objektet. En måte å vise alle på en gang, er å sende objektet til cmdlet en Get-Member: PS > $fil Get-Member TypeName: System.IO.FileInfo Name MemberType Definition Mode CodeProperty System.String Mode{get=Mode; AppendText Method System.IO.StreamWriter AppendText() Delete Method System.Void Delete() PSPath NoteProperty System.String PSPath=Microsoft.PowerShel... CreationTime Property System.DateTime CreationTime {get;set; DirectoryNam Property System.String DirectoryName {get; Extension Property System.String Extension {get; FullNa Property System.String FullName {get; IsReadOnly Property System.Boolean IsReadOnly {get;set; LastAccessTime Property System.DateTime LastAccessTime {get;set; LastWriteTime Property System.DateTime LastWriteTime {get;set; Length Property System.Int64 Length {get; Name Propertty System.String Name {get; Bare et lite utvalg er vist over. Dermed kan man for eksempel få tak i tidspunktet filen sist ble aksessert, lest eller sett på: PS > $fil.lastaccesstime 1. mars 20 12:26:50 Dette tidspunktet er også et objekt, et System.DateTime objekt. På samme måte kan dette objektet tilordnes en variabel PS > $date = $fil.lastaccesstime Og denne kan vi lese ut metoder og egenskaper fra med Get-Member: PS > $date Get-Member TypeName: System.DateTime Name MemberType Definition AddHours Method System.DateTime AddHours(Double value) IsDaylightSavingTime Method System.Boolean IsDaylightSavingTime() ToLongDateString Method System.String ToLongDateString() ToLongTimeString Method System.String ToLongTimeString() DayOfWeek Property System.DayOfWeek DayOfWeek {get; DayOfYear Property System.Int32 DayOfYear {get; Hour Property System.Int32 Hour {get; Millisecond Property System.Int32 Millisecond {get; 82

91 Minute Property System.Int32 Minute {get; Month Property System.Int32 Month {get; Second Property System.Int32 Second {get; TimeOfDay Property System.TimeSpan TimeOfDay {get; Year Property System.Int32 Year {get; Igjen er bare et lite utvalg vist. Dermed kan man trekke ut disse egenskapene, for eksempel året: PS > $date.year 20 Det er også mulig å gjøre dette direkte uten å gå veien om et dato-objekt: PS > $fil.lastaccesstime.year 20 Man kan til og med trekke det ut direkte fra kommandoen som listet filen: PS > (ls ps.ps1).lastaccesstime.year Forelesning 22/4-22(2 timer). Powershell, Windows registry 14.1 Fra sist: Viktige kommandoer get-help get-command get-member 14.2 Undersøke typen til et objekt Med get-member vil vi få listet opp alle egenskaper (properties) og metoder som er tilgjengelige på det aktuelle objektet. Dette er viktig informasjon, fordi det forteller oss hva vi kan gjøre med objektene. PS C:\> ls get-member TypeName: System.IO.FileInfo Name MemberType Definition Length Property System.Int64 Length {get; Name Property System.String Name {get;... 83

92 Øverst ser vi at typen til det som returneres fra ls er System.IO.FileInfo. OBS: men vi ser bare typen til det siste elementet på denne måten. Kommandoen ls returnerer altså et array av FileInfo-objekter. Dette kan vi se ved å kalle metoden GetType() på returverdien slik: PS C:\> (ls).gettype() IsPublic IsSerial Name BaseType True True Object[] System.Array For mer informasjon om de ulike typene, kan man søke dem opp på Microsofts dokumentasjonssider, Søker man feks. etter System.Array får man som første treff Array Class. Her finner du definisjonen av klassen og kodeeksempler i flere språk Foreach og ps Når man istedet for å liste filer med ls lister prosesser med ps, gir dette også objekter. PS > ps Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName , Adobe_Updater , alg , csrss Det som returneres fra ps er et array av prosessobjekter der første element er første prosess i listingen: PS > $ps = ps PS > $ps[0].name Adobe_Updater PS > $ps[0].id 4936 PS > $ps[1].name alg Lengden av dette arrayet vil da gi antall prosesser på maskinen: PS > $ps.length 44 For å gå igjennom alle prosessene er foreach en meget nyttig konstruksjon. Allikevel er det viktig å sjekke hva mer man kan gjøre med kommandoen ps, før man overkompliserer oppgaven. I bash bruker vi kommandoen $ ps grep power for å finne alle prosesser med power i navnet. Vi har en funksjon i powershell som likner på grep, nemlig select-string. Men kommandoen ps select-string power returnerer ikke helt det vi ønsker. Grunnen til dette er at kommandoen ps, i powershell, returnerer et array av objekter, og ikke en tekst. For å gjøre tilsvarende søk i powershell skriver man heller følgenede: 84

93 $ ps power* Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName , poweroff , powershell Her sender vi ordet power, med wildcardet *, til kommandoen ps, som er et alias for kommandoen getprocess. Sjekk dette ved å skrive get-command ps. For detaljert informasjon om hva du kan gjøre med get-command, skriv get-help get-process -detailed 14.4 array og strenger Et array defineres av en kommaseparert liste: $a = 1,2,3,4 PS> $a[0] 1 PS> $a[1] 2 Om listen ikke er separert med komma, kan man lage et array ved hjelp av metoden Split. Denne metoden er en av mange som et string-objekt har: $a = "1 2 3" $sum = 0 foreach ($tall in $a.split(" ")){ $sum += $tall 14.5 Summere antall bytes i filer #! /usr/bin/perl # Kommentar for å lure jed foreach ($ls in ls *.ps1){ $sum += $ls.length $sum Summasjon som inkluderer filer i alle undermapper: foreach ($ls in ls -r){ if($ls.extension -eq ".ps1"){ $sum += $ls.length 85

94 14.6 nkill.ps1 $s = $args[0] # Første argument # Tilsvarende oneliner: # ps foreach { if($_.name -eq "navn"){kill $_.id -whatif foreach ($p in ps ){ foreach ($name in $args){ if ($p.name -eq $name){ kill $p.id 14.7 Lese og sette registry verdier Avsnitt gir en kort innføring om Windows registry som er en mellomting mellom et filsystem og en database. Registry inneholder all konfigurasjonsinformasjon for Windows og består av en rekke keys som kan betraktes som en path. I hver key er finnes det flere values som inneholder de aktuelle konfigurasjonsverdiene, på samme måte som filer med et innhold finnes i mapper. Følgende eksempel viser hvordan man setter executionpolicy for PowerShell ved hjelp av en registry setting: $key = "HKLM:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" Set-ItemProperty $key ExecutionPolicy Restricted Her blir keyen først definert, deretter settes valuen ExecutionPolicy til Restricted. Med en mer detaljert syntaks kan verdien settes med Set-ItemProperty -path $key -name ExecutionPolicy -value Restricted hvor det er tydelig at key er en path. Bruker man denne path finnes det der en variabel/value med navn ExecutionPolicy og denne gis verdien Restricted. 15 Forelesning 30/4-22(2 timer). PowerShell 15.1 Dagens sitat:jeffrey Snover - PowerShell Architect I use the Universal Admin Development Model. I figure out script fragments in real-time in the interactive shell. When they work, I put them into a file (can you believe that I actually use notepad?!) and then parameterize and generalize the script until it is production quality. 86

95 15.2 Script Editorer notepad++ (Perl highlighting, kan lastes ned her 6 ) padre (Perl highliting, installeres fra CPAN pakkesystemet til perl, installer Strawberryperl i Windows og fra kommandolinjen skriv cpan padre ) PowerGUI (PS highlighting, kan lastes ned fra denne websiden 7 ) 15.3 WMI-Objekter WMI står for Windows Management Instrumentation og er et sett verktøy for å administrere datamaskiner. WMI kan sees på som et grensesnitt inn mot operativsystemet. I powershell har vi tilgang til dette grensesnittet via WMIObjects. get-wmiobject -list?{$_.name -match "process" Win32_ProcessTrace Win32_ProcessStopTrace Win32_Process Win32_Processor... Win32_ProcessStartTrace CIM_Process CIM_Processor Win32_PerfRawData_PerfProc_Process Med Get-WMIObject -list skrives alle WMI-objekter ut. I kommandoen over bruker vi en where-object (?) og -match til søke etter alle objekter som har Process i navnet. Man kan så hente ut ett enkelt WMI-objekt, feks. Win32 Process slik Get-WMIObject Win32_Processor... MaxClockSpeed : 2294 Name : Quad-Core AMD Opteron(tm) Processor 2376 NumberOfCores : 1... Når du ønsker tilgang til informasjon fra operativsystemet, eller å gjøre endringer i systemoppsett etc. er WMI-objekter ofte veien og gå Windows og Linux brukere Her skal vi se litt nærmere på brukere i windows og linux og hvordan vi kan generere de med perl og PS Brukere i Linux Bruker informasjon i Linux er definert i to filer /etc/passwd /etc/shadow. Hver linjen i /etc/passwd representerer EN bruker og har en tilhørende linje i /etc/shadow. Brukere har bl.a. ett hjemmeområdet,brukernavn, passord og brukerid(root har alltid iden=0), alt dette definert i disse to filene. En bruker kan tilhøre minst en eller flere grupper

96 En bruker kan opptre som en annen bruker ved å bruke kommandoen su dersom han/hun har rettigheter til dette. Brukerhåndtering i Linux er relativ enkelt og nye brukere kan legges til med feks. kommandoen adduser. Ett eksempel på bruker generering uten bruker input kan være (sjekk manualsider til adduser) /usr/sbin/adduser --home /home/ola --gecos "Ola Nordmann" --uid gid disabled-password Adding user ola... Adding new user ola (1002) with group users... Creating home directory /home/ola... Copying files from /etc/skel... Nå trenger en kun å aktivere passordet for at brukeren skal kunne logge seg inn på systemet og dette kan gjøres enten ved å bruke kommandoen passwd ola eller echo ola:olaspaaswd chpasswd. Den siste kommandoen trenger ingen brukerinput og passer derfor til bruk i script generering av brukere. For å slette en bruker kan deluser kommandoen brukes, feks deluser ola, hjemmeområdet blir ikke slettet og må håndteres separat Brukere i Windows Brukere i windows er mer komplisert enn i Linux, hva slags bruker en er er avehngig av hvor brukeren beffiner seg i systemet dvs lokalt eller i doemene(active Directory). Her skal vi se på lokale brukere på en maskin men ting er ikke så veldig annerledes med AD brukere. Alle brukere internt i Windows er representert med en såkalt Principal. Her er det definert hvilke rettigheter brukeren har. I motsetning til Linux, brukere i Windows er lagret i databaser. Alle brukere har bl.a. brukernavn, passord, brukekrid og hjemmeområdet men brukeriden er veldig langt random tall og dermed ikke lett å sjekke mot. For å sjekke om hvilke rettigheter en bruker har fra PS må mann bruke denne Principal og dens methoder. feks for å sjekke om brukeren har administrator rettigheter, må først brukerens principal sammenlignes med den innebygde Administratorens principal. ([Security.Principal.WindowsPrincipal][Security.Principal.Windowsidentity]::getcurrent()).isinrole([Security.Principal Det som skjer her er henting av rollen den aktive Principal har og sammenligning med innebygde Administrator rollen, så denne testen vil returnere true eller false. True dersom den aktive rollen har samme rollen som innebygde Administrator rollen ellers fasle. Legge til nye brukere i windows fra PS gjøres vha en ADSI (Active Directory Service Interface) interface. ADSI kan håndtere kommunikasjon med fleretyper såkalte Providers, feks LDAP, WinNT(lokalt) Så hvordan gjøres dette? $username="ola" $sjekkkonto = [ADSI]("WinNT://$env:ComputerName" + "/$username" + ",user") if(-not $sjekkkonto.name) { $user=([adsi]"winnt://$env:computername").create("user",$username) 88

97 $user.setpassword($password); $user.put("description","vanlig bruker $username") ; $user.setinfo(); $user.passwordexpired = 0; $user.setinfo(); $user.put("homedirectory",$homedir) $user.setinfo() $user.commitchanges() #Legg brukeren til Users gruppen $objgroup = [ADSI]("WinNT://$env:ComputerName/Users"); $objgroup.psbase.invoke("add",$username.psbase.path); I eksemplet over skjer følgende: En variable med brukernavnet(ola) som skal genereres lages i $username. vha ADSI interfacet prøves det å hente en bruker med navnet Ola. Dersom Navnet Ola ikke finnes i brukere allerede registrert, genereres det en ny bruker med samme navnet(ola) Logge inn passordløst med ssh, Resten av forelesningen bør lese på egen hånd og brukes som referansestoff NB! Å sette opp passordløst ssh innlogging fungerer ikke mellom Ubuntu og Windows VM iår. Men dette kan prøves fra en linux maskin eller en linux lagd i VirtualBox med ssh til Ubuntu VM på skolen. Ved å først lage autentiseringsnøkler og deretter sende sin public key(offentlige nøkkel) til en annen maskin man har ssh-tilgang til, kan man siden logge inn på den andre maskinen uten passord. Mellom to Linux-maskiner kan det gjøres slik: ssh-keygen -t dsa -N "" -f ~/.ssh/id_dsa Dette lager en hemmelig privat nøkkel i filen ~/.ssh/id_dsa: ls -l total 28 -rw group10 group :46 id_dsa -rw-r--r-- 1 group10 group :46 id_dsa.pub Vi ser at den hemmelige nøkkelen bare kan leses av brukeren selv. I tillegg blir det laget en offentlig nøkkel i ~/.ssh/id_dsa.pub og det er denne filen som sendes til maskinen man ønsker å kunne logge inn passordløst til: scp id_dsa.pub På mottagermaskinen må nå denne offentlige nøkkelen legges til eventuelt andre nøkler i filen.ssh/authorized_keys rex:~$ cat id_dsa.pub >>.ssh/authorized_keys 89

98 Siste to operasjoner kan også utføres av en linux kommando ssh-copy-id slik: ssh-copy-id Dette vil kopiere offentlige nøkkelen til mottagermaskinen samtidig legge til info i authorized keys. Neste gang man logger inn fra os10 fra kontoen til group10 vil ssh bruke den private nøkkelen i ~/.ssh/id_dsa til å kode meldingen. At denne meldingen på rex kan åpnes med den offentlige nøkkelen som tidligere ble sendt dit i filen id_dsa.pub verifiserer at det er group10 på os10 som prøver å logge seg inn og man kommer inn uten passord: ssh rex:~$ whoami haugerud Legg merket til at det ikke spiller noen rolle at brukernavnene er forskjellig. Det viktigste er at group10 beviser at han er den som sendte den offentlige nøkkelen som tidligere ble sendt og for å gjøre dette måtte han kjenne passordet til I denne autentiseringsprosessen er nøklene som brukes til kryptering og dekryptering forskjellige og det kalles da asymmetrisk kryptering. Prinsippet er det samme når man skal få til dette mot openssh på en Windowsmaskin, men den offentlige nøkkelen må da legges i C:\Program Files\OpenSSH\etc\authorized_keys Linjeskift i Unix og Windowsfiler Når man sender tekstfiler frem og tilbake mellom Unix og Windows, er det et problem som ofte dukker opp, linjeskift. Det er desverre forskjell på hvordan slutten på en linje markeres: Windows Slutten av linjencrlf Unix Slutten av linjenlf Som vi ser brukes det to ascii-tegn i Windows, men bare ett i Unix: CR Carrige Return, ASCII kode 13, \r ( r i PowerShell) LF Line Feed, ASCII kode 10, \n ( n i PowerShell) Man kan overføre data ved hjelp av å utføre en ssh-kommando på en annen maskin som følger: res=$(ssh -f "powershell./proc1.ps1" 2> /dev/null) echo $res 41 PowerShell-scriptet proc1.ps1 gir antall kjørende prosesser og dette mottas og legges i variabelen $res. Alt ser vel og bra ut, men om man prøver å bruke dette i et Munin-plugin, gir det tomme grafer. Dette er fordi en usynlig CR ( ) er med på lasset fra Windows og det kan generelt føre til problemer. Vi kan se det med od(object dump): echo $res od -c \r \n 90

99 Man kan fjerne dette tegnet ved å legge teksten i en fil og editere den med editoren vi. Da vil CR synes som ^M og kunne fjernes. I vårt tilfelle kan vi få powershell-scriptet til å la være å skrive ut linjeskift ved å legge til Write-Host -NoNewline til slutt i linjen som skriver ut verdien. Da sendes ikke Windows-linjeskift og problemet løses: res=$(ssh -f "powershell./proc.ps1" 2> /dev/null) echo $res 41 echo $res od -c \n Hvis du får problemer med filer eller data som kommer fra en Windows-maskin, se på dataene med vi eller od -c, det kan være den ekstra CR som er problemet Bruke Windows Com-objekter fra PowerShell Fra PowerShell kan man opprette Com-prosjekter og dermed styre hvordan vanlige Windows-applikasjoner oppfører seg, for eksempel IE: PS > $ie = new-object -Com internetexplorer.application Dette lager et IE-objekt som vi kan styre slik vi vil fra PowerShell. Det første man alltid bør gjøre når man får tilgang til et ukjent PowerShell-objekt er å finne ut dets metoder og egenskaper med Cmdleten Get-Members eller forkortelsen gm: PS > $ie gm TypeName: System. ComObject#{d30c1661-cdaf-11d0-8a3e-00c04fc9e26e Name MemberType Definition GoBack Method void GoBack () GoForward Method void GoForward () GoHome Method void GoHome () Navigate2 Method void Navigate2 (Variant, Variant, Variant, Variant, Variant) Refresh Method void Refresh () ShowBrowserBar Method void ShowBrowserBar (Variant, Variant, Variant) AddressBar Property bool AddressBar () {get {set FullScreen Property bool FullScreen () {get {set Height Property int Height () {get {set MenuBar Property bool MenuBar () {get {set Resizable Property bool Resizable () {get {set StatusBar Property bool StatusBar () {get {set Visible Property bool Visible () {get {set Width Property int Width () {get {set Bare et utvalg er vist. Vi kan foreksempel navigere til en gitt side: PS > $ie.navigate2("www.hio.no") 91

100 Men selve browser-vinduet vil ikke være synlig før vi eksplisitt ber om det: PS > $ie.visible = $true I eksempelet nedenfor brukes noen av $ie objektets metoder og egenskaper i et script for å navigere gjennom de 10 første munin-sidene på lab VM ene: $ie = new-object -Com internetexplorer.application $ie.height = 600 $ie.width = 800 $ie.top = 10 $ie.left = 10 $ie.toolbar = $false $ie.addressbar = $true $ie.visible = $true for($i=10;$i -lt 20;$i++){ sleep 2 $ie.navigate2("http://os$i.vlab.iu.hio.no/munin/localdomain/localhost.localdomain.html#os") Legg merke til at $true og $false er predefinerte boolske variabler. På samme måte som vi senere skal se i Perl er alle tekststrenger true (if ("tekst")) bortsett fra tekststrengen 0. Dermed vil $ie.toolbar = false sette verdien til true One-liner for å vise alle Com-objekter gci HKLM:\Software\Classes -ea 0? {$_.PSChildName -match ^\w+\.\w+$ -and (gp "$($_.PSPath)\CLSID" -ea 0) ft PSC Her brukes følgende forkortelser: gci - get-childitem -ea - -erroraction? - where-object gp - get-itemproperty ft - format-table 15.8 Format-table I bash bruker vi gjerne cut -f 2 for å vise kun andre kolonne i en tabell. I powershell kan vi bruke Format-table (alias ft) og så navngi de kolonnene vi ønsker. ls ft Name Name ---- Desktop Favorites My Document Start Menu proc.ps1 92

101 15.9 Mer om løkker og logiske operatorer Vi har nå brukt foreach og for. foreach har alias%, så kommandoen ps foreach{$_ er det samme som ps %{$_. I tilleg har vi while, som vanlig; while($test){#gjentar noe helt til $test er usann. En annen anvendelig løkkestruktur er Where-Object. Denne kommandoen har alias? og vil returnere et array av alle objekter som oppfyller en gitt logisk test. PS > ps?{$_.name -match "power" Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName , powershell , powershell Her bruker vi ps for å returnere et array av prosessobjekter. Disse dirigeres videre til løkken? (alias for Where-Object). Vi bruker den operatoren -match for å avgjøre om prosessobjektets navn inneholder søkestrengen. PS: -match tar regulære uttrykk som argument. Her kan du bruke samme syntaks som i Perl/Bash/PHP etc. Merk at i powershell kan vi bruke logiske operatorer rett i shellet. I bash vil [ 2 -eq 3 ] ikke returnere noen ting, fordi det er exit-verdien av denne kommandoen som indikerer om testen slo til eller ikke. I powershell er dette litt enklere. PS > 2 -eq 3 False PS > 2 -lt 3 True PS > "hei folkens" -match "^hei" True PS > "hei folkens" -match "hei$" False 16 Forelesning 7/5-22(2 timer). Repitisjon Idag skal vi repetere noen av de viktigste tingene fra OS og scripting. Også er det viktig å lage en oversikt over forskjellene på de forskjellige OSen og Scriptingspråkene 16.1 Operativsystemer Unix er et operativsystem = et stort og komplisert program som styrer en datamaskin, konfigurasjonsfiler er tekstfiler Windows er et operativsystem= ett objektorientert OS som styrer en datamaskin, konfigurasjon er lagret i databaser Innlogging Hver bruker på et Unix-system har 93

102 entydig brukernavn passord Unik brukerid (root har alltid iden 0) Oversikt over alle brukere på systemet ligger i filen /etc/passwd og de krypterte passordene ligger i filen /etc/shadow Kan ikke leses av vanlige brukere, kun av root (superuser) Hver bruker på et Windows-system har entydig brukernavn passord Unik brukerid men brukes ikke vanligvis Bruker rettigheter er lagret i en såkalt Principal Oversikt over alle brukere på systemet ligger i Local Users and Groups under Computer Management Kan ikke endres av vanlige brukere, kun av Administrator (superuser) 16.3 Filsystemer Unix filsystem kan være ext, ext2, ext3 eller ext4 Filer er et helt sentralt Unix-begrep. Alle data lagres som filer og strømmer av data fra tastatur og andre devicer blir behandlet som om de var filer. / rot katalogen bin var usr tmp boot home etc bin man local per liv passwd shadow /usr/bin /home/per/www www kat bin Figure 16: Et typisk Unix-filtre 94

103 16.4 Hvordan forstå filrettigheter i Unix Rettighetene til eier, gruppe og andre er representert med kun tre bit. Dette begrenser hvor mange forskjellige rettigheter man kan ha, samtidig gjør det det enkelt å representere rettighetene som tall og å regne ut rettigheter i hodet. Dette gjør man på følgende måte: kjørerettigheter = 1 skriverettigheter = 2 leserettigheter = 4 Ved hjelp av disse tallene (og tallet 0) kan vi telle fra 0 til 7 ved å kombinere dem på forskjellige måter. F.eks: Kjørerettigheter + leserettigheter = 5 Kjøre + lese + skrive = 7 (maks) skrive og kjøre, men ikke lese = Endre filrettigheter Numerisk endring av filrettigheter: $ chmod 644 fil.txt <- gir rw-r--r-- $ chmod -R 755 dir <- gir rwxr-xr-x til dir og alle filer og mapper under dir Tallene betyr: rwx octal tekst x w w x r r - x r w r w x For mapper: Rettighet x (execute) gir tilgang til mappen. Alternativt: $ chmod a+xr fil.txt <- gir read og execute til alle (a) $ chmod g-w fil.exe <- fratar gruppen skriverettigheter u = user, g = group, o = other, a = all (både u, g og o) 95

104 x / x home x www x bilder /home/www/bilder Figure 17: Man må ha tilgangsrettighet (x) til alle mappene i path for å kunne lese en fil (her: se et web-bilde i /home/www/bilder) Windows fil rettigheter Windows filsystem kan være FAT, FAT32 eller NTFS Hvilke fil rettigheter i Windows(eller andre OSer) kan settes, er bestemt av filsystemet som er i bruk. Feks, Med FAT filsystem er det relativt begrenset hva som kan settes av rettigheter. Med FAT har man for eksempel ikke mulighet for å definere en mappe som privat slik at andre brukere ikke kan lese innholdet. NTFS som støtter bl.a Access Control Lists(ACL) har man derimot mulighet til å styre i stor detalj hvilke rettigheter brukere og grupper skal ha til enhver fil og mappe. Dette kan gjøres ved å høyreklikke på en fil eller katalog velge Properties og deretter velge Security fanen. Dette valget vil man ikke ha med et FAT-filsystem. Filsystemet velges under installasjonen av OSet, men man kan i noen tilfeller konvertere filsystemet. ext3 eller ext4 filsystemer som brukes av Linux, støtter ACL, men må slås på. Uten ACL, har ext et enklere og mer begrenset rettighetssystem der hver fil eller mappe kan gis rettigheter for eier, en gruppe og alle andre brukere på systemet Scriptspråk, Bash, Perl og Powershell Bash er scriptspråk for Linux. Perl scriptspråk finnes for både Linux og Windows 96

105 Figure 18: Med FAT filsystem vil man ikke kunne velge så detaljerte rettigheter som man her kan gjøre for en mappe på en NTFS-partisjon. Powershell er Windows scriptspråk TIPS! Lag en oversikt over forskjellene i de forskjellige språkene, variabeler, Lister(arrays), Løkker(loops), Operatorer og filhåndtering 97

Lynkurs i shellprogrammering under Linux

Lynkurs i shellprogrammering under Linux Lynkurs i shellprogrammering under Linux Interaktiv bruk av shell Shell/skall er en applikasjon som lar bruker taste inn tekstlige kommandoer til Linux en og en linje om gangen (leser linjer fra stdin).

Detaljer

$ls -l $grep -i Olsen adresseliste.txt less #!/bin/sh $echo `ls` $chmod 755. Praktisk Linux. Grunnleggende skall kommandoer. Irene Ludvigsen Husa

$ls -l $grep -i Olsen adresseliste.txt less #!/bin/sh $echo `ls` $chmod 755. Praktisk Linux. Grunnleggende skall kommandoer. Irene Ludvigsen Husa $ls -l $grep -i Olsen adresseliste.txt less #!/bin/sh $echo `ls` $chmod 755 Praktisk Linux Grunnleggende skall kommandoer Irene Ludvigsen Husa Hva er UNIX / Linux? Unix - En gruppe operativsystem som er

Detaljer

Løsningsforslag til eksamen 24. november 2015

Løsningsforslag til eksamen 24. november 2015 Operativsystemer med Linux Løsningsforslag til eksamen 24. november 2015 Oppgave 1 a) Et OS deler tiden inn i små deler, typisk et hundredels sekund, og fordeler slike korte timeslices til alle prossene

Detaljer

Shellscripting I. Innhold

Shellscripting I. Innhold Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Shellscripting I Tor Halsan 19.08.2010 Lærestoffet er utviklet for faget LN199D Scripting av Servere Resymé: Leksjonen er første innføring

Detaljer

Oppgave 1 - Java og prosesser (20%)

Oppgave 1 - Java og prosesser (20%) Prøveeksamen våren 2012 Operativsystemer Les nøye gjennom oppgavene før du begynner og pass på å besvare alle spørsmålene. Alle trykte og skrevne hjelpemidler er tillatt. Sett gjerne egne forutsetninger

Detaljer

NSA mandag 4. oktober 2010. Brukerbehandling Systempolitikk Kontroll av resurser Om system logger Litt om cron og cfengine

NSA mandag 4. oktober 2010. Brukerbehandling Systempolitikk Kontroll av resurser Om system logger Litt om cron og cfengine NSA mandag 4. oktober 2010 Brukerbehandling Systempolitikk Kontroll av resurser Om system logger Litt om cron og cfengine Brukerbehandling har mange komponenter: De rent tekniske sidene ved å legge til

Detaljer

Håndtering av filer og kataloger

Håndtering av filer og kataloger Håndtering av filer og kataloger Fil- og katalognavn i Linux Filsystem-kommandoene bruker navn til å identifisere filer og kataloger Filnavn kan inneholde alle tegn untatt / og NULL-tegnet Lengde på filnavn

Detaljer

Filer og kataloger, prosesser og jobber

Filer og kataloger, prosesser og jobber Introduksjon til dataanlegget Filer og kataloger, prosesser og jobber Marc Bezem Institutt for informatikk Universitetet i Bergen August 2005 1 Filer En l er en samling data som ligger lagret på maskinen

Detaljer

Operativsystemer og nettverk Løsningsforslag til eksamen 01.12.2014. Oppgave 1. a) Linux-kommando: java Beregn & b) Shellprogram:

Operativsystemer og nettverk Løsningsforslag til eksamen 01.12.2014. Oppgave 1. a) Linux-kommando: java Beregn & b) Shellprogram: Operativsystemer og nettverk Løsningsforslag til eksamen 01.12.2014 Oppgave 1 a) Linux-kommando: java Beregn & b) Shellprogram: java Beregn & java Beregn Eventuelt, hvis man vil gjøre det med bare en linje

Detaljer

22 45 32 00. faks: 22 45 32. Avdeling for Ingeniørutdanning. Cart Aælersgate 30-0254 Oslo - tlf 05. iu@hio.no

22 45 32 00. faks: 22 45 32. Avdeling for Ingeniørutdanning. Cart Aælersgate 30-0254 Oslo - tlf 05. iu@hio.no IKandidaten må selv kontrollere at oppgavesettet er fullstendig. Ved eventuelle ~klarheter i oppgaveteksten skal du redegjøre for de forutsetninger du legger Itil grunn for løsningen. Avdeling for Ingeniørutdanning.

Detaljer

Operativsystemer og nettverk

Operativsystemer og nettverk Løsningsforslag til eksamen i Operativsystemer og nettverk 04.06.2015 Oppgave 1: Generelt om Linux a) Det grunnleggende brukergrensesnittet i Linux er et tastaturbasert CUI (Commandline User Interface),

Detaljer

Emnekode: SO135A Dato: onsdag 25. feb. I Antall oppgaver: 4

Emnekode: SO135A Dato: onsdag 25. feb. I Antall oppgaver: 4 ~ høgskolen i oslo Emne: Operativsvstemer ap Unix ~-Gruppe(r) data Eksamensoppgave n består av: Antall sider (inkl. Forsiden): 6 Emnekode: SO135A Dato: onsdag 25. feb I Antall oppgaver: 4 Faglig veileder:

Detaljer

Unix/Linux for litt viderekomne

Unix/Linux for litt viderekomne Hundrevis av programmer Hvilke program finnes? Unix/Linux for litt viderekomne Institutt for informatikk For å finne alle programmene, snekret jeg dette lille programmet: #! /usr/bin/perl foreach $dir

Detaljer

Fjerninnlogging over Internett

Fjerninnlogging over Internett Kapittel 9 Fjerninnlogging over Internett 9.1 Innledning I noen tilfeller har du behov for å kunne foreta innlogging på en Unix-basert fjern-datamaskin for å kunne utføre (operativsystem)kommandoer der,

Detaljer

Emnekode: SOl35A 11.12.2003. Alle trykte og skrevne hjelpemidler

Emnekode: SOl35A 11.12.2003. Alle trykte og skrevne hjelpemidler I Gruppe(r): I I JI G høgskolen i oslo Emne: Operativsystemer og UNIX Emnekode: SOl35A i Faglig veileder: Hårek Haugerud 2.klassene, DATA Dato: 11.12.2003 Eksamensoppgav Antall sider (inkl. Antall op~gaver:

Detaljer

Linux-kommandolinje for nybegynnere. PVV-kurs 2013-09-19

Linux-kommandolinje for nybegynnere. PVV-kurs 2013-09-19 Linux-kommandolinje for nybegynnere PVV-kurs 2013-09-19 Linux-kommandolinje for nybegynnere Unix PVV-kurs 2013-09-19 Oversikt over kurset Innledning Grunnleggende konsepter Filer og kataloger Prosesser

Detaljer

Unix/Linux for litt viderekomne

Unix/Linux for litt viderekomne Unix/Linux for litt viderekomne Institutt for informatikk Hundrevis av programmer Hvilke program finnes? For å finne alle programmene, snekret jeg dette lille programmet: #! /usr/bin/perl foreach $dir

Detaljer

Håndtering av tekstfiler

Håndtering av tekstfiler Håndtering av tekstfiler Tekstlige data og Linux Linux er i stor grad et tekstbasert OS Har svært mange og gode verktøy (filterprogrammer) som leser tekst fra STDIN eller filer, og skriver tekstlig output

Detaljer

1 Diverse linuxtips. Innhold

1 Diverse linuxtips. Innhold 1 Diverse linuxtips Innhold 1 Diverse linuxtips 1 1.1 Virtuelle konsoller............................ 2 1.2 Teksteditorer............................... 2 1.3 Filsystemet................................

Detaljer

Unix/Linux en annen måte å gjøre ting på

Unix/Linux en annen måte å gjøre ting på Velkommen Unix/Linux en annen måte å gjøre ting på Institutt for informatikk Operativsystemer Operativsystemer Alle datamaskiner (unntatt de helt knøttsmå) har et operativsystem som administrerer datamaskinen

Detaljer

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Eksamensdato: 16. desember 2004 Varighet: 3 timer Fagnummer: LO247D Fagnavn: Praktisk Linux Klasse(r): Studiepoeng: 6 Faglærer(e): Geir Maribu,

Detaljer

Svar: 1. "ls eller ls -l for lang utlisting, "ls -a" for å ta med skjulte filer 2. "ls t*" 3. "ls /etc/??.*"

Svar: 1. ls eller ls -l for lang utlisting, ls -a for å ta med skjulte filer 2. ls t* 3. ls /etc/??.* 1A) Navigere i mapper Oppgave: Naviger til rot-nivå. Vis hvilke mapper du finner på rot-nivå. Naviger til /etc-mappa. List ut innholdet. Mens du står i /etc-mappa skal du ta en lang utlisting av innholdet

Detaljer

Hendelser Apprentice ComputerCraft PDF

Hendelser Apprentice ComputerCraft PDF Helser Apprentice ComputerCraft PDF Introduksjon I denne leksjonen skal vi se nærmere på hvordan datamaskinene bruker såkalte helser for å reagere på ting som tastetrykk, museklikk og så videre. Etterhvert

Detaljer

Kjøre Wordpress på OSX

Kjøre Wordpress på OSX Kjøre Wordpress på OSX Alt etter hva du ønsker å bruke Webserveren til er det flere måter å gjøre dette på. Ønsker du kun en side som skal dele sider du lager manuelt, med PHP, GD etc eller med server

Detaljer

Filer i Linux og Bourne-again shell

Filer i Linux og Bourne-again shell Filer i Linux og Bourne-again shell Filbegrepet En fil * er en grunnleggende lagringsenhet i et OS Brukes for alle data som: Lagres utenfor RAM (primærminnet) På permanente media (sekundærminne) Definisjoner

Detaljer

Hvordan jobber vi ved Ifi (inkludert en kort intro til Unix/Linux)

Hvordan jobber vi ved Ifi (inkludert en kort intro til Unix/Linux) Velkommen Hvordan jobber vi ved Ifi (inkludert en kort intro til Unix/Linux) Institutt for informatikk dag@ifi.uio.no Operativsystemer Operativsystemer Alle datamaskiner (unntatt de helt knøttsmå) har

Detaljer

Øving 0 - Xcode TDT4102

Øving 0 - Xcode TDT4102 Øving 0 - Xcode TDT4102 Frivillig Øving Mål for denne øvingen: Bli kjent med programmeringsverktøy Lage et første program kun med teksteditor og kompilator Lage et første program med Xcode Denne øvingen

Detaljer

Labbene skal være oppsatt med dual boot. Disse labene er satt opp med dual boot, dvs. at vi må velge Linux eller Windows under oppstart av maskin.

Labbene skal være oppsatt med dual boot. Disse labene er satt opp med dual boot, dvs. at vi må velge Linux eller Windows under oppstart av maskin. Oppstart Denne øvingen er basert på kapittel 15 i boken. Det er ingen innlevering i denne øvingen. Oppstart av Linux Labbene skal være oppsatt med dual boot. Disse labene er satt opp med dual boot, dvs.

Detaljer

Ny EKSAMEN. Operativsystemer og nettverk

Ny EKSAMEN. Operativsystemer og nettverk Ny EKSAMEN Emnekode: ITF22514 Dato: 4. juni 2015 Emne: Operativsystemer og nettverk Eksamenstid: kl 09.00 til kl 13.00 Hjelpemidler: Alle trykte og skrevne. Faglærere: Jan Høiberg og Tore Petter Engen

Detaljer

4. Installasjonsveiledning. Experior - rich test editor for FitNesse -

4. Installasjonsveiledning. Experior - rich test editor for FitNesse - 4. Experior - rich test editor for FitNesse - 4.1. Forord Denne rapporten inneholder installasjonsveiledning for Experior. Experior er tilpasset for installasjon i oppdragsgivers utviklingsmiljø. Det er

Detaljer

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive,

som blanker skjermen (clear screen). Du får en oversikt over alle kommandoene ved å skrive, 1. Last ned og installer XAMPP. 2. Sjekk at alt fungerer. 3. MySQL. Vi begynner med databaseserveren, MySQL. Gå til DOS klarmelding eller ledetekst (finnes under tilbehør på startmenyen om du ikke som

Detaljer

Innhold. Kommandoskallet i Linux

Innhold. Kommandoskallet i Linux Resymé: Kort introduksjon til kommandogrensesnittet i Linux. Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Kommandoskallet i Linux Geir Maribu 2.9.2014 Lærestoffet er utviklet for faget

Detaljer

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

Funksjonalitet og oppbygning av et OS (og litt mer om Linux) Funksjonalitet og oppbygning av et OS (og litt mer om Linux) Hovedfunksjoner i et OS OS skal sørge for: Styring av maskinvaren Deling av maskinens ressurser Abstraksjon vekk fra detaljer om maskinvaren

Detaljer

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF Introduksjon Vi begynner med å bygge en enkel datamaskin. Etter å ha brukt litt tid på å bli kjent med hvordan datamaskinen virker, bruker vi den

Detaljer

Introduksjon til dataanlegget ved Institutt for informatikk. Marc Bezem Institutt for informatikk Universitetet i Bergen

Introduksjon til dataanlegget ved Institutt for informatikk. Marc Bezem Institutt for informatikk Universitetet i Bergen Introduksjon til dataanlegget ved Institutt for informatikk Marc Bezem Institutt for informatikk Universitetet i Bergen August 2005 1 Introduksjonskurset Målgrupper: Alle studenter som skal ta INF100 Andre

Detaljer

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

EKSAMEN. Operativsystemer. 1. Læreboken A Practical Guide to Red Hat Linux av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater. EKSAMEN Emnekode: ITF22506 Emne: Operativsystemer Dato: 12. desember 2007 Eksamenstid: kl. 9.00 til kl. 13.00 Hjelpemidler: 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre

Detaljer

Forord. Brukerveiledning

Forord. Brukerveiledning Forord Dette dokumentet er ment for brukere og administratorer som vil overvåke ressursene som brukes av JVM. Det gir en rask og generisk introduksjon til installasjonen av de forskjellige verktøyene som

Detaljer

Avdeling for ingeniørutdannlng. Con Adelersgate 30. 0254 Oslo. tlf: 22 45 32 00. faks: 22 45 32 05. iu@hio.no

Avdeling for ingeniørutdannlng. Con Adelersgate 30. 0254 Oslo. tlf: 22 45 32 00. faks: 22 45 32 05. iu@hio.no Avdeling for ingeniørutdannlng. Con Adelersgate 30. 0254 Oslo. tlf: 22 45 32 00. faks: 22 45 32 05. iu@hio.no " Eksamen høst 2005 Operativsystemer og UNIX Les nøye gjennom oppgavene før du begynner og

Detaljer

1. Profiler og variabler

1. Profiler og variabler Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Profiler og variabler Stein Meisingseth 26.05.2014 Lærestoffet er utviklet for faget IDRI3005 PowerShell 1. Profiler og variabler Resymé:

Detaljer

Beskrivelse for hvordan en kan digitalisere og importere musikk inn i Variations på TEST server EINER.UIB.NO (for installasjonen 17.

Beskrivelse for hvordan en kan digitalisere og importere musikk inn i Variations på TEST server EINER.UIB.NO (for installasjonen 17. Beskrivelse for hvordan en kan digitalisere og importere musikk inn i Variations på TEST server EINER.UIB.NO (for installasjonen 17. april 2012) Utgangspunktet er følgende sak: https://prosjekt.uib.no/issues/1976

Detaljer

Brukermanual for Quizbuilder

Brukermanual for Quizbuilder Brukermanual for Quizbuilder 1. juni 2010 Innhold 1 Installasjon av Quizbuilder 2 1.1 Installasjon fra Kildekode........................ 2 1.2 Installasjon fra Zip-fil.......................... 2 2 Quizbuilder

Detaljer

"How I hate this damned machine, I wish that I could sell it, It never does what I want it to, But only what I tell it".

How I hate this damned machine, I wish that I could sell it, It never does what I want it to, But only what I tell it. smug: selvtilfreds condescending: nedlatende "How I hate this damned machine, I wish that I could sell it, It never does what I want it to, But only what I tell it". En kort introduksjon til operativsystemet

Detaljer

Unix/Linux en annen måte å gjøre ting på

Unix/Linux en annen måte å gjøre ting på Velkommen Operativsystemer Operativsystemer Unix/Linux en annen måte å gjøre ting på Institutt for informatikk Alle datamaskiner (unntatt de helt knøttsmå) har et operativsystem som administrerer datamaskinen

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 0 for Mac Frist: Ingen (frivillig øving)

Detaljer

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS Løkker og if-tester Gløer Olav Langslet Sandvika VGS 29.08.2011 Informasjonsteknologi 2 Funksjoner, løkker og iftester Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler eller

Detaljer

Brukerveiledning for programmet HHR Animalia

Brukerveiledning for programmet HHR Animalia Brukerveiledning for programmet HHR Animalia Versjon 1.0 Rakkestad, 26.03.2014 Innholdsfortegnelse 1. Introduksjon... 3 2. Installasjon og oppgradering... 3 2.1 Nedlasting... 3 2.2 Oppdatering av operativsystem

Detaljer

Før du starter, del 2

Før du starter, del 2 1 Før du starter I Windows må du sørge for at tekst og andre elementer er satt til å vises normalt 100%. Visma Global støtter ikke zooming, da vil noen elementer forsvinne fra programmet og ikke fungere.

Detaljer

Hvordan installere Java og easyio på Windows

Hvordan installere Java og easyio på Windows Hvordan installere Java og easyio på Windows Denne veiledningen forklarer en enkel måte å installere Java og easyio på din egen Windows-datamaskin. Du kan finne veiledninger for andre operativsystemer

Detaljer

Modul 01: introduksjon til linux

Modul 01: introduksjon til linux Modul 01: introduksjon til linux Del 1: Installasjon av Linux Installasjon: Ubuntu installerte seg helt automatisk etter at det ble oprettet, navn, brukernavn og root passord. Fikk ingen spm. angående

Detaljer

Sikkerhet: Virus Sikkerhet i operativsystemet Maskinstøtte for sikkerhet Trojanske hester Ormer. IN 147 Program og maskinvare.

Sikkerhet: Virus Sikkerhet i operativsystemet Maskinstøtte for sikkerhet Trojanske hester Ormer. IN 147 Program og maskinvare. Sikkerhet: Virus Sikkerhet i operativsystemet Maskinstøtte for sikkerhet Trojanske hester Ormer Ark 1 av 14 Sikkerhet og virus Virus Virus er programmer som «infiserer» andre programmer slik at de endrer

Detaljer

Dokumentasjon av Installasjon

Dokumentasjon av Installasjon Vedlegg D Dokumentasjon av Installasjon Dette dokumentet tar for seg detaljert informasjon vedrørende installasjon nødvendig for delapplikasjonene i PySniff. Innholdsfortegnelse 1. INTRODUKSJON 3 2. PYTHON

Detaljer

VMware Horizon View Client. Brukerveiledning for nedlasting, installasjon og pålogging for fjerntilgang

VMware Horizon View Client. Brukerveiledning for nedlasting, installasjon og pålogging for fjerntilgang VMware Horizon View Client Brukerveiledning for nedlasting, installasjon og pålogging for fjerntilgang Introduksjon Fjerntilgang er blitt oppgradert til en bedre og mer moderne løsning. Programmet er identisk

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

Innføring i bruk av CGI4VB

Innføring i bruk av CGI4VB Innføring i bruk av CGI4VB Her kommer en enkel innføring i bruk av modulen CGI4VB som kan benyttes for å lage CGI programmer i Visual Basic. CGI er en forkortelse for Common Gateway Interface den kommunikasjonsprotokollen

Detaljer

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK) 1 TDT4105 Informasjonsteknologi, grunnkurs (ITGK) Introduksjon til programmering i Matlab Rune Sætre satre@idi.ntnu.no 2 Læringsmål og pensum Mål Lære om programmering og hva et program er Lære å designe

Detaljer

Sprettball Erfaren ComputerCraft PDF

Sprettball Erfaren ComputerCraft PDF Sprettball Erfaren ComputerCraft PDF Introduksjon Nå skal vi lære hvordan vi kan koble en skjerm til datamaskinen. Med en ekstra skjerm kan vi bruke datamaskinen til å kommunisere med verden rundt oss.

Detaljer

2. Beskrivelse av installasjon av SQL Server 2005 og hvordan lage databasen som trengs av administrasjonsprogrammet:

2. Beskrivelse av installasjon av SQL Server 2005 og hvordan lage databasen som trengs av administrasjonsprogrammet: Workaround for DFS Administrasjonssystem og Windows Vista NB! Dette er IKKE en installasjon av systemet, men en måte for å få det til å virke på Windows Vista. Denne veiledningen er laget for litt avanserte

Detaljer

LO143A: Nettverk og System Administrasjon I

LO143A: Nettverk og System Administrasjon I LO143A: Nettverk og System Administrasjon I Forelesning 1: Introduksjon til kurset T. M. Jonassen Institute of Information Technology Faculty of Technology, Art and Design Oslo and Akershus University

Detaljer

Hvordan å lage og publisere ditt personlige visittkort

Hvordan å lage og publisere ditt personlige visittkort Hvordan å lage og publisere ditt personlige visittkort Av Asle Skauge Dette skal være en bruksanvisning som alle kan følge for å få lagt ut sitt personlige visittkort på internett. Hensikten med et slikt

Detaljer

Grunnkurs i. Windows Utforsker. Nordre Land kommune IKT-avdelingen

Grunnkurs i. Windows Utforsker. Nordre Land kommune IKT-avdelingen Grunnkurs i Windows Utforsker Nordre Land kommune IKT-avdelingen - 2 - Fil- og mappehåndtering med Windows Utforsker Innholdsfortegnelse Introduksjon...- 3 - Generelt om filbehandling...- 3 - Filbehandling...-

Detaljer

MySQL. Historikk. Nedlasting og installasjon

MySQL. Historikk. Nedlasting og installasjon 1 MySQL MySQL kan lastes ned gratis fra Internett (dev.mysql.com/doc). Vi forklarer hvordan man laster ned og installerer verktøyet, og også hvordan man kommer i gang med å lage databaser i MySQL. Historikk

Detaljer

Hurtigstart guide. Searchdaimon ES (Enterprise Server)

Hurtigstart guide. Searchdaimon ES (Enterprise Server) Hurtigstart guide Searchdaimon ES (Enterprise Server) Innholdsfortegnelse Informasjon før oppsett... 2 Koble til strøm og nettverk... 3 Oppsett av system... 3 Konfigurasjonsveiviser... 4 Sette fast IP

Detaljer

Innstallasjon og oppsett av Wordpress

Innstallasjon og oppsett av Wordpress Del 1 - Installasjon og oppsett Innstallasjon og oppsett av Wordpress Wordpress har blitt en veldig populær publiseringsplattform for websider. Uten særlige tekniske ferdigheter kan man sette opp profesjonelle

Detaljer

1. Intro om PowerShell

1. Intro om PowerShell Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Intro til PowerShell Stein Meisingseth 15.05.2014 Lærestoffet er utviklet for faget IDRI3005 PowerShell 1. Intro om PowerShell Resymé: Denne

Detaljer

Repetisjon Novice Videregående Python PDF

Repetisjon Novice Videregående Python PDF Repetisjon Novice Videregående Python PDF Introduksjon I denne oppgaven skal vi repetere litt Python-syntaks. Hele dette kurset er for de som har programmert Python før. Dersom ikke har mye erfaring med

Detaljer

Næringsregner på PC n versjon 1.1.0

Næringsregner på PC n versjon 1.1.0 Laget av Innhold: Introduksjon 2 Næringsregner på PC n 2 Næringstabell 2 Statistikk 2 Hvem passer programmet for? 2 Bruk av programmet 3 Innlogging av forskjellige brukere 3 Hovedprogramet har 3 felt 4

Detaljer

1. Hent NotaPlan Online Backup på www.notaplan.no 2. Trykk på Download i menyen og på Download i linjen med Notaplan Backup

1. Hent NotaPlan Online Backup på www.notaplan.no 2. Trykk på Download i menyen og på Download i linjen med Notaplan Backup 1 Systemkrav ADSL eller minimum ISDN via router. Ved automatisk backup: Min. Windows XP / 2000 / 2003 (pga. Service) Ved manuellt system: Min. Windows 98 SE NotaPlan Backup bør installeres på den/de maskiner

Detaljer

Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering...

Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering... Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering...9 2 Forord Denne kravspesifikasjonen har blitt utviklet i

Detaljer

- Java kan lastes ned gratis http://www.java.com. For installasjon, se punktet Hvordan laster jeg ned og installerer Java på min maskin?.

- Java kan lastes ned gratis http://www.java.com. For installasjon, se punktet Hvordan laster jeg ned og installerer Java på min maskin?. Innhold Hva er Java?... 2 Hvor finner jeg Java?... 2 Hvorfor må jeg ha Java for å bruke nettbanken?... 2 Hvordan installerer jeg Java på min maskin?... 2 Jeg får bare en feilmelding om "File is corrupt"

Detaljer

Litt info om Unix-nettet/maskinene. Hvorfor kjøre matlab på Unix. Overføring av filer mellom PC og Unix. Hvordan få tilgang/unix-bruker

Litt info om Unix-nettet/maskinene. Hvorfor kjøre matlab på Unix. Overføring av filer mellom PC og Unix. Hvordan få tilgang/unix-bruker Unix anlegget Litt info om Unix-nettet/maskinene Hvorfor kjøre matlab på Unix Hvordan logge inn fra PC Overføring av filer mellom PC og Unix Hvordan få tilgang/unix-bruker HiS' Internettforbindelse Internett

Detaljer

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

Programmering, oppsett og installasjonsløsninger av LIP-8000 serien IP apparater

Programmering, oppsett og installasjonsløsninger av LIP-8000 serien IP apparater Programmering, oppsett og installasjonsløsninger av LIP-8000 serien IP apparater Oppsett og programmering av LIP 8000 IP apparat Et IP apparat kan tilkobles ipecs systemet på 3 forskjellige måter avhengig

Detaljer

Tilpasning av Windows 2000 server til Skolelinux tynnklienttjener

Tilpasning av Windows 2000 server til Skolelinux tynnklienttjener Tilpasning av Windows 2000 server til Skolelinux tynnklienttjener Bernt Johnsen, Ski videregående skole Ragnar Wisløff, LinuxLabs AS November 2004 Innholdsliste Innledning...2 Ansvarsfraskrivelse...2 Endringer

Detaljer

1. MSI fra Group Policy

1. MSI fra Group Policy Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag MSI fra Group Policy Jostein Lund 25.08.2012 Lærestoffet er utviklet for faget LO470D Programvaredistribusjon og fjerndrifting 1. MSI fra

Detaljer

9. ASP med databasekopling, del II

9. ASP med databasekopling, del II Else Lervik 23.03.2004 Opphavsrett: Forfatter og Stiftelsen TISIP Lærestoffet er utviklet for faget LV192D Web-programmering med ASP 9. Resymé: I forrige leksjon så vi hvordan ASP kunne brukes til å vise

Detaljer

Brukerveiledning for programmet HHR Animalia

Brukerveiledning for programmet HHR Animalia Brukerveiledning for programmet HHR Animalia Versjon 1.1 Rakkestad, 03.09.2014 Innholdsfortegnelse 1. Introduksjon... 3 2. Installasjon og oppgradering... 3 2.1 Nedlasting... 3 2.2 Oppdatering av operativsystem

Detaljer

Operativsystemer og Filbehandling

Operativsystemer og Filbehandling Operativsystemer og Filbehandling Erik Hjelmås, HiG 20. juni 2000 1 Mål 1. Kjenne til hva et operativsystem er og egenskaper/forskjeller på de meste vanlige 2. Beherske brukergrensesnittet til MSWindows

Detaljer

Feilmelding Årsak Løsning

Feilmelding Årsak Løsning Request for the permission of type 'System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed Feil oppstod i Window.DialogWindow:

Detaljer

Din verktøykasse for anbud og prosjekt

Din verktøykasse for anbud og prosjekt Veiledning Serverinstallasjon 14.03.2013 Din verktøykasse for anbud og prosjekt 2013 CITEC AS v/sverre Andresen Side 1 av 27 Innholdsfortegnelse 1 INNLEDNING 3 2 DATABASEINSTALLASJON (SQL SERVER 2008)

Detaljer

Installere JBuilder Foundation i Windows XP

Installere JBuilder Foundation i Windows XP Installere JBuilder Foundation i Windows XP Installasjon av JBuilder Foundation på Windows (dekker her spesifikt fremgangen ved bruk av Microsoft Windows XP Professional, men det vil mest trolig ikke være

Detaljer

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad.

EKSAMEN. Les gjennom alle oppgavene før du begynner. Husk at det ikke er gitt at oppgavene står sortert etter økende vanskelighetsgrad. EKSAMEN Emnekode: Emne: ITF10208 Webprogrammering 1 Dato: Eksamenstid: 09/12-2008 09.00-13.00 Hjelpemidler: 2 A4 ark (4 sider) med egenproduserte notater (håndskrevne/maskinskrevne) Faglærer: Tom Heine

Detaljer

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning Data

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning Data HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning Data Øving 9 (Obligatorisk) Kommentarer til øvingen: Utlevert: 29. oktober 2010. Øvingen gjøres på lab A516 eller A521: Halve klassen møter torsdag 4.

Detaljer

Velkommen til Brother's Keeper 6 for Windows!

Velkommen til Brother's Keeper 6 for Windows! Velkommen til Brother's Keeper 6 for Windows! Det kan være at du har mottatt en Installasjons-CD eller CD/minnepinne/hentet fra internett med programmet. Dette dokumentet følger med Installasjons-CD fra

Detaljer

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv Bygg et Hus Introduksjon I denne leksjonen vil vi se litt på hvordan vi kan få en robot til å bygge et hus for oss. Underveis vil vi lære hvordan vi kan bruke løkker og funksjoner for å gjenta ting som

Detaljer

Mattespill Nybegynner Python PDF

Mattespill Nybegynner Python PDF Mattespill Nybegynner Python PDF Introduksjon I denne leksjonen vil vi se litt nærmere på hvordan Python jobber med tall, og vi vil lage et enkelt mattespill. Vi vil også se hvordan vi kan gjøre ting tilfeldige.

Detaljer

Remote Desktop Services

Remote Desktop Services Brukerveiledning Remote Desktop Services Fra Eltele AS 1 Innholdsfortegnelse Multi-Faktor Autentisering... 3 Pålogging... 3 Web Interface (anbefales)... 4 RemoteApp på Skrivebord... 6 Remote Desktop Klient

Detaljer

Manual for AL500AC og AL100AC

Manual for AL500AC og AL100AC Manual for AL500AC og AL100AC Denne manualen hjelper deg med installasjon og avinstallsjon av driver, samt hvordan du kobler til et trådløst nettverk i de ulike operativsystemene. Innhold Bruk av USB cradle

Detaljer

Kapittel 21: Minne og variabler

Kapittel 21: Minne og variabler Kapittel 21: Minne og variabler 21 Introduksjon til minne og variabler... 334 Kontrollere og tilbakestille minnet... 337 Vise VAR-LINK-skjermbildet... 338 Manipulere variabler og mapper med VAR-LINK...

Detaljer

Brukerveiledning - secure.nhh.no og secure.privnett.nhh.no

Brukerveiledning - secure.nhh.no og secure.privnett.nhh.no Brukerveiledning - secure.nhh.no og secure.privnett.nhh.no NHH tilbyr ansatte og studenter ekstern tilgang til NHH-interne ressurser slik som M-området, felles filområder, bibliotektjenester m.m. Tjenesten

Detaljer

1 Innledning. 2 Fremgangsmåte. 3 Windows - installering. C++ i Unix 1 TDT4102 NTNU

1 Innledning. 2 Fremgangsmåte. 3 Windows - installering. C++ i Unix 1 TDT4102 NTNU C++ i Unix 1 TDT4102 NTNU 1 Innledning av Åsmund Ervik, jan. 2011 Dette dokumentet skal veilede deg gjennom å skrive og kompilere programmer i C++ på NTNUs sentrale Unix/Linux-server 1. Dette vil gi deg

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 11. mai 2004 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LV197D Webprogrammering med PHP FU Studiepoeng:

Detaljer

Manual for innlegging av standard sideinnhold og nyheter via «backend»

Manual for innlegging av standard sideinnhold og nyheter via «backend» Manual for innlegging av standard sideinnhold og nyheter via «backend» 23.3.2006 Utarbeidet av: 2 Innlogging og beskrivelse av hovedelement i «backend» For å få tilgang til redigeringsmodul velges følgende

Detaljer

Hvordan laste ned og installere Java på Windowsplattformen

Hvordan laste ned og installere Java på Windowsplattformen Hvordan laste ned og installere Java på Windowsplattformen Nedlasting 1. Bruk en nettleser og gå til adressen: http://java.sun.com/javase/downloads/ 2. Trykk på lenken Download til høyre for JDK 6 Update

Detaljer

http://balder/obs2.nsf/8178b1c14b1e9b6b8525624f0062fe9f/71e1616e4d33c749c125... Controller Brukerstøttedatabase Ottar Holstad/Cantor 09.

http://balder/obs2.nsf/8178b1c14b1e9b6b8525624f0062fe9f/71e1616e4d33c749c125... Controller Brukerstøttedatabase Ottar Holstad/Cantor 09. Side 1 av 6 Controller Brukerstøttedatabase Ottar Holstad/Cantor 09.01 14:18. Emne/tittel:. Kategori: "Kan ikke koble til databasen! Sjekk ODBC og event. BDE". Feilmeldinger ODBC-Administrator (OpenDataBaseConnectivity)

Detaljer

Bruk av Domenia Norges AS Webmail

Bruk av Domenia Norges AS Webmail Bruk av Domenia Norges AS Webmail Domenia Norges webmail finner du på adressen http://webmail.domenia.no Hva trenger jeg? Du trenger en e-postkonto, samt brukernavn og passord til denne kontoen. Dersom

Detaljer

Eksamen i Internetteknologi Fagkode: IVA1379

Eksamen i Internetteknologi Fagkode: IVA1379 Høgskolen i Narvik Side 1 av 5 Eksamen i Internetteknologi Fagkode: IVA1379 Tid: Mandag, 07.06.04, 9:00-12:00 Tillatte hjelpemidler: Alle trykte og skrevne hjelpemidler tillatt. Eksamen består av 4 oppgaver

Detaljer

ProMed. Brukermanual for installasjon og bruk av mobiltelefon eller SMS og nett for sending av SMS direkte fra. for Windows

ProMed. Brukermanual for installasjon og bruk av mobiltelefon eller SMS og nett for sending av SMS direkte fra. for Windows Side 1 av 9 Brukermanual for installasjon og bruk av mobiltelefon eller SMS og nett for sending av SMS direkte fra ProMed for Windows Kundeoppfølging og Administrasjon Versjon 1.7 23.10.2009 Litt om sending

Detaljer