Grunnleggende om Terminalen i Mac og Linux

Terminalen, med sitt fraværende grafiske grensesnitt, kan virke skremmende og unødvendig å lære seg. Heldigvis er det ikke så vanskelig å komme i gang med, og kan fort bli både nyttig og nødvendig når man driver med webutvikling.

Hva er terminalen?

Det er mange navn ute og går. Kommandolinje/konsoll/terminal/skall brukes ofte om hverandre, men har egentlig ulike meninger. Det vi snakker om her er vanligvis uansett å bruke et tekstbasert grensesnitt for å kunne tolke kommandoer og kommunisere med et program eller operativsystemet. Man skriver inn kommandoer og får output tilbake som tekst.  I Mac og Linux har man et program som heter Terminal som brukes til dette.

Siden både Mac og Linux er POSIX-orienterte operativsystemer, fungerer de samme kommandoene på begge systemer. Det betyr at du stort sett kan skrive og utføre akkurat det samme i Terminalen på Macen din som du kan med en webserver som kjører Linux. Alle kommandoer her skal fungere i både Mac og Linux. Windows er derimot ikke POSIX-orientert og konsollen kan ikke helt bruke de samme kommandoene. Men man kan installere programmer som gir samme funksjonalitet der også.

Bruke Terminalen

På Mac kan du raskt åpne Terminalen ved å skrive terminal i Spotlight. Programmet åpnes og er klart til å motta kommandoer. Det som står før markøren (hvor man kan skrive i terminalen) kalles prompt. Denne kan tilpasses, men viser som regel banen til den gjeldende plasseringen i filsystemet, brukeren som er logget inn, e.l..

Skjermbilde av Terminalvindu i Mac OSX
Standard terminalvindu i Mac OSX. Prompten viser maskinnavnet, gjeldende mappe og bruker.

Vanlige kommandoer i Terminalen

Kommandoer gis ved å skrive kommandoen etterfulgt av eventuelle valg og argument.

Mange programmer som kan åpnes og kjøres i terminalen er basert på programmer originalt fra Unix og gitt lignende navn – flere av disse kan kjøres ved å bruke navnet på det opprinnelige programmet i Unix. F.eks. less som er basert på Unix’ more, kan startes ved å skrive more og vil da oppføre seg annerledes enn om man starter det med less (mer som opprinnelige more gjør).

1. Navigering

Tegnet tilde (~) betyr “home”-mappen, (en spesiell mappe i de fleste operativsystemer som fungerer som brukerens personlige mappe). To punktum betyr opp et nivå, og ett punktum betyr gjeldende mappe. Disse kan brukes i andre kommandoer for f.eks. å flytte en fil til gjeldende mappe etc.

  • cdchange directoryendre gjeldende mappe, dvs. naviger til mappen du angir. To punktum går opp et nivå (cd ..).
  • lslistlister filer i gjeldende eller en annen mappe du angir. Bruk valget -l for langt format som viser rettigheter, filstørrelse osv.
  • mkdirmake directorylager en mappe med navnet du angir
  • pwdprint working directoryviser gjeldende plassering i filsystemet

 2. Flytte, kopiere og slette filer

  • cp – copy – kopier en fil til en ny plassering. Bruk valget -r for å kopiere en mappe (og innholdet i den)
  • mkdir – make directory – lager en ny mappe med navnet du angir. Bruk valget -p for å lage flere mapper nestet i hverandre: mkdir eksisterende-mappe/mappe1/mappe2/mappe3.
  • mv – move – flytt en fil eller mappe til en ny plassering. Brukes også for å gi nytt navn til filer og mapper, ved å bruke ulike navn på samme plassering, eksempelvis: mv original.txt nyttnavn.txt.
  • rm – remove – sletter en fil. Bruk valget -r for å slette en mappe og alt innhold i den. Vær oppmerksom på at du ikke må bekrefte at du virkelig vil slette noe, og at det ikke brukes noen papirkurv som du enkelt kan hente frem slettede filer fra. Når du trykker enter er filen enkelt og greit borte.

