Merknad: Denne artikkelen er KI-generert for å teste siden. Endelig innhold kommer senere.
Terminalen ser ofte ut som et sted der én skrivefeil kan slette hele bacheloren. I praksis er den bare en tekstbasert måte å be maskinen gjøre ting på. Du skriver en kommando, skallet tolker den, og et program eller en innebygd funksjon gjør jobben.
Denne guiden bruker Bash-syntaks som fungerer på Linux og i stor grad på macOS. Målet er ikke å lære hundre kommandoer utenat. Målet er å forstå noen få byggesteiner godt nok til at resten kan slås opp.
Først: lag et trygt sted å øve
Ikke start med å eksperimentere i en mappe som inneholder viktige filer. Lag en egen sandkasse:
mkdir -p ~/terminal-lab
cd ~/terminal-lab
pwd
mkdir lager en mappe. Flagget -p gjør at kommandoen også kan lage manglende foreldremapper, og den klager ikke dersom mappen allerede finnes. cd bytter arbeidsmappe, mens pwd skriver den absolutte stien til mappen du står i.
Tegnet ~ betyr hjemmemappen din. På min maskin kan ~/terminal-lab for eksempel bli til /Users/emi/terminal-lab. Den konkrete stien varierer, men betydningen er den samme.
Orienter deg med pwd, ls og cd
Tre kommandoer dekker det meste av vanlig navigering:
pwd # Hvor er jeg?
ls # Hva ligger her?
ls -la # Vis detaljer, også skjulte filer
cd mappe # Gå inn i en mappe
cd .. # Gå ett nivå opp
cd - # Gå tilbake til forrige mappe
cd ~ # Gå hjem
Punktum har en konkret betydning i stier. . er mappen du står i, og .. er foreldremappen. Derfor betyr ./script.sh «filen script.sh akkurat her».
Bruk tabulatoren aktivt. Skriv de første bokstavene i et filnavn og trykk Tab. Skallet fullfører navnet når det er entydig. Dette er raskere enn å skrive alt, og det reduserer antallet tastefeil.
Lag, kopier og flytt filer
La oss fylle øvingsmappen med noe ufarlig:
mkdir notater
touch notater/uke1.md
printf '# Uke 1\nTerminalen er mindre skummel nå.\n' > notater/uke1.md
cp notater/uke1.md notater/uke1-kopi.md
mv notater/uke1-kopi.md notater/backup.md
ls -la notater
touch lager en tom fil dersom den ikke finnes. cp kopierer, og mv flytter eller gir nytt navn. Tegnet > sender utdata til en fil og erstatter det som allerede står der. Bruk >> hvis du vil legge til innhold nederst i stedet:
printf 'En ny linje.\n' >> notater/uke1.md
Sletting fortjener litt respekt. Terminalens rm flytter vanligvis ikke filer til papirkurven. I øvingsmappen kan du bruke interaktiv modus:
rm -i notater/backup.md
Da spør rm før filen fjernes. Les alltid kommandoen én gang til før du bruker rekursive sletteflagg. Hvis du er usikker på hvor du står, kjør pwd først.
Anførselstegn er ikke pynt
Mellomrom skiller argumenter. En fil som heter mine notater.md blir derfor tolket som to argumenter uten anførselstegn:
touch 'mine notater.md'
cp 'mine notater.md' 'mine notater-kopi.md'
En god vane er å sette variabler og ukjente stier i doble anførselstegn:
mappe="$HOME/terminal-lab"
cd "$mappe"
Doble anførselstegn lar $HOME bli utvidet, men beholder resultatet som ett argument. Enkle anførselstegn behandler nesten alt bokstavelig.
Pipes: koble små programmer sammen
En pipe, skrevet |, sender utdata fra én kommando inn som input til den neste. Det er en av de viktigste ideene i Unix-verdenen.
Lag først litt testdata:
printf 'ifi\nterminal\nlinux\nterminal\nifi\nterminal\n' > emner.txt
Tell deretter hvor ofte hvert ord forekommer:
sort emner.txt | uniq -c | sort -nr
Her sorterer den første kommandoen linjene slik at like ord havner ved siden av hverandre. uniq -c teller gruppene, og sort -nr sorterer resultatet numerisk og synkende.
Du kan også filtrere tekst med grep:
grep -i 'terminal' emner.txt
Flagget -i gjør søket uavhengig av store og små bokstaver.
Finn filer uten å klikke deg gjennom alt
find går gjennom et katalogtre og tester hver fil mot kriteriene dine:
find . -type f -name '*.md'
find . -type f -size +1M
Den første kommandoen finner Markdown-filer. Den andre finner filer større enn omtrent én mebibyte i implementasjoner som støtter denne størrelsessyntaksen, blant annet GNU find.
Legg merke til anførselstegnene rundt *.md. Uten dem kan skallet utvide stjernen før find får se mønsteret. Med anførselstegn er det find som gjør matchingen.
Når filnavn sendes videre til andre programmer, kan mellomrom og linjeskift skape problemer. GNU Findutils anbefaler nullseparert output med -print0 sammen med verktøy som forstår -0:
find . -type f -name '*.md' -print0 | xargs -0 wc -l
Ditt første nyttige Bash-script
Vi kan samle flere kommandoer i et lite script som gir en oversikt over en mappe. Opprett oversikt.sh:
#!/usr/bin/env bash
set -u
mappe="${1:-.}"
antall=0
while IFS= read -r -d '' fil; do
((antall += 1))
done < <(find "$mappe" -type f -print0)
printf 'Mappe: %s\n' "$mappe"
printf 'Antall filer: %d\n' "$antall"
printf 'Diskbruk: '
du -sh "$mappe"
Gjør filen kjørbar og test den:
chmod +x oversikt.sh
./oversikt.sh
./oversikt.sh notater
Uttrykket ${1:-.} betyr «bruk det første argumentet, eller punktum hvis argumentet mangler». Løkken leser nullseparerte filnavn, slik at også navn med mellomrom håndteres riktig. du -sh gir et lesbart estimat av diskbruken.
Når noe ikke virker
Feilmeldingen er vanligvis mer nyttig enn den føles. Start her:
command -v find
type cd
man find
find --help
command -v viser hvilket program skallet finner. type kan fortelle at cd er bygget inn i skallet. man åpner manualsiden. Mange GNU-programmer støtter også --help, men det er ikke garantert for alle kommandoer på alle systemer.
Trykk Ctrl+C hvis et program kjører videre og du vil stoppe det. Trykk pil opp for å hente forrige kommando, rediger bare delen som var feil, og prøv igjen.
En kort huskeliste
| Oppgave | Kommando |
|---|---|
| Vis gjeldende mappe | pwd |
| List filer | ls -la |
| Bytt mappe | cd sti |
| Lag mappe | mkdir -p navn |
| Kopier fil | cp kilde mål |
| Flytt eller gi nytt navn | mv gammel ny |
| Søk i tekst | grep mønster fil |
| Finn filer | find . -type f |
| Stopp et program | Ctrl+C |
Det viktigste du kan ta med deg er ikke en bestemt kommando. Det er arbeidsmåten: sjekk hvor du er, start med testdata, sett stier i anførselstegn, og koble små verktøy sammen.