Unix-shell: Definition, kommandolinje-funktioner og populære varianter
Få en klar guide til Unix-shell: definition, kommandolinje-funktioner og populære varianter (bash, sh, zsh). Lær syntaks, nøglekommandoer og tips til effektiv terminalbrug.
En Unix shell, også kaldet terminal eller konsol, er et program, der accepterer Unix-kommandoer fra tastaturet og udfører dem. Disse kommandoer kan f.eks. være installerede programmer:
- ls til at liste filer
- cp til at kopiere filer
- man for at få flere oplysninger om kommandoer
Kommandoerne behøver ikke at komme fra tastaturet. De vil normalt komme fra stdin. En Unix-shell er en kommandolinjeinterface, der er lavet specielt til styring af et Unix-system. Der findes forskellige Unix-shells, især bash, sh, C Shell (csh) og zsh. Deres grundlæggende syntaks er ofte ens, så simple opgaver kan udføres i de fleste shells. Eksempelvis kan du finde din CPU-type med kommandoen uname -m:
$ uname -m x86_64
Hvad en shell kan
- Køre programmer: Start eksterne programmer eller indbyggede kommandoer (builtins).
- Pipes og redirection: Kombinere kommandoer med |, sende output til filer med > eller tilføje med >>, og læse fra en fil med <. Her-documents (<<) bruges til multiline input.
- Variabler og miljø: Sætte og læse variabler (PATH, HOME osv.) samt eksportere dem til underprocesser (export).
- Globbing: Wildcards som *, ? og [... ] bruges til mønstermatchning af filnavne.
- Quoting og escaping: Brug af enkelt- og dobbeltanførselstegn samt backslash for at beskytte specialtegn og forhindre utilsigtet udvidelse.
- Jobkontrol: Køre processer i baggrunden med &, sætte pause (Ctrl+Z), fortsætte i forgrunden (fg) eller baggrunden (bg), og liste jobs (jobs).
- Historik og autocompletion: Genkalde tidligere kommandoer med piletasterne eller history, og bruge tab-completion til filnavne og kommandoer.
- Scripting: Skrive shell-scripts med kontrolstrukturer (if, for, while), funktioner og parameterhåndtering. Scriptfiler kan startes med en shebang-linje som #!/bin/sh eller #!/bin/bash.
Vigtige koncepter
Standardstrømme: Shellen håndterer tre grundlæggende datakanaler: stdin (input), stdout (normal output) og stderr (fejloutput). Disse kan omdirigeres individuelt.
Command substitution: Du kan indsætte output fra en kommando i en anden med $(kommando) eller de gamle backticks `kommando`.
Exit-status: Hver kommando returnerer en exit-kode (0 betyder succes, en positiv værdi indikerer fejl). Disse koder kan kontrolleres med variablen $?.
Forskelle mellem populære shells
- sh (Bourne shell): Den originale shell på mange Unix-systemer; definerer mange grundlæggende koncepter og er ofte reference for POSIX-shell-standard.
- bash (Bourne Again Shell): Meget udbredt på Linux; understøtter udvidet scripting, history, completion og mange forbedringer over sh.
- zsh: Moderne, kraftig interaktiv shell med avanceret autocompletion, temaer og plugin-økosystem (fx Oh-My-Zsh).
- ksh (KornShell): Tidlig forbedring af sh med bedre scripting-funktioner og ydeevne.
- csh/tcsh: C-lignende syntaks; tcsh tilbyder forbedret interaktiv brug som history og completion.
- fish: Fokus på brugervenlighed med smart autocompletion og moderne standarder, men ikke POSIX-kompatibel.
Startfiler og konfiguration
Forskellige shells læser konfigurationsfiler ved opstart. Eksempler:
- /etc/profile og ~/.profile — system- og brugerspecifikke indstillinger for login-shells.
- ~/.bashrc — typisk for interaktive bash-sessioner.
- ~/.zshrc — zsh-konfiguration.
- ~/.bash_profile eller ~/.profile — kan bruges til login-sessioner der kører bash.
Sikkerhed og gode vaner
- Pas på med at køre ukendte scripts som root. Kontroller indholdet, før du kører det.
- Brug altid korrekt quoting for at undgå shell-injektion, især når du bygger kommandoer fra brugerinput.
- Hold PATH i en sikker rækkefølge (ikke placér . foran PATH som standard), så utilsigtede eller skadelige programmer ikke bliver prioriteret.
- Brug versionering og backups for kritiske scripts.
Interaktiv vs. batch
En shell kan køre interaktivt (brugeren skriver kommandoer) eller non-interaktivt (køre scripts i baggrunden eller som cron-job). Ikke-interaktive shells læser ofte færre konfigurationsfiler, så vær opmærksom på miljøforskelle mellem interaktive sessioner og automatiserede køringer.
Konklusion
Unix-shells er kraftfulde værktøjer både til interaktiv systemadministration og til scripting/automation. Valget af shell afhænger af personlige præferencer, krav til kompatibilitet (POSIX) og hvilke funktioner man ønsker (fx avanceret completion i zsh eller enkel robusthed i sh). At lære centrale koncepter som redirection, pipes, variabler, og sikkerhedsbest practices er afgørende for effektiv og sikker brug af shellen.

En Unix shell, i dette tilfælde en Linux shell (klik for at forstørre)
Søge