3. Vise og redigere innhold i filer

  • catcatenateviser innholdet i en eller flere filer ved å skrive de ut til terminalen. Ved flere filer samtidig kommer de rett etter hverandre, derav navnet (con)catenate.
  • less – et program, en såkalt pager, som viser innholdet i filer. Trykk q for å avslutte less. Basert på more fra Unix.
  • nano – enkelt tekstredigeringsprogram basert på pico fra Unix.

4. Søke etter filer og innhold i filer

findfinner plasseringen til filer basert på filnavn. Skriv find etterfulgt av en eller fler mapper som skal søkes i, og deretter -name filnavn.filtype. F.eks. find let/i/denne/mappen og/denne -name “eksempel.txt”. For å søke i hele systemet kan man bruke / (root) som plassering. Imidlertid vil man helst avgrense søket hvis man kan, ettersom det gjerne tar veldig lang tid å søke gjennom hele systemet. Søker man i hele systemet vil man også gjerne få en rekke feilmeldinger om at man ikke har rettigheter til å se i enkelte mapper.

grep – global regular expression print – søker i en eller flere filer etter treff på et mønster man angir. Mønsteret angis med regular expression (regulæruttrykk), et system hvor man bl.a. kan bruke spesielle tegn for å søke etter komplekse mønstere. Eksempel: grep “hest” fremkomstmidler.txt søker gjennom filen fremkomstmidler.txt og viser alle linjer som inneholder “hest”.

  • Valget -n viser linjenumrene til treffene som blir funnet.
  • Grep er case-sensitivt, dvs. skiller mellom små og store bokstaver. Bruk valget -i for søke case insensitive.
  • Valget -v viser alle linjene som ikke inneholder mønsteret man søker etter.

Grep brukes ikke bare for å søke etter innhold i filer, men kan kombineres med andre kommandoer for å f.eks. filtrere resultatet.

5. Brukere og rettigheter

  • adduser – lager en ny bruker med navnet du angir
  • su – switch user – logger inn som en annen bruker
  • whoami – viser hvem du er logget inn som
  • exitlogger ut gjeldende bruker
Rettigheter:

chmod – change mode – endrer rettighetene på en fil eller mappe
chown – change owner – endrer eier på en fil eller mappe
sudo – super user do – utfør en kommando med root-privilegier

Se utdypende innlegg om filrettigheter i Unix.

6. Prosesser

En prosess er en kjørende instans av et program, og man kan som regel kjøre flere prosesser av et program.

  • ps – process status – enkelt program som returnerer en liste over aktive prosesser. bruk ps aux  (all user x[alle]) for å vise alle aktive prosesser (bare ps viser kun de som kjøres av gjeldende bruker). Valgene aux uten bindestrek foran gir best mulig kompatibilitet av historiske grunner. Et eksempel på bruk: for å liste kun prosesser med navn top, kan du skrive ps aux | grep “top”. Merk at dette viser en ekstra prosess, nemlig grep-prosessen som kan misforstås som prosessen du ser etter.
  • top – en interaktiv oppgavebehandler som viser aktive prosesser
Jobber og multitasking

En jobb er en prosess som tilhører deg, og kjører i gjeldende økt. Har du et program åpent kjøres det som en jobb og har sitt eget jobbnummer. Flere jobber kan kjøre samtidig, og man kan enkelt veksle mellom dem slik man er vant til på vanlige desktops.

For å pause/stoppe en jobb som kjører, trykk Ctrl + z. Er du f.eks. i nano og vil komme tilbake til prompten uten å avslutte nano, kan du trykke Ctrl + z (hvis det ikke virker og du ikke kommer tilbake til skallet, kan det være at programmet er innstilt til å ikke tillate suspend, som kan være tilfelle med nano på Mac. Løsning på dette kan googles).

For å fortsette en jobb kan du bruke kommandoen fg (foreground) – dette fortsetter den siste jobben som ble stoppet. Har du flere stoppede jobber kan du bruke fg etterfulgt av jobbnummeret for å starte en viss jobb, f.eks. fg 2.

Bruk kommandoen jobs for å vise en liste over jobber i gjeldende økt. Jobbnummeret vises i klammeparentes først, og et plusstegn indikerer at dette er den siste stoppede jobben, og den som vil startes med kommandoen fg hvis man ikke angir noe annet.

Start et program i bakgrunnen med tegnet &. Eksempel: nano newfile.txt &  starter nano i bakgrunnen.

