Uke 3 - Digitalteknikk og introduksjon til kommandolinjen på Linux.

Oppgaver til mandag 13. - fredag 17. jan

Serveren data2500 blir først klar til bruk i begynnelsen av januar.

Etter noen inneledende digitalteknikk-oppgaver, skal dere i disse oppgavene logge dere inn på serveren data2500. Av sikkerhetshensyn kan OsloMet-servere som data2500 bare nås om man setter opp en VPN tilkobling til OsloMet, hvis man ikke er på Oslomet når man logger seg inn. Info om hvordan man som student setter opp VPN finnes her: https://student.oslomet.no/vpn-koble-filserver

Hvis man har Mac, kan man gjøre de fleste av oppgavene i et Mac terminalvindu. Inntil videre kan man på egen Windows-laptop installere Windows Subsystem for Linux (WSL), se for eksempel her: https://docs.microsoft.com/en-us/windows/wsl/install. Da får man et ekte Linux-shell og kan gjøre disse lab-oppgavene. Dette kan også være nyttig senere i kurset og gjøre det enklere å gå inn og ut av andre Linux-servere enn om man bruker putty eller andre løsninger.

Alle oppgaver som er merket med (Oblig) i rødt, skal inngå i rapporten dere skal levere som en del av den første obligatoriske innleveringen. Rapporten kan gjerne være kortfattet og kan være et vanlig ASCII tekst-dokument eller PDF, doc, odt, etc. Merk hver oppgave med ukenummer og oppgavenummer av typen 4.3 som betyr tredje oppgave i uke 4.

Hvis du har litt erfaring med å bruke Linux fra kommandolinjen, kan du etter å ha gjort de tre første OS-oppgavene, gjerne hoppe rett til første obligatoriske Linux-oppgave denne uken, oppgave nummer 13 for uke 3, oppgave 3.13. Hvis du har litt eller ingen erfaring, anbefales det sterkt å lese igjennom teksten i innledningen til disse oppgavene og gjøre alle de innledende oppgavene. Helt mot slutten er det noen oppgaver som er ment som en utfordring for dem som har litt mer erfaring.

I den praktiske delen av dette kurset skal du bli kjent med hvordan man kommuniserer med operativsystemer fra kommandolinjen. I den første delen skal du lære deg å skrive programmer, også kalt script,som kommuniserer med det underliggende operativsystemet Linux. Det kan være programmer som gjør endringer på filer, laster ned og trekker ut informasjon av web-sider, starter andre programmer, etc. For å klare dette, må du først lære deg Linux sitt kommandospråk som vi senere skal bruke direkte i programmer. Du er sikkert vant til å utføre det meste på en PC ved å klikke på knapper og linker, men hvis du ønsker å få et program til å f. eks. gjenta en lang sekvens av klikkinger 35 ganger på 10 forskjellige PC'er, er ikke det så lett å få til. Men i Linux er det relativt enkelt. En kommandobasert dialog med operativssystemet Linux (istedet for pek og klikk) er lettere å programmere og mer effektivt. Derfor må du først lære de grunnleggende kommandoene man kan gi til Linux-operativsystemet gjennom et såkalt shell i et terminalvindu. Det kan i starten virke litt tungvint og være vanskelig å huske kommandoene, men med litt øvelse kan man fort bli ganske effektiv.

De første oppgavene gir deg praktisk trening i å Linux, som er det operativsystemet som data2500 og etterhvert din Linux-VM kjører. Linux-VM får du tildelt senere, til å begynne med skal du gjøre oppgavene ved å logge inn på data2500. Det kan gjøres med putty fra en vanlig Windows-PC. Last ned putty fra nettet og start den hvis den ikke allerede finnes på din PC. På en Windows lab-PC på OsloMet må du installere putty fra "Installer Software" ikonet på Desktop'en (se eventuelt forelesningsvideo om dette). Fra et Linux eller Mac OS X terminal-vindu kan du logge inn med ssh data2500.cs.oslomet.no. Den beste måten å lære å kjenne kommandolinjen på er å prøve og feile; det er ikke farlig å feile! Lek gjerne med systemet. På data2500 vil du uansett ikke få lov å slette filer som ikke er dine! Og filene der er ikke de samme som de du har på Windows-PC'ene. På en Linux-VM har du rettigheter nok til å slette hele systemet, men det kan bygges opp fra scratch på noen minutter, så det er heller ikke så farlig.

