Att använda Linux-datorerna i våra labbsalar

Vi kommer att i programmeringskursen använda de Linux-datorer som finns i labbsalarna. I stor utsträckning kommer vi att arbeta med grundläggande Linux/Unix-kommandon i ett terminalfönster. Denna sida ger en introduktion till de mest grundläggande kommandona i ett sådant fönster.

Inloggning

För att kunna använda datorerna i labbsalarna måste man ha ett datorkonto på dessa datorer. Varje konto har ett unikt användarnamn, ett Chalmers-ID (CID). Ni har redan första dagen fått ett sådant, typiskt bildat av de första bokstäverna i ert för- och efternamn. Dessutom behöver man ett hemligt lösenord; ni har också fått en skraplott som döljer ert kontos lösenord på raden 1. Ni måste komma ihåg ert lösenord och ni ska ALDRIG berätta det för någon annan. Ingen personal kommer någonsin att be er tala om vilket lösenord ni har.

Datorerna i labbsalarna är normalt påslagna och visar en inloggningsskärm där man anger användarnamn och lösenord. För att logga in anger man dessa på respektive rad; man kommer därefter till en ny skärmsida, skrivbordet.

Filträd

För att förstå fortsättningen måste man först förstå idén att filerna i en Linux-dator (liksom i de flesta andra operativsystem, till exempel Windows och Mac OS X) är organiserade i ett filträd, bestående av mappar, eller kataloger (på engelska folders eller directories), där en katalog kan innehålla såväl filer som andra kataloger. Varje användare har en hemmakatalog, som utgör roten för den användarens filträd. Uppe till vänster på skärmen finns en ikon med ett hus och texten sydow's Home, för mitt användarnamn som är sydow. För er får ni byta mot ert användarnamn. Dubbelklickar man på denna ikon så öppnas ett nytt fönster som visar filer och underkataloger. Underkatalogerna visas med en mappikon, medan filerna har olika ikoner, baserade på suffixet i deras namn (dvs vad som kommer efter '.' i namnet; HarmonicSum.hs har suffix .hs). Man kan dubbelklicka på en mapps ikon och får ett nytt fönster som visar denna katalogs filer och underkataloger. På samma sätt kan man fortsätta att klicka sig nedåt i trädet (här liksom oftast i datavetenskap använder vi språkbruket att roten är högst upp; man följer sedan grenarna nedåt).

Varje sådant fönster ger alltså en bild av användarens filer ur den aktuella mappens perspektiv; vi ser dess direkta filer och underkataloger men inte innehållet i underkatalogerna.

Terminalfönster

Att navigera i filsystemet

Vi övergår nu till att beskriva hur man arbetar i ett terminalfönster. Parallellt med läsningen av detta dokument i en webbläsare bör man ha ett terminalfönster öppet och pröva de kommandon som beskrivs. I menyn med RedHat-ikonen högst upp till vänster väljs undermenyn System Tools och nästan längst ner i denna undermeny finns Terminal. Välj detta alternativ och ett nytt fönster öppnas på skärmen. (Anm: Alla kommandon som beskrivs här gäller också för terminalfönster i Mac OS X; terminalprogrammet återfinns där i mappen Verktygsprogram under Program. På en Windows-maskin måste man öppna ett DOS-fönster. De kommandon som behövs där är något annorlunda; sök på nätet).

Första raden i ett terminalfönster ser ut på ungefär följande sätt:

ed-6225-20:sydow:[~]$

I övrigt är fönstret tomt. Markören står på första raden till höger om dollartecknet och väntar på inmatning, dvs datorn väntar på ett kommando. Eftersom vi inte kan något kommando än kan ni ju pröva med returtangenten, oftast märkt med symbolen ↵ eller texten Return. Det som händer är att vi får ny rad med samma text.

Också när man arbetar i terminalen har man en aktuell katalog (current directory eller working directory). När man öppnar ett terminalfönster får man sin hemmakatalog som aktuell katalog. Vi kan som första kommando begära en listning av alla filer och underkataloger; kommandot för detta är ls:

ed-6225-20:sydow:[~]$ ls
progintro letters Test.hs
ed-6225-20:sydow:[~]$ ls

Resultatet av detta kommando beror förstås på vilka underkataloger (här blå text) och filer (här svart text) som finns i hemmakatalogen. I detta fall finns alltså två underkataloger progintro och letters och en fil Test.hs. I allmänhet får vi här en listning av samma namn som förekommer i det fönster som öppnas om vi dubbelklickar Home.

Man kan ge ett (under)katalognamn som argument till ls för att se vad som finns i denna katalog:

ed-6225-20:sydow:[~]$ ls progintro
lab1 lab2 lab3
ed-6225-20:sydow:[~]$

Här finns tre kataloger. Vi kan gräva ännu djupare:

ed-6225-20:sydow:[~]$ ls progintro/lab1
HarmonicSum.hs
ed-6225-20:sydow:[~]$

Notera hur vi kan sätta samman en väg (path) ner genom katalogstrukturen genom att sätta ett divisionstecken mellan katalognamnen.

Vi kan förflytta oss i katalogstrukturen, dvs ändra aktuell katalog; detta görs med kommandot cd (change directory):

ed-6225-20:sydow:[~]$ cd progintro
ed-6225-20:sydow:[~/progintro]$ ls
lab1 lab2 lab3
ed-6225-20:sydow:[~/progintro]$

Vi flyttar oss till katalogen progintro och listar innehållet där. Nu ser vi också ytterligare något: inom hakparenteserna i början på raden ges den aktuella katalogen. Hemmakatalogen refereras i detta sammanhang till med namnet ~. Vi kan gå tillbaka till hemmakatalogen och sedan flytta oss direkt ner till progintro/lab1:

ed-6225-20:sydow:[~/progintro]$ cd ~
ed-6225-20:sydow:[~]$ cd progintro/lab1
ed-6225-20:sydow:[~/progintro/lab1]$ ls
HarmonicSum.hs
ed-6225-20:sydow:[~/progintro/lab1]$

Vi kan efterfråga namnet på den aktuella katalogen med kommandot pwd (print working directory):

ed-6225-20:sydow:[~/progintro/lab1]$ pwd
/chalmers/users/sydow/progintro/lab1
ed-6225-20:sydow:[~/progintro/lab1]$

Vi anar nu att min hemmakatalog är rot för mitt filträd, dvs de filer och kataloger jag skapar som användare, men att mitt filträd bara är en (liten) gren i det totala filträdet, vars rotkatalog är /. Vi kan nu också namnge en fil genom en absolut väg, som börjar med /, eller en relativ väg, som börjar med namnet på en underkatalog i den aktuella katalogen. En absolut väg till filen HarmonicSum.hs ovan är

/chalmers/users/sydow/progintro/lab1/HarmonicSum.hs

Detta namn bestämmer filen entydigt oavsett var i filträdet jag befinner mig när jag skriver namnet (dvs vilken den aktuella katalogen är). Relativa namn beror däremot på var man är:

Den uppmärksamme läsaren har observerat att namn som ~/progintro fungerar som en annan sorts absolut väg; de utgår från användarens hemmakatalog.

Slutligen nämner vi ytterligare två speciella namn:


Att skapa kataloger

En rutinerad Unix-användare har en utvecklad katalogstruktur där filer som rör olika arbetsuppgifter, projekt, intressen finns i olika kataloger. Det är opraktiskt att ha ett stort antal filer i en katalog. Följaktligen är det viktigt att lätt kunna skapa en ny katalog; det görs med kommandot mkdir (make directory), som tar namnet på den nya katalogen som argument:

ed-6225-20:sydow:[~/progintro]$ ls
lab1 lab2 lab3
ed-6225-20:sydow:[~/progintro]$ mkdir lab4
ed-6225-20:sydow:[~/progintro]$ ls
lab1 lab2 lab3 lab4

Att flytta filer

Vi kan flytta och döpa om filer med kommandot mv (move), som tar två argument. I de följande exemplen antar vi att vi befinner oss i hemmakatalogen med filer och kataloger enligt ovan. Effekten beror på om det andra argumentet anger en befintlig katalog eller inte.

Ett likartat kommando är cp (copy) som skapar en kopia av det första argumentet med det nya namnet eller i den givna katalogen. Skillnaden är alltså att den ursprungliga filen här finns kvar.

De speciella katalognamnen för ovanliggande och aktuell katalog är ofta användbara; så här kan vi skriva om vi är i ~/progintro/lab1 och vill flytta ~/Test.hs till den katalogen:

ed-6225-20:sydow:[~/progintro/lab1]$ mv ../../Test.hs .

Man kan ta bort filer med kommandot rm (remove) som tar ett eller flera filnamn som argument och tar bort dessa filer. Detta kommando måste förstås användas med stor försiktighet; det finns inget sätt att återvinna en fil som tagits bort av misstag.

Att lära sig mer

Vi har bara berört de allra mest grundläggande kommandona. Mycket mer kan man finna genom att söka på Unix commands på nätet; vi kommer också att efterhand nämna ytterligare möjligheter på föreläsningarna. Men ämnet är närmast outtömligt; på min dator finns 2472 kommandon som kan användas i terminalfönstret. Och dessutom kan kommandon ofta ta olika antal argument och dessutom olika former av flaggor. De flesta kommandon är också dokumenterade i systemet; med kommandot man (manual), som tar namnet på ett kommando som argument, får man en beskrivning av hur kommandot används utskriven i fönstret.