Prosesser og signaler

Når man pauser, fortsetter, avslutter eller dreper prosesser, sender man noe som kalles signaler. Signaler er en melding som sendes fra operativsystemet til en prosess, og det finnes ulike signaler for ulik bruk.

Signalet terminate ber prosessen om og avsluttes normalt etter ev. opprydding som trengs. Dette er normalt signalet man ønsker å sende en prosess for å avslutte den. Dette signalet kan sendes ved å trykke Ctrl + C i programmet. Signalet kalles vanligvis TERM, men kan ha andre navn på enkelts systemer, og kalles f.eks. SIGTERM eller bruke signalnummer 15.

Kill-kommandoen: Drepe prosesser

Enkelte ganger trenger man å stoppe prosesser ved å drepe dem. Det kan f.eks. være prosesser som ikke responderer eller kjørende prosesser som du ikke har tilgang til, som ikke kjøres fra din Terminal. Dette er ofte tilfellet på en webserver, da prosessene ikke er knyttet til en interaktiv terminaløkt. Da må man finne prosessens tilhørende prosess-id (PID) og drepe den.

Bruk f.eks. ps aux | grep “prosessnavn” for å finne PID-en til prosessen du vil drepe.

kill – dreper prosessen du angir. Eksempel: kill 666 dreper prosessen med PID 666. Dette sender signalet term til prosessen, og er det samme som å si kill -TERM 666. Navnet term kan som sagt variere på enkelte systemer og kommandoen kan tilsvare f.eks. kill -SIGTERM 666 eller kill -15 666.  Pass på at du finner riktig PID, så du ikke avslutter en nødvendig prosess ved et uhell.

Noen ganger er prosessen opptatt og mottar ikke signalene som sendes. Som en siste utvei kan man da bruke kill -kill for å overstyre det hele. Da ber man ikke prosessen om å rydde opp og avslutte, den drepes umiddelbart uten at prosessen kan gjøre noe for å stoppe det. Eksempel: kill -kill 666 dreper prosessen med PID 666 umiddelbart. På samme måte som term kan også kill kalles noe annet på enkelte systemer, f.eks. SIGKILL eller 9 og vil da kunne brukes slik: kill -SIGKILL 666 eller kill -9 666.

Man kan også stoppe (pause) prosesser på samme måte som ved å trykke Ctrl + z i programmet ved å bruke kill -STOP 666, hvor 666 er PID-en til prosessen.

7. Diverse kommandoer og hurtigtaster

!! – to utropstegn kalles ofte bang bang, og representerer forrige kommando du skrev inn. Skriver du dermed !! og trykker enter vil den siste kommandoen du skrev før det, utføres. Nyttig hvis du f.eks. skrev en lang kommando som du glemte trengte root-rettigheter og får beskjed om at du ikke har lov til å utføre den, så kan du bare slenge sudo bang bang tilbake:  sudo !!.

clear – rydder skjermen (scroller ned slik at prompten vises øverst, men sletter ingenting).

echo – printer ut argumenter til skjermen

man – manual – viser manualen for en kommando; tilgjengelige valg og beskrivelse om hvordan man bruker kommandoen. Eksempel: man grep.

Hurtigtaster i terminalen (avhenger av skallet):

  • I Macs Terminal kan du bruke Cmd + K for å slette alle tidligere linjer fra skjermen.
  • Piltast opp blar gjennom tidligere brukte kommandoer.
  • Ctrl + A flytter markøren til begynnelsen
  • Ctrl + E flytter markøren til slutten
  • Autofullføring: Mange shell har autofullføring med tab, dvs. at du kan trykke tab når du har begynt å skrive noe, og du vil få opp forslag til hva du skal skrive videre, f.eks. filnavn som finnes i en gitt mappe. Man kan også trykke tab flere ganger for å gå til neste forslag.
  • q brukes for å avslutte programmet som er i forgrunnen

 

Dette var noen av de mest grunnleggende kommandoene. Videre kan det være nyttig å lære seg litt om miljøvariabler, hvordan du kan knytte flere kommandoer sammen og utføre kompliserte handlinger med rørlegging og omdirigering eller hvordan man kompilerer og installerer programvare via terminalen i Linux.

Leave a Reply

Your email address will not be published. Required fields are marked *