Hvis du ikke har noen erfaring fra Linux-shell tidligere, kan dette oppgavesettet nok være litt vanskelig på et så tidlig tidspunkt. Men fortvil ikke; se igjennom de digitale forelesningene omigjen og prøv etterpå på nytt på de oppgavene du ikke fikk til.

Det kan generelt være nyttig å både bruke og diskutere oppgavene i dette kurset med ChatGPT, men husk at til eksamen så vil ikke dette hjelpemiddelet være tilgjengelig. Og husk også at denne og andre KI-hjelpemidler ikke er feilfrie. På samme måte som når man søker på Google, må man være kritisk til resultatet, for det er ikke nødvendigvis riktig. For oppgaver hvor det ikke eksplisitt står at du skal bruke ChatGPT, er det beste å prøve å forstå og gjøre oppgaven selv. Hvis du står fast og likevel bruker ChatGPT, skriv i rapporten du leverer for hver oppgave det gjelder, at du har brukt dette eller andre KI-verktøy for å komme frem til løsningen. Men løs ikke oppgaver ved å blindt copy-paste til og fra ChatGPT, da vil læringsutbytte være minimalt om noe i det hele tatt. Dere har som studenter ved OsloMet gratis tilgang (koster ellers 25$ pr måned) til Sikt KI-chat https://ki-chat.sikt.no/nb som i bunnen bruker GPT-4. De viktigste forskjellene er at opplysningene ikke blir brukt til å trene opp KI-modellen videre og avsender er randomisert slik at personsikkerhet blir ivaretatt i tråd med norsk lov og GDPR.

  1. (Oblig) Hva er de to viktigste oppgavene til et operativsystem?
  2. (Oblig) I figuren i forelesningsnotatene er det to feil i output på høyre side, hva er galt?
  3. (Oblig) Fra en Windows_PC, last ned programmet Digital.exe og and.dwm (NB! Ikke bruk Edge eller IE fra Windows, da lagres ikke dwm-filer som and.dwm riktig). Klikk på Digital for å starte simulatoren og åpne filen and.dwm. Klikk på Step-knappen øverst i venstre hjøren og få resultatet for NOT-porten til å bli rødt. Rødt=1, Hvitt = 0. Velg pekefingeren fra samme meny, endre på verdiene for input og klikk igjen på step-knappen slik at det endrer seg.

    Forklar utifra sannhetsverditabellene til AND og OR-portene hvorfor resultatet i den nederste kretsen blir 0, når øverste input er 1(rødt) og nederste input er 0(hvitt).

    Sett opp sannhetsverditabellen for den nederste kretsen, både utifra teoretiske beregninger med utgangspunkt i virkemåten til AND og OR og ved å teste ut alle muligheter når du kjører den nederste kretsen and.dwm i simulatoren Digital.exe.

    Hvis du bruker Mac eller Linux, kan du bruke VirtualBox til å kjøre en Windows-VM slik at du kan bruke simuleringsprogrammet Digital Works som kun kjører på Windows. Alle skal senere bruke VirtualBox til å kjøre Windows slik at man har Aminsistrator-rettigheter (og eventuelt for ikke ødelegge sin egen laptop-Windows...). Start med å laste ned Windows-image'et https://os.cs.oslomet.no/win.ova til din laptop. Dette inneholder hele disken for en ferdig Windows-VM som kan startes opp i VirtualBox. Start så opp VirtualBox og velg "File -> Import Appliance" og velg filen win.ova som du lastet ned. Deretter kan du starte opp Windows i et eget vindu og du kan der laste ned https://os.cs.oslomet.no/os/digital/Digital.exe og kjøre simuleringer. Brukernavn og passord til denne Windows VMen finner du i filen pw.txt under files i Canvas. Det kan være en god ide å først installere Chrome for Windows. Hvis du ikke klarer å starte den virtuelle maskinen fra VirtualBox, les feilmeldingen nøye. Den vanligste feilen er at man må disable USB fra VirtualBox settings, prøv det først. En annen vanlig feil er at virtualisering ikke er enablet i BIOS. Reboot maskinen, gå inn i BIOS og let etter dette valget. Avhengig av typen laptop er det en tast, typisk F2 eller F12, ESC eller lignende, som man må taste når maskinen booter for å komme inn i BIOS. Vær oppmerksom på at dette imaget etter en stund, typisk 30-40 minutter, vil måtte startes på nytt (pga lisens-problemer), så planlegg korte sesjoner og lagre det du lager av script og lignende fortløpende.

  4. Innledende oppgaver for deg som har lite erfaring med Linux kommandolinje

    Start gjerne med å se videoene fra den digitale Linux-forelesningen fra uke 2: Linux-shell, Linux-filsystem:
       linux1del3.mp4 (04:55) Demo: Installere putty og logge inn til studssh fra Windows
    linux1del4.mp4 (02:10) Demo: Logge inn til studssh fra Mac og Linux-terminal 
     
    før du begynner eller om du står fast underveis. NB! I videoene brukes studssh, bruk nå data2500. Hvis du bruker Mac, se også Bash fra Mac OS X under Linux hjelp i menyen på kurssiden.

    Logg deg på data2500.cs.oslomet.no med putty fra en Windows-PC, eller fra en Mac eller Linux terminal, bruk samme brukernavn (s123456 eller tilsvarende) og passord som på Canvas. NB! IKKE BRUK s123456@oslomet.no som brukernavn, da vil du ikke kunne lage filer! Bruk kun studententnummeret, s123456. Om du legger til @oslomet.no vil du for eksempel få en feilmelding om du prøver å lage en ny mappe.

    For å utføre en kommando, skriver du den inn ved promptet og trykker RETURN. Når du logger inn på denne måten, vil du alltid komme til din hjemmekatalog/mappe. Det er bare her du har lov til å lage nye filer og mapper(også kalt kataloger eller på engelsk directories). Skriv inn kommandoen
    $ pwd
    
    og trykk RETURN (du skriver bare inn pwd, dollar-tegnet står der fra før). Når du gjør dette, spør du operativsystemet Linux om i hvilken mappe du befinner deg (pwd = Print Working Directory). Slik snakker du altså med operativsystemet og kan både hente ut informasjon og be om å få utført ting du vil ha gjort. Språket Linux forstår, består av litt kryptiske forkortelser, men du trenger ikke å kunne så veldig mange før du snakker flytende Linux og klarer det meste.

    Gir du kommandoen pwd rett etter du har klikket på terminalikonet, finner du ut hva hjemmekatalogen din heter og hvor i filsystemet den befinner seg. Prøv på samme måte kommandoene

    $ whoami 
    
    som gir deg brukernavnet ditt
    $ hostname
    
    som gir deg navnet på maskinen du er logget inn på
    $ mkdir nymappe
    
    som lager en ny mappe og
    $ ls -l
    
    som viser alle filer og mapper i mappen du nå står i. -l er en såkalt opsjon som endrer måten kommandoen virker på. I dette tilfellet gir det mer detaljert informasjon en bare ls ville gitt. Prøv!

  5. Klikk på 'Linux hjelp'-linken på kurshjemmesiden og les og prøv ut det som står under 'Nyttige tips om bruk av Linux' fra kommandolinjen.
  6. Klikk på 'Linux hjelp'-linken på kurshjemmesiden og prøv å finne ut under linken 'Linux kommando oversikt' hvordan man gir en kommando som viser innholdet av en fil på skjermen. Prøv å se på innholdet av filen /etc/passwd.
  7. Kommandoen som lager et nytt directory(katalog/mappe) heter mkdir. Lag et directory som heter oblig1.
  8. Kommandoen som lager en tom fil, eller oppdaterer tidstemplet på filer som ekisterer fra før heter touch. Lag en tom fil ved å skrive touch oblig1/newfile.C.
  9. Bruk Linux kommando-oversikten under Linux-hjelp til å finne kommandoene som skal til for å løse denne oppgaven. Gå inn i oblig1 directoryet ved å skrive cd oblig1. Lag en kopi av filen og gi den navnet newer.C. Bruk kommandoen ls til å se at begge filen ligger der. Slett deretter filen newfile.C.
  10. Lag en katalog (directory) som heter newkat og en fil i denne katalogen med navn newFile.txt som inneholder linjen "ny". Fjern etterpå begge deler.
  11. Det ligger mange filer i ditt hjemme-område som blir brukt av software til å lagre oppsett. Disse heter .et-eller-annet. Filer som begynner på "." skjules vanligvis. Tast inn en kommando som lister alle filene i hjemmekatalogen din, inkludert de skjulte. Hva betyr filene "." og ".." ? (hint: prøv å gå til dem med cd)
  12. (Oblig) Bruk mkdir, cp og touch til å opprette en katalogstruktur som den på figuren, der passwd er en kopi av systemets passordfil /etc/passwd, mens fil1 og fil2 er tomme filer. Katalogen ~ er din hjemmekatalog.
  13. (Oblig) Gi en kommando som flytter deg to kataloger oppover i filtreet.
  14. (Oblig) Lag en mappe i din brukers hjemmekatalog. Gå inn i den mappen og lag noen tomme filer med kommandoen touch filnavn. Kopier alle filer i katalogen du står i som slutter på .java til katalogen over deg. Sørg for at du har laget noen slike filer først. Lag for eksempel to filer som heter 1.java og 2.java.
  15. (Oblig) Gjør forrige oppgave omigjen ved å bruke ChatGPT, bruk ki-chat.sikt.no som ivaretar personvern på en bedre måte. Kopier og paste oppgaveteksten til ChatGPT og sammenlign med din egen løsning. Er det noen forskjeller eller noe som er galt ved ChatGPT sin løsning? Det kan generelt være nyttig å både bruke og diskutere oppgavene i dette kurset med ChatGPT, men husk at til eksamen så vil ikke dette hjelpemiddelet være tilgjengelig.
  16. (Oblig) List alle filer og kataloger under /usr/bin som har filnavn som begynner på "b".
  17. Bruk online manualen man i et shell vindu til å slå opp unix kommmandoene mkdir, echo og type ($ man mkdir) Lesingen av en side kan avsluttes ved å taste "q" for quit. Ikke les alle detaljer, bare de første linjene. Dette er for at du senere skal vite hvor du kan finne detaljert informasjon om Linux-kommandoer. Det finnes ingen egen manualside for type fordi det er en såkalt 'shell builtin' og en del av shellet. Men den står omtalt nesten helt til slutt i den lange manualen om bash ($ man bash). Prøv også kommandoen help type.
  18. (Oblig) I denne oppgaven skal du lage et lite shellscript. Start en editor med
    $ jed info.sh
    
    og skriv inn
    #! /bin/bash
    whoami
    hostname 
    uname -a
    
    og lagre filen. Dette er et lite shellscript med navn info.sh som utfører de tre kommandoene når du kjører det. For at det skal bli kjørbart, må du sette kjørerettigheter på scriptet med
    $ chmod 700 info.sh
    
    og du skal kunne kjøre det ved å taste inn kommandoen
    $ info.sh
    
    Hvis det ikke går, prøv
    $ ./info.sh
    
    Hva er forskjellen på de to måtene å kjøre scriptet på?
  19. Ukens utfordringer!

    Ukens utfordring nr. 1 Finn ut hvilket program (hvor det ligger) som startes opp når du gir kommandoen ls. (hint: prøv $ type ls, eventuelt $ unalias ls først). Editer en fil i din hjemmekatalog og kall den ls. Skriv inn følgende shell-script:
    #! /bin/bash 
    
    ls
    Gjør scriptet ls kjørbart ved hjelp av kommandoen chmod 755 ls. Gi kommandoen ls. Er det "din" eller systemets ls som blir utført ? Legg inn linjen
    echo Dette er mitt ls script.
    før ls-kommandoen i ditt ls-script og prøv å få systemet til å liste filene med ditt script.
  20. Ukens utfordring nr. 2: Lag en katalog med navn x. Gå til x, start en editor, skriv noen tegn og lagre filen under navnet -x. Prøv å skifte navn på filen med mv fra -x til x.txt. Hva skjer? Hvordan er det mulig å endre navnet ?
  21. (Oblig) Gjør først et forsøk selv på ukens utfordring nr. 2 og gjør så et forsøk med ChatGPT (https://ki-chat.sikt.no/) ved å kopiere og paste inn oppgaveteksten. Sjekk at løsningen ChatGPT gir faktisk virker i praksis. Vurder om du lærte noe av denne måten å gjøre oppgaven på. Ville et Google-søk gjort samme nytten? Husk at til eksamen så vil hverken ChatGPT eller Google være tilgjengelig. Men du vil få tilgang til et Linux shell der du kan kjøre kommandoer og script i Inspera.
  22. top til overvåking av prosesser og brukere

    Hvis du står fast på noen av de følgende oppgavene, se gjerne på siste del av den digitale Linux-forelesningen fra uke 1:
      linux1del9.mp4 (03:47) Demo: Hvordan dokumenter oppgaver og hint til top og psuser-oppgavene 
    
    top er en kjent og kjær kommando for å få et inntrykk av hva som skjer på systemet. Den gir en mengde informasjon til brukeren om systemets tilstand og de kjørende prosessene.

    Start top i kommandolinjen og forklar hva du ser. Beskriv hvordan top er delt opp i to visuelle deler. Beskriv hva de to forskjellige delene viser og nevn de to datafeltene du mener er mest interessant i den øverste delen. For en forklaring av alle feltene, se "man top". Prøv å taste "1" i top. Hva skjer og hvilken ekstra info får du nå? (tast "1" på nytt for å gå tilbake til slik det var)
  23. Top har flere "hotkeys" av typen "1" som man kan bruke til å forandre hva som vises. Prøv å taste "U" i top og så ditt eget brukernavn og se hva som skjer. Ser du noe gevinst med å bruke top på denne måten? Gi eksempel på situasjoner hvor dette kan være nyttig.
  24. I de neste oppgavene skal du lage ditt eget alternativ til hva du fikk til i forrige oppgave. Du skal lage et shell-script som lister opp alle prosessene til en bruker.

    Prøv kommandoen "ps aux". Forklar kort utskriften til den kommandoen.
  25. grep er en kommando som kan plukke ut linjer som matcher en spesiell tekst. For at grep skal kunne plukke ut enkelte linjer fra ps aux, må vi lime dem sammen på et vis. Dette gjør vi med en pipe (engelsk for rør, pipe-tegnet er til venstre for 1-tasten):
    ps aux | grep  tekst
    
    Prøv ut den kommandoen selv og bytt ut "tekst" med noe mer fornuftig, f.eks et brukernavn. Forklar utskriften du får nå. Lag et shellscript som heter "psuser" som utfører denne kommandoen.
  26. Det kan være praktisk å ikke måtte endre selve koden når man vil endre litt på hvordan et script kjører. Utvid shellscriptet "psuser", slik at det kan kjøres på denne måten: ./psuser root og det da skriver ut alle linjer som inneholder teksten root. Hint: inne i scriptet vil argumentet root legges i variabelen $1. Dermed kan du erstatte teksten du vil lete etter med $1.