Slik blir du kongen i Linux
Skal du ha full kontroll må du inn i terminalen.
Innhold
- Introduksjon
- Kan være langt mer effektiv
- Vi guider deg gjennom
- Unix filsystemet
- To startpunkter
- Grunnleggende bruk
- Gi kommandoer
- Bruksanvisninger
- Husker alt du gjør
- Hente frem tidligere kommandoer
- Grunnleggende bruk fortsetter
- Slik oppretter du mapper
- Manipulering av filer
- Omdirigering av utskrift og inntasting
- Videresend utskrift til andre programmer
- Rettigheter
- Full makt som administrator
- Slik endrer du rettighetene
- Bli administrator i korte perioder
- Flere prosesser
- Flere programmer samtidig
- Avslutte programmer
- Automatisering
- Gjør mye, samtidig
- Variabler
- Kjøring av programmer med krav
- Løkker
- Mønstre
Introduksjon
Før i tiden, når ordet «terminal» var betegnelsen på en tynnklient tilknyttet til en stormaskin, opererte man maskinen gjennom ett skall. «Skall» er betegnelsen på ett dataprogram som mottar og utfører tekst-baserte kommandoer fra brukeren.
Etter en stund kom grafiske grensesnitt og revolusjonerte PC-industrien, og skallet ble sett på av mange som gammeldags og utdatert. De som derimot hadde investert mye tid i skallet, innså raskt at det var flere oppgaver som kunne utføres langt mer effektivt uten grafiske hjelpemidler.
I dag kjøres et skall i ett eget program, kjent som en terminal. Det finnes mange forskjellige skall, men vi skal i denne artikkelen fokusere på skallet som benyttes som standard i de fleste operativsystemer, «bash». For å unngå forvirring vil vi også fortsette å si terminalen, siden det er det du vil finne stort sett alle andre steder på nettet.
Kan være langt mer effektiv
Terminalen blir fortsatt ansett som utdatert av mange, og brukes ofte som motargument når konkurransedyktigheten til Linux dras opp til diskusjon. Likevel bruker kyndige datafolk terminalen idag av de samme grunnene som før, effektivitet.
Det viser seg at terminalen, til visse oppgaver, er langt mer effektiv enn du noengang kan håpe å bli med ett grafisk grensesnitt, selv om det også krever en del innsats for å nå den kompetansen.
Hvis du har en mappe med filer av forskjellige typer, og bestemmer deg for å flytte alle filer av èn bestemt filtype til en annen mappe, så kan dette fort inkludere kontroll-tasten og en del klikk med musa. I terminalen løses dette ved tre enkle ord: mv *.filtype destinasjon.
Ett tekst-basert grensesnitt har også en rekke fordeler for fjernstyring av datamaskiner over internett, spesielt hvis en av maskinene ikke har allverdens båndbredde. Fjernstyring med terminalen er faktisk standard hos de fleste server-tilbydere når du setter opp Linux-baserte maskiner.
Terminalen fungerer likt på de operativsystemer som støtter den. Det har derfor ikke noe å si om du sitter på en maskin med Ubuntu, OS X, Fedora eller FreeBSD. Kunnskapen du sitter på om terminalen er derfor ikke verdiløs om du bytter operativsystem, selv om det grafiske kanskje fungerer annerledes. Det er også mulig for å gjøre kommandolinjen i Windows mer lik bash ved å installere «Cygwin».
Vi guider deg gjennom
Alt dette og mye mer skal vi nå guide deg igjennom hvordan du gjør. Vi skal starte med det som erhelt grunnleggende, slik at du får tilstrekkelig med kunnskap til å fortsette læringen på egenhånd.
Vi begynner vi med:
Slik fungerer filsystemet »
Før vi tar for oss:
En generell inføring av terminalen »
Det kan også være kjekt å kjøre flere programmer samtidig:
Slik håndterer terminalen prosesser »
Det er heller ikke alt som er mulig å gjøre som en enkel bruker:
Slik fungerer rettigheter i Unix-baserte operativsystemer »
Til slutt viser vi hvordan oppgaver kan automatiseres:
Slik lager du scripts i terminalen »
Når du begynner å bli vant til å bruke terminalen, kan verktøy som «tmux» eller «GNU Screen» være verdt å ta en titt på for Linux-brukere. Bruker du OS X kan du ta en nærmere titt på «iTerm», om du vil ha en litt mer avansert terminal.
Unix filsystemet
Før vi begynner å snakke om terminalen, er det først greit å forstå hvordan filsystemet i operativsystemet fungerer.
Filsystemet i Unix-baserte systemer, som Linux og OS X, representeres som ett tre. Roten av dette treet kjennetegnes enkelt og greit med en skråstrek. I motsetning til Windows, hvor hver disk er sitt eget tre, har du bare ett tre i Unix. Du kan selvfølgelig ha tilkoblet flere disker, men disse blir representert som grener og mapper i treet.
To startpunkter
En sti, eller en lokasjon, i treet representeres som en skråstrek-separert liste slik: /mappe/undermappe/fil. Enhver sti som starter med en skråstrek er relativ til roten av treet, en såkalt absolutt sti. En sti som ikke starter med skråstrek, er relativ til brukerens nåværende lokasjon i treet og er dermed en relativ sti.
Filsystemet i Unix følger vanligvis en fast struktur av undermapper, som vi beskriver nærmere under. Mac OS X har i tillegg en egen struktur på toppen av dette, men vi skal ikke gå nærmere inn på det her.
Disse bør du merke deg:
- /boot - Programmer, konfigurasjonsfiler og andre filer relatert til oppstart av operativsystemet ligger her, inklusiv Linux-kjernen.
- /etc - Alle filer i denne mappen skal i utgangspunktet være tekstfiler som konfigurerer systemet ditt. Her har du f.eks. /etc/passwd som definerer brukerne på systemet, og /etc/init.d som inneholder enkle programmer som starter ved oppstart.
- /bin - Inneholder essensiell programvare som systemet trenger.
- /sbin - Inneholder programvare hovedsaklig ment for å brukes av systemadministrator, bedre kjent som root.
- /usr - Denne mappen inneholder programvare for brukerne av systemet i /usr/bin, men også programmer ment for system administrator i /usr/sbin. I tillegg har vi filer som støtter disse programmene som for eksempel dokumentasjon og kildekode.
- /lib - Inneholder biblioteker som kan benyttes av all programvare i systemet. Windows-brukere kan se på dette som en felles mappe hvor alle DLL-filene ligger.
- /var - Her ligger filer som ofte endres mens systemet kjøres. Log-filer er ett eksempel på slike.
- /home - Som oftest har hver eneste bruker sin egen mappe i /home. Det er også vanlig at brukere ikke kan endre på noe utenfor sitt eget «hjem».
- /root - Dette er hjem-mappen til root.
- /media og /mnt - Det er vanlig at eksterne disker representeres i en av disse mappene som en egen mappe. Du vil kanskje ha en CD-mappe for det som ligger i CD-stasjonen, eller en annen mappe for din eksterne harddisk. Siden disse mappene ligger utenfor /home må brukere ha lese- og/eller skrive-rettigheter for å gjøre noe med dem.
- /tmp - Her ligger alle midlertidige filer.
- /dev - Denne mappen er litt spesiel. Her ligger alle tilkoblede enheter. Modemer, skjermer, harddisker, optiske enheter, og så videre. Det som er litt spesielt med Unix er at alle enheter blir representert som filer, og de ligger da i denne mappen.
Bli med til neste side, så skal du få lærer om selve terminalen ».
Grunnleggende bruk
I OS X og så og si alle Linux-distribusjoner, kan du åpne terminalen som ett helt vanlig program. Det enkleste er nok å søke etter «terminal» i spotlight for OS X, eller i det som er søkemotoren du bruker i din versjon av Linux.
Terminalen i seg selv er ikke stort mer enn en svart bakgrunn du kan skrive litt tekst inn i som du ser på bildet over. Teksten som allerede står på skjermen representerer følgende: Navnet på datamaskinen (SkinBook), mappen du befinner deg i (~) og navnet på brukeren (skinney).
Av dette vil sikkert tegnet ~ virke litt kryptisk. Dette er ett spesialtegn som representer din hjem-mappe. Vi kan bekrefte dette ved å kjøre programmet «pwd» som skriver ut på skjermen hvor vi er i filsystemet.
Gi kommandoer
Skriv pwd og trykk på enter. Hvis du bruker Linux vil /home/brukernavn nå stå på skjermen din. Hvis du bruker Mac skal det stå /Users/brukernavn. Terminalen leser det du skriver inn linje for linje, og går utifra at hver linje starter med navnet på ett program som skal kjøres.
Alt som kommer etter programnavnet kalles for argumenter, og programmet kan bruke disse til forskjellige formål. Når du skriver inn pwd og trykker enter, finner terminalen programmet i /bin og kjører det. I dette tilfellet har du ikke gitt noen argumenter til programmet.
For å finne ut mer om dine omgivelser kan du kjøre ls. Som du vil se skriver «ls»-programmet ut innholdet av nåværende mappe på skjermen. Det er ett lite unntak, at filer og mapper som starter med punktum blir regnet som skjulte filer. Disse skrives derfor ikke ut med mindre du ber eksplesitt om det.
Bruksanvisninger
Unix-filosofien har alltid vært at programmer skal gjøre èn ting, og gjøre èn ting godt. Likevel er det ikke uvanlig at programmer har flere valgmuligheter. Som vi viste vil «ls» skriver ut innholdet av nåværende mappe, men den vil ikke inkluderer skjulte filer og mapper i utskriften. Det finnes derimot en valgmulighet som lar deg inkludere disse.
Valgmuligheter kan angis i to former. Du har kort-formen, som består av bindestrek og ett tegn. Du har også lang-formen, som består av to bindestreker og ett ord. Det er veldig vanlig at programmer har en valgmulighet kalt «help», som skriver ut alle valgmulighetene ett program støtter.
Kjerneprogrammene i Unix, deriblant ls, følger ikke denne konvensjonen. Når -h, eller --help, ikke skriver ut en liste med valgmuligheter kan vi alltids prøve å slå opp bruksanvisningen til programmet. Skriv inn denne linjen og avslutt med enter: man ls
Du skal nå få opp bruksanvisningen til ls-programmet. Du kan bla opp og ned med piltastene, eller page up- og page down-tastene for å bla hele sider om gangen. Du kan også avslutte visningen ved å trykke q. Finn ut hvordan du viser skjulte filer ved å lese bruksanvisningen.
Husker alt du gjør
Terminalen holder styr på alle kommandoer du har gitt den siden du startet den. Den gjør dette ved å lagre alle kommandoene i en fil. Du kan se innholdet i denne fila på to måter.
Du kan bruke programmet «cat», som skriver innholdet av en gitt fil til skjermen. Hvis du kun er interessert i de første kommandoene kan du bruke programmet «head», som gjør det samme som cat, men den leser kun de første linjene. Tilsvarende har du også «tail» som kun leser de siste linjene. Fila heter .bash_history og ligger i ditt hjem-område. Som ett eksempel kan du lese de siste linjene ved hjelp av: tail ~/.bash_history.
Det er likevel enklere å bruke programmet «history» for denne oppgaven. I tillegg til inholdet i .bash_history, får du også linjenummer vist på skjermen. Hvis du kun er interessert i de siste fem kommandoene, kan du kjøre history 5.
Hente frem tidligere kommandoer
Det praktiske med at terminalen husker hva du har gjort, er at du kan hente frem tidligere kommandoer uten å skrive dem på nytt. Pil-opp vil bla bakover i historikken, og hente frem linjen i terminalen. Pil-ned vil på samme måte bla fremover i historikken. For å kjøre forrige kommando trenger du derfor bare å trykke pil-opp og enter.
Du kan også bruke piltastene for å gjøre en liten endring i en tidligere kommando. Tidligere kommandoer kan også angis ved utropstegn og ett tall som henviser til linjenummeret i historikk-fila.
Annta at det står følgende på linje fem i .bash_history: mkdir ~/test. Denne kommandoen lager en ny mappe i hjem-mappa som heter test. Hvis du nå skriver inn !5/undermappe vil det være det samme som å skrive mkdir ~/test/undermappe. Du kan også bruke negative tall etter utropstegnet for å henvise til de siste kommandoene i historikken. !-2 vil dermed henvise til den nest-siste kommandoen du kjørte. En snarvei for den forrige kommandoen er to utropstegn etterhverandre.
Bli med over til neste side, så forteller vi deg hvordan du bruker terminalen videre »
Grunnleggende bruk fortsetter
Det har kanskje gått litt fort i svingene, så la oss oppsummere hva du har lært så langt:
- Programmet pwd forteller deg hvor i filsystemet du befinner akkurat nå.
- ls forteller deg hvilke filer og mapper som finnes i mappen du befinner deg i, så lenge disse ikke er skjulte.
- De fleste programmer har flere valgmuligheter, som du enten kan finne ved å benytte deg av valgmuligheten -h eller --help. Noen programmer har istede en bruksanvisning du kan lese ved å skrive man programnavn.
- Du kan opprette mapper med programmet mkdir.
- Du kan se innholdet av filer ved hjelp av programmene cat, head og tail.
- Tidligere brukte kommandoer kan hentes frem igjen med piltastene, eller ved å skrive utropstegn etterfulgt av ett tall.
Slik oppretter du mapper
For å opprette en mappe og en undermappe, skriver du mkdir -p ~/mappe/undermappe og trykker på enter-tasten. Mkdir oppretter mapper, mens «-p» sier at mkdir skal opprette mapper som ikke finnes der. Hvis du ikke hadde skrevet -p, ville du fått en feilmelding som sier at «mappe» ikke finnes.
Du kan bekrefte at mkdir gjorde det du ba om ved å kjøre ls. For å gå inn i den nye mappen skriver du cd ~/mappe/under og trykk på tab-tasten. Hvis alt gikk som det skulle vil følgende stå på skjermen: cd ~/mappe/undermappe. Tab-tasten kan fullføre fil- eller mappenavn i en sti, så lenge den har nok informasjon å gå etter. Trykk på enter-tasten for å kjøre kommandoen, og programmet «cd» tar deg til denne stien. Du kan bekrefte at du er i riktig mappe med pwd.
Mappa er foreløpig tom, og du kan opprett en fil ved å kjøre touch dummy. Touch er ett ganske enkelt program, som i utgangspunktet kun skal oppdatere klokkeslettet for når en fil ble modifisert, og hvis filen ikke finnes blir den opprettet.
Manipulering av filer
Vi skal nå flytte filen ett hakk opp i mappestrukturen. Bruk mv dummy ../ til dette. To punktum har en spesiell betydning, akkurat som ~, og henviser til mappen over oss. Hvis du hadde lyst å gi dummy-filen ett nytt navn ,kunne du ha skrevet dette inn etter den siste skråstreken.
Du kan bekrefte at dummy-filen finnes i mappen over ved å kjøre ls ../. Du kan også endre navn på dummy-fila ved å bruke følgende kommandoen mv ../dummy ../nytt_navn.
Det er enkelt å kopiere filer ved å bruke «cp». For å kopiere dummy-fila til nåværende mappe, kjører du cp ../nytt_navn ., hvor det siste punktummet peker til nåværende mappe. Hvis du vil kopiere fila og gi den ett nytt navn, kan du skrive inn ett navn istedenfor punktummet. Du kan også slette filer med «rm». Du kan også skrive ett eller flere filnavn etter rm for å slette flere filer om gangen.
For å returnere til hjem-mappa kan vi enkelt og greit bare kjøre cd, da dette programmet alltid returnere deg til hjem-mappa. For å slette mappene du har jobbet med til nå, skriver du rm -R mappe hvor -R er en valgmulighet som gjør at rm sletter mapper.
Omdirigering av utskrift og inntasting
Du husker kanskje at alle eksterne enheter tilkoblet systemet representeres som vanlige filer i /dev. Unix er generelt veldig glad i å representere ting som filer. Ett annet eksempel er når programmer skriver ut tekst på skjermen, så skrives dette egentlig til en spesiel fil som heter «stdout». Det som er interessant med dette er at vi kan lage kommandoer som skriver resultatet til en fil, fremfor skjermen.
ls er ett enkelt program som skriver ut innholdet fra en bestemt mappe, til skjermen. Hvis du derimot legger til ett større-enn tegn etterfulgt av ett filnavn til slutt i kommandoen, vil resultatet skrives til denne filen.
Prøv å taste inn dette, og trykk enter: ls > utskrift. Da vil ingenting komme frem på skjermen din, men om du derimot ser på innholdet av fila «utskrift», så vil du se hva ls-programmet faktisk skrev ut.
Dette kan være nyttig med for eksempel cat-programmet, som tar innholdet av en fil og skriver det ut på skjermen. Dette programmet har også muligheten til å lese opp flere filer, og skrive ut innholdet etter hverandre. Ved å omdirigere utskriften til en fil, kan du plutselig slå sammen flere filer til èn.
Når du bruker større-enn-symbolet, så overskriver du alt i filen du angir. Hvis du heller vil legge til utskrift til en fil, kan du bruke større-enn-symbolet to ganger. I dette eksempelet bruker vi «echo», som er ett program som skriver ut på skjermen. Hvis du kjører echo "Heisann!" > hei tre ganger etterhverandre, så vil fila «hei» fortsatt bare inneholde èn linje, hvor det står «Heisann!». Hvis du derimot kjører echo "Heisann!" >> hei tre ganger etterhverandre, vil fila «hei» inneholde tre linjer hvor det står «Heisann!» på hver linje.
Det er også mulig å gjøre tilsvarende med tastaturet. Hvis du bruker mindre-enn-symbolet vil programmet få informasjon fra en fil, ikke tastaturet du trykker på. Hvis den går tom for tekst i fila du angir, vil den begynne å lese fra tastaturet igjen.
Dette kan være nyttig om du for eksempel har ett program som ber om brukernavn og passord ved oppstart, og du er lei av å skrive inn dette hver gang du. Da kan du heller skrive brukernavn og passord til en fil, og sende dette inn til programmet via mindre-enn-symbolet. Vi vil riktig nok aldri anbefale å lagre ett passord i klartekst, men det ett mulig bruksområde.
Videresend utskrift til andre programmer
Av og til kan det være nyttig å ta utskriften til ett program, og gi det videre til ett annet program for behandling. Det er mulig å gjøre dette ved å først kjøre programnavn > tmp etterfulgt av annet_program < tmp. Dette blir derimot litt tungvindt. Terminalen har derfor en kortere måte å gjøre dette på ved å bruke pipe-tegnet.
Som ett eksempel, la oss si vi har lyst til å se innholdet i /usr/bin. Her er det såpass mange programmer, at vi neppe får plass til alt på skjermen. Vi kan selvfølgelig bla side opp og side ned med tastaturet, men det finnes en bedre måte. Programmet «less» tar imot tekst og sørger for at du kan bla opp og ned på en enkel og rask måte, omtrent som å åpne masse tekst i notepad. Vi kan se på innholdet i /usr/bin via less på følgende måte: ls /usr/bin | less.
Som en vanlig bruker er det ikke alt du har lov til å gjøre videre. Bli med på neste side, hvor vi ser nærmere på rettighetene i terminalen »
Rettigheter
Full makt som administrator
Systemadministrator har alle rettigheter uansett hvilken fil eller mappe det er snakk om. Brukeren som eier en fil eller mappe, normalt brukeren som lagde fila eller mappa, kan ha andre rettigheter enn alle andre brukere. Sist, men ikke minst, er det mulig å samle brukere i grupper, og kontrollere rettighetene til en gitt mappe eller fil utifra gruppemedlemskap.
Brukere har i utgangspunkt bare tilgang til sitt eget hjem. Det er derimot fullt mulig at root — systemadministratoren — legger de til i en gruppe som har rettigheter til å lese og skrive til mapper i /media eller /mnt.
Hvis du kjører ls -l vil det dukke opp litt mer informasjon enn vanlig. De første ti tegnene er hvilke rettigheter som er satt for en gitt fil eller mappe. Det aller første tegnet kan være enten d eller -, og sier om denne gjenstanden er en mappe eller ikke. De tre neste tegnene representerer da lese-, skrive- og kjøre-rettigheter for eieren.
Igjen kan hver av disse enten være en bokstav som symboliserer hvilken rettighet det er snakk om (r for les, w for skriv og x for kjør), eller bindestrek hvis rettigheten mangler. De tre neste tegnene er rettighetene for gruppa denne gjenstanden tilhører, mens de siste tre tegnene viser hvilke rettigheter alle andre brukere har for akkurat denne gjenstanden.
La oss ta ett eksempel: «-r-xr-----». Det første tegnet sier her at det ikke er en mappe det er snakk om. De neste tre tegnene forteller oss at eieren av fila kan lese og kjøre, men ikke skrive til den. De følgende tegnene forteller oss at alle brukere som tilhører samme gruppe som fila, har leserettigheter. De tre siste tegnene forteller oss at andre brukere enn eieren, gruppemedlemer og systemadministrator ikke har noen rettigheter. De kan med andre ord ikke gjøre noe som helst med fila.
Slik endrer du rettighetene
Det er tre programmer som kan endre hvem som har tilgang til en fil eller mappe: «chmod», «chgrp» og «chown». Førstnevnte lar deg endre rettighetene til fila. chmod 644 testfil vil eksempelvis endre rettighetene slik at eieren av testfil kan lese og skrive, mens andre brukere kun kan lese fila.
De to gjenværende programmene lar deg henholdsvis endre gruppe og eier. For å få testfil til å tilhøre gruppen «users» kan du kjøre chgrp users testfil. For å skifte eier av testfil til «npk» kan du kjøre chown npk testfil. Alle tre lar deg liste opp flere fil- og mappe-navn om gangen, slik at du kan gjøre samme endring for flere filer.
Bli administrator i korte perioder
Før i tiden var det veldig vanlig å bruke ett program kalt «su» for å midlertidig bytte bruker. Uten argumenter lar programmet deg bytte til administratorbrukeren, som er hva programmet brukes mest til. Problemet med su er at du er administrator helt til du kjører exit, noe som gjør at mange gjerne glemmer hvem de er logget inn som, og dermed gjør ett par ting som administrator de absolutt ikke burde.
I dag er det derfor mye mer vanlig at su-kommandoen er deaktivert, og at du heller må benytte deg av «sudo». Sudo lar deg kjøre èn enkelt kommando som administrator. Så for hver eneste kommando du vil kjøre som administrator må starte med sudo. Sudo skiller seg også ut fra su ved at brukeren har sitt eget passord for å få administrator-rettigheter, mens su krevde at du kunne administrator-brukerens passord. For å bruke sudo må du tilhøre en spesiell gruppe, som en administrator må gjøre deg medlem av.
Hittil har du kun kjørt ett og ett program om gangen. Hvordan du kan håndtere flere programmer samtidig er i, viser vi deg på neste side ».
Flere prosesser
Når du først starter ett program i terminalen kjører det helt til det er ferdig, uten at brukeren kan minimere eller starte andre programmer i mellomtiden. Vi skal nå vise hvordan du kan sjonglere flere programmere i terminalen samtidig.
Flere programmer samtidig
Du starter med å skrive man ls, før du trykker enter-tasten. Hvis du nå vil legge vekk programmet uten å avslutte det, kan du trykke ctrl+z. Programmet skal da settes på pause og du vil kunne kjøre andre programmer som om programmet var lukket.
For å se en liste over alle programmene som kjøres av din bruker, kan du skrive jobs. Her får du en liste som viser id-en til programmet, om det kjører eller har stoppet, og navnet på programmet. Hvis du vil hente frem ett tidligere program kan du bruke kommandoen fg id. Hvis du utelater id vil fg-programmet kjøre det siste programmet som ble lagt ned med ctrl+z.
Av og til vil du gjerne at programmer skal fortsette å kjøre i bakgrunnen, ikke stoppe mens du jobber med noe annet. Hvis du har stoppet ett program med ctrl+z, så kan du bruke «bg». Dette programmet fungerer på samme måte som fg, men fremfor å starte programmet og vise det til brukeren, så fortsetter heller programmet i bakgrunnen mens du kan jobbe med noe annet.
Hvis du på forhånd vet at du vil kjøre ett program i bakgrunnen, kan du veldig enkelt bare legge til ett &-tegn i slutten av en kommando, for eksempel slik: man ls &.
Avslutte programmer
Av og til er det også kjekt å kunne avslutte programmer. Det kan du gjøre ved å skrive kill %job-id, hvor job-id er det som vises når du kjører jobs. Dette vil sende ett signal til programet om at det skal avslutte. Hvis programmet likevel ikke avslutter, kan du tvangsavslutte det på følgende måte: kill -9 %job-id. Det bør imidlertid være en siste utvei, ettersom programmet ikke får muligheten til å reagere hvis du tvangsavslutter det.
Det er også mulig at ett program kjører flere ganger. Hvis du vil avslutte alle instanser av ett gitt program, kan du bruke killall programnavn. Killall-programmet kan også ta imot -9.
Sist men ikke minst bør du kjenne til programmet «top», som er det nærmeste du kommer til en systemmonitor i terminalen. Denne viser hvilke programmer som kjører og hvor mye prosessorkraft og minne de bruker av maskinen. I motsetning til jobs viser top alt som kjører, ikke bare det som er startet av din bruker.
En annen forskjell fra jobs er at top viser prossess-id (PID), ikke job-id. Det finnes også ett annet program som gjør det samme som jobs, men viser prosess-id istedenfor job-id, nemlig «ps».
Bli med over til neste side, så viser vi deg hvordan du bruker terminalen til automatisering »
Automatisering
Gjør mye, samtidig
Du har sikkert flere enkle oppgaver som du gjør flere ganger iløpet av en dag eller uke. Filer som skal flyttes, programmer som skal åpnes, programmer som skal kjøres i en bestemt rekkefølge og så videre. Terminalen lar deg automatisere slike oppgaver på en forholdsvis enkel måte.
Vi snakket tidligere om at programmer kan motta informasjon fra en fil istedenfor brukerens tastatur, dette er også mulig for terminalen selv. Lim inn følgende i en helt vanlig tekstfil, og lagre den som «test»:
cd
pwd
cd /usr/bin
pwd
cd
Gi så denne filen kjøre-rettigheter ved å taste inn chmod +x test, før du kjører filen med kommandoen ./test. Du skal få to linjer på skjermen, stien til din hjem-mappe, og /usr/bin. Da har du faktisk kjørt ditt første script.
Når du skal kjøre programmer eller scripts i samme mappe som du står i, er du nødt til å starte kommandoen med ./, som ber terminalen lete etter programmet eller scriptet i nåværende mappe. Dette må gjøres siden terminalen normalt leter etter programmer i /bin og /usr/bin.
Ett script er altså en enkel tekstfil som inneholder kommandoer terminalen skal kjøre. Du vil få samme resultat om du kopierer innholdet av filen, limer det inn i terminalen og trykker enter. Vi skal nå gå gjennom flere muligheter terminalen har, som er spesielt nyttig i utviklingen av scripts, men likevel ikke begrenset til dette bruksområdet.
Variabler
Av og til kan det være greit å mellomlagre verdier, eller bare gi ett enkelt navn til dem. Terminalen støtter dette fullt ut, og det kan gjøres ved å skrive følgende: NAVN=VERDI. For å hente ut informasjonen lagret i en såkalt variabel, skriver du dollar-tegnet etterfulgt av variabelnavnet. Som ett eksempel vil følgende script lagre tekst i variabelen ENKEL_TEKST, for så å skrive det ut på skjermen.
ENKEL_TEKST="Hallo verden"
echo %ENKEL_TEKST
Tekst med mellomrom må være omringet av hermetegn.
Du kan også lagre programnavn i variabler, og kjøre programmet ved å hente ut verdien av variabelen som første handling på en linje. På den måten kan du lage scripts som kjører forskjellige programmer basert på innholdet av en variabel, som kan være definert før scriptet kjøres.
Det er også mulig at brukeren selv definerer variabler ved å bruke programmet read. Vi demonstrerer bruken av read i følgende script:
echo Skriv inn fornavnet ditt:
read NAVN #NAVN er variabelen vi ønsker å lagre oppgitt verdi til
echo Ditt navn er: $NAVN
I dette scriptet blir vi også presentert for noe nytt, kommentarer. Alt etter #-tegnet blir ignorert av terminalen, og kalles en kommentar. Dette blir ofte brukt til å forklare hva som skjer i scriptet, for deg selv og andre.
Kjøring av programmer med krav
Når en kommando kjøres i terminalen, vil terminalen alltid vite om kommandoen kjørte med eller uten problemer. Dette kan vi bruke til vår fordel. Ved hjelp av to logiske operatører kan vi kjøre kommandoer avhengig av om forrige kommando var vellykket eller ikke.
Først ut av har vi operatøren «og» (&&). Kommandoer separert med «og»-operatøren, vil kun kjøre hvis forrige kommando var vellykket. Vi kan teste dette enkelt med mkdir ~/fold && mkdir ~/fold/sub. I dette tilfelelt, vil mkdir ~/fold/sub kjøres hvis den første kommandoen kjørte uten feil.
Neste operatør er «eller» (||). Kommandoer separert med «eller»-operatøren, vil kun kjøre hvis forrige kommando ikke var vellykket. For å demonstrere dette kan vi skrive mkdir ~/fold || echo "Det er mulig ~/fold finnes fra før av". I dette tilfellet vil det skrives ut ekstra tekst dersom mkdir ~/fold avsluttes med en feilmelding, men ikke ellers.
Disse operatørene kan forøvrig brukes med mer enn to kommandoer.
Løkker
Det er ofte nyttig å kjøre samme sekvens med kommandoer ett viss antall ganger, eller for hvert element i en liste. Det kan for eksempel være kjekt å kjøre en kommando for noen filer i en bestemt mappe, eller alle. Terminalen har løkker for denne hensikten.
I denne artikkelen skal vi bare ta for oss en bestemt form for løkke: «for»-løkken. Det finnes to andre former for løkker som vi ikke kommer til å gå mer inn på her. En «for»-løkke kjører noen spesefikke kommandoer for hvert element i en liste, og ser mer eller mindre slik ut:
for item in fil1 fil2 fil3; do
echo $item
done
Det er også mulig å skrive en «for»-løkke på èn enkel linje slik: for item in fil1 fil2 fil3; do echo $item; done. Legg merke til bruken av semikolon for å separere linjer.
En «for»-løkke starter alltid med nøkkelordet «for». Det blir så fulgt opp med ett variabelnavn som kan brukes av koden som skal kjøres. «In» er nok ett nøkkelord som skiller variabelnavnet fra listen. Alt mellom «in» og semikolon blir da betraktet som en mellomrom-separert liste. Denne listen kan være så lang eller kort som du selv ønsker.
Alt mellom «do» og «done» er kommandoene som skal kjøres for hvert element i listen. I dette eksempelet finnes det kun èn kommando, men du kan kjøre så mange kommandoer du vil. Utskriften på skjermen når du kjører denne «for»-løkken skal bli:
fil1
fil2
fil3
Du har også mulighet til å generere en liste med et gitt antall siffer, ved å skrive følgende:
for item in $(seq 1 10); do
echo $item
done
Vi kan bruke $() til å fange utskriften av en kommando. I dette tilfellet kjører vi programmet «seq» som skriver ut alle tallene mellom 1 og 10. Denne «for»-løkken vil dermed kjøre ti ganger, og item vil referere til hvilken iterasjon vi er i.
Mønstre
For at «for»-løkken skal bli ekstra nyttig mot filer, er det mulig å bruke det vi kaller mønstre. Dette er best forklart hvis vi har ett eksempel å henvise til. Følgende «for»-løkke vil endre navn på alle filer som slutter med .nfo i nåværende mappe, til å slutte på .txt.
for file in *.nfo; do
mv $file {$file/.nfo}.txt
done
Her er det flere ting å merke seg. *-tegnet er ett spesielt tegn som tilsvarer «alt». Med andre ord vil *.nfo matche alle filer som slutter på «.nfo». Vi kan også bruke tegnet på andre måter. Dow* vil gi oss alle filer som starter med «Dow», mens *in* vil gi oss alle filer som inneholder «in».
På linje to ser vi også noe nytt. Du kan lese {$file/.nfo} som at vi fjerner «.nfo» fra hva enn $file-variabelen inneholder. Merk at .nfo blir fjernet uansett hvor i filnavnet den befinner seg, hvis filnavnet hadde vært «test.nfo.test» hadde resultatet blitt «test.test». Siden {$file/.nfo} nå inneholder ett filnavn uten «.nfo», kan vi legge på «.txt» for å få ønsket resultat.
Det er mye mer du kan gjøre med mønstre, men vi lar dette være en liten smakebit.
Det er lett å bli bitt av basillen:
Har får du en lengre innføring i PHP »