Gå til hovedinnhold

Kommandolinjen

Basert på A no-nonsense beginner guide to the command line - TheMKat (som også går inn i videre detalj om scripting og videre steg)

Denne artikkelen gir deg en innføring i de viktigste grunnkonseptene for å bruke kommandolinjen slik du finner den i Mac OS X og Linux systemer. Dette refereres ofte til som Bash, men det finnes flere avarter som blant annet Zsh. Målet her er ikke å dekke absolutt alt, men å gi deg grunnlaget for å bli komfortabel i kommandolinjen.

Hva trenger du å vite om før du begynner?

Har du en maskin med en terminal-applikasjon, så er du så godt som klar. Gitt at denne er i slekt med Unix shellene. På Mac OS X og Linux er dette nærmest garantert, men på Windows vil du trenge ett av følgende:

  • Window Subsystem for Linux (WSL)
  • Cygwin
  • MinGW

I eksemplene under bruker vi $ og # til å vise starten på kommandolinjen. Dette skal ikke du skrive enn selv, og det er kun for å vise at det er her din kommando er skrevet inn.

Din første kommando!

Istedenfor å lese mye teori, så kan du heller nå prøve din første kommando! Åpne din terminal-applikasjon, og skriv inn pwd! Ett eksempel på hvordan dette kan se ut på en Mac OS X maskin for en bruker kalt marie er følgende:

$ pwd
/Users/marie

Kommandoen printer rett og slett kun nåværende mappe du er i.

Forskjellen mellom $ og #

Du har nå sett $ over, og i fremtiden vil du nok også se #. Hva er egentlig forskjellen mellom disse?

$ betyr at du er i en vanlig bruker-sesjon (f.eks din egen bruker). Denne har typisk ikke root-rettigheter, altså det du ville kalt administrator på et Windows system. # betyr derimot at du er denne root-brukeren.

Hvis du har hørt om noe som heter Docker, så vil du her i mange tilfeller se # av grunen over (root tilgang til systemet).

Filbehandling og navigering

ls - liste ut innholdet av mappen du er i

Dette kan f.eks se slik ut:

$ ls
Documents Downloads Pictures myfile.txt

Om du ønsker å ha med skjulte filer, altså de som starter med ett punktum, så kan dette gjøres med opsjonen -a:

$ ls -a
. .. .local .Trash Documents Downlads Pictures myfile.txt

Her ser vi de skjulte mappene .local og .Tash. Slike inneholder stort sett konfigurasjons-filer og andre filer dine applikasjoner jobber med.

. og .. betyr nåværende mappe og foreldre-mappen (altså mappen som ligger over nåværende).

cd - naviger til en ny mappe

På et eller annet tidspunkt vil du trenge å bytte til en ny mappe. Det er her cd kommer inn!

$ cd Documents
$ pwd
/Users/marie/Documents

(i mange tilfeller vil også terminalen din vise deg hvilken mappe du er i, så pwd er sjeldent nødvendig for å vite hvor du er)

cd bytter altså mappe, men printer ingenting.

Vi kan også navigere flere mapper (inkludert de skjulte filene og navnene som .. over):

$ cd Documents/../Documents/Budgets/2019

rm - slette filer

rm sletter en eller flere filer.

rm minfil.txt vil slette filen minfil.txt.

Du kan også slette flere filer, f.eks 3 filer slik: rm fil1 fil2 fil3.

rm -rf

Du har kanskje sett rm -rf minmappe nevnt noen steder på nettet. Denne kan være litt skummel om man er ny på kommandolinjen. Denne sletter mappen, alle undermapper, og tvinger endringene (uten å spørre deg om du er sikker). -r vil i dette tilfelle si rekursiv (altså at den beveger seg nedover fil-hierarkiet), mens -f betyr "force delete".

Denne kommandoen kan være veldig nyttig for å slette mapper som ikke er tomme. I starten vil du nok kanskje være mer forsiktig, så da kan det være lurt å tømme mappen for innhold først ved å slette filene inni. Deretter kan du slette den tomme mappen med kommandoen rmdir.

