Bruk av linux

Her har vi en samling med tips for nybegynnere ved bruk av terminalen i linux. Dette er ment som en guide for de som trenger det og er ganske nye i bruk av ubuntu og andre linuxbaserte operativsystemer. Her finnes også en del nyttige lenker til andre deler av hjelpesidene hvor ting står forklart litt mer i detalj.

Alle kommandoer og bilder på denne siden er tatt fra ubuntu 14.04 som er det som kjører på datasalene i dag. Dersom det er noe du savner og mener burde vært med i denne seksjonen kan du sende en mail til datastudass@math.ntnu.no så skal vi se hva vi får gjort.

Samling av linuxkommandoer

Her er en samling av kommandoer som blir gått gjennom på denne siden og noen ekstra vanlige kommandoer. Denne burde kun brukes som oppslagsverk hvis du glemmer hva en kommando heter. Er du ny linuxbruker kan det være lurt å hoppe til neste avsnitt.

Kommando Nøkkelord Beskrivelse
ls list (directory content) viser innholdet i mappen du står i
cd change directory endre hvilken mappe du står i
cp fra_fil til_fil copy kopierer en fil fra et sted til et annet
mv fra_fil til_fil move flytter en fil fra et sted til et annet
mkdir mappenavn make directory lag en ny mappe
rm filnavn remove slett fil (rm -d for å slette en mappe)
pwd print working directory viser sti til mappen du står i
chmod change mode endre rettighetene til en fil/mappe (se man chmod)
chgrp gruppenavn filnavn change group endre gruppen til en fil/mappe
man kommando manual viser manualsidene til kommandoen (q for å avslutte)
ssh "brukernavn"@"IP-adresse/Servernavn" secure shell Åpner en Secure Shell tilkobling til serveren
touch "filnavn" Lager en fil med navn "filnavn"

Finn flere kommandoer på Linux Shortcuts and Commands.

For å åpne en terminal i ubuntu må du trykke Ctrl + Alt + T, terminalen ser slik ut:

Når du åpner terminalen er standardplasseringen du er på hjemmeområdet ditt. For å se hvor du er kan du bruke kommandoen pwd som står for print working directory. Når du gjør dette får du opp noe slik:

Hjemmeområdet ditt burde ligge under

 /home/shome(a,d,b,...)/"første bokstav i brukernavn"/"brukernavn" 

som du kan se av eksempelet over. Hvor du er i filsystemet ditt står også på venstre-siden i terminalen før $-tegnet. I eksempelet over ser du at det står karius:~$. Dette betyr at jeg sitter på maskinen som heter karius, og er i mappen ~. Tegnet ~ er en peker til home mappen din.

Dersom du vil se hva du har i den mappen du er i kan du bruke kommandoen ls. Denne kommandoen har mange tillegsalternativer. Dersom du skriver ls -l får du også opp lese og skriverettigheter for mappene og filene som ligger i mappen du er i, og dersom du bruker alternativet ls -a får du opp skjulte filer og mapper. Disse begynner med punktum (.) foran navnet sitt. Du kan også bruke flere options samtidig. Dette gjør du ved å skrive de etter hverandre slik ls -l -a eller ved å skrive det slik ls -la. Under ser du hvordan de forskjellige alternativene fungerer og hva de gjør med output til skjerm.

Du kan så navigere mellom mapper ved å skrive cd "stien til dit du vil. Hvis jeg for eksempel har lyst til å navigere meg til home mappen min, kan jeg skrive cd ~ eller bare cd. Du navigeres til home mappa di hvis du ikke spesifiserer hvilken mappe du vil til. Dersom du skal til en mappe som ligger der du er nå kan du bare skrive cd "mappenavn". Dersom den mappen du skal til har en undermappe du egentlig vil til kan du bare skrive stien direkte dit cd "mappenavn1"/"mappenavn2". Du kan også navigere til skjulte mapper ved bruk av cd. Dette gjøres på helt vanlig måte, men husk punktumet i starten av navnet. Dersom jeg har en mappe .test som ligger der jeg er nå kan jeg bare skrive cd .test. Dersom du har lyst til å gå en mappe tilbake kan du bruke .. pekeren som er lagt i alle mapper automatisk. Dette er en peker til mappen som ligger over den du er i akkurat nå. Så dersom jeg er i ~/introkurs og vil til ~/ så trenger jeg bare å skrive cd ...

