Att använda terminalen 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, eller xterm-fönster som det också kallas. Denna sida ger en introduktion till de mest grundläggande kommandona i ett sådant fönster.

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.java har suffix .java). 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 Applications högst upp till vänster väljs undermenyn Accessories 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
e1prog letters Test.java
ed-6225-20:sydow:[~]$ ls

Resultatet av detta kommando beror förstås på vilka underkataloger (blå text) och filer (här svart text) som finns i hemmakatalogen. I detta fall finns alltså två underkataloger e1prog och letters och en fil Test.java. 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 e1prog
lab1 lab2 lab3
ed-6225-20:sydow:[~]$

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

ed-6225-20:sydow:[~]$ ls e1prog/lab1
HarmonicSum.java
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 e1prog
ed-6225-20:sydow:[~/e1prog]$ ls
lab1 lab2 lab3
ed-6225-20:sydow:[~/e1prog]$

Vi flyttar oss till katalogen e1prog 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 e1prog/lab1:

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

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

ed-6225-20:sydow:[~/e1prog/lab1]$ pwd
/chalmers/users/sydow/e1prog/lab1
ed-6225-20:sydow:[~/e1prog/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.java ovan är

/chalmers/users/sydow/e1prog/lab1/HarmonicSum.java

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 ~/e1prog 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:[~/e1prog]$ ls
lab1 lab2 lab3
ed-6225-20:sydow:[~/e1prog]$ mkdir lab4
ed-6225-20:sydow:[~/e1prog]$ 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 ~/e1prog/lab1 och vill flytta ~/Test.java till den katalogen:

ed-6225-20:sydow:[~/e1prog/lab1]$ mv ../../Test.java .

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.