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.

Forfatter: Leandro Alegsa

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)Zoom
En Unix shell, i dette tilfælde en Linux shell (klik for at forstørre)



Søge
AlegsaOnline.com - 2020 / 2025 - License CC3