ITF225129 Innføring i operativsystemer

Obligatorisk oppgave 1: Kom i gang med Linux

Denne 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. I den første delen gis det en innføring på begynnernivå i bruk av Linux (eller Unix, som er det opprinnelige navnet på dette operativsystemet). Det forventes at du prøver ut samtlige Linux-kommandoer som er gitt her. Still spørsmål til faglærer eller til studentassistentene hvis det er ting du ikke forstår. Det skal ikke leveres noen besvarelse fra del 1. Hvis du allerede mestrer bruk av Linux, kan du gå direkte til selve oppgavene i del to av dette dokumentet.
  2. Den andre delen inneholder noen (forhåpentligvis) enkle oppgaver. Det skal leveres en besvarelse i form av et kort tekstdokument som skal legges ut på en Linux-webserver.

1 Introduksjon til Linux

1.1 Logge inn

Hvis 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:

$ ssh ditt_brukernavn@itstud.hiof.no

eller

$ ssh ditt_brukernavn@itstud

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 Kommandolinjen

Kommandolinjen 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:

  • Shellet tilbyr et "Command Line Interface" (CLI). CLI lar deg kontrollere datamaskinen ved å bruke kommandoer som legges inn bare med tastaturet, i stedet for å navigere i et grafisk brukergrensesnitt (GUI) med en mus eller annen pekeredskap.
  • Shellet lar deg kjøre andre programmer eller script, og er også svært nyttig for å administrere datamaskinen når du vet hvilke kommandoer du skal bruke.
  • De fleste Linux-distribusjoner bruker programmet bash (Bourne-Again Shell) som standard 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:

username@hostname:currentdirectory$

Når jeg logger på serveren it.stud.hiof.no, får jeg denne ledeteksten:

janh@itstud:~$

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-kommandoer

La 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:

$ 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:

  • -q : viser alle påloggende brukernavn og antall brukere pålogget
  • -b : viser tidspunktet for siste oppstart av systemet
  • --version: skriver ut versjonsinformasjon for programmet who

Prøv disse ved å skrive inn følgende kommandoer og se hvordan de fungerer:

$ who -q
$ who -b
$ who --version

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:

$ man 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:

$ cal

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:

  • Skriv ut kalenderen for året og måneden du selv er født.
  • Finn ut hvilken ukedag Jesus ble født på (la oss anta at det var juleaften i år 1).
  • Skriv ut kalenderen for hele året 2023
  • Skriv ut kalenderen for september 1752. Wtf?

Her er flere enkle kommandoer du kan teste for å bli kjent med shellet og tekstbasert Linux:

  • Bruk uptime til å finne ut hvor lenge det er siden maskinen du er logget på var ute av drift.
  • Bruk finger til å finne ut mere om brukeren janh.
  • Send en melding med write til en annen bruker på systemet.
  • Lær deg å bruke den enkle, selvforklarende teksteditoren nano.
  • Finn ut hva kommandoen apropos kan brukes til.
  • Kommandoen which forteller hvor på disken de eksekverbare programmene for hver Linux-kommando er lagret. Finn ut hvor Java Virtual Machine ("java") ligger.
  • Programmet cat kan brukes til å se på innholdet av tekstfiler. Kjør kommandoen cat /etc/passwd for å se den "rå" informasjonen om alle brukerne på systemet.
  • Les brukerinformasjonen fra systemet en "side" om gangen ved å gi kommandoen cat /etc/passwd | more. Prøv å google litt for å finne ut hva tegnet '|' ("pipe") i en kommandolinje gjør, og bruk også man for se hva som utføres av kommandoen more

1.4 echo og systemvariabler

I 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:

$ echo Cashmere Cat

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:

$ echo Hei $USER
$ echo $HOSTNAME
$ echo $TERM
$ echo $PATH

1.5 System- og hardwareinformasjon

Linux 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:

$ lscpu
$ lspci

Her er noen flere kommandoer som gir systeminformasjon. Prøv å forstå hva disse kommandoene gjør, ved å lese manualsider og studere utskriften:

$ cat /proc/version
$ cat /proc/partitions
$ cat /proc/cpuinfo
$ df
$ lsblk
$ free -m

1.6 Litt om filer og kataloger

Etter 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:

$ mkdir Intro2OS

Bytt deretter stående katalog til å være denne nye katalogen ved å bruke kommandoen cd (change directory):

$ cd Intro2OS

Deretter oppretter du en ny fil og redigerer den med den enkle, selvdokumenterende editoren nano:

$ nano nyfil.txt

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:

$ ls

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:

  • Bruk filene som du laget til å eksperimentere med disse fil-kommandoene:

    • ls: Skriver en liste med informasjon om filene i en katalog
    • cp: Kopierer filer og kataloger
    • mv: Flytter eller bytter navn på filer og kataloger
    • rm: Sletter filer og kataloger (vær forsiktig med denne...)
    • chmod: Setter tilgangskontroll for filer (mer om dette senere i kurset)

    Gi f.eks. kommandoen man mv for å se hvordan mv virker

  • Se på innholdet av tekstfilene dine med cat, more og less.
  • Opprett en ny underkatalog med mkdir, kopier noen filer ned i denne katalogen, og fjern deretter katalogen igjen.
  • Opprett en ny katalog som heter rotkatalog i katalogen Intro2OS. Lag flere nivåer av forskjellige underkataloger inne i rotkatalog. Bruke kommandoen cd til å flytte deg rundt i denne katalogstrukturen du har laget. Finn deretter ut hvordan du kan fjerne hele "katalogtreet"som starter i rotkatalog (og alle filene som evt. ligger der), med bare én enkel Linux-kommando.

1.7 Stående katalog og forelderkatalog

Gi kommandoen:

$ ls -a

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:

$ ls -a -l -h

eller "klump" de tre opsjonene sammen på denne måten:

$ ls -alh

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:

$ cd .

forandres ikke stående katalog. Kommandoen:

$ cd ..

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 hjemmekatalog

Alle 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:
["figur"]

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:

$ cd ~

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økestier

En 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:

$ pwd
/home/janh

Det finnes to ulike måter å angi søkestier på:

Absolutt søkesti:
Starter enten på toppen av filsystemet i rotkatalogen som angis med tegnet '/', eller i hjemmekatalogen som angis med tegnet '~'. Deretter kommer listen av katalognavn adskilt med '/' som går helt frem til katalogen der filen vi skal bruke befinner seg.

Relativ søkesti:
Stien starter med et katalognavn som ligger inne i stående katalog (working directory). Deretter kommer listen av katalognavn adskilt med '/'.

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):

$ cd /home/brukernavn/Intro2OS

Du skal nå være i Intro2OS-katalogen din. For å bekrefte dette, skriv inn:

$ pwd

For å gå tilbake til hjemmekatalogen, skriv inn:

$ cd

Bytt nå til underkatalogen igjen ved å bruke en relativ søkesti:

$ cd Intro2OS

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):

$ ls /
$ ls ../..

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 Linux

Som 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:

  • Start editoren vi og stopp den igjen med :q.
  • Start (den fantastiske!) editoren emacs i terminal-modus med kommandoen emacs -nw.
  • Gå gjennom hele nybegynneropplæringen i emacs, som du får frem ved å trykke Ctrl-h t.
  • Prøv psykoanalyse i emacs med kommandoen Esc-x doctor :-)

1.11 Effektiv bruk av shellet

Det 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øy

Manualsidene 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:

PING(8)                             iputils                            PING(8)

NAME
       ping - send ICMP ECHO_REQUEST to network hosts

SYNOPSIS
       ping [-aAbBdDfhLnOqrRUvV46] [-c count] [-F flowlabel] [-i interval]
            [-I interface] [-l preload] [-m mark] [-M pmtudisc_option]
            [-N nodeinfo_option] [-w deadline] [-W timeout] [-p pattern]
            [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl]
            [-T timestamp option] [hop...] {destination}

DESCRIPTION
       ping uses the ICMP protocol mandatory ECHO_REQUEST datagram to elicit
       an ICMP ECHO_RESPONSE from a host or gateway. ECHO_REQUEST datagrams
       ("pings") have an IP and ICMP header, followed by a struct timeval and
       then an arbitrary number of “pad” bytes used to fill out the packet [...]

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:

$ man man

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:

$ info sort

Andre nyttige hjelpeverktøy i Linux er apropos og whatis. Prøv:

$ man apropos
$ man whatis

1.13 "Innebygde" kommandoer

De 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:

$ echo $PATH

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:

$ man builtins

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:

$ help alias

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/O

Mange kommandoer i Linux er tekstbaserte "filterprogrammer", som:

  • Leser en strøm av tekst/tegn, linje for linje.
  • Gjør noe med ("filtrerer") tekstlinjene.
  • Skriver deretter ut filtrert tekst linje for linje.

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):

  • Små til store (engelske) bokstaver:
    $ tr a-z A-Z
  • Slett alle siffer i input:
    $ tr -d 0-9
  • Erstatt alle siffer med tegnet X:
    $ tr 0-9 X
  • Erstatt alle ikke-siffer(!) med X:
    $ tr -c 0-9 X
  • Erstatt alle påfølgende siffer med én X:
    $ tr -s 0-9 X

Alle filterprogrammer bruker i utgangspunktet tre input/output enheter:

  • Input leses fra standard innenhet: stdin. stdin er i utgangspunktet (default) satt til å være tastaturet
  • Output skrives til standard utenhet: stdout. stdout er i utgangspunktet terminalvinduet (skjermen).
  • Feilmeldinger skrives til standard feilenhet: stderr. stderr er i utgangspunktet også terminalvinduet.

Figuren nedenfor viser sammenhengen mellom filterprogram, terminalvindu/tastatur og de tre standard I/O-enhetene:

["figur"]

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:

  • Les input fra fil i stedet for fra tastatur:
    < filnavn
  • Skriv output til fil i stedet for til skjerm, overskriv hvis filen finnes fra før:
    > filnavn
  • Skriv output til fil, men legg til på slutten av filen ("append") hvis filen finnes fra før:
    >> filnavn

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:

  • Viser innholdet av filen fil_1 på skjermen:

    $ cat < fil_1

  • Lager en kopi av fil_1 og lagrer denne i fil_2:

    $ cat < fil_1 > fil_2

  • Legger til innholdet av fil_1 på slutten av fil_2:

    $ cat < fil_1 >> fil_2
  • Det som tastes inn blir lagret i fil_1:

    $ cat > fil_1

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):

  • Lagrer en liste med navn på alle filene i stående katalog på en egen fil:

    $ ls > liste-fil.txt

  • Legger til nåværende tidspunkt og en liste med alle påloggede brukere på den samme filen:

    $ date >> liste-fil.txt
    $ who >> liste-fil.txt

  • Legger til de 20 siste linjene på en fil på slutten av en annen fil:

    $ tail -20 < fil_1.txt >> fil_2.txt

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):

  • Telle antall filer (og kataloger) i stående katalog:

    $ ls | wc -l

  • Sortere listen over innloggede brukere på brukernavn:

    $ who | sort

  • Liste med alle brukere som heter "Magnus":

    $ cat /etc/passwd | grep -w Magnus

  • Hvor mange brukere heter "Magnus"?:

    $ cat /etc/passwd | grep -w Magnus | wc -l

  • Lage tilfeldig passord med 32 tall/bokstaver (denne er litt tricky):

    $ tr -cd '[:alnum:]' < /dev/urandom | fold -w32 | head -n1

1.15 Innføringskurs i Linux på nettet

Det finnes mange gode Linux/Unix begynnerkurs tilgjengelig på nettet. Vi anbefaler sterkt at du går gjennom dette kurset fra University of Surrey:

2 Oppgaver

Nedenfor 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

  1. Nevn en fordel og en ulempe ved å ha et interaktivt grafisk grensesnitt (GUI) for å bruke operativsystemet.

  2. Nevn en fordel og en ulempe ved å ha et interaktivt kommandolinjebasert grensesnitt (CLI/shell) for å bruke operativsystemet.

Oppgave 2

  1. Anta at du i stående katalog har en underkatalog som heter søppel. Inne i denne underkatalogen kan det ligge tusenvis av filer og andre kataloger (med underkataloger etc.) som er uten verdi og bare skal slettes. Skriv en Linux-kommando som fjerner alt innhold i katalogen søppel og i alle dens underkataloger.

  2. Skriv en Linux-kommande (sammensatt av enkeltkommandoer med en "pipe" i mellom) som lagrer de 100 første linjene i manualsidene for kommandoen find på en fil som heter find_100.man.

Oppgave 3

Forklar kort hva følgende seks Linux-kommandoer gjør:
  1. $ ls ~
  2. $ cat file1 file2 file3 file4 | grep cat
  3. $ who | wc -l
  4. $ ls -ld h*
  5. $ alias harakiri="rm -rf *" (NB! Ikke kjør denne kommandoen!)
  6. $ cat < kapittel_1.txt | tee kapittel_1.txt.backup | lpr

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:

$ iconv -t UNICODE -o tmp.txt lab_01.txt
$ mv tmp.txt lab_01.txt