mkdir - opprette mapper

mkdir minmappe vil lage mappen minmappe.

cp - Kopiere filer

Kommandoen tar to argumenter, hvor du vil kopiere filen fra, og hvor du vil kopiere den til.

$ cp Documents/minfil.txt Arkiv/2023/minfil_kopi.txt

(som du legger merke til over, så kan vi gi kopien vår ett nytt navn)

Om du derimot vil flytte filen, så kan dette gjøres med mv som fungerer likt i tilfellet over.

Se innhold fra filer direkte i kommandolinjen!

cat - Print innhold direkte

$ cat minfil.txt
Dette er innholdet i filen.
Det kan være flere linjer.

less - interaktiv navigering

Dersom du ønsker å navigere filen din interaktivt. Du skriver rett og slett bare less minfil.txt (hvor minfil.txt er filen du ønsker å lese).

Dette kan f.eks se slik ut når man leser en html fil, her hentet fra TheMKat sin blogg:

Kommandolinje-applikasjonen less som leser en html-fil.

Navigeringen kan gjøres med piltastene og PageUp/PageDown (for å scrolle fortere). Når du vil avslutte, så kan dette gjøres med q.

Pipes? Hva er det?

pipes betyr rett og slett å sende resultatet (det som printes) fra ett program til et annet, eller evt. å skrive det til fil.

Vi har 3 typer pipes:

  • | - denne sender bare output/resultat linje for linje til programmet på høyre side av |. echo "hei" | program2 vil sende teksten "hei" til program2. Dette kan være nyttig f.eks når vi ønsker å søke i tekst. cat minfil.txt | grep hei vil søke etter teksten hei i filen minfil.txt og printe linjene som matcher.
  • > - denne skriver resultatet av kommandoen på venstre side til fil. F.eks med echo "innhold" > minfil.txt vil lage filen minfil.txt med teksten innhold. Eksisterer filen allerede, så vil den bli overskrevet.
  • >> - som forrige, men resultatet på venstre side legges til på slutten av filen.

Søking i filer og innhold

find - finne filer som matcher gitte kriterier

find har mange ulike argumenter. I neste seksjon ("Hvordan finne dokumentasjon?") vil du få vite hvordan du kan utforske disse.

Den enkleste varienten er å søke etter filer i en gitt mappe som matcher ett navn. find . -name '*books*' finner alle filer med books i navnet. * er her en wildcard som matcher hva som helst.

grep - Søke i tekst

cat minfil.txt | grep hei vil søke etter forekomster av teksten hei i filen minfil.txt. grep er veldig nyttig i pipes (dekket over).

Du kan også bruke grep til å søke etter forekomster i en mappe. Dette kan du gjøre med grep -Rn 'hei' .. Dette vil rekurivt søke (nåværende og undermaper) etter teksten hei. Blir den funnet, så printes filnavn og linjenummer. -R betyr her rekursivt, mens -n betyr at vi ønsker å printe linjenummer.

Hvordan finne dokumentasjon?

Vi har åpenbart ikke dekket absolutt alt på denne siden, og du vil antageligvis trenge å finne dokumentasjon. Enten det er flagg, bruk av kommando eller andre spørsmål du måtte ha. En mulighet er å søke opp på internett, men visste du at du har dokumentasjon innebygget is systemet ditt? Det er her begrepet "man-pages" kmmer inn!

Kommandoen du er ute etter heter man. Prøv f.eks å skriv inn kommandoen man grep for å lese informasjon om grep. Navigeringen er lik som den vi har diskutert for less tidligere. Du kan til og med bruke man man for å lese dokumentasjon om man! (her vil du finne detaljer vi ikke har diskutert i denne artikkelen som seksjoner!)

Tilgjenglighet

man kan være litt tuklete å få til i Windows baserte systemer om du ikke bruker WSL (Windows Subsystem for Linux). Om du av denne grunnen, eller andre grunner, har problemer med å lese man-pages så finnes det nettsider som har lastet opp disse. Ett eksempel er man7.org, hvor du f.eks kan lese less sin man-page.

Ressurser