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.
$
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
.
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.](/assets/images/less-0a54111b3a12dcfe72c2db2d422362c7.png)
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" tilprogram2
. Dette kan være nyttig f.eks når vi ønsker å søke i tekst.cat minfil.txt | grep hei
vil søke etter tekstenhei
i filenminfil.txt
og printe linjene som matcher.>
- denne skriver resultatet av kommandoen på venstre side til fil. F.eks medecho "innhold" > minfil.txt
vil lage filenminfil.txt
med teksteninnhold
. 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!)
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.