Hvorfor?
Er det ikke lettere å trykke på knapper?
I de fleste operativsystem er vi vant med gode og intuitive brukergrensesnitt, som lett og oversiktlig gjør at vi kan jobbe og la oss underholde på en datamaskin. Så hvorfor ønsker man å bruke terminalen i Linux?
Svaret er at men ved å bruke terminalen og programmer der kan gjøre mye man ikke kan gjøre i ett grafisk brukergrensesnitt. Ett "vanlig" program man åpner i form av ett vindu, er i realiteten en måte å bruke musepekeren til å kjøre spesifikke kommandoer i ett program. Siden hver knapp er knyttet opp imot funksjoner i programmet vil det i stor grad være låst til hva den som har laget programmet og det grafiske bruker grensesnittet vil at du skal gjøre med knappen.
Ett eksempel på funksjon som en knapp kan ha, er å skru på webkamera på datamaskinen din, og vise det som kameraet filmer i ett vindu. En annen knapp kan åpne nettleseren din, og sende deg til en webside.
I terminalen kan man gjøre det samme, bare at man kan for eksempel skru på webkamera, ikke vise deg hva det filmer, men lagre et bilde i en fil på datamaskinen din. Et annet bruksområder at at man henter data fra en webside, filtrer bort uønsket innholdet i websiden, og lagre det i ett dokument på datamaskinen.
I tillegg kan man seriekoble kommandoer i terminalen. Det er for eksempel fullt mulig å koble samme kommandoer til å starte webkameraet ditt, lagre en filmsnutt, redigere farger i videoen og lagre den med med en encoding som gjør at den tar liten plass. Man kan også å ta innholdet man hentet fra en webside, og i stedet for å lagre det i ett dokument, sende det i en epost til en kamerat.
Denne fleksibiliteten gjør at man kan ved å sette samme mange små enkle programmer som seriekobles lage kompliserte programmer som kan løse kompliserte oppgaver. I tillegg kan dette automatiseres. Siden flere programmer deler på flere mindre programmer kan hvert enkelt "hovedprogram" være ganske lite når de skal lastes ned og installeres.
Dette er noe av grunnene som gjør Linux populært iblant entusiaster.
Options
Kjøre programmer på flere måter
Når en viser innholdet i en mappe skriver man kommandoen, eller kjører programmet "ls" etterfulgt av "options" og ett eller flere argument som forteller hvilke fil(er) som det skal vises innholdet til. Det som skjer da er ls kommandoen starter programmet ls, programmet bruker de "options" vi har valgt og "executer" filen(e) som er satt som argument. Hvis filen er en mappe vil den liste innholdet i mappen på den måten vi har spesifisert med "options". Hvis det er en fil, vil den den kun vise filen på den måte vi har spesifisert med "options".
kommandoen jeg beskrev over kan se slik ut:
ls -l Documents
ls -l minTextfil.txt
Ved å bruke ls kommandoen med "optionen" -l vises filen(e) i en liste hvor man kan se rettigheter og hvilke bruker og brukergruppe som eier filen, størrelse på filen og når den ble sist endret. Hvis man i tillegg legger til "optionen" -t vil filene sorteres etter lagringsdato.
ls -lt Documents
Merk at ikke alle programmer og options er begrenset til å være "skrudd på". I enkelte programmer kan man skrive inn ett tall, eller en tekst som endrer hvordan programmet kjører. En litt lengre og mere detaljert måte å skrive den forrige kommandoen på som illustrerer godt hvordan en option som angir litt mere fleksibelt hvordan programmet skal kjøres er dette:
ls --sort=time
Standard output
Hva som kommer ut av programmet når det kjøres.
De fleste programmer har noe som heter standard output og standard input. Normalt er standard output noe som blir skrevet som ett svar eller resultat i skjermen din. Med ls kommandoen kan man i stedet for å skrive standard output til terminalen din, skrive det til en fil:
ls -l > listFilesInThisDirectory.txt
Eller det kan legges til i bunne av en fil slik:
ls -l >> listFilesInThisDirectory.txt
Standard input
hva som mates inn i programmet når det kjøres.
Standard input kan brukes til å koble samme programmer i terminalen. Under bruker vi programmet grep, som filtrer ut linjer som ikke inneholder det vil angir at den skal lete etter.
grep bilde.jpeg listFilesInDirectory.txt
Med denne kommandoen får vi grep til å lete etter linjer som inneholder teksten bilde.jpeg i filen listFilesInThisDirectory.txt. Når den har funnet en linje som inneholder det vi søker etter skrives det til terminalen. En alternativ måte å gjøre dette på er å koble sammen programmet ls og grep med en såkalt pipe. Dette tegnet er på norske tastatur plassert over tab på venstre side av tastaturet. Det som skjer her er at outputen fra "ls -l" sendes til grep som søker etter strengen "bilde.jpeg".
ls -l | grep bilde.jpeg
Outputen fra grep kan skrives til en fil i stedet for at det går til terminalen som vist under, eller det kan sendes videre for enda mere arbeid i flere programmer.
ls -l | grep bilde.jpeg > listFilesInThisDirectory.txt
En annen måte å bruke standard input på er å definere input direkte.
grep bilde.jpeg < listFilesInThisDirectory.txt
Her tar man innholdet i filen og bruker grep til å søke etter bilde.jpeg. Merk forskjellen på > og < . Standard input leses fra fil er < symbolet, og standard output skrives til fil er > symbolet.
Shell script
En kort introduksjon
Hvis man ønske det, kan man lage serier av kommandoer i såkalte script. Disse scriptene kan man kjøre når man vil, eller til og med automatisere slik at de kjøres til faste tider i året, måneden, uken, dagen eller timen om man ønsker det.
Under er ett lite script vi kan kalle logger.sh
#!/bin/bash
DATEVAR=$(date "+%Y-%m-%d")
ls -l > dirLog_${DATEVAR}.txt
Scriptet over lager en fil som er datomerket med dagens dato når det kjøres. Filen inneholder en liste over alle filer i mappen på tidspunktet scriptet ble kjørt.
Første linje beskriver hvilket program som skal kjøre scriptet. I dette tilfellet bash som er det samme programmet som "er" terminalen i Linux. På andre linje lages en variabel med navnet DATEVAR som inneholder standard output fra programmet date, med som med inputen +%Y-%m-%d som blir for eksempel 2020-08-18. Tredje linje tar outputen fra ls -l og lagrer det i en fil som i dette eksempelet heter dirLog_2020-08-18.txt
Hvis dette scriptet settes opp slik at det kjøres en gang om dagen vil man kunne ha en ganske detaljert logg over hvordan innholdet i mappen har blitt forandret over tid. Dette kan videre brukes til å overvåke endringer på datamaskinen. Det er bare fantasien som setter begrensninger i hvordan man kan bruke shell script til å automatisere serier med kommandoer.
Reelle eksempler på bruk av shell-scripts er automatisering av backups, utsendelse av e-poster med statistikk, og alt annet du måtte tenke deg at du ikke vil bruke tid på å skrive inn kommandoer gjentatte ganger for å kunne gjennomføre.