Under er noen eksempler på bruk av cd.

Opprette mapper

Kommandoen cd ../.. kan virke litt mystisk, men siden .. betyr "mappen over meg" betyr dette bare at du vil flytte deg til "mappen over den mappen som er over den du er i". Altså i dette tilfellet er dette home. Du kan også opprette mapper fra terminalvinduet, dette gjøres med kommandoen mkdir. Dersom du ikke spesifiserer noen sti der du vil ha mappen din, legges den der du er nå. Dersom du har lyst til å legge den et annet sted kan du gjøre det ved å skrive inn hele filstien. Hvis jeg for eksempel har lyst til å lage en ny mappe på hjemmeområdet mitt skriver jeg da mkdir ~/"mappenavn" eller mkdir /home/shomed/c/chrijak/"mappenavn". Dette er fordi ~ betyr home. Dersom du har lyst til å opprette flere mapper samtidig kan du bare skille de med mellomrom slik; mkdir ~/test1 test2 /home/shomed/c/chrijak/test3 da vil jeg opprette tre nye mapper som heter test1, test2 og test3. Både test1 og test3 vil havne i hjemmeområdet mitt, mens test2 vil havne der jeg var når jeg kjørte kommandoen. Under ser du noen eksempler på hvordan mkdir kommandoen kan brukes.

Her ser du at mappen jeg lagde ved å skrive mkdir .test har blitt opprettet som en skjult mappe og kan kun sees dersom du bruker -a som alternativ på ls kommandoen. At det er en skjult mappe påvirker heller ikke lese og skrive-rettighetene til mappen eller fila.

Kopiere/flytte filer og mapper

Nå når du vet litt hvordan å navigere i filsystemet kan det være greit å vite hvordan du flytter og kopierer filer og mapper fra terminal. Kommandoen for flytting av filer er mv og kommandoen for kopi er cp. Disse fungerer stort sett på samme måte. Dersom du legger ved alternativet -r på dem vil de kopiere/flytte rekursivt og kan derfor også kopiere/flytte mapper også. Strukturen du skriver inn kommandoer på er slik(med et eksempel).

mv -[option] [filename] [path]
mv -r test /home/Documents

cp -[option] [filename] [path]
cp -r test /home/Documents

Dersom test er en fil vil den bare bli flyttet/kopiert inn i /home/Documents/. Hvis det allerede ligger en fil i /home/Documents/ som heter test vil du skrive over denne filen med den nye. Hvis du ikke vil at dette skal skje finnes det forskjellige alternativer for å bestemme hvilken oppførsel du ønsker når det allerede ligger en fil med det navnet der. Du kan finne de forskjellige alternativene ved å skrive man mv eller man cp. Da får du opp en beskrivelse av hvordan kommandoen fungerer. Dette kan du gjøre med de fleste kommandoer i linux.

Dersom test er en mappe vil hele mappen legges over i /home/Documents/ som forventet, men dersom det allerede ligger en mappe i /home/Documents/ som heter test vil mv kommandoen stoppe deg og gi beskjed om at mappen allerede eksisterer, mens cp vil legge alle filene fra den mappen du vil flytte, inn i mappen som allerede lå der.

Lese og skriverettigheter

Du kan endre lese og skriverettigheter på filer og mapper i terminalen ved å bruke kommandoen chmod. Denne tar inn tre tallverdier og et mappe/filnavn. De tre tallverdiene står for user, group og others og bestemmer hvem som har lov til å gjøre hva med filen. Disse kommer i rekkefølge slik at det første tallet forteller hva user kan gjøre med filen, det andre group osv. user er som standard den som opprettet filen. Hver av rettighetene man kan ha på en fil er representert med et tall. Du kan se hva de forskjellige alternativene er i tabellen under.

execute write read
1 2 4

Dette betyr altså at 3 er execute and write, 7 er execute, read og write. Et eksempel på hvordan man endrer filrettighetene under.

chmod 754 "filnavn"

Her vil da du selv få read, write og execute, mens de du er i group med vil få read og execute, mens alle andre vil få read. Det finnes også en annen måte som kanskje er litt mer forståelig og lett å huske. Da er det bokstaver for de forskjellige gruppene og bokstaver for hvilke rettigheter som skal gis. De forskjellige klassene er gitt i tabellen under.

Referanse Klasse Beskrivelse
u user Eieren av filen
g group Brukere som er medlem av filens gruppe
o others Alle som ikke er påvirket av de to før
a all Alle de tre nevnt over

De forskjellige rettighetene er også satt opp på samme måte.

Referanse Rettighet Beskrivelse
x execute Kjøre filen som et program
r read Lese innholdet i fila
w write Skrive til fila

Med denne metoden er det da veldig enkelt. For å legge til en av de forskjellige rettighetene for en klasse skriver vi

 chmod "Klasse"+"Rettighet" "filnavn" 

På samme måte kan vi også fjerne en rettighet fra en klasse ved å skrive

 chmod "Klasse"-"Rettighet" "filnavn" 

Vi kan se på et eksempel som gir samme resultat som tidligere.

 chmod u+rwx,g+rx,o+r "filnavn" 

Her er de forskjellige endringene kommaseparert. Dersom vi for eksempel bare hadde skrevet

 chmod u+rwx "filnavn" 

vil kun rettighetene for eieren av fila bli endret, mens resten vil være som før. Dersom en klasse allerede har en rettighet du prøver å legge til skjer ingenting. Funksjonen chmod skiller lite på om du endrer lese og skriverettigheter på filer eller mapper. Derfor kan du endre alle filnavn til mappenavn.

Umask

Dersom du sitter med et prosjekt og jobber sammen med noen andre på de samme filene kan det være greit at lese og skriverettighetene du ønsker at nye mapper og filer skal ha, kommer riktig uten å måtte sette de for hver eneste fil du oppretter. Det er dette umask er til for. Denne er tilknyttet en session og ikke brukeren. Det vil si at når du åpner en ny terminal vil umask automatisk bli satt igjen til standarden. umask fungerer ganske likt som chmod. Dersom du bare skriver kommandoen umask får du opp et firesifret tall. Dette er da først et tall som er for noen spesielle rettigheter, vi kommer til å anta at denne er satt til 0 hele veien. Noe den også burde være hos deg med mindre du vet hva den gjør. De andre representerer som tidligere henholdsvis user, group og others.

Umask fungerer på den måten at tallverdiene trekkes fra et tall. Mapper har som standard 777 og filer har 666. Så hvis du nå setter umask 0022 "mappenavn" vil user få lese, skrive og kjørerettigheter, mens group og others vil få kun lese og kjørerettigheter. Hvis du derimot gjør det tilsvarende med en fil vil det være det samme bortsett fra at ingen får kjørerettigheter på fila. Den beste måten å tenkte på umask tallet på er å kun se på de tre siste sifferene(antar at det første er 0) og tenke på det som tallet gitt i chmod minus umask. Under er en tabell som viser de ekvivalente alternativene på umask og chmod på mapper. Trekk fra en fra alle siffrene i chmod for å få en tabell for filer.

umask chmod (mapper) beskrivelse
0000 chmod 777 alle får lov til å gjøre alt med mappen
0222 chmod 555 alle får kun lese og kjøre mappen
0333 chmod 444 alle får kun lese mappen
0444 chmod 333 alle får kun skrive til og kjøre mappen
0555 chmod 222 alle får kun skrive til mappen
0666 chmod 111 alle får kun kjøre mappen

På samme måte som chmod har også umask en symbolrepresentasjon for alle de forskjellige rettighetene og klassene. Her fungerer det helt likt som for chmod. Det betyr at dersom du setter umask som i eksempelet under vil vi få samme resultat som hvis vi kjørte chmod eksempelet over som før.

 chmod u+rwx,g+rx,o+r "filnavn" 
 umask u+rwx,g+rx,o+r  

Så når du bruker tallrepresentasjon for lese og skriverettigheter trekkes umask fra enten 666 eller 777, mens symbolrepresentasjonen spesifiserer hvilke rettigheter fila skal ha når den blir opprettet. Det kan også spesifiseres hvilke rettigheter de forskjellige klassene ikke skal ha ved å bruke - istedet for +.

Manual for kommandoer(man)

Etter at du har lært deg en del kommandoer går man ikke lenger rundt og prøver å huske nøyaktig hva man skulle skrive eller hvilke alternativer som finnes til kommandoer. Noen ganger er det også slik at man vil finne ut hvordan en kommando oppfører seg i litt spesielle tilfeller eller rett og slett hvordan input skal gis. Hvis du vet hvilken kommando du skal bruke, bare ikke hvordan, kan du bruke man "kommando" uten "". Da får du opp manualsiden for kommandoen. Hvis jeg for eksempel er interessert i å finne ut mer om cp kommandoen for å kopiere filer og mapper skriver jeg bare

 man cp 

og da får jeg opp noe slik:

Her ser du først hva kommandoen gjør og så får du opp hvordan du skal gi input og hvilke alternativer du kan sette på den. Det er litt en egen kunst å kunne lese og forstå manualsidene i linux, så det kan være lurt å gjøre dette mye i starten slik at du etterhvert kan finne svarene der fort.

Secure shell(ssh)

Skal du gjøre store beregninger eller lignende kan det være en god idè å bruke beregningsserveren på matteland. Denne heter markov, men først må du kunne logge på. Til dette bruker vi ssh som oppretter en kryptert forbindelse mellom maskinen du sitter på og beregningsserveren. Herfra kan du gjøre alt du vil og enda litt til. Kommandoen fungerer på følgende måte

 ssh "brukernavn"@"IP-adresse/Servernavn"
 ssh "IP-adresse/Servernavn"

Dersom du bruker den siste av de to ovenfor vil du bli bedt om brukernavn hvis du logger deg inn fra et annet sted enn Matteland. Du vil alltid bli bedt om passord på ntnu sine servere og maskiner, passordet er det samme som for brukeren din.

 ssh markov 
 ssh "brukernavn"@markov
 ssh markov.math.ntnu.no
 ssh "brukernavn"@markov.math.ntnu.no

Dersom du sitter på datasal vil alle eksemplene over gjøre nøyaktig det samme, men de fungerer ikke alltid. Grunnen til at du kan skrive bare markov istedenfor markov.math.ntnu.no er at markov allerede ligger inne som en server du kjenner og ssh gjenkjenner derfor markov som markov.math.ntnu.no. Dermed må du, hvis du skal logge inn fra en ekstern pc, bruke hele navnet på serveren, som i dette tilfellet er markov.math.ntnu.no. Logger du på fra en ekstern pc uten å spesifisere brukernavn(som det nest nederste eksempelet) vil du bli bedt om brukernavn før du blir bedt om passord, mens den siste vil bare be om passord.

Når du har lyst til å logge ut kan du bare skrive exit for å logge ut av serveren. Husk på at hvilken maskin du sitter logget inn på står på venstre side i terminalen. Har du beregninger som skal stå i lang tid kan det være greit om de kjører uten at du trenger å sitte innlogget med terminalen oppe. Derfor er det anbefalt å bruke screen. Hvordan screen fungerer kan du lese mer om her.

Sitter du på en windows pc og har lyst til å starte noen beregninger hjemmefra eller se hvordan det står til med noe som allerede kjører kan du bruke et program som heter PuTTy. Dette kan du lese mer om her.

Når du har noe som står over lengre tid og kjører kan det være greit at de som bare skal gjøre litt også har litt kapasitet. Husk, du er ikke den eneste som bruker markov. Hvis du driver med parallellprogrammering eller lignende kan det være god skikk å bruke htop for å se hvor mye beregningskraft du kan bruke. I tillegg er det greit å bruke en funksjon som heter nice. Nice er et mål på hvor grådig du er med prossessorkraften. Når du starter et nytt program er det bare å gjøre som før, men skrive nice først. Hvis du for eksempel har lyst til å starte matlab og kjøre et script skriver du

 nice matlab -nodesktop 

Grunnen til at -nodesktop alternativet blir satt er at dersom du vil bruke grafikk og lignende må det sendes over nettverket, noe som tar enormt mye tid.

Mosh står for "Mobile Shell" og er et alternativ til SSH. Fordelen med Mosh i forhold til SSH er at den greier å holde tilkoblingen oppe på tross av forandringer i IP-adresse eller tap av nettverkstilkobling. Mosh bruker SSH for autentisering og dermed fungerer de to svært likt for brukeren. For å kjøre mosh er det bare å bruke det akkurat som ssh men såklart bytte ut ssh med mosh. I windows og til OSX finnes det flere mosh-clienter som kan brukes.

2016-09-28, Ane Hov