TDDE44 Programmering, grundkurs¶

Föreläsning 1.1¶

Johan Falkenjack, johan.falkenjack@liu.se¶

Föreläsningsöversikt Fö 1.1 & 1.2¶

  • Introduktion
  • Kursadmin
  • Datorer
  • Linux
  • Programmering

Föreläsningsöversikt Fö 1.1 & 1.2¶

  • Introduktion
  • Kursadmin
    • Betygsmoment
    • Kurshemsidan
  • Datorer och historia
  • Linux
  • Programmering
    • Vad är ett program?
    • SICP-citat
    • Syntax och semantik

Vem är jag och vad gör jag här?¶

vem.jpg

  • Johan Falkenjack, oftast han men hen går också bra.
  • Teknologie Licentiat i Datavetenskap och Universitetsadjunkt på Institutionen för Datavetenskap.
    • Slipper forska men brukade forska om maskininlärning och tillämpad statistik inom naturliga språk.
  • Data Scientist, lite programmerare, lite statistiker, på BRP Systems.
  • Tog ungefär 3 år på mig att "fatta" programmering.
  • Ny på kursen, examinator, kursledare, ambulerande labbassistent och allmänt bollplank i mån av tid.

Kursadministration¶


  • 3 Examinationsmoment, LAB1, LAB2 och DAT1
  • 12 Föreläsningar
  • LAB1, U/G, 3 hp
    • 3 Grundläggande Python-uppgifter
    • 4 Mindre laborationer
  • LAB2, U/G, 3 hp
    • 3 Större laborationer
  • DAT1, U/3/4/5, 2 hp
    • Datortenta (2024-05-30)
  • Kurshemsidan har denna och all annan information ni kan önska.
    • https://www.ida.liu.se/~TDDE44

Digitala kontaktytor¶

  • Kurshemsida

    • https://www.ida.liu.se/~TDDE44/
    • All kursinformation hittar ni här, inkl. föreläsningsbilder och kontaktuppgifter till personal på kursen.
  • Webreg

    • https://www.ida.liu.se/webreg3/TDDE44-2025-1
    • (alternativt https://www.ida.liu.se/webreg-beta/TDDE44-2025-1)
    • Anmälan till pargrupp.
    • Resultat/kommentarer - lärare fyller i återkoppling, systemet skickar e-post
  • Lisam används alltså inte i denna kurs.

Skicka kursrelaterad e-post¶

  • Skicka endast från er LiU-adress
  • Ha med kurskoden i ämnesraden
  • Om ni läste en annan kursomgång - berätta när ni först läste kursen

Kurslitteratur¶

  • Ingen obligatorisk.
  • Rekommenderade läsanvisningar finns alltid till:
    • Skansholm, J. (2019). Python från början. Studentlitteratur.
  • Oftast också till:
    • Downey, Allen B. (2015). Think Python: How to Think Like a Computer Scientist. Green Tea Press. http://greenteapress.com/wp/think-python-2e/. (Gratis online och PDF-version finns att ladda ner.)

  • Andra bra alternativ:
    • Lutz, M. (2013). Learning Python, 6th Edition. O’Reilly Media. (Publiceras i februari eller mars 2025 och blir kanske primär kurslitteratur nästa år, 5e utgåvan är också bra men 10 år gammal.)
    • Punch, W. F., & Enbody, R. (2017). The Practice of Computing Using Python, Global Edition, 3/E. Boston: Pearson.
    • Zelle, John M., (2017) Python Programming : An Introduction To Computer Science Third Edition. Franklin, Beedle & Associates, 2017. ISBN: 9781590282755, 1590282752

Får man använda ChatGPT (eller annan "Generativ AI")?¶

  • Enkla svaret: Nej.
    • All kod du lämnar in skall vara skriven av dig och din labbpartner.
    • Allt annat klassas som akademiskt fusk.
    • Akademiskt fusk → Disciplinnämnden → Avstängning från studierna.
  • Men om man bara använder ChatGPT som en extra labbassistent?
    • Inte rekommenderat.
    • ChatGPT är en dålig pedagog och blir väldigt lätt en krycka.
    • Du upptäcker på tentan att förståelse saknas.
  • ChatGPT är en synnerligen dålig pedagog och blir väldigt lätt en krycka som kan maskera när man saknar grundförståelse.
  • Ger dig svaret eller hela förklaringen och hjälper dig inte att själv utveckla nödvändig förståelse.
  • Vi har sett en tydlig trend att genomsläppet på tentan blir allt sämre ju fler som lutar sig mot ChatGPT under labbarna.

"Men i verkligheten kommer jag ju kunna använda ChatGPT"¶

  • Wolfram Alpha, Mathematica, eller MATLAB klarar allt som tas upp i alla grundläggande mattekurser.
  • Betyder det att du inte behöver kunna Linjär Algebra, Envariabelanalys, Flervariabelanalys, etc.?
  • Tänk på den här kursen och grundläggande programmeringsfärdighet på samma sätt.
  • (Dessutom är grundantagandet fel, på många arbetsplatser, där sekretess gäller i någon omfattning, kommer man troligtvis inte kunna använda ChatGPT eller liknande system än på väldigt många år.)

Lektioner och labbar under VT1¶

  • Görs i par som man anmäler i Webreg:
    • https://www.ida.liu.se/webreg3/TDDE44-2024-1/LAB1
    • Hitta partner först, anmäl sen.
    • Prata med er assistent om ni inte hittar en partner.
  • Genomförs i Linux-datorsal.
  • Ej obligatorisk närvaro, men Laborationerna måste redovisas innan de kan lämnas in.
    • Det finns specifika redovisningstillfällen schemalagda i TimeEdit
  • Lektioner: Övningsuppgifter som ni bör göra
  • Laborationer: Uppgifter som ni måste göra

Inlämning¶

  • Inlämning i systemet Sendlab.
  • Pythonuppgifterna rättas med automaträttningsskript.
    • Rättningskriptet genererar en hash-kod när ni är godkända, denna sparar ni i en txt-fil som ni skickar in i Sendlab här
    • https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_pyuppg_vt25
  • Laborationerna redovisas för er assistent som sedan låser upp Sendlab åt er.
    • QR-kod för upplåsning hämtar ni här: https://www.ida.liu.se/sendlab/student/request_validation?code=tdde44_labbar_vt25
    • Assistenten scannar den och låser då upp er inlämning.
    • Ni skickar sedan in kod i Sendlab här: https://www.ida.liu.se/sendlab/student/sendprevalidated?code=tdde44_labbar_vt25

Förändringar sedan förra kursomgången¶

  • Delvis omarbetade föreläsningar.
  • Reviderad kurshemsida för att enklare hitta relevant information (färre länkar till olika sidor).
  • Putsning av labbinstruktioner kommer pågå under kursen, inga ändringar men förtydliganden.
  • Något mindre fokus på objektorienterad arkitektur under VT2 och mer fokus på problemlösning och datalogiskt tänkande.

Hur kommer föreläsningarna se ut och vad är deras syfte?¶

  • Föreläsningarna är delvis nya för i år
  • Jag kommer inte täcka precis allt ni behöver i labbarna, en del av att kunna programmera är att kunna söka upp information själv.
  • Jag kommer inte hinna programmera så mycket som jag skulle vilja
  • Jag kommer fokusera på att introducera koncept och ge övergripande förklaringar, trådar som ni måste nysta vidare i.
  • I vissa fall kommer jag försöka förklara moment som tenderar att vara svåra att ta till sig via läsning.
  • Ni kommer inte klara er enbart på föreläsningarna, men föreläsningarna kommer att göra labbarna enklare.

Om jag som student skulle välja att inte gå på resten av föreläsningarna, vad är ditt viktigaste råd till mig?¶

  • Bortsett från "tänk om", våga testa.

Vad är ett program?

"Computer program, detailed plan or procedure for solving a problem with a computer; more specifically, an unambiguous, ordered sequence of computational instructions necessary to achieve such a solution. "

- Encyclopædia Britannica

Vad är ett program?

"We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells."

- Abelson and Sussman, Structure and Interpretation of Computer Programs aka The Wizard Book

Hur skriver man instruktioner?


eller


Hur programmerar man?

1943: ENIAC¶

eniac-marlyn-wescoff-and-ruth-lichterman2.webp

Programmerarna Marlyn Wescoff och Ruth Lichterman implementerar ett program på ENIAC. En grupp* av 6 matematiker, som också hade den "ovanliga" egenskapen att de var kvinnor, blev de första i världen att arbeta heltid med att programmera en elektronisk dator. Och glömdes sedan bort av historien i ca 50 år.

(* Utöver Wescoff och Lichterman; Jean Jennings, Betty Holberton, Fran Bilas och Kay McNulty.)

  • Vi har konstaterat att datorer är maskiner. Elektroniska datorer uttrycker i grunden bara ett elektriskt flöde. På tidiga datorer som Eniac var detta extremt tydligt.
  • I ENIAC uttrycktes programmen som hundratals telefonväxelkablar, ställdon, och brytare som tillsammans lät strömmen flöda genom maskinen enligt ett visst mönster.
  • Själva datan lästes in via hålkort.
  • ENIAC var Turing-komplett. Dvs bortsett från det oändliga lagringsutrymmet kunde ENIAC beräkna allt som Turing-maskinen kunde.

1945: John von Neumann och den fundamentala datorarkitekturen¶

  • John von Neumann tyckte dock att ENIACs approach var väldigt omständig.
  • Programmering via kabel var omständigt, tidskrävande, och besvärligt att felsöka.
  • Alan Turing hade ju visat med sin Universella Maskin att även instruktionerna kunde skrivas på bandet.
  • Om datan representerades av hålkort där sekvenser av hål representerade 1:or och 0:or, så borde program kunna representeras på samma sätt.

von Neumann-arkitekturen

von_neumann_arch.svg
  • Processorenhet med aritmetisk-logisk enhet och in/ut-register för denna
  • Kontrollenhet med aktuellt instruktionsregister och en programräknare som håller koll på nästa instruktion
  • Internminne som lagrar både data och instruktioner som används i den aktuella processen
  • Externminne för långtidslagring av data och program (sekvenser av instruktioner)
  • In- och Utenheter
  • von Neumann refererade till Alan Turing och menade att hans arkitektur bara var en realisering av vad Turing uppfunnit iom den Universella Turing-maskinen
  • Kallas mer generellt för Stored-Program Computer och är det vi oftast menar när vi pratar om datorer idag
  • Andra arkitekturer finns och tas upp i kursen i Datorteknik

Binär maskinkod, vår första abstraktion i kod

  • Består av långa sekvenser av 1:or och 0:or som representerar instruktioner och den data som instruktionerna opererar på.
  • Exempelvis 10111000, 00000000, 10111000, 10001110, 11011000, 11000110, 00000110, 10011110, 00001111, 00100100, 11001101, 00100000
    • Med "vanliga" heltal med talbas 10 motsvarar detta 184, 0, 184, 142, 216, 198, 6, 158, 15, 36, 205, 32
  • Ofta uttrycker vi 8-bitars sekvenser av binära tal (1 byte) som hexadecimala tal (med talbas 16).
    • Vi använder a för att representera vanliga heltalet 10, b för 11, osv. upp till f för 15
    • Exemplet ovan blir då b8, 00, b8, 8e, d8, c6, 06, 9e, 0f, 24, cd, 20
  • Resultat på en dator med MS-DOS på Intel 8086-hårdvara: Ett dollartecken i nedersta högra hörnet på skärmen.
  • Vi säger att maskinkod är en abstraktion av den underliggande hårdvaran.
  • Vi behöver inte längre tänka på elektroniska komponenter, vi har abstraherat bort det.

Maskinkod för Intel 8085 (1976), några exempel

Binary Opcode (hex) Description
10000111 87 Add the contents of register A to that of the accumulator
00111010 3a Load data stored in the given memory address
01111001 79 Move data from register A to C
11000011 c3 Jump to instruction in specified memory address
11000001 c1 Pop from stack and copy to memory registers B + C
  • Språket är strikt bundet till en viss typ av hårdvara.

  • Inte särskilt uttrycksfullt. Vi kan hämta bit-sekvenser från minnet, placera dem i register, och utföra enkla matematiska och logiska operationer på dem.

  • Allt annat än lättläst

  • Det är ungefär allt. Vill vi göra något mer avancerat måste vi skriva väldigt många operationer.

  • Eller så bygger vi något i maskinkod som, givet vissa inputs, generera annan maskinkod.

Assemblykod assembleras till maskinkod

MOV AX, 47104
MOV DS, AX
MOV [3998], 36
INT 32
  • Ett assemblator-program (eng. assembler), som någon skapat med hjälp av maskinkod, kan använda ovanstående text och producera ett program i maskinkod.
    • (Exempel från http://www.swansontec.com/sprogram.html)
  • Samma program som ovan, fast i Assembly-kod
  • Olika assemblatorer kan vara implementerade för olika hårdvaror, men deras assembly-kod kan se likadan ut.
  • Dvs. vi kan, med vissa begränsningar, assemblera samma assembly-kod till maskinkod för olika hårdvaror.
  • Vi har abstraherat bort maskinkoden, och i någon utsträckning, beroendet av viss hårdvara.
  • Mer läsbart, men fortfarande inte så uttrycksfullt.

C kompileras till assembly- och maskinkod

#include <stdio.h>
int main() {
  printf("Hello, World!\n");
  return 0;
}
  • En kompilator, som någon ursprungligen skapat med hjälp av assemblykod, översätter ett program från kod som vi, med lite övning, kan läsa och förstå, till maskinkod.
  • Kan efter kompilering köras direkt och oberoende av kompilatorn.
  • Tillåter eller kräver ofta manuell hantering av hårdvaruresurser som t.ex. minne och man behöver ofta vara väldigt detaljerad för att kompilatorn ska producera optimal maskinkod.
  • Kompilering av stora projekt kan ta lång tid och efter kompilering är man åter bunden till viss hårdvara.
  • Kan dock ge mycket snabb kod.
  • Enormt mycket mer uttrycksfullt.

Python interpreteras av ett program skrivet i C

print("Hello, World!")
  • En interpretator eller programtolk, som oftast skapats i ett kompilerat språk, kan köra program direkt, utan att översätta dem till maskinkod.
  • Kräver alltid att interpretatorn för det aktuella språket är installerad för att programmet ska gå att köra.
  • Kan köras på alla plattformar till vilka det finns en interpretator.
  • Ofta en eller flera storleksordningar långsammare att köra än kompilerad kod.
  • Dock oftast mycket snabbare att skriva och testa.
  • Perfekt för att lära sig programmera.

Abstraktionshierarki


Interpreterade högnivåspråk
↓
Kompilerade högnivåspråk
↓
Assemblerkod
↓
Maskinkod
↓
Digitala kretsar
↓
Elektronik
↓
Elektromagnetism
↓
???????????????
↓
Profit

Abstraktionshierarki


Interpreterade högnivåspråk (alla: TDDE44)
↓
Kompilerade högnivåspråk (alla: TDDE71 Programmering och datastrukturer)
↓
Assemblerkod (Y: TSEA28 Datorteknik Y)
↓
Maskinkod (Y: TSEA28 Datorteknik Y)
↓
Digitala kretsar (Y: TSEA51 Digitalteknik)
↓
Elektronik (Y, MED: TSTE05 Elektronik och mätteknik, valbar för Matte)
↓
Elektromagnetism (Y: TFYB05/09, TMA: TFYB06, MED: TFYA70)

Vilket programmeringsspråk är bäst?¶

Vilket verktyg är bäst?¶

  • Vilket snickarverktyg är bäst, en såg eller en hammare?
  • Till skillnad från snickare så brukar programmerare ha ett svar.
    • De har dock nästan alltid fel (om man frågar ett slumpmässigt urval av andra programmerare).

  • Det finns fall där en viss typ av språk definitivt är bäst, men det beror på vad programmet ska göra.
  • Många verkliga program är byggda i flera olika språk där varje språk används för det som det är bäst på.

Bättre fråga: Vilket programmeringsspråk är bäst för vårt syfte?¶

  • Vad är vårt syfte?
  • Ska ni kunna lämna den här kursen och gå ut och börja jobba som färdiga programmerare?
  • Grundkurs. Förståelse för programmering som verktyg och tankesättet som krävs.
  • Vi tar inte upp allt.

Python-Logo.png

Kort om Python

guido.jpg
ex-BDFL
  • Födelsedatum: sent 80-tal men officiellt 20e februari 1991
  • Skapare: Guido van Rossum (före detta "Benevolent Dictator For Life", eller BDFL, över Python)
  • Fyllde 2.0 i oktober 2000
  • Fyllde 3.0 i december 2008
  • Idag: 3.12
    • (I kursen använder vi 3.11)
  • Top 5 i de flesta rankningar av popularitet, nr 1 i flera av dem.
  • Interpreterat, objekt-orienterat och dynamiskt typat programmeringsspråk.
  • Varför Python i den här kursen?

  • Populärt som nybörjarspråk

    • Alltså finns väldigt mycket resurser på grundläggande nivå
  • Finns till flera plattformar, även inbäddade system, och används i produktion inom många områden

    • Alltså finns väldigt mycket resurser från verkligheten

    • Snabbt och enkelt att testa

  • Stöd för flera olika programmeringsparadigm

    • Möjlighet att demonstrera olika koncept inom programmering

LiUs GNU/Linux-miljö


eller

Vad i hela fridens namn, jag har ju knappt använt en dator med tangentbord förut?!

Operativsystem¶

operating-system-logos1.jpg

  • Mest fundamentala mjukvaran på en dator.
  • Ger andra mjukvaror en miljö att verka i utan behöva arbeta direkt mot hårdvara.
  • Filsystem.
  • Nätverk.
  • Ytterligare ett sätt att abstrahera bort onödig komplexitet.

It's a UNIX System!¶

unix_system.gif

  • Lex Murphy tittar på 3D-animerad filnavigering och hackar en hel nöjesparks säkerhetssystem på under 30 sekunder.
  • Tekniskt sett helt korrekt. Det här systemet fanns faktiskt. Silicon Graphics 3D File System Navigator
  • Inte på något sätt typiskt för hur UNIX eller en UNIX-liknande miljö brukar se ut, varken då eller nu.

Hur brukar det se ut?

  • Demonstrera inloggning via ssh.

Terminalen som användargränssnitt¶

  • Syfte: miljö för att utveckla och köra egna program
  • Enklare (färre rörliga delar) än ett grafiskt gränssnitt:
    • Output: text (en rad/tecken i taget)
    • Input: textkommandon
  • Kraftfullt, nästan ett programmeringsspråk i sig.
  • Jämfört med grafiskt gränssnitt:
    • Output: fönster med olika interaktiva grafiska komponenter
    • Input: musposition, musklick, tangenttryckningar, objekt som dras och släpps m.m
  • Engelska: interface
  • Gränssnitt - platsen där två olika system möts och kommunicerar med varandra - något som ligger mellan två olika system och genom vilket systemen kommunicerar med varandra.

Jag har hört att det heter skal/prompt/konsol, inte terminal?¶

  • Korrekt, begreppen används ofta synonymt men är i strikt mening inte riktigt samma saker. Generellt gäller att...
    • Terminalprogrammet tillhandahåller funktionalitet för skalprogram att visa text och ta emot tangentbordstryck från användaren.
    • Skalet/skalprogrammet (eng. shell) tillhandahåller ett interaktivt gränssnitt för att köra kommandon.
      • Startas automatiskt när vi öppnar terminalprogrammet.
      • En typ av interpretator.
    • Prompt är den sekvens av tecken som visar att skalet är redo att ta emot ett kommando.
      • Tecknet $ används ofta för att representera en godtycklig prompt i böcker och dokumentation.
    • Konsol är ett specialfall av terminal som är inbyggd i mjukvaran den interagerar med. Man kan säga att terminalprogrammet emulerar operativsystemets konsol. $\leftarrow$ överkurs
  • Alla är delar av ett Kommandoradsgränssnitt
  • Skalet/skalprogrammet (eng. shell)
    • Exempel, Unix/Linux: sh (Thompson, senare Bourne, Shell), bash (Bourne Again), csh (C), ksh (Korn), tcsh (TENEX C), zsh, scsh (Scheme), dash (Debian Almquist), fish (kolla in https://fishshell.com/)
    • Exempel, Windows: COMMAND.COM, CMD.EXE, PowerShell

Fil (eng. file)¶

  • På en dator är alla former av data representerade som filer.
  • En fil kan innehålla vad som helst som kan representeras digitalt
    • Text
    • Bild
    • Video
    • Ljud
    • Körbara program
    • Sensordata
    • Osv.
  • På en modern dator finns miljontals filer, de flesta av dem är vi normalt sett fullständigt ointresserade av.

Katalog (eng. directory)¶

  • En speciell typ av fil som "innehåller" andra filer.
  • Alla miljontals filer på datorn är organiserade i kataloger i kataloger i kataloger... för att göra det hela hanterbart.
  • Vi kallar hierarkier av kataloger i kataloger för katalogstrukturer (eller ibland katalogträd eller filträd).
  • På de flesta system har varje användare en hemkatalog där de lagrar sina egna filer.

Trädstrukturer¶

  • Hierarkiska strukturer som katalogstrukturer kallas ofta för träd (mer om dem i kurser i diskret matematik eller grafteori).
  • Vi kan tänka att trädet startar i roten och att alla kataloger representerar en gren.
    • Tänk på att även grenar kan ha mindre grenar i naturen, detsamma gäller våra trädstrukturer.
  • Värt att veta är att vi datavetare alltid ritar träd med roten i toppen och grenarna växande nedåt.
    • (Sorry, bara att vänja sig.)

Katalogstruktur i UNIX-liknande system¶

file_system.png

  • Katalog == Directory
    • /var är förälder parent directory till /var/tmp
    • /var/tmp är underkatalog subdirectory till /var
  • Självklart finns många, många fler kataloger.
  • Filträd - hierarkisk struktur
  • Jämför med mappar i Windows, macOS, eller Google Drive.

Sökväg

file_system.png
Katalogstruktur i Unix-liknande system
  • En form av adress för en fil (inte att förväxla med minnesadresser som vi återkommer till senare).
  • Skrivs på olika sätt i olika operativsystem, men vi kommer fokusera på Unix/Linux.
  • Sökvägen till roten är bara /
  • För att beskriva sökvägen till en fil eller katalog sammanfogar vi katalognamnen med /-tecken mellan.
  • Sökvägen till katalogen bin i katalogen usr är t.ex. /usr/bin

Absoluta sökvägar

file_tree.png
Innehållet i /home/student_johsj47
  • Utgår från roten i filsystemet; katalogen "högst upp", och som som alla andra kataloger ligger i

  • Absolut sökväg till roten i Linux & macOS: /

  • Varje fil eller katalog har en unik absolut sökväg.

  • Den absoluta sökvägen till en fil är densamma oavsett vilken arbetskatalog vi står i.

  • Exempel på absoluta sökvägar

/home/student_johsj47/katalog1
/home/student_johsj47/katalog2/hejsan/hoppsan
/home/student_johsj47/katalog3/fil7

Sökvägar som adresser¶

  • Jämför med en vanlig adress.
    • Stina Student
    • Björnkärrsgatan 18 D.10
    • Linköping
    • Sverige
  • Vi kan skriva det som en sökväg:
    • /sverige/linkoping/bjornkarrsgatan/18/d/10/stina_student

Var är vi?

travolta_lost.gif

Arbetskatalogen¶

  • När ett program körs, t.ex. ett pythonprogram vi skrivit, så körs det alltid i någon katalog.
  • Vi säger att det är vår arbetskatalog (eng. working directory).
  • Även skalprogrammet har en arbetskatalog, katalogen där kommandon vi kör utförs.
    • Vi säger ofta att vi "står i" eller "befinner oss i" en viss katalog.
  • Att arbeta via terminalen kräver att vi vänjer oss vid att tänka på var vi systemet vi befinner oss.
    • (Detta är direkt överförbart till hur vi arbetar med filer i programmeringen sen.)
  • Om vi t.ex. kör ett kommando som skapar en fil, så skapas den i katalogen vi står i. Samma sak om vi sedan kör ett kommando för att ta bort en fil med ett visst namn.

Så var börjar vi?¶

  • Varje gång vi startar ett skalprogram så startar vi i ~
    • Symbolen ~ utläses som "tilde" och är ett alias till den inloggade användarens hemkatalog.
    • Den "riktiga" sökvägen till en användares hemkatalog är /home/användarnamn
  • Vår arbetskatalog är alltså vår hemkatalog, tills vi flyttar på oss.
  • Vi kan alltid kontrollera var vi står genom att köra kommandot pwd (print working directory)
    • (I många fall kan vi också se i prompten var vi står.)
  • Bash startar "by default" alltid i hemkatalogen om man inte angett något annat.

Kommandot cd : change directory

  • Flytta till en annan katalog, en sökväg skickas med som argument till kommandot.
  • Exempelvis:
    • cd / : flytta till rotkatalogen
    • cd .. : flytta till föräldrakatalogen (en katalog "uppåt" eller "mot roten" från katalogen vi står i)
    • cd - : flytta tillbaka till den senaste katalogen vi var i
    • cd katalognamn : flytta till underkatalog till arbetskatalogen med namnet katalognamn (ger fel om den katalogen inte finns)
    • cd : specialfall som flyttar till hemkatalogen

Relativa sökvägar

file_tree.png
Innehållet i /home/student_johsj47
  • Utgår från en specifik plats i filsystemet (normalt sett från arbetskatalogen).

  • Varje fil eller katalog har olika relativa sökvägar beroende på vilken katalog man utgår ifrån.

  • Exempel på relativa sökvägar till /home/student_johsj47/katalog3/fil7

    • fil7 (från /home/student_johsj47/katalog3)
    • katalog3/fil7 (från /home/student_johsj47/)
    • ../katalog3/fil7 (från /home/student_johsj47/katalog2)
    • ../../katalog3/fil7 (från /home/student_johsj47/katalog2/hejsan)

Viktiga sökvägar

Absoluta — utgår från en fixerad punkt i filsystemet¶

  • / : roten i filsystemet
  • /dev/null : intigheten, filsystemets svarta hål
  • ~adalo256 : hemkatalog för användaren adalo256

"Halvabsoluta" — beror på användaren¶

  • ~ : din hemkatalog
  • ~/Downloads : där filer du laddar ner hamnar

Relativa — utgår från katalogen vi står i¶

  • . : ett alias för arbetskatalogen (eng. working directory), dvs. katalogen vi står i
  • .. : ett alias för föräldrakatalogen (eng. parent directory) till den katalog vi står i
  • Notera skillnaden mellan ~/Downloads och ~adalo256

  • Hemkatalogen

    • Dokument
    • Inställningar
    • Program som bara du ska ha tillgång till

Delar av ett kommando¶

delar_av_ett_kommando_ls.png

option = flaggor/växlar (olika för olika kommandon), t.ex. -l för kommandot ls

Delar av ett kommando¶

delar_av_ett_kommando_cp.png

option = flaggor/växlar (olika för olika kommandon), t.ex. -R för kommandot cp

Exempel på kommandon¶

  • echo : skriver ut argument i terminalen
  • cd: byter katalog (arbetskatalog - katalogen man "står i")
  • ls: visar innehåll i katalog
  • mv: flytta/döp om fil eller katalog (var försiktig, mv skriver över om det redan finns en fil med samma namn!)
  • mkdir: skapa katalog
  • cat: skriv ut innehåll i fil
  • touch: skapa ny fil/uppdatera senast ändrad hos existerande fil
  • man: visa hjälptext för kommandon
  • rm: ta bort en fil (var försiktig här också, det finns ingen papperskorg, borttagna filer är borta)

Kommandot python3¶

  • Startar Python-tolken för Python version 3.X (3.10.12 på våra system)
  1. Interaktiv användning: $ python3

  2. Skriv och kör ett skript: $ python3 filnamn

  • Side note: Vi skriver python3 för att på LiUs system så finns fortfarande en del gamla grejer som förutsätter att python pekar på Python 2.x. Så därför kör kommandot python en äldre version

Interaktiv användning¶

  • Starta en pythontolk genom att skriva python3 i terminalen.
  • Python ersätter skalprogrammet i terminalen.
  • Bra för att experimentera, testa och felsöka.
  • Avsluta genom att trycka Ctrl-D eller genom att köra python-kommandot exit().
    • Tekniskt sett så anropar vi funktionen exitutan några argument

Skriv och kör ett skript¶

  1. Starta en text-editor (t.ex. VSCode)
  2. Skriv kod och spara i en fil med exempelvis namnet hello.py.
  3. Från terminalen, kör programtolken och skicka med sökvägen till textfilen med pythonkoden som argument genom att skriva python3 hello.py
  • Bra för kod som man vill spara eller sätta i produktion.