Exam Flashcards
Et viktig trekk ved terminal-bruk på UNIX-/Linux-systemer, er de mange små verktøyene/programmene som hver er spesialsert på én enkelt funksjon (enkeltfunksjonsprogrammer).
Forklar og vis med et eksempel, hvordan enkeltfunksjonsprogrammer kan brukes sammen på en kommandolinje for å gjøre en oppgave som krever flere funksjoner.
Kommandoen grep brukes til å finne linjer i en tekst som innholder treff angitt med søkemønster. F.eks. gir vil følgende kommando liste alle linjene i filen telefonliste.txt som inneholder navnet Hansen: grep Hansen telefonliste.txt
Dersom det er ønskelig å sortere utskriften fra grep-kommandoen, kan programmet sort brukes til dette. Ved å koble utskriften fra grep til innlesning i sort, kombineres funkjsonene. Koblingen gjøre med et rør (engelsk: pipe), som angis med tegnet ‘|’. De sammenkoblede kommandoene vil se slik ut på kommandolinjen:
grep Hansen telefonliste.txt | sort
Forklar og illustrer med et eksempel hvordan variabler kan (1) opprettes og (2) brukes på kommandolinjen.
Variabeler opprettes ved hjelp på tilordning. Det er viktig at det ikke er mellomrom før og etter tegnet ‘=’. Her er et eksempel som oppretter variabelen A og gir den verdien abc:
A=abc
Dersom variabelverdien inneholder tegn som har spesiell betydnding i kommandotolkeren (shellet/skallet), så må verdien omsluttes av anførselstegn – enkle eller doble. I eksemplet under innholder verdien tegnene ‘;’ og ‘ ‘, som begge har spesiell betydning
A=”a;b c”
For å bruke varaiblene navngis de i kommandoer, prefikset med tegnet ‘$’. F.eks.: For å skrive ut verdien til variablen A, kan følgende kommando brukes:
echo $A
Forklar og vis med et eksempel, forskjellen på en miljøvariabel (environment variabel), og en variabel som ikke er det.
Hver programkjøring/prosess har et miljø (environment) som innholder en liste med variabler og deres verdier. Variabler som er nevnt i lista, kalles miljøvariabler – i motsetning til de andre. Poenget med å miljøvariabelen er at de går i arv, og dermed blir en måte å sende data inn i et program.
I eksemplet under opprettes de to variabelene A og B. På linje 3 blir B gjort til en miljøvariabel.
1: A=hei # oppretter variabelen A og gir den verdien “hei”
2: B=hopp # oppretter variabelen B og gir den verdien “hopp”
3: export B # setter variabelen B i miljøvariabellista
Tenk deg at du har flere programkjøringer (prosesser) fordelt over flere sesjoner. Hvilken av disse verktøyene ville du brukt for å liste opp alle programkjøringene dine?
ps
Forklar og gi et eksempel hvordan filer kan (1) opprettes (2) brukes (3) kopieres (4) endres og (5) slettes på kommandolinjen – uten bruk av editor.
(1) Opprettelse
Filer kan opprettes ved at utskrift fra en fil redirigeres til en fil som ikke eksisterer fra før. F.eks. hvis filen nyfil.txt ikke eksisterer, kan den opprettes slik:
echo nytt innhold i den nye fila mi > nyfil.txt
Vi har også brukt kommandoen touch i mange eksempler. Dens kommandlinjeargumenter tolkes som filstier (file paths). Dersom disse filene ikke eksisterer opprettes de. I eksempelet under brukes touch til å opprette de tre filene A, B og C.
touch A B C
(2) Bruk
I Linux/Unix er mye representert som filer. Vi sier ofte at “alt er filer” i Linux/Unix. Mange kommandoer skriver og/eller leser derfor til/fra filer. Ofte er de laget slik at om de kalles uten argumenter, så leser de fra filen som er knyttet til standard inngang (STDIN) og skriver til filen som er knyttet til standard utgang (STDOUT) – og at dersom andre filer skal brukes så angis de som argumenter – eller ved hjelp av redirigering. Eksempelet under leser fra filen usortert.txt og skriver til sortert.txt ved hjelp av redirigering.
sort < usortert.txt > sortert.txt
En annen variant, som gjør det samme, men som angir filen som skal leses fra ved hjelp av et kommandolinjeargument:
sort usortert.txt > sortert.txt
(3) Kopiering
For å kopiere en fil i Linux, kan du f.eks. bruke kommandoen cp. For å kopiere filen minfil.txt og kalle den minfil-kopi.txt, kan du skrive følgende kommando:
cp minfil.txt minfil-kopi.txt
Det er også mulig å lage en kopi ved hjelp av en kommando som skriver ut innholdet i en fil (f.eks. cat), og redirigere denne utskriften til en ny fil.
cat minfil.txt > minfil-kopi.txt
(4) Endring
Endringer i filer kan gjøres ved at filinnholdet erstattes eller skjøtes på.
Eksempel på erstatning:
echo “Dette kommer i stedet for det gamle innholdet.” > gammel_fil.txt
Eksempel på påskjøting:
echo “Dette blir lagt til på slutten – etter det gamle innholdet.”»_space; gammel_fil.txt
Studentene har hatt en del eksempler og oppgaver med bruk av kommandoen sed. Denne kan produsere ny tekst basert på en ekisterende tekst. Ved å bruke bruke opsjonene -i (for ‘inline’), vil den nye teksten skrives til samme fil som den opprinnelige filen ble lest fra. For eksempel, hvis du vil erstatte alle forekomster av “Hello” med “Hi” i filen “minfil.txt”. i minfil.txt, kan du skrive følgende kommando:
sed -i ‘s/Hello/Hi/g’ minfil.txt
(5) Sletting
For å slette en fil på kommandolinjen i Linux/Unix, kan du bruke kommandoen rm (eller unlink). For eksempel, hvis du vil slette “minfil.txt”, kan du skrive følgende kommando:
rm minfil.txt
Forklar og vis med et eksempel hvordan kommandolinjeargumenter kan brukes til (1) å sende data som input til et shell-skript, og (2) hvordan dataene kan brukes i shell-skriptet.
!/bin/sh
På kommandolinjen, kan vi legge til argumenter etter navnet på skriptet. Her er et eksempel på et shell-skript som bruker de tre første kommandolinjeargumentene:
echo “Fornavn: $1”
echo “Etternavn: $2”
echo “Alder: $3”
Hvis vi nå kaller skriptet fra kommandolinjen med tre argumenter, vil skriptet bruke disse argumentene og skrive ut innholdet i hver av dem. For eksempel, hvis du lagrer dette skriptet som mitt-skript.sh og kjører følgende kommando på kommandolinjen:
./mitt-skript.sh Pia Nøtt 30
, så vil skriptet skrive ut:
Fornavn: Pia
Etternavn: Nøtt
Alder: 30
Skriv et shell-skript som (1) leser inn tekst fra en fil som heter tekst.txt (2) sorterer linjene i teksten alfabetisk og (3) lagrer den sorterte teksten til tekst_sortert.txt. La skriptet være kommentert slik at det kommer tydelig frem hvordan de ulike delene av skriptet bidrar til å besvare oppgaven. Vis også hvordan du gjør skriptet kjørbart.
!/bin/sh
Her er to varianter. Først en “pedagogisk” og tungvindt variant som gjør hvert spesifiserte trinn for seg, og lagrer resultatet i en variabel, og en løsning som gjør alt med en kommando.
Her er den tungvindte (og mer resursskrevende) varianten:
Leser inn tekst fra tekst.txt
text=$(cat tekst.txt)
Sorterer linjene alfabetisk
sorted_text=$(echo “$text” | sort)
Lagrer den sorterte teksten i tekst_sortert.txt
echo “$sorted_text” > tekst_sortert.txt
Her er den mer effektive (og mye bedre) varianten:
Kommandoen sort leser fila tekst.txt (1), sorterer innholdet
# alfabetisk (2) og skriver resultatet ut. Utskriften er redirigert
# til fila tekst_sortert.txt (3).
sort tekst.txt > tekst_sortert.txt
For at skriptene skal være kjørbare, må de gis kjøretillatelse. Det kan gjøres med kommandoen chmod, f.eks. slik:
chmod +x skriptnavn.sh=
Kommandoen bg setter noe i bakgrunnen. Hva settes i bakgrunnen?
en jobb
Hvilken av påstandendene er sann dersom følgende kommandolinje kjøres uten feil?
Variabelen A får nytt innhold.
Lag et kommentert skript som gjør følgende ved kjøring:
Sjekker om det finnes en katalog (directory) i brukerens hjemmekatalog (home directory) som heter kat1. Dersom en ikke finnes fra før, så blir den opprettet.
Oppretter et git-repositorium (repo) i katalogen som ble opprett.
Oppretter tre tomme filer som heter A, B og C i repoets arbeidstre (working tree).
Legger A og B (ikke C), til repoets klargjøringsområde (staging area).
Forplikter (commit) A (ikke B og C), slik at den blir innregistrert selve repo’et. Sørg også for at en forklarende tekst blir loggført.
Kloner repoet til en annen katalog, som også ligger i brukerens hjemmekatalog. Den skal hete kat2.
Sørg for at det fremkommer i kommentarene hvilke deler av skriptet som besvarer de ulike delene av oppgaveteksten.
!/bin/sh
Sjekker om katalogen kat1 finnes i hjemmekatalogen
if [ ! -d ~/kat1 ]
then
# Oppretter katalogen kat1 hvis den ikke finnes
mkdir ~/kat1
fi
Går til katalogen kat1
cd ~/kat1
Oppretter et git-repositorium i katalogen kat1
git init
Oppretter tre tomme filer i arbeidstreen
touch A B C
Legger A og B til klargjøringsområdet (staging area)
git add A B
Forplikter (commit) kun A med en forklarende tekst
git commit -m “Legger til filen A” A
Går tilbake til hjemmekatalogen
cd
Kloner repoet fra kat1 til kat2
git clone kat1 kat2
Lag et shell-skript som (1) leser inn en tekst fra fil (2) behandler teksten (3) skriver den behandlede tekst til en ny fil.
Behandlingen går ut på å bytte ut alle forekomster av et bestemt ord (opprinnelig ord) et bestemt annet ord (erstatningsord).
Skriptet skal la brukeren oppgi følgende data som input til skriptet:
Stien (path) til filen som den opprinnelige teksten skal leses fra
Stien (path) til filen som den behandlede teksten skal skrives til
Opprinnelige ord (som skal erstattes)
Erstatningsord.
Du kan selv velge måte skriptet får dataene inn.
Sørg for at det fremkommer i kommentarene hvilke deler av skriptet som besvarer de ulike delene av oppgaveteksten.
Her kommer tre varianter som bruker ulike måter å hente data inn fra brukeren: (1) Fra fil (standard inngang / STDIN) (2) fra kommandolinjeargumenter (3) miljøvariabler.
Fra fil (standard inngang / STDIN)
#!/bin/sh
Les inn data fra brukeren
echo “Oppgi stien til filen som skal leses:”
read INNFIL
echo “Oppgi stien til filen som den behandlede teksten skal skrives til:”
read UTFIL
echo “Oppgi ordet som skal byttes ut:”
read OPPR_ORD
echo “Oppgi NYTT_ORDet:”
read NYTT_ORD
Behandle teksten og skriv til ny fil
sed “s/$OPPR_ORD/$NYTT_ORD/g” $INNFIL > $UTFIL
Fra kommandolinjeargumenter
#!/bin/sh
Les inn kommandolinje-argumenter
INNFIL=”$1”
UTFIL=”$2”
OPPR_ORD=”$3”
NYTT_ORD=”$4”
Behandle teksten og skriv til ny fil
sed “s/$OPPR_ORD/$NYTT_ORD/g” $INNFIL > $UTFIL
Anta at skriptet heter skript.sh og ligger i aktiv katalog. For å bruke skript.sh til å lage en variant av fila ./fil.txt, hvor “Hei” er byttet med “Hopp”, og hvor den nye fila heter =./ny.txt” må følgende kommando gis:
./skript.sh fil.txt ny.txt Hei Hopp
Miljøvariaber
For å bruke denne versjonen av skriptet, må du sette miljøvariablene før du kjører skriptet, f.eks. slik:
export INNFIL=fil.txt
export UTFIL=ny.txt
export OPPR_ORD=Hei
export NYTT_ORD=Hopp
./skript.sh
#!/bin/sh
Bruker miljøvariabler til å behandle teksten og skrive til ny fil
# (Her forhåndskontrollerer vi ikke om variablene har innhold, det bør
# normalt gjøres)
sed “s/$OPPR_ORD/$ERSTATNINGSORD/g” $INNFIL > $UTFIL
echo “Behandlet tekst er skrevet til $UTFIL.”
Hva gjør kommandoen echo A?
Skriver ut bokstaven A.
Vil du si at Linux er …
et operativsystem
Hvordan blir rettighetene til filen abc etter en vellykket kjøring av kommandoen chmod 751 abc?
rwxr-x–x
Under ser du noen filstier (file paths). Hvilken av disse er ikke relativ?
/a/b/c/..
Hvilken av disse følgende kommandoer kan ikke brukes filkopiering?
ln
Hva gjør kommandoen cat A?
Skriver ut det som er lagret i filen A.
PATH er en …
variabel som inneholder en liste med kataloger
Hvilken av disse linuxkommandoene vil du ikke bruke når du leter etter en bestemt fil, som du har vet navnet på?
pstree
Hvilken av disse påstandene er usann?
En jobb kan bare inneholde én programkjøring.
Hvilken av påstandendene er usann dersom følgende kommandolinje kjøres uten feil?
Det som var i filen A fra før, blir overskrevet.
Hvis arbeidskatalogen inneholder filene abc, bcd og cde, hva blir utskriften av følgende kommandolinje:
./bcd
Følgende to kommandolinjer gir samme utskrift.
echo abc bcd cde | cut -d” “ -f2
echo abc bcd cde | awk -F “ “ ‘{print $2}’
Hvilken av alternativene under viser riktig utskrift?
bcd
Hva blir utskriften av følgende kommandolinje:
echo abc bcd cde | sed s/.$/xyz/
abc bcd cdxyz
Hvilken av påstandene under er sann om en vellykket kjøring av kommandoen git add abc?
Kommandoen legger abc i et klargjøringsområde (staging area).
Hva blir utskriften av følgende kommandolinje:
echo abc bcd cde | grep e
abc bcd cde
Hvilken av påstandene er sann?
Skjulte filer …
har alltid filnavn som begynner med punktum
For å se skjulte filer i en katalog. Hvilken av kommandoene under ville du brukt?
ls -a