ITF225129 Innføring i operativsystemerObligatorisk oppgave 1: Kom i gang med LinuxDenne første oppgaven vil hjelpe deg å bli kjent med grunnleggende bruk av operativsystemet Linux. Dette er nødvendig fordi Linux skal brukes i alle de obligatoriske oppgavene i OS-kurset. Dokumentet du nå leser består av to deler:
1 Introduksjon til Linux1.1 Logge innHvis du allerede har en Linux-distribusjon installert på datamaskinen din, kan du bruke denne for alle oppgavene i dette kurset. De som ikke installerer Linux selv (og det er vel de fleste...) kan bruke HiØs Linux-server itstud.hiof.no. Linux er et flerbruker-OS som lar flere brukere ha kontoer og være pålogget samtidig. Du vil derfor dele denne serveren med andre studenter. Du logger deg på itstud.hiof.no med en Secure Shell klient (som implementerer protokollen SSH). Den enkleste måten å logge på fra en Windows- eller MacOS-maskin, er å starte programmet "Command Prompt" eller "Terminal" og skrive inn følgende kommando:
eller
Skriv deretter inn passordet ditt for å logge på. Brukernavn og passord er det samme som for resten av hiof-tjenestene. Hvis det ikke er installert en SSH-klient på din Windows-maskin, kan du selv installere f.eks. OpenSSH eller PuTTY. For å bruke hiof-serveren hjemmefra/utenfor HiØ, må du av sikkerhetsgrunner koble deg til høgskolens nett via VPN. 1.2 KommandolinjenKommandolinjen i Linux er et tegnbasert grensesnitt som gjør at du kan kjøre både OS-kommandoer og andre programmer på maskinen. Når du bruker kommandolinjen kommuniserer du med et program som kalles et shell:
Merk at shellet ikke må forveksles med et annet program som kalles en terminalemulator. Terminalemulatoren etterligner/emulerer gammeldagse og tegnbaserte dataterminaler, som tidligere ble brukt som "arbeidsstasjoner" for brukere som delte på én stor, sentral datamaskin (mainframe). Emulatoren tilbyr bare et GUI-terminalvindu som "rammer inn" shellets kommandolinjegrensesnitt. Bildet viser en typisk terminal fra slutten av 70-årene, med skjerm og tastatur. Dette var ikke en datamaskin, men en tegnbasert (ikke-grafisk) I/O-enhet der man kunne kommunisere med den sentrale datamaskinen som den var koblet opp mot:
Skjermbildet nedenfor er tatt fra desktopen til et moderne Linux-system med GUI, med en aktiv terminalemulator (det svarte vinduet). Det tegnbaserte shellet kjører linje-for-linje interaktiv kommunikasjon med brukeren inne i emulatoren, på samme måte som i de gamle terminalene:
Når du starter bash inne i et terminalvindu, er det første du vil se en ledetekst (aka "command prompt"), som betyr at shellet venter på at du skal skrive inn en kommando. Ledeteksten kan tilpasses og settes slik du vil ha den, men ser typisk slik ut:
Når jeg logger på serveren it.stud.hiof.no, får jeg denne ledeteksten:
Symbolet '~' (tilde) i ledeteksten betyr at stående katalog er brukerens hjemmeområde (mer om kataloger og slikt kommer nedenfor i dette dokumentet). Kommandoene du gir til maskinen skrives etter "prompt-tegnet" '$' og avsluttes med en return/linjeskift. Shellet tolker da kommandoen du har gitt og setter i gang et program som utfører kommandoen, hvis den er korrekt. Hvis ikke, gis det en feilmelding. 1.3 Noen enkle Linux-kommandoerLa oss begynne med noen enkle kommandoer i Linux. Først, sjekk hvilke andre brukere som for øyeblikket er logget på systemet med å bruke kommandoen who:
Du vil da få se en liste med informasjon om påloggede brukere, bl.a. brukernavn og tidspunkt de logget på systemet. Merk at alle Linux-kommandoer har såkalte opsjoner og argumenter som kan endre måten de fungerer på. Disse angis på kommandolinjen etter selve kommandonavnet, oftest som en eller to bindestreker etterfulgt av et tegn eller et ord. Kommandoen who har mange opsjoner, blant annet:
Prøv disse ved å skrive inn følgende kommandoer og se hvordan de fungerer:
For se alle mulige opsjoner som kommandoen who kan ha (og også mer informasjon om hvordan den virker og kan brukes), kan du gi følgende kommando som viser deg manualsiden for who:
Kommandoen man brukes for å få hjelp og informasjon om Linux-kommandoer. Du kan "bla gjennom" hjelpesider fra man ved å trykke SPACE. man (og alle andre Linux-kommandoer) kan avbrytes ved å trykke Ctrl-C (som sender et såkalt interrupt som stopper det kjørende programmet). Mer om manualsider finner du nedenfor. Hvis du vil ha en rask oversikt over kalendere, skriv inn:
Som standard skriver denne kommandoen ut kalenderen for nåværende måned. Hvis du ønsker å skrive ut en kalender for et bestemt år og måned, bruk denne syntaksen: cal month year. Prøv følgende:
Her er flere enkle kommandoer du kan teste for å bli kjent med shellet og tekstbasert Linux:
1.4 echo og systemvariablerI Linux brukes kommandoen echo til å skrive ut en linje med tekst på skjermen (vi kommer tilbake til echo når vi skal lære shellprogrammering senere i kurset). Prøv følgende kommando:
Da vil du se at tekstlinjen Cashmere Cat vises på skjermen. Linux-shell har en rekke innebygde systemvariabler som lagrer informasjon om bl.a. oppsett av systemet, opsjoner som styrer hvordan shellet virker, informasjon om bruker etc. Variablene lagrer tekststrenger og identifiseres med variabelnavn. Du kan se på innholdet i systemvariable i bash ved å sette '$' (et dollartegn) foran variabelnavnet. Skriv inn følgende kommandoer og se hvordan de fungerer:
1.5 System- og hardwareinformasjonLinux tilbyr også kommandoer for å sjekke maskinvare- og systeminformasjon. For eksempel vil kommandoen lscpu gi informasjon om prosessorene, men lspci lister opp alle PCI-bussene (PCI: Peripheral Component Interconnect) og alle enhetene som er koblet til en buss. Prøv:
Her er noen flere kommandoer som gir systeminformasjon. Prøv å forstå hva disse kommandoene gjør, ved å lese manualsider og studere utskriften:
1.6 Litt om filer og katalogerEtter at du har logget på et Linux-system, vil din arbeidskatalog (eller "stående katalog"/"current directory") oftest være hjemmeområdet ditt på disken, der du kan lagre dine egne filer. Lag nå en katalog med mkdir for å lagre arbeidet ditt for dette kurset, i en mappe/katalog kalt Intro2OS:
Bytt deretter stående katalog til å være denne nye katalogen ved å bruke kommandoen cd (change directory):
Deretter oppretter du en ny fil og redigerer den med den enkle, selvdokumenterende editoren nano:
Du vil da gå inn i nano-redigeringsgrensesnittet. Skriv inn litt tekst og trykk Ctrl-X for å lagre filen og avslutte nano. Tilbake på kommandolinjen, bruk ls til å liste ut navnene på alle filer i stående katalog:
Filen nyfil.txt vil da skrives ut som eneste fil i katalogen Intro2OS. Opprett noen flere tekstfiler i katalogen Intro2OS, f.eks. ved å bruke editoren nano eller kommandoen touch, eller ved å laste ned noen filer fra internett med bruk av kommandoen wget. Gjøre deretter følgende for å teste litt håndtering av filer og kataloger:
1.7 Stående katalog og forelderkatalogGi kommandoen:
Kommandoen ls -a viser alt innholdet i en katalog. For f.eks. å vise informasjon om bl.a. alle filenes størrelser (i et lettlest "human-readable" format), bruk følgende kommando:
eller "klump" de tre opsjonene sammen på denne måten:
I oversikten over filene som ls -a skriver ut, vil du først se en linje for en fil som heter bare "." (punktum) og deretter en som heter ".." (to punktum). Dette er to spesialfiler som finnes i alle Linux-kataloger. "." refererer til stående katalog (working directory), mens ".." refererer til katalogen på nivået over; forelderkatalogen (parent directory). Hvis du gir kommandoen:
forandres ikke stående katalog. Kommandoen:
vil sette stående katalog til å være forelderkatalogen. Prøv disse to kommandoene på katalogene som du har laget i ditt eget hjemmeområde. 1.8 Rotkatalog og hjemmekatalogAlle katalogene i et Linux-system er ordnet i et hierarkisk tre med mange nivåer. Hver katalog ligger inne i en annen (forelder)katalog som er på nivået ovenfor. Helt øverst i treet ligger en katalog som ikke har noen forelderkatalog, dette er rotkatalogen (root) som betegnes bare med en '/'. Figuren nedenfor viser et (relativt) standard oppsett av systemkataloger på de øverste nivåene i katalogtreet i Linux:
Hjemmekatalogen (home directory) til en bruker er den katalogen som settes til å være stående katalog etter pålogging. Som oftest er dette en katalog som heter det samme som brukernavnet og ligger inne i systemkatalogen /home. I shellet det et eget, reservert tegn for å angi hjemmekatalogen i kommandoer som har kataloger som parametre: '~' (tilde). Følgende kommando:
vil alltid sette stående katalog til å være hjemmeområdet ditt. Kommandoen cd uten et katalognavn som parameter gjør det samme som cd ~. 1.9 Absolutte og relative søkestierEn søkesti i Linux er en angivelse av hvor i filsystemet/katalogtreet du finner en bestemt katalog. Søkestien er en liste av katalognavn adskilt med spesialtegnet '/' (skråstrek/slash). Kommandoen pwd (print working directory) vil skrive ut søkestien til stående katalog. Prøv å gi kommandoen pwd etter pålogging. Du vil da få skrevet ut søkestien til hjemmekatalogen din. Hos meg ser dette slik ut:
Det finnes to ulike måter å angi søkestier på:
Prøv å bruke en absolutt søkesti for å bytte stående katalog -- du skal allerede ha laget katalogen Intro2OS i din hjemmekatalog -- ved å gi kommandoen (bytt ut brukernavn med ditt eget brukernavn):
Du skal nå være i Intro2OS-katalogen din. For å bekrefte dette, skriv inn:
For å gå tilbake til hjemmekatalogen, skriv inn:
Bytt nå til underkatalogen igjen ved å bruke en relativ søkesti:
Bruk pwd for å bekrefte at du nå er i underkatalogen. I eksemplet ovenfor er det ingen forskjell mellom disse to måtene å komme til en katalog på. Anta imidlertid at du var i en annen brukers hjemmekatalog. I det tilfellet ville kommandoen cd Intro2OS ta deg til hans eller hennes Intro2OS-katalog. Men hvis du brukte den absolutte søkestien med brukernavnet ditt, ville du gå til din egen katalog. Du kan bruke relative og absolutte søkestier for å beskrive filer og kataloger i mange kommandoer. For eksempel, hvis du er i hjemmekatalogen din, bør følgende to kommandoer gi samme resultat (en liste av filene i rotkatalogen på Linux-systemet):
Den første kommandoen bruker en absolutt søkesti (den starter med /), så den vil alltid returnere samme resultat uansett hvor du er. Hvis du er i katalogen /home/brukernavn, vil ../.. referere til katalogen to nivåer over hjemmekatalogen (forelder til forelderkatalogen). Hvis du var i /home/brukernavn/Intro2OS og skrev ls ../.., ville du se filene i katalogen /home i stedet. 1.10 Redigering av tekst: Editorer i LinuxSom Linux-bruker trenger du å kunne lage og endre på tekstfiler, for f.eks. å skrive programkode og besvare obligatoriske oppgaver i dette OS-kurset. Til dette bruker du en editor, som er et program for å redigere ren tekst. En editor er ikke et program som også formaterer tekst, som f.eks MS-Word. Den brukes i utgangspunktet bare for å redigere filer som består utelukkende av tegn fra et standard tegnsett (oftest Unicode). Linux har to standard editorer, vi og emacs. Det finnes også enklere editorer som f.eks. nano og joe. Vi anbefaler sterkt at dere lærer å bruke emacs, som er et svært bra verktøy for det aller meste og spesielt for å skrive programkode i Linux. Gjør følgende:
1.11 Effektiv bruk av shelletDet interaktive shellet bash har en snarvei-funksjon som lar deg skrive inn bare de første tegnene i en kommando. Trykk deretter på tabulatortasten og shellet vil skrive ferdig resten av kommandoen for deg (tab completion). Ved å trykke to ganger på tabulator vises alle kommandoer som matcher det du hittil har skrevet. Du kan bruke opp- og ned-piltastene til å bla gjennom en liste med nylig innskrevne kommandoer. Ctrl-R vil søke gjennom kommandohistorikken din. 1.12 Manualsider og hjelpeverktøyManualsidene er dine beste venner i Linux. De gir informasjon om bl.a. alle kommandoer, applikasjoner, systemkall, programmeringsspråk osv. Det krever litt trening/tilvenning for å få godt utbytte av manualsidene -- de er presise og korrekte, men også detaljerte, tekniske og omfattende. Et eksempel: For å vise manualsiden til kommandoen ping, som brukes for å sjekke hastighet og kvalitet på forbindelsen til andre maskiner på nettet, skriv inn man ping i shellet. Du vil da se noe slikt:
Manualsidene er delt inn i flere seksjoner. F.eks. betyr PING(8) i eksemplet ovenfor at ping sine manualsider finnes i seksjon 8. For en beskrivelse av hva som ligger i de forskjellige manualseksjonene, gi kommandoen:
Noen viktige seksjoner: Shellkommandoer og en del systemprogrammer er i seksjon 1, systemkall i programmeringsspråket C er i seksjon 2, biblioteksfunksjoner er i seksjon 3, administrative systemverktøy er i seksjon 8. Du kan angi hvilken seksjon du vil se manualsider fra. For eksempel vil man write vise manualsidene i seksjon 1 for shellkommandoen write som sender meldinger til andre brukere. For å se dokumentasjon for C-systemkallet write(), må du gi kommandoen man 2 write. I flere av de kommende obligatoriske oppgavene vil du måtte hente viktig informasjon fra manualsider. Test dette nå ved f.eks. å se på manualsidene for ls og signal. Når du ferdig med en manualside, skriver du bare q for å avslutte. I tillegg til manualsider tilbyr Linux også såkalte "infosider" for en del kommandoer og programvare. Infosider leses med kommandoen info. De er ofte bedre oppdatert enn manualsider og kan være mer lettleste. Et eksempel er infosidene for kommandoen sort, som inneholder mer informasjon om hva dette programmet gjør enn bare en beskrivelse av syntaks og funksjonalitet. Prøv kommandoen:
Andre nyttige hjelpeverktøy i Linux er apropos og whatis. Prøv:
1.13 "Innebygde" kommandoerDe fleste Linux-kommandoene som du bruker er egne, ferdig kompilerte C-programmer som ligger lagret et sted på disken. Når du gir en kommando til bash, vil shellet lete etter et program med samme navn som kommandoen. Katalogene som det letes i ligger lagret som en liste i shellvaraiabelen PATH. For å se denne listen, gi kommandoen:
Hvis bash finner kommandoprogrammet, lastes dette inn i RAM og startes. Hvis ikke, får du en feilmelding. For å finne ut hvor på disken en Linux-kommando ligger lagret, kan du bruke kommandoen which. Shellet bash har i tillegg en del kommandoer som er "innebygget", dvs. at de ikke ligger på disk men er en del av shellprogrammet selv. Slike kommandoer kalles "bash-builtins". Du kan få en oversikt over dem ved å gi denne kommandoen:
Builtins er ikke dokumentert i manualsystemet. I stedet tilbyr bash kommandoen help som gir kortfattet dokumentasjon om builtins. Et eksempel er builtin-kommandoen alias, som gjør at du kan definere egne navn/shortcuts for f.eks. kommandoer du bruker ofte. Hvis du gir kommandoen man alias vil du kanskje (avhengig av versjonen av Linux so brukes) se at det ikke finnes noen manualside for alias. Prøv i stedet:
Sjekk også om det finnes manualside for kommandoen cd. Eller må du bruke help cd? Merk at en del kommandoer finnes både som en builtin i bash og som en vanlig Linux-kommando på disk, f.eks. kommandoen echo. Det finnes også C-systemkall som har samme navn som builtins, f.eks. read. Det betyr at det kan finnes manualsider for en kommando eller et systemkall med samme navn som en builtin. 1.14 Redirigiering av I/OMange kommandoer i Linux er tekstbaserte "filterprogrammer", som:
Et av filterprogrammene i Linux er kommandoen tr: "translate or delete characters". tr leser tekstlinjer og bytter ut eller fjerner tegn før linjene skrives ut igjen. Her er noen eksempler på bruk av tr til å gjøre om tekst, test gjerne disse med input fra tastaturet (se også man tr):
Alle filterprogrammer bruker i utgangspunktet tre input/output enheter:
Figuren nedenfor viser sammenhengen mellom filterprogram, terminalvindu/tastatur og de tre standard I/O-enhetene:
Shellet i Linux tilbyr redirigering (redirection) av input og output for filterprogrammer. Vi kan sette stdin og stdout til å være vanlige filer i stedet for tastatur og skjerm. Dette betyr at det er lettvint (og elegant) å få Linux-program og -kommandoer til å lese fra og skrive til filer. Spesialtegnene '<' og '>' brukes på kommandolinjen, sammen med et filnavn, for å gjøre redirigering av I/O:
For å forstå hvordan redirigering virker, kan vi se på filterprogrammet cat. Dette er en kommando som bare kopierer input (fra stdin) til output (stdout). cat kan også ta filnavn som parametre, den vil da skrive innholdet av filen ut til skjermen. Kjør kommandoen cat og skriv inn noen linjer med tekst. Du vil da se at linjene bare kopieres tilbake (som et ekko). cat kan avsluttes ved å trykke Ctrl-D (som er end-of-file tegnet i Linux) eller Ctrl-C (interrupt). Hvis du kombinerer cat med redirigering av I/O, kan du få denne enkle kommandoen til å gjøre andre nyttige ting:
Lag noen filer og prøv eksemplene ovenfor selv, for å se at det virker som det skal. Merk at i det siste eksemplet har cat faktisk blitt til en enkel teksteditor! Noen flere eksempler på redirigering av I/O (les manualsider for å forstå hvordan kommandoene her virker):
Vi kan også redirigere I/O slik at output fra en kommando sendes som input til neste kommando, dette kalles for piping ("rørlegging" på norsk -- vi "kobler" to kommandoer sammen). Til dette brukes spesialtegnet '|' (vertikal strek eller "pipe") som skrives mellom de to kommandoene. Noen eksempler du kan teste (du vil antagelig trenge å lese manualsider for å forstå hvordan de virker):
1.15 Innføringskurs i Linux på nettetDet finnes mange gode Linux/Unix begynnerkurs tilgjengelig på nettet. Vi anbefaler sterkt at du går gjennom dette kurset fra University of Surrey:
2 OppgaverNedenfor er det tre relativt enkle oppgaver som skal besvares med vanlig tekst. For å løse oppgavene må du kanskje lese både Linux manualsider og stoff som du finner på nettet (f.eks. innføringskurset lenket til ovenfor). Merk at du skal gjøre disse oppgavene på serveren itstud.hiof.no, selv om du evt. har Linux på egen maskin. Informasjon om hvordan du leverer inn besvarelsen er gitt etter oppgavene. Oppgave 1
Oppgave 2
Oppgave 3Forklar kort hva følgende seks Linux-kommandoer gjør:
Hva skal du levere?Svarene på de tre oppgavene gitt ovenfor skal du skrive inn som ren tekst i Linux ved å bruke en editor. Alle svarene skal skrives inn i en og samme fil på serveren itstud.hiof.no. Denne filen skal ha navnet lab_01.txt. Etter at du er ferdig med å skrive svarene, skal du lagre filen lab_01.txt i katalogen htdocs som allerede skal finnes i hjemmekatalogen din på itstud.hiof.no (hvis katalogen ikke finnes, oppretter du den med mkdir). Filen vil da være tilgjengelig på nettet med denne URL: https://itstud.hiof.no/~brukernavn/lab_01.txt der brukernavn er ditt login-navn på serveren. Innlevering av besvarelsen din skal gjøres i Canvas ved bare å sende inn URL gitt ovenfor. Merk: Det kan hende at tekstfilen du har laget på serveren, lab_01.txt, bruker et tegnsett som gjør at de norske bokstavene æøåÆØÅ ikke vises korrekt i en nettleser. Dette kan du fikse på flere måter. F.eks. kan du bruke Linux-verktøyet iconv til å bytte til "standard" Unicode tegnsett med disse to kommandoene:
|