Tips og triks om terminalen
Denne sida tar med diverse temaer som kan være nyttige hvis du er ny bruker av terminal.
Innholdsfortegnelse
- Hva er en terminal?
- Alle terminaler er ikke like
- Navigere filsystemet
- Vanlige kommandoer
- Vanlig funksjonalitet i skall
- Konvensjoner for program du kjører i terminalen
- Temaer som ikke er dekket av denne gjennomgangen
- Videre lesning
Hva er en terminal?
Terminalen/kommandolinja, på engelsk ofte kalt command line, er en tekstbasert måte å starte programmer på. Vi bruker den ofte når vi lager dataprogram.
I terminalen skriver du inn kommandoer etter hverandre.
Det gjør du ved å skrive inn en kommando og trykke [ENTER]
.
Hver kommando du kjører ber datamaskinen om å gjøre noe.
Hvis du ikke får noen feilmelding, har det som regel gått bra – terminalprogram pleier ikke å si fra at ting er OK.
Alle terminaler er ikke like
Det finnes mange forskjellige typer shell. Et skall er programmet som du snakker med når du jobber i terminalen.
Hvilket skall du bruker, avgjør hvilken avansert funksjonalitet du har tilgang til. Den grunnleggende funksjonaliteten for å starte et program er mer eller mindre helt lik for alle skall.
Skallet bash
er velkjent og mye brukt, spesielt på Linux og Mac før macOS Catalina.
Fra og med macOS Catalina er zsh
det innebygde skallet.
På Windows er cmd
og Powershell
vanlige, der sistnevnte er den mest avanserte.
Men de fungerer ganske annerledes fra andre skall.
Du bør vurdere å installere bash
eller oppsøke en annen innføring i Powershell
.
Vi går litt fort fram i denne gjennomgangen. Du kan søke etter «Introduction to Bash command line» for guider som går litt grundigere til verks, for eksempel Programming Historian's Introduction to the Bash Command Line eller Ryans Linux-introduksjon (det meste gjelder også på andre operativsystem så lenger du bruker Bash).
Navigere filsystemet
Working Directory
Du står til enhver tid i ei mappe, kalt working directory. Du kan sammenlikne det et vindu av en filutforsker, som til enhver tid har én mappe åpen.
Med kommandoen pwd
kan du Print Working Directory. Da ser du hvor du står.
Bruk kommandoen cd MAPPE
for å bytte (Change Directory) til MAPPE.
Absolutte filstier
Uansett hvor du står, kan du alltid referere til en hvilken som helst fil som ligger hvor som helst. Da bruker du absolutt filsti. Absolutte filstier starter med en skråstrek, bortsett fra Windows hvor de også kan starte med stasjonen og kolon.
Eksempler på absolutte filstier på Linux/Unix:
/home/n123456/Documents
/etc/hosts
/etc/hostname
Windows:
C:\Users\n123456\Desktop
D:\Backup\2019\03\14.zip
Absolutte filstier avhenger ikke av hvilken mappe du står i, de er alltid det samme.
Hjemmemappa
De aller fleste skall opererer med ei spesiell mappe kalt hjemmemappa, eller home på engelsk.
På Linux og Unix pleier den å være /home/n123456
, på Windows C:\Users\n123456
.
Skal du referere til hjemmemappa di, kan du som regel bruke tilde-tegnet, ~
.
På norsk tastatur holder du inne [Alt Gr]
, trykker tasten mellom Å
og [ENTER]
,
slipper [Alt Gr]
og trykker på [MELLOMROM]
.
Eksempel:
~/Desktop
~/Documents
Merk at tilde blir utvidet av skallet. De blir dermed gjort om til absolutte filstier før noe annet program begynner å lese dem.
Du kan alltids returnere til hjemmemappa ved å kjøre kommandoen cd
uten argument.
Relative filstier
Relative filstier tar utgangspunkt i mappa du står i. De starter med navnet på ei fil eller ei mappe i den mappa.
Det ligger to spesielle filer i hver mappe:
.
er en referanse til den mappa...
er en referanse til foreldermappa.
Si at du står i /home/n123456/kurs/ekstra
.
Tabellen nedenfor viser hvordan du kan bygge en relativ filsti for ulike destinasjoner:
Absolutt filsti | Relativ filsti fra /home/n123456/kurs/ekstra |
---|---|
/home/n123456/kurs/ekstra/terminal.md | terminal.md |
/home/n123456/kurs/ekstra | . |
/home/n123456/kurs/ekstra | ./././././. |
/home/n123456/kurs | .. |
/home/n123456/kurs | ../../kurs/../kurs/../kurs/../kurs |
/home/n123456/kurs/kap1 | ../kap1 |
/home/n123456/kurs/kap1/README.md | ../kap1/README.md |
/home/n123456 | ../.. |
/home | ../../.. |
Jokertegn
Skallet lar deg bruke jokertegn for å velge flere filer ut fra likheter i filstien.
Stjerna, *
, kan brukes for å matche hva som helst i en filsti.
Alle treffene vil bli lagt etter hverandre, med mellomrom, før de blir sendt til programmet som skal kjøres.
For eksempel så kan du konkattenere alle filene i mappa du står i som slutter på .py
:
kurs $> cat *.py
Hvis du har 1.py
, 2.py
og 3.py
liggende i mappa du er i, så vil skallet ditt gjøre om kommandoen din til:
cat 1.py 2.py 3.py
før den kjører cat
.
Vanlige kommandoer
Noen av disse kommandoene er utilgjengelige i PowerShell, som fungerer ganske annerledes fra andre skall.
cd MAPPENAVN
: Change Directory. Lar deg endre hvilken mappe du står i. Kan sammenliknes med å dobbelttrykke på ei mappe i filutforskeren.cd
: Bytt til hjemmemappa.cd -
: Bytt til den forrige mappa du sto i. Historikken går bare én mappe bakover i tid.pwd
: Print Working Directory. Skriv til terminalen hvilken mappe du står i.ls
: LiSt. Vis innholdet i mappa du står i.ls MAPPE
: Vis innholdet av MAPPE.cat FIL
: conCATenate. Vis innholdet av FIL. Du kan liste opp flere filer for å konkattenere dem sammen.mv FRA TIL
: MoVe. Bytt navn på fila eller mappa FRA, sånn at den heter TIL. Du kan også flytte den til et annet sted.cp KILDE MÅL
: CoPy. Lag en kopi av KILDE som heter MÅL.rm FIL
: ReMove. Slett FIL permanent.man KOMMANDO
: MANual. Vis hjelpeinformasjon for KOMMANDO. Tastq
for å avslutte.grep SØK FIL
: Vis alle tilfeller av SØK i FIL.grep -r SØK MAPPE
: Vis alle tilfeller av SØK i filer i MAPPE.nano FIL
: Rediger FIL i en enkel editor. Du kan holde inne[CTRL]
og trykke en tast for å lagre eller avslutte, tastene står nederst.^O
betyr[CTRL]
+O
,M-U
betyr[ALT]
+U
.
Vanlig funksjonalitet i skall
Kjør et program
Den første delen av enhver kommando bestemmer hvilket program du skal kjøre.
Når vi kjører Python, skriver vi alltid python
først i kommandoen.
Da er det Python-fortolkeren som kommer til å kjøre.
Kommandolinje-argumenter
Etter navnet på programmet kan du legge til argumenter som vil bli gitt til programmet.
Vi kaller dem for kommandolinje-argumenter (command-line arguments).
Når vi kjører Python-kode vi har skrevet, skriver vi navnet på .py
-fila etter python
, men med et mellomrom i mellom.
Python-fortolkeren vet at filnavn du gir til den skal tolkes som Python-skript som skal kjøres.
For eksempel så har cp hei.txt hallo.txt
to kommandolinjeargument som blir gitt til cp
:
hei.txt
hallo.txt
Hvis en filsti skal inneholde mellomrom, må du bruke hermetegn rundt argumentet sånn at skallet oppfatter det som ett argument og ikke flere. For eksempel:
cp "hilsen hei.txt" "hilsen hallo.txt"
har to kommandolinjeargument som blir gitt til cp
:
hilsen hei.txt
hilsen hallo.txt
Glemmer du hermetegn, får du:
cp hilsen hei.txt hilsen hallo.txt
som har fire kommandolinjeargument som blir gitt til cp
:
hilsen
hei.txt
hilsen
hallo.txt
Det blir feil.
I kapittel 3.2 lærer du om hvordan Python-skriptet ditt kan dra nytte av kommandolinjeargument.
Avbryte kjørende program
Du kan avslutte de fleste program med [CTRL]
+ C
.
Noen program bruker den tastekombinasjonen for noe annet. De kan gjerne avsluttes på andre måter:
less
(for å skrolle gjennom tekst) ogman
avsluttes ved å trykkeQ
nano
avsluttes med[CTRL]
+X
vim
(kraftig, men uvant teksteditor) avsluttes ved å trykke[ESC]
, taste:q!
(lagrer ikke endringer) og[ENTER]
- Program som leser fra terminalen kan ofte avsluttes med
[CTRL]
+D
. Da gir du beskjed om at du er ferdig med å skrive - Siste utvei er
[CTRL]
+Z
for å sette programmet på pause, etterfulgt avkill -9 %1
Autofullfør
Når du skriver kommandoer i terminalen,
kan du bruke [TAB]
-tasten til å fullføre argumentet du skriver på.
Hvis det du har skrevet er nok til å vite hvilken fil du tenker på,
kan du fylle ut resten med ett trykk.
Er det flere filer, må du gjerne trykke flere ganger for å få forslag eller gå gjennom forslagene.
Dette er veldig nyttig siden du ofte vil skrive filnavn i kommandoer. Du kan bruke autofullfør både når du skal skrive hvilket skript Python-fortolkeren skal kjøre, og når du skal fortelle skriptet hvilken fil du vil lese fra eller skrive til.
Historikk
Bruk [PILTAST OPP]
og [PILTAST NED]
til å bla gjennom historikken.
Vil du kjøre den forrige kommandoen din én gang til,
kan du trykke [PILTAST OPP]
én gang, etterfulgt av [ENTER]
.
Du kan også endre på kommandoen etter at du har bladd deg opp til den,
for eksempel hvis du vil kjøre det samme med en liten endring.
Konvensjoner for program du kjører i terminalen
Her er noen konvensjoner som terminalprogram pleier å følge. Men du har selvfølgelig ingen garantier for at alle program følger disse.
Når du skriver egne program, bør du etterstrebe å overholde disse konvensjonene. Det gjør det enklere for andre å ta i bruk programmet ditt. Kapittel 3.2 om kommandolinjeargumenter går i detalj på hvordan du får til det.
Korte tilvalg/flagg
Kommandoers virkemåte kan justeres med tilvalg (options). De starter alltid med bindestrek. Korte tilvalg (short options) er alltid ett tegn lange.
For eksempel kan du få ls
til å vise flere detaljer med -l
hvis du bruker bash
som skall:
kurs $> ls -l
total 1128
-rw-r--r-- 1 n123456 n123456 1008 Mar 27 15:59 README.md
-rw-r--r-- 1 n123456 n123456 622 Feb 13 13:08 book.toml
...
-rw-r--r-- 1 n123456 n123456 1094001 Feb 13 13:08 mermaid.min.js
...
Du kan vise filstørrelser med suffiks for kilo, mega, og så videre med -h
:
kurs $> ls -l -h
...
-rw-r--r-- 1 n123456 n123456 1.1M Feb 13 13:08 mermaid.min.js
...
Når du gir flere korte tilvalg, kan du kombinere dem ved å bruke én bindestrek etterfulgt av alle tilvalgene uten bindestrek, for eksempel:
kurs $> ls -lh
...
-rw-r--r-- 1 n123456 n123456 1.1M Feb 13 13:08 mermaid.min.js
...
Tilvalg skal som regel plasseres rett etter navnet på programmet du kjører, men rekkefølgen på dem spiller ingen rolle.
Tilvalgene som er vist i dette delkapittelet tar ikke inn noen tilhørende verdi. De kalles også for flagg.
Korte tilvalg med tilhørende verdi
Noen tilvalg tar inn en verdi. Den kan du angi som det neste kommandolinjeargumentet.
grep
, programmet som lar deg søke etter en tekst i ei fil, printer vanligvis bare de linjene som har søkestrengen i seg.
Du kan få den til å skrive linjene som kommer før og etter med tilvalget -C <antall linjer>
. For eksempel:
kurs $> grep -C 2 Python README.md
...
Også disse tilvalgene kan kombineres med bare én bindestrek, så lenge tilvalget som skal ta inn en verdi er den siste i gruppa:
kurs $> grep -iC 2 Python README.md
...
-i
er her et flagg som sier at søket skal ignorere små og store bokstaver.
Lange tilvalg/flagg
Lange tilvalg starter alltid med to bindestreker, etterfulgt av hele ord eller fraser.
Ett og samme tilvalg har ofte en kort og en lang variant.
For eksempel kan du bruke enten -a
eller --all
for å vise skjulte filer med ls
.
Når du til daglig sitter i terminalen er det praktisk å bruke korte tilvalg, men hvis du skriver ned kommandoer i et skript eller i en guide, bør du bruke lange tilvalg sånn at leseren lettere forstår hva de gjør.
Lange tilvalg med tilhørende verdi
Den tilhørende verdien til et langt tilvalg kan gis som et nytt kommandolinjeargument, likt som for korte tilvalg. Men du kan også gi verdien ved å bruke et likhetstegn.
For eksempel:
kurs $> ls --format=long --all --reverse --sort time --human-readable
Her bruker --format
likhetstegn og --sort
mellomrom, men det kunne like gjerne vært omvendt,
eller begge kunne brukt den samme måten.
Få hjelpeinformasjon
Legg til flagget --help
på en kommando for å få en hjelpetekst som forklarer hva programmet gjør, og hvilke tilvalg det har.
Noen kommandoer støtter kun det korte tilvalget -h
, mens andre kommandoer bruker -h
for noe annet enn hjelp.
Signalisering av feil
Alle program har en avslutningskode, exit code på engelsk, som blir satt når programmet avslutter. Denne blir brukt for å kommunisere hvordan det gikk med programmet. For eksempel kan et skript som består av flere andre skript velge å avbryte kjøringa hvis et av programmene flagger at noe gikk galt.
Hvis alt gikk bra, så skal programmet avslutte med avslutningskode 0
.
Alle andre avslutningskoder indikerer at noe gikk galt.
Du vil typisk bruke 1
til å indikere at noe galt har skjedd.
Python-skript trenger som regel ikke tenke på dette.
Hvis skriptet kjører ferdig uten at det krasjer, vil det avslutte med avslutningskode lik 0
.
Hvis skriptet derimot krasjer, avslutter det med avslutningskode lik 1
.
Det eneste måtte være hvis du avslutter skriptet tidlig med sys.exit
,
som tar inn avslutningskoden som et argument.
Temaer som ikke er dekket av denne gjennomgangen
- Alt som har med strømmer å gjøre
- Piping av output fra et program til et annet
- Omdirigering, redirecting, av output eller input til eller fra ei fil
- Input- og output-strømmene til alle program:
stdout
,stderr
ogstdin
- Prosesshåndtering/kjøre ting i bakgrunnen
- Programmering i skall (skripting, if, while, for, ...)
- Variabler
- Vim! 😁
- Powershell