Grunnleggende Bash

Bash-shellet er den vanligste måten å gi kommandoer på i Linux. Bash kjøres vanligvis i en x-term (e.l.), og kan blant annet startes ved å trykke på x-term-ikonet.

Bash-promptet

Bash vil starte med å skrive ut en prompt. Hvordan prompten ser ut kan variere litt, og man kan også forandre den selv, men den kan f.eks. se ut som dette:

 tre: arneh>

(i denne prompten skriver bash først ut navnet på maskinen man sitter på, og så navnet på katalogen man står i, og til slutt et > tegn)

Etter prompten vil nå markøren stå, klar til å ta i mot kommandoer.

Hvordan kjøre kommandoer

Når man har fått prompten kan man skrive inn kommandoer til bash. Man skriver da inn kommandoen man vil utføre og trykker enter. Bash vil da utføre kommandoen, og kommandoen kan eventuelt skrive ut ting på linjene etter prompten.

f.eks. kan man få vite dagens dato og tidspunkt ved å gi kommandoen date:

 tre: arneh>date
 Thu Nov 11 17:57:22 MET 2004

(i dette eksemplet skrev bash ut prompten tre: arneh>, jeg skrev inn ordet date og trykte enter, og kommandoen date skrev ut Thu Nov 11 17:57:22 MET 2004

Når prompten kommer opp igjen kan man gi nye kommandoer.

Argumenter og opsjoner

Noen kommandoer kan ta argumenter. Dette er ekstra ord som forandrer litt på hva kommandoen gjør. Noen kommandoer må til og med alltid ha argumenter.

Man har f.eks. kommandoen ls som lister opp alle filer og kataloger i en katalog. Argumentet til ls er katalogen man vil ha listet opp innholdet til (ls kan også kjøres uten argumenter, da vil den liste opp innholdet i katalogen man står i).

Så for å liste opp innholde i sin egen hjemmekatalogen (tegnet ~ (kalles tilde, finnes til høyre for Å på tastaturet) er en forkortelse i bash for din egen hjemmekatalog):

 tre: arneh>ls ~
 bin           inf             hfag
 pc            www_docs

Opsjoner ligner på argumenter. Opsjoner er ord som starter med - (en bindestrek). Opsjoner er nesten aldri nødvendig for å kjøre en kommando, men når den blir gitt så forandrer den litt (eller noen ganger drastisk) på hva kommandoen gjør.

f.eks. så har ls opsjonen -a som lister opp alle filer. ls vil normalt ikke liste filer som har navn som starter med . (et punktum), men om man gir den opsjonen -a så vil den liste opp disse filene også.

 tre: arneh>ls -a ~
 .bashrc        .bash_history   .emacs
 bin            inf             hfag
 pc             www_docs

Retting av feil

Det er ingen som alltid skriver helt rett. Mens man ennå skriver inn kommandoen (før man har trykt enter) kan man rette på kommandoen ved å bruke backspace- og delete-tastene. Man kan også flytte markøren venstre og høyre ved å bruke venstre og høyre piltaster.

Om man i stedet for å prøve å fikse linjen slik, men heller vil begynne helt på nytt, så kan man trykke Ctrl+C (hold inne Control-tasten samtidig som man trykker C-tasten). Da vil bash skrive ut prompten på nytt og man kan begynne å skrive inn kommandoen på nytt. I tillegg kan man bruke Ctrl+U for å slette alt på linjen som er før markøren og Ctrl+K for å slette alt på linjen etter markøren.

Om man skrev feil, men trykte enter slik at kommandoen startet så kan man avbryte kommandoen ved å trykke Ctrl+C. Men ofte vil kommandoen være ferdig før man rekker å trykke Ctrl+C. Om man skrev feil kommando vil bash svare at kommandoen ikke finnes (med mindre det finnes en annen kommando med det navnet man skrev da):

 tre: arneh>sl
 bash: sl: command not found

Om man skrev noen av argumentene eller opsjonene feil vil vanligvis kommandoen gi en eller annen feilmelding om dette. Men denne varierer med hvilken kommando man prøvde å kjøre.

Kjøre kommandoer i bakgrunnen

Vanligvis når man kjører en kommando så vil den kjøre, og man får ikke gjort noe mer i Bash før kommandoen er ferdig. I blant vil man at man skal kunne fortsette å gi kommandoer i bash selvom kommandoen man startet ikke er ferdig.

Dette er spesielt nyttig med programmer som åpner nye vinduer, og hvor man vil beholde disse vinduene og likevel kunne fortsette å bruke bash.

For å kjøre en kommando slik i bakgrunnen skriver man tegnet & helt sist på linjen (rett før man trykker enter). Man vil da umiddelbart få tilbake prompten og kunne fortsette å gi nye kommandoer, mens den kommandoen man startet vil fortsette å kjøre.

Om man har startet en kommando som man senere finner ut at burde vært kjørt i bakgrunnen (vanligvis fordi man vil kunne fortsette å skrive i Bash), så kan man få flyttet kommandoen til bakgrunnen ved å gjøre følgende. Først trykker man Ctrl+Z. Dette vil pause kommandoen som ble kjørt i bakgrunnen, og gi kontrollen tilbake til Bash. Man kan så gi kommandoen bg (som står for background) for å fortsette i bakgrunnen kommandoen som er pauset. Man kan eventuelt skrive fg for å fortsette kommandoen i forgrunnen. Dette gjelder også kommandoer som er startet med &, skriver man fg så vil denne kjøres i forgrunnen i stedet for i bakgrunnen.

Fullføring av kommandoer

For å gjøre det lettere å bruke bash, og for å sikre bedre mot feil, så kan Bash fullføre kommandoer og filnavn man har begynt å skrive navnet på.

Det fungerer ved at man begynner å skrive de første bokstavene i kommandoen man vil skrive, og trykker så TAB (tasten rett til venstre for Q). Om det er ingen andre kommandoer som begynner med den teksten du så langt har skrevet vil bash da fylle ut resten av kommandoen for deg.

Så om jeg f.eks. skriver em og trykker tab, så vil bash fullføre det til emacs.

Om det er flere kommandoer som begynner med de samme tegnene vil det ikke skje noe første gang man trykker tab, men trykker man en gang til vil man få opp en liste over alle komandoer som starter med det man så langt har skrevet.

Om jeg f.eks. skriver pin og trykker tab to ganger får jeg opp listen:

 pine     pinfo    ping     ping6    pingmap  pinky

Om jeg så skriver videre en f og trykker tab igjen vil den fullføre det til pinfo.

For første ord på linjen er det altså kommandoen som fullføres, men om ordet står senere på linjen vil ordet fullføres med en fil/katalog i den den katalogen du står i.

Tab-fullføring er egentlig noe man lærer best ved å bare prøve seg litt frem, så det er bare å begynne å prøve litt selv, og man venner seg fort til å bruke det veldig mye.

Tab-fullføring er også veldig praktisk til sjekke om man har skrevet rett, for om den ikke klarer å fullføre, og Bash ikke lister opp noen alternativer når man trykker tab én gang til, så er det ofte fordi man har skrevet feil (en vanlig feil er å skrive store bokstaver der det skal være små, eller motsatt. Unix regner store og små bokstaver som forskjellige).

Wildcard i filnavn

Mange kommandoer tar filnavn som argumenter. Ofte kan man også oppgi mange filer etterhverandre på samme linje. For å gjøre det enklere, slik at man slipper å skrive alle filnavnene selv, så har Bash noe som heter wildcard.

Som wildcard brukes tegnes * (tegnet til høyre for Æ). * står da for "hva som helst". Så en * for seg selv vil gi alle filer i katalogen man står i (untatt filer som begynner med .). F.eks.

 arneh: tmp>ls *
 Oblig.class  en_annen_fil.txt  fil2.txt  filen.txt
 Oblig.java   fil1.txt          fil3.txt

(ls vil i utgangspunktet liste opp alle filer uansett, om man ikke oppgir noen argumenter, så akkurat for kommandoen ls er ikke bare en * så nyttig).

Men * kan også brukes som en del av teksten. Om man f.eks. skriver fil* så vil det bli alle filer som begynner med fil:

 arneh: tmp>ls fil*
 fil1.txt  fil2.txt  fil3.txt  filen.txt

eller *.txt som vil være alle filer som slutter på *.txt:

 arneh: tmp>ls *.txt
 en_annen_fil.txt  fil1.txt   fil2.txt
 fil3.txt          filen.txt

* kan også stå midt inni:

 arneh: tmp>ls f*.txt
 fil1.txt  fil2.txt  fil3.txt  filen.txt

Eller det kan være flere * i et navn:

 arneh: tmp>ls *fil*
 en_annen_fil.txt  fil1.txt  fil2.txt
 fil3.txt          filen.txt

Og som man kan se fra forrige eksempel så kan * godt stå for ingenting også (fire av filene som ble listet opp i forrige kommando inneholdt ingenting før fil).

Det finnes også et annet wildcard, ? (spørsmålstegn). ? står for nøyaktig ett tegn som kan være hva som helst. Så fil?.txt vil liste opp

 fil1.txt  fil2.txt  fil3.txt

men ikke filen.txt fordi "en" er to tegn.

Mer hjelp

  • Unix for nybegynnere er et kompendie som beskriver det meste en nybegynner trenger å kunne for bruke Linux på UiO. I tillegg til å beskrive Bash i noe mer detalj så er også en rekke kommandoer, filer, vindussystemet og mere beskrevet.

  • Filrettigheter beskriver filrettigheter i Linux.

  • Shelloppsett etc. beskriver hvordan man kan tilpasse Bash mer til egne ønsker.

  • A Bash Tutorial En mer avansert tutorial i Bash (på engelsk)

  • Bash Prompt HOWTO Alt du trenger vite (og antageligvis mye mer) for å lage ditt eget bash-prompt (på engelsk).

  • Working more productively with bash 2 Avansert Bash (på engelsk).

  • Bash's manside Dette er en av tidenes lengste manualsider, og innholder veldig mye informasjon, men kan være vanskelig å finne det man leter etter...