Introduktion till datateknik för språkvetare ht 2015 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp. lingfil.uu.se/kurs/ids/. Där kommer det även finnas länkar till de olika delarna av detta kompendium. Mål (citerat från kursplanen) Kursen skall förmedla grundläggande kunskaper om datasystem och databehandling, som en bas för databehandling av naturligt språk. Efter avslutad kurs ska studenten minst kunna: • nämna och översiktligt förklara funktionen hos en modern datorhårdvaras viktigaste komponenter, inklusive externt och internt minne och andra viktiga digitala media • nämna och översiktligt förklara funktionerna hos ett vanligt operativ- och filsystem • skapa och använda filer i de vanligaste formaten för textdokument med elementär typografi, spela in och spela upp ljudresurser, samt visa bilder • översiktligt redogöra för begreppen teckenkodning, ordbehandling, elektronisk typsättning och filöverföring samt arbeta praktiskt med dem i några elementära sammanhang • använda program för elementär textbearbetning och enkel kvantitativ analys • översiktligt förklara begreppen klient/serversystem, Internet, www, webserver och webläsare • skapa HTMLsidor och publicera dem på nätet • översiktligt beskriva hur någon viktig söktjänst på nätet fungerar och använda denna på ett avancerat sätt • resonera kring digitala rättighetsfrågor i relation till konkreta objekt Examination För att få godkänt på kursen ska man göra klart inlämningsuppgifterna i samtliga moment. Bland Figur 1.1: Ett gnuhuvud som symboliserar operativsystemet GNU (= GNU’S Not Unix) annat för att underlätta min kontroll ska uppgifterna göras på våra datorer här, och man ska vara närvarande vid undervisningstillfällena. Om du någon gång inte kan närvara så hör av dig i förväg om detta! Bara betygen underkänt och godkänt finns på denna kurs. 1.2 Vårt datorsystem På STP används operativsystemet GNU/Linux som är ett system som liknar operativsystemet Unix. Vid »normalt« användande är det mest på skrivbordsmiljön man märker skillnad på system, med menyer, paneler, ikoner osv. Den heter Gnome och är gjord särskilt för GNU, men går även att köra på andra Unix-liknande system. I denna kurs kommer vi inte att använda det särskilt mycket, utom denna första gång. Det ska ni till största delen kunna sätta er in i med den inbyggda hjälpen. I labbarna kommer vi istället mycket att hålla på med kommandoraden och annat som är svårare att komma in i på egen hand. 3 1. INLEDNING Våra datorsalar De datorer som ni använder finns i två datorsalar, tillsammans med servrar som även går att använda utifrån. Dessutom har en del anställda datorer som ingår i samma system. Våra datorer har fått namn som t. ex. preposition, futurum, dativ och numerus. Institutionen för lingvistik och filologi har domännamnet lingfil.uu.se, så datorernas fullständiga namn är i stil med numerus.lingfil.uu.se. Den datorn har även aliaset stp.lingfil.uu.se och det är dit man ska koppla sig ifall man ska arbeta på våra datorer utifrån, t. ex. hemifrån. De två datorsalarna är öppna dygnet runt, året runt, och är tillgängliga med era passerkort med vilka ni också kommer in i huset. När salarna inte är bokade för undervisning är det bara att slå sig ner vid en ledig dator där. Med rätt program på en annan dator kan man också koppla sig till våra datorer utifrån och komma åt samma filer och program som man når från datorsalarna. dan vid första steget genom att alla användare har goda lösenordsvanor. Att logga ut När du lämnar datorn ska du logga ut. Använd Log Out i menyn till höger som du får genom att klicka på ditt namn. Stäng inte av datorn! Dessa datorer står på dygnet runt, bland annat för att uppdateringar ska kunna göras utifrån. Man kan istället låsa datorn om man lämnar den en kortare stund. Andra kan också logga in på datorn då. Ljud För att inte få för mycket olika ljud i datorsalarna så använder vi hörlurar. Volymkontrollen finns i överpanelen på skärmen, men observera att en del hörlurar dessutom har en egen volymkontroll, så om det inte hörs något kan det vara kontrollen där som behöver ändras snarare än något på datorn. Datorernas hörlurar ska sitta i ett urtag på baksidan av datorn. Det finns även ett urtag för hörAtt logga in lurar på framsidan som används som urtag för exNär man ska använda systemet måste man först tra hörlurar ibland. Flytta inte de normala hörlulogga in. Ditt användarnamn och lösenord får du rarna dit. Då blir lätt sladdarna liggande på golvet av Per. Till användarnamnet finns knutet en sär- och sönderkörda av stolarna, och det blir besvärskild hemkatalog där man kan lagra sina filer. ligare för den som vill koppla in egna hörlurar. Att välja lösenord Tangentbord På alla ställen där man ska sätta ett lösenord brukar man uppmanas att ha säkra lösenord: »Undvik lättgissade lösenord! Använd inte riktiga ord, varken på engelska, svenska eller något annat språk! Använd inte samma lösenord som på något annat ställe!« Och så vidare. I själva verket är förstås lösenord till olika ställen olika viktiga, och ibland kan det mycket väl duga att använda samma slasklösen på flera ställen där man behöver registrera en användare med lösenord för att kunna använda någon tjänst. Men i en del fall är det viktigare, och detta är ett sådant fall, så om du ändrar ditt lösenord så se till att du följer sådana regler. Blanda gärna stora och små bokstäver (de räknas som olika!) och stoppa gärna in nån siffra eller nåt skiljetecken. Ett skäl till att det är viktigt att alla har bra lösenord, förutom ens egen säkerhet, är systemets säkerhet. På datorer som sitter på nätet pågår hela tiden försök från olika håll att ta sig in olovligen på datorerna och få administratörsrättigheter där. Sådana attacker sker ofta i två steg. Först behöver förövaren komma in på datorsystemet överhuvudtaget, sedan hitta ett öppet säkerhetshål som kan ge mer behörighet. Det andra steget är det upp till systemadministratörerna att ha stoppat, men för säkerhets skull bör det även ta stopp re- Våra tangentbord är uppsatta så att vissa tangenter med accenter är döda (se figur 1.2), dvs. inte ger något tecken av sig självt utan bara i kombination med nästa tecken. Det gäller dels en tangent med vilken man kan skriva t. ex. »ú« och »ù«. Dels en tangent med vilken man kan skriva t. ex. »ü«, »û« och »ũ«. Den sistnämnda står till höger på tangenten och får man därför fram tillsammans med AltGr. AltGr (= Alternate Graphic) kan kombineras med en mängd tangenter för att ge andra tecken. Många av dessa står till höger på den tan- 4 Figur 1.2: De två döda tangenterna på våra tangentbord 1.3. Filer och kataloger En fil foo.c kan innehålla källkoden till ett program skrivet i programspråket C, foo.exe vara den exekverbara binärfilen med programmet, foo.pdf en text (i formatet Portable Document Format) som beskriver programmet, foo.html samma text som HTML (Hypertext Markup Language), och så vidare. Ofta finns det en begränsning på hur lång filnamnsändelsen får vara. I syn1.3 Filer och kataloger nerhet kan gränsen vara tre tecken, vilket är förData av olika slag lagras i filer. klaringen till att man ibland kan se t. ex. HTMLInnehållet kan vara bl. a. texter, ljud, bilder, filer vars namn slutar på .htm istället för .html. databaser och program, och allt ligger normalt Även i Unix-filsystem brukar man ge många filagrat som en sekvens av bytes, som kan ses som ler sådana namn, men en punkt är egentligen som värden 0–255, i ett visst format, dvs. kodade en- vilket tecken som helst i filnamn, så ett filnamn ligt någon särskild konvention. Detta återkommer kan innehålla ingen, en eller flera punkter, och det vi till senare. finns ingen särskild begränsning på hur lång delen Filer med program omfattar både källkoden av namnet efter punkten får vara. (textfiler skrivna av programmerare, skrivna i ett Genom att man ger filnamnen sådana ändelser visst programspråk) och filer som inte är läsbara är det lättare för såväl program som människor att för människor (binärfiler), men vars innehåll kan förstå vad det är för slags filer utan att titta i dem. tolkas som instruktioner som kan utföras (exekve- Några få av de vanligare filnamnsändelserna är: ras) direkt av datorn. (De senare genereras automatiskt från de förra med program som kallas txt Vanliga textfiler kompilatorer.) html Hypertext Markup Language xml eXtensible Markup Language tex Typsättningssystemet TEX Kataloger java Programspråket Java Filerna samlas i kataloger (directories). När man pl Programspråket Perl använder kommandoraden är denna beteckning py Programspråket Python ofta vanligare än mappar (folders). Det finns dels wav, ogg, mp3 Olika ljudformat centrala kataloger till för systemet och dels har gif, png, jpg Olika bildformat varje användare sin egen hemkatalog att lagra filer i. pdf Portable Document Format I en katalog kan det förutom filer ligga andra odt Open Document Text kataloger, underkataloger (subdirectories), till den första katalogen. gent det gäller (t. ex. C på AltGr + e), men det finns andra också, t. ex. þ på AltGr + t. För att skriva ^, ~ och ` som egna tecken kan man trycka ett mellanslag efter den döda tangenten. Fil- och katalognamn I Unix-system är det skillnad på små och stora bokstäver vad gäller namn på filer och kataloger. Det går därför t. ex. att ha en fil som heter »readme«, en annan fil som heter »README« och en tredje som heter »ReadMe« i samma katalog. Vanligtvis låter man dock de flesta filerna ha namn med bara små bokstäver.1 Även om det går bra att ha filnamn med mellanslag i brukar man undvika det för filer som man ska hantera med kommandoraden. Ni kommer snart att förstå varför! Filnamnsändelse I många filsystem har alla filer en ändelse till det egentliga filnamnet. Denna talar om vad det är för slags fil och brukar skrivas efter en punkt. Körbara program brukar inte ha någon ändelse i Unix, så en kompilerad version av programmet foo heter troligen bara foo (och inte t. ex. foo.exe). Vanliga textfiler har ofta ändelsen .txt. Dolda filer Många program skapar själva filer och kataloger i ens hemkatalog där de sparar sina inställningar eller mellanresultat som det inte är tänkt att man normalt ska behöva titta närmre på. För att man inte ska störas av dem i ens fillistningar så brukar de filerna vara dolda. Detta går i Unix till så att filen eller katalogen har ett namn som börjar med punkt (.). Filhanterare och andra program som listar filer nämner normalt inte sådana filer och dessa filer kan oftast ignoreras. Filträdet 1 Sådana där uppfordrande filer README brukar dock faktiskt heta just så, med stora bokstäver, och är textfiler som beskriver övriga filer i samma katalog. Nästan varje katalog är underkatalog till en annan katalog. I Unix är det bara en katalog som inte 5 1. INLEDNING / (roten) bin cp ls home mv staff stp14 starback Desktop ellen fotografier stp15 local usr bin x14 x15 kurs kanske din hemkatalog kanske din hemkatalog ids eulang.tsv konto.txt firefox kmines verb.txt slottet.jpg Figur 1.3: I detta filträd är filer skrivna i fetstil. Allt annat är kataloger. Detta är förstås bara ett utdrag från det fullständiga filträdet. I varje katalog finns det många fler grenar som inte är utritade här. är det, så man kan tänka sig alla kataloger i ett hierarkiskt träd där allt grenar ut sig från denna katalog och där filerna är löv längst ut. Den katalog som allt utgår från kallas för roten. Till skillnad från riktiga träd tänker man sig att roten sitter högst upp och att trädet förgrenar sig nedåt, så underkatalogerna ligger alltså längre bort från roten. I figur 1.3 visas en del av filträdet här. Här är t. ex. hemkataloger för STP15 underkataloger till en katalog stp15 som i sin tur är underkatalog till en katalog home som samlar allas hemkataloger. Den i sin tur är underkatalog till roten (/). De studenter som inte går på programmen får istället hemkataloger som är underkataloger till en katalog x15 för externa studentkonton skapade 2015, som även den är en underkatalog till home. Fullständiga sökvägar Man kan ange en fullständig sökväg (path) till en fil eller katalog genom att ange katalog för katalog hur man kan ta sig från roten till denna plats i filträdet. Före varje led, inklusive det Bara en rot: I Unix använder man filsystem med bara en rot, oavsett hur många diskar som är anslutna till datorn. I MS Windows använder man flera, som har bokstäver som namn. En fullständig sökväg börjar med den bokstaven följt av ett kolon, så det fullständiga namnet på en katalog där kan se ut som C:\WINDOWS\. Observera att där används bakstreck (\) medan Unix använder vanligt snedstreck (/) som avgränsare mellan kataloger. 6 första, skriver man ett snedstreck. Om en student på STP15 med användarnamnet »ellen« hade en underkatalog med namnet fotografier och i den lade filen slottet.jpg skulle alltså /home/stp15/ellen/fotografier/slottet. jpg vara den fullständiga sökvägen till denna fil och /home/stp15/ellen/fotografier vara den fullständiga sökvägen till den katalog där denna fil ligger. En sådan fullständig sökväg börjar alltid med ett snedstreck. Den fullständiga sökvägen till rotkatalogen är bara ett tecken: /. Det finns ett särskilt förkortat skrivsätt för ens egen hemkatalog, nämligen tecknet ~ (tilde). Ellen skulle därför också kunna skriva ~/fotografier/slottet.jpg som en fullständig sökväg till samma fil. Ovan står det att fullständiga sökvägar alltid börjar med snedstreck. Det gör i princip även denna sökväg eftersom ~ här bara är ett förkortat skrivsätt för /home/stp15/ellen. Man kan även ange andras hemkataloger på ett förkortat sätt, nämligen med tilde följt av ett användarnamn. Även andra användare kan alltså använda beteckningen ~ellen/fotografier/ slottet.jpg för den där filen, och ~ellen för Ellens hemkatalog. De flesta program som hanterar filnamn byter ut ~ på detta sätt. 1.4 Grafisk filhantering Det finns flera sätt att hantera filer i den grafiska miljön, där ett är att öppna kataloger från menyn Places . Därifrån kan man bland annat nå Home för 1.5. Klipp och klistra ens egen hemkatalog, och några speciella underkataloger till den, som Documents och Downloads . För du muspekaren till övre vänstra hörnet dyker det upp ett antal ikoner i vänsterkant, varav Files är ett annat sätt. Man kan också dubbelklicka på ikonen för hemkatalog på skrivbordet för att öppna den. På skrivbordet visas även alla filer och kataloger som ligger i ens katalog Desktop, så lägger man saker där hamnar de egentligen i den katalogen Desktop. Denna katalog Desktop är en underkatalog till ens hemkatalog. 1.5 Klipp och klistra Klipp-och-klistra (cut and paste) är ett vanligt sätt att föra över text från ett ställe till ett annat. Med tiden har har tangenterna X, C och V blivit en vanlig standard för detta (ursprungligen från Apple Computer på 1980-talet). Här används dessa tillsammans med Control-tangenten, dvs. CtrlX (cut), Ctrl-C (copy) och Ctrl-V (paste). (Att trycka ner Control-tangenten tillsammans med t. ex. X betecknas ibland Ctrl+X ibland Ctrl-X, ibland bara C-x.) Det finns även ett snabbare sätt att kopiera. Med mittknappen på musen, den som också är scrollhjul, klistrar man in primary selection, vilket är den text man senast markerat. På det sättet kan man kopiera text utan att behöva använda vare sig tangentbord eller meny. tersom den har särskilda rutiner för att tolka och konvertera andra format. Textfiler med ren text är däremot inte speciella för något särskilt program utan kan hanteras av alla program som gör något med text utan sådan konvertering. Det enda som kan skilja är vilken teckenkodning som har använts, dvs. vilka numeriska värden olika tecken kodats med. Om textfilen innehåller »exotiska« tecken som grekiskt π , ryskt eller för den delen de svenska bokstäverna åäö kan detta ha olika koder i olika sammanhang, men så länge det är tecken som finns på ett vanligt (amerikanskt!) tangentbord så är det nästan alltid samma koder överlag. Då kodas t. ex. tecknet »A« som 65 och tecknet »&« som 38. Teckenkodningar återkommer vi till senare. 1.7 Editorer Sådana rena textfiler skriver man inte med ordbehandlare utan med editorer. Ibland säger man textredigerare och att redigera text, men med den drastiskt välkomnande inställning som datorvärlden oftast visar inför lån från engelskan är det vanligare att tala om editorer och att editera text med dessa. Editorer har ofta kraftfulla kommandon för att hjälpa till när man editerar olika slags textfiler, i synnerhet när man programmerar, genom att de känner till syntaxen i olika programspråk. I denna kurs kommer vi inte att använda ordbehandling, och de textfiler som du ska skriva här ska istället skrivas med en editor. Om du vill använda en ordbehandlare på våra datorer så rekom1.6 Textfiler menderas annars LibreOffice.org som finns i meMed vanliga textfiler eller rena textfiler (plain text) nyerna. avses enkla textfiler utan sådana finesser som varierande typsnitt eller inlagda bilder som en ordbehandlare kan klara av, utan med bara en räcka Emacs bokstäver, siffror och en del andra tecken, uppde- Den editor som vi använder här, Emacs, kan starlade i rader. Det saknas alltså dolda formatmarke- tas med Applications Accessories Emacs (men i labringar så som finns i ordbehandlingsfiler. ben kommer vi att göra på ett annat sätt). Det När man skriver ett program är det alltid en fungerar bäst att öppna alla filer man editerar i textfil med ren text man skriver. Det går t. ex. in- samma Emacs istället för att avsluta den bara för te att skriva en del av programmet i kursiv stil och att man är klar med en viss editering. Det är ungedärmed få detta att betyda någonting särskilt, ut- fär så som man normalt tittar på alla webbsidor i an programmet består bara av en räcka bokstäver, samma webbläsare och ofta inte avslutar den försiffror och interpunktion, uppdelade i rader. (När rän man är på väg att logga ut. man återger ett program på papper eller skärm så visar man det dock ofta med olika färger eller olika stilar ändå.) 1.8 Filskydd Olika ordbehandlare har oftast helt olika format för hur sådana finesser ska kodas i filerna, De flesta av dina filer kan läsas av vem som helst, så ett dokument skrivet i Microsoft Office och men bara ändras eller tas bort av dig själv. Du ett dokument skrivet i WordPerfect är helt olika kan själv ändra filskyddet för de filer och kataloger kodade även om dokumenten ser likadana ut på du vill ha skyddade så att endast du själv kan läpapper. sa dem. (En del program skapar alltid sina filer Trots det går det ofta att öppna ett ordbehand- skyddade. Det skulle till exempel ett chattprolingsdokument i en helt annan ordbehandlare ef- gram som sparar loggar över chatten göra, även 7 1. INLEDNING Figur 1.4: Detta är ungefär vad filhanteraren visar om filen konto.txt i era hemkataloger. Den påstår bland annat (helt korrekt) att det är en vanlig textfil (plain text). Figur 1.5: Denna fil får ägaren och gruppen läsa och skriva, men övriga får bara läsa den. om man normalt skapar filer som inte är lässkyddade.) För varje fil och katalog talas om vilka rättigheter som gäller för tre kategorier användare: • filägaren (u = user) • gruppen (g = group) • övriga (o = other) Varje fil har alltså en ägare och en grupp. Varje användare har en egen personlig grupp som bara den användaren själv är med i, och detta är den normala gruppen för dina filer. Det gör att gruppens rättigheter normalt inte är intressanta, utan när du ändrar filskydd så är det framförallt för att göra filer läsbara för alla eller bara för dig själv. Du kan t. ex. ha en särskild privat underkatalog som är lässkyddad för andra. Varje kategori kan ha rättighet att • r = läsa (read) • w = skriva (write) • x = köra (execute) Den exakta betydelsen skiljer sig åt en del för filer och kataloger: • r = läsa en fil; lista innehållet i en katalog • w = ändra en fil; skapa och ta bort filer i katalogen • x = köra ett program; komma åt filer i katalogen När du högerklickar på en fil eller katalog kan du välja Properties för att få se diverse egenskaper för den filen eller katalogen, inklusive dess skydd. I figurerna 1.4 och 1.5 visas en del av den information som detta ger om filen konto.txt i era hemkataloger. I den andra av dessa kan man inte bara se vilket skydd som gäller nu, utan även ändra skyddet. Om man vill att en fil ska kunna läsas av några andra användare men inte av alla så är möjligheterna rätt begränsade. Då måste de användarna höra till samma så kallade grupp och även den filen måste höra till samma grupp. Varje fil hör till exakt en grupp. Användare kan vara med i flera grupper, men det går inte att skapa nya grupper själv. 8 1.9 Kommandoraden Det vanliga gränssnittet innan det grafiska gränssnittet slog igenom var kommandoraden. Användaren skriver ett kommando på tangentbordet varpå datorn utför kommandot och inväntar nästa kommando. Kommandona har en enkel syntax som oftast bygger på engelska. Det kan vara i stil med PRINT FOO.TXT för att skriva ut en fil med namnet FOO.TXT. Även om grunden inte är svårare än så, så finns det luriga element i detta för den som inte är van, och vi kommer därför att ägna oss mycket åt detta i kursen. Att arbeta med datorn på detta sätt kan ofta verka bökigt och föråldrat för den som är ovan, men det är det mest användbara för en del avancerad användning. Några fördelar är: • Det är ofta kraftfullare. • Det är ofta effektivare (när man kan det). • Det är lättare att bevara en mängd instruktioner så att man kan göra om samma sak senare, kanske med variationer, kanske automatiskt. (Dessa fördelar kommer inte alls att vara uppenbara från början. Vi kommer att lösa uppgifter på detta sätt som många förmodligen lättare hade kunnat lösa på andra sätt.) 1.9. Kommandoraden • Skalet skriver ut en prompt, en kort text som visar att det är berett att ta emot ett kommando. • Skalet ekar det användaren skriver, suddar när man trycker på radertangenten osv. • När användaren avslutar sitt kommando (genom att trycka på returtangenten) utför skalet kommandot, oftast genom att köra igång ett visst annat program. • Om detta resulterar i output så skrivs den ut. Ovanstående görs om och om igen. Figur 1.6: En populär teleprinter på 1960-talet var ASR33 som tillverkades av Teletype Corporation. Kommandon Unixkommandon är ökända för att ha korta och kryptiska namn. Några exempel: Terminalen Kommandoraden är äldre än bildskärmen. Från början skrev man in sådana här kommandon på något som liknande en skrivmaskin eller teleprinter med en pappersremsa i. Om man gav ett kommando där man bad datorn om information så skrev den ut den på samma pappersremsa. Ofta fanns det flera sådana »skrivmaskiner« kopplade till samma dator, och dessa kallades för terminaler.2 Senare kom terminaler med bildskärmar istället för papper. Bildskärmen kunde bara visa text och visade hela tiden de sista raderna av låtsaspapperet. Det är normalt bara det man är intresserad av ändå, för där står ju de senaste kommandona man givit och vilka svar man har fått från dessa. Idag kan man köra ett särskilt terminalprogram i sitt fönstersystem som ger en sådan låtsasterminal i ett fönster bland ens andra fönster. Det kan hjälpa att ha detta i bakhuvudet när man ska förstå hur detta terminalfönster fungerar. Tänk dig att det är (slutet av) en pappersremsa du ser. Det innebär t. ex. att den text som har skrivits där är oföränderlig. Om man ger ett kommando som får datorn att lista ens filer så ändras inte den utskriften senare om man lägger till eller tar bort en fil. För att få en aktuell lista får man ge kommandot igen. (Det som visas är en logg för ens interaktion med datorn, lite som en logg efter att man har chattat med en robot som lyder ens kommandon.) Man kan bara skriva in kommandon längst ner, efter all text som redan finns i fönstret. Skalet i Unix Det program som tolkar och utför användarens textkommandon kallas i Unix-världen för ett skal (shell). I princip är det enkelt: 2 En terminal är ju någonting som är längst ut, och dessa var då ändpunkter medan datorn satt i mitten, kopplad till dem alla. • • • • • • • • • • • cat = (con)catenate cd = change directory cp = copy ls = list mkdir = make directory mv = move pwd = print working directory rm = remove rmdir = remove directory tr = translate wc = word count Skälet till det är förstås att man inte ska behöva skriva så mycket. Några av dessa kommandon ser du i filträdet i figur 1.3 i katalogen /bin. Kommandot ls listar t. ex. filer i en viss katalog. När man använder det kan det se ut så här: $ ls bar.png foo foo.py kvack.png texts Användaren har här bara skrivit ls och tryckt på retur. I denna katalog fanns det fem filer och kataloger, och de listas i bokstavsordning. Den text som användaren har skrivit ges med ljusgrå bakgrund, så här , i dessa exempel. Användaren har t. ex. inte skrivit dollartecknet, utan det var den prompt som skalet skrivit ut. (Oftast har Returtangenten: Returtangenten har oftast (och så är det på våra tangentbord) en vinklad pil på sig, . Den har kallats för carriage return (vagnretur) eller oftare bara return (retur). Den carriage/vagn det handlar om går tillbaka till skrivmaskiner på papperstiden. Ibland kallas tangenten även för Enter , som tangenten med det namnet på den särskilda numeriska delen av tangentbordet. Dessa två tangenter har oftast samma effekt. 9 1. INLEDNING man en längre prompt än så. Du kommer att ha en prompt där även ditt användarnamn och namnet på datorn står, i stil med ellen@verb$, men i alla kommande exempel antar vi ändå att prompten bara är ett dollartecken.) Argument till kommandon Efter kommandonamnet kan det följa argument, åtskilda av mellanslag. Dessa talar om mer specifikt vad man vill använda ett kommando till. Ofta är det filnamn. Man kan ge kommandot ls argument som talar om vilka filer eller vilka kataloger som ska listas. $ ls kvack.png bar.png bar.png kvack.png Här har vi talat om precis vilka två filer vi vill ha listade.3 (De önskade filerna listas i bokstavsordning som förut, trots att argumenten listades i en annan ordning.) Om ett argument till ls är namnet på en katalog så listas innehållet i den katalogen. Så om texts ovan är en katalog med ett par textfiler i skulle man kunna få detta resultat: $ ls texts etaoin.txt shrdlu.txt För ls behandlas alla argument lika – denna fil eller innehållet i denna katalog ska listas. För en del kommandon tolkas däremot första, andra, (tredje osv.) argumentet olika. Kommandot cp foo.txt bar.txt betyder t. ex. att filen foo.txt ska kopieras och att kopian ska ha det nya namnet bar.txt. Det första argumentet är källan och det andra är destinationen. Om man hade satt argumenten i omvänd ordning hade det betytt något annat, och om man haft bara ett argument skulle man ha fått ett felmeddelande. 3 Detta är förstås rätt poänglöst att göra. Det verkar ju som om vi redan visste att dessa två filer fanns! Senare ska vi se hur man kan få ls att lista mer information om filerna, vilket skulle göra exemplet lite mer realistiskt. 10 Inlupp 1: Inledning Grafisk filhantering Välj Places Home i menyerna för att ta fram ett fönster för din hemkatalog. Ni har alla fått en fil konto.txt och underkataloger som heter Desktop, nobackup och introduktion-till-datateknik. Den sistnämnda är förstås specifik för just denna kurs, och kallas i fortsättningen för kurskatalogen. Dubbelklicka på kurskatalogen för att se på den underkatalogen. Olika slags filer visas på olika sätt. Filhanteraren avgör hur genom att se på filnamnsändelsen och genom att se på filernas innehåll. För en del filer visas (delar av) deras innehåll, och för andra bara ikoner som visar vad för slags filer det är. Genom att dubbelklicka på filerna så öppnas de. Vilka program som används för att öppna dem beror på vad det är för filer. Genom att högerklicka på en fil får du upp en meny med olika saker du kan göra med filen. Höger musknapp används oftast som en menyknapp på detta sätt. Uppgift 1.1 Vad heter det program som är satt att vara det normala för att öppna bildfiler? Vad är det för versionsnummer på det att döma av vad Help About i det programmet säger? Uppgift 1.2 Ett av de andra programmen man kan öppna bildfiler med har ett namn som består av fyra ord. Det brukar oftare bara kallas för sin fyrbokstavsförkortning. Vad heter det programmet? (Förkortade namnet räcker.) (Det är ett mycket ambitiöst ritprogram som det är rätt jobbigt att komma in i, så kör det inte nu, men prova gärna senare om du är nyfiken.) Senare få du veta var du ska skriva dessa svar. Notera tillsvidare svaren på uppgiftsfrågorna för senare bruk. Uppgift 1.3 I kurskatalogen finns även en ljudfil ord.flac. Vad sägs det för ord i den? För olika sorters filer händer det som synes olika saker när du dubbelklickar dem. Filen run-me är t. ex. ett litet program. Det är en exekverbar binärfil som körs när du aktiverar den. Uppgift 1.4 Vad står det på knappen som programmet run-me skapar när man kör det? Uppgift 1.5 Ta bort filen should_not_be_here i kurskatalogen. Uppgift 1.6 Skapa en ny underkatalog alice i kurskatalogen (New Folder). Flytta filerna cheshire-cat.jpg, cheshire-cat.txt och how-doth.txt dit. (Allt detta är nämligen taget från boken Alice i Underlandet). Tänk på att det är skillnad på små och stora bokstäver. Det enklaste sättet att flytta en fil är med drag and drop. Tryck ner vänster musknapp när du pekar på filen och dra den sedan till önskad plats varpå du släpper musknappen. Öppna nu katalogen alice. Bland knappar som står till höger om katalognamnet finns några knappar och genom att hålla muspekaren över dem får du se vad de gör. En beskrivs som View items as a list. Välj den för att se fillistningen i ett textformat som ger mer information. Där visas filens namn, storlek, typ, tidsstämpel för när den senast ändrades och filskydd. Uppgift 1.7 Vilken information som visas kan ändras med Visible Columns i en meny. Nämn någon av kolumnerna som kan läggas till där. Uppgift 1.8 Filernas storlek mäts i bytes. Hur många bytes stor är filen how-doth.txt? Hur kan du ta reda på det i det andra sättet att se filerna, »View items as a grid of icons«? Uppgift 1.9 En av filerna dikt-1.txt, dikt-2. txt och dikt-3.txt i kurskatalogen är skyddad så att andra inte kan läsa den. Vilken? Uppgift 1.10 Ändra så att den inte längre är särskilt skyddad, utan får samma skydd som de övriga. Ändra också så att filen secret.txt bara kan läsas av dig, men är skrivskyddad för alla, till och med dig själv. När du gjort detta riktigt visas det särskilt i fönstret att denna fil är skrivskyddad. 11 INLUPP 1: INLEDNING Emacs I din kurskatalog ligger en textfil med namnet favourite-colour.txt. Det är en ren textfil (vilket man kan gissa av filnamnsändelsen .txt). Dubbelklicka på den i filhanteraren för att öppna den med editorn Emacs. Förutom textinnehållet i filen visar Emacs även information som du kan ta bort med »Dismiss this startup screen«. I det fönster du får upp finns det plats för att skriva 80 tecken per rad vilket är vanlig bredd för textfiler. Gör gärna fönstret högre, men maximera det inte. Uppgift 1.11 Vad står det i den filen? I kurskatalogen ligger också en fil exempel.txt. Ta tag i den och släpp den i Emacs-fönstret med drag and drop. (Ändra vid behov storlekar så att du ser dessa två fönster samtidigt, sida vid sida.) Detta är ett sätt att öppna en till fil när du redan har en Emacs igång. Den förra filen finns även den fortfarande öppnad i denna Emacs även om den inte syns just nu. De olika texterna som man har aktiva i Emacs ligger i varsin buffert och i Emacs-menyn Buffers kan du välja mellan dessa. Gå på detta sätt tillbaka till favourite-colour.txt igen. Du ska editera den, så förflytta dig i textbufferten med piltangenterna och spara med knapnär du är klar. (Avsluta däremot inte denpen na Emacs förrän du är klar för idag!) Uppgift 1.12 Ändra i favourite-colour.txt så att den stämmer för dig! På knappraden i Emacs finns det bland annat andra knappar för att öppna nya och existerande filer. Uppgift 1.13 Öppna på detta sätt en ny fil favourite-number.txt i kurskatalogen och skriv där ditt favorittal. Glöm inte att spara filen! Det finns även en knapp för att öppna en katalog. Öppna underkatalogen alice på detta sätt. Du får då upp en fillistning i text som liknar en du fick med filhanteraren förut. Öppna cheshire-cat.txt i denna listning. Det är ett utdrag ur Alice i Underlandet, fast några stavfel har smugit sig in. Uppgift 1.14 Använd Tools kommandot för att hitta och rätta stavfelen. Det blir flera förslag på rättelser och man får skriva en siffra för att ange vilket rättningsförslag man vill använda. Hur många fel hittades? Spell Checking 12 Spell-Check Buffer Glöm inte att spara den rättade filen! Gå tillbaka till bufferten alice med fillistningen och flytta med hjälp av piltangenterna markören till raden med cheshire-cat.jpg. Välj Operate Copy to i menyerna och kopiera den filen till katalogen Desktop. Kolla att den därmed har hamnat på ditt skrivbord. Klipp-och-klistra Uppgift 1.15 Öppna filen dodo.txt i kurskatalogen i Emacs. Se slutet av avsnitt 1.5 på s. 7 om det snabbare sättet att kopiera text och använd det för att kopiera hit text på rätt ställen enligt vad som står i filen. Om du råkar göra nåt fel, t. ex. klistrar in fel text eller text på fel ställe, så kan du ångra dig med i Emacs. knappen Glöm inte att spara filen efteråt! Svarsfilen Skriv en ny fil ids1.txt i kurskatalogen (med Emacs) där du skriver in svaren på dessa uppgifter. (En del uppgifter kräver dock inga svar, utan är bara av formen »gör si och så«, i stil med uppgift 1.15.) Se noga till att den filen hamnar i rätt katalog och heter precis som den ska! Det kan underlätta att klipp-och-klistra en del svar så att du inte behöver skriva av text. Använd som vanligt menyn Buffers för att växla vad du tittar på när du kopierar från en buffert till en annan. Fler buffertar Som du kanske märkt finns det fler buffertar i Buffers -menyn, och ett kommando Buffers List All Buffers som listar alla buffertar. Alla buffertar hänger inte ihop med någon fil. Uppgift 1.16 Det finns en buffert som heter *scratch* till exempel. Vad står det i den? Uppgift 1.17 Det finns andra buffertar som har namn som börjar och slutar med stjärna. En har ett namn som börjar med *M. Vad heter den och vad verkar den användas till? Terminalen och skalet Skapa ett terminalfönster genom att föra muspekaren till övre vänstra hörnet och klicka på symbolen kallad »Terminal« i vänstra kanten. Även i detta fönster finns det plats för 80 tecken per rad. (Gör gärna även detta fönster högre.) Lägg terminalfönstret och Emacs sida vid sida Terminalen och skalet så att båda syns samtidigt, så att du kan fortsätta Uppgift 1.24 Vad gav det för resultat? skriva in svar i ids1.txt medan du även ser terminalfönstret. I din kurskatalog finns en fil som heter stp.txt. Med kommandot Uppgift 1.18 Exakt hur lyder den prompt du fått av skalet? I terminalfönstret ska du skriva in textkommandon. Som första kommando, skriv ls , som står för list, och tryck på retur. Med detta kommando får du ut en lista över vilka filer och kataloger du har i din hemkatalog. Resultatet skrivs ut i samma terminalfönster som där du skrev in kommandot. Man kan ge namnet på en katalog som argument till ls för att lista filerna i den katalogen istället. Här kan man använda komplettering med TABtangenten, när det bara finns en möjlig fortsättning. Skriv bara »ls in« och tryck sedan på TAB. Du bör få fram $ ls introduktion-till-datateknik/ Tryck på retur för att utföra kommandot. Nu listar du alltså istället filerna i den katalogen. Ge sen kommandot $ cat stp.txt kan du skriva ut dess innehåll i terminalfönstret. (Använd TAB för komplettering, även när det inte är så långa filnamn. Då får du bekräftelse på att det verkligen finns en fil som heter så.) Den texten har ganska korta rader. Det finns ett kommando fmt med vilket man kan formattera om en text så att den får lagom långa rader. Prova $ fmt stp.txt Uppgift 1.25 Vad blev det för output från detta? (Använd klipp-och-klistra!) Kommandot grep kan du ge två argument. Först en text och sedan ett filnamn, och kommandot visar då alla rader i filen som innehåller den texten. Prova med $ cd introduktion-till-datateknik/ $ grep dator stp.txt (Använd komplettering igen!) Detta kommando gav inget resultat. Det är inte alla kommandon som ger något resultat som skrivs ut på skärmen, utan en del bara gör något utan att säga något om det. Detta har ändrat aktuell katalog till din katalog introduktion-till-datateknik, så nu utförs normalt kommandon i den katalogen istället. Så om du nu ger kommandot ls igen så blir det filerna i denna katalog som listas. Uppgift 1.19 Vad är cd förkortning för enligt detta kompendium? Uppgift 1.26 Vad gav det för resultat? Första argumentet till grep, här »arbete«, är ett exempel på att argument till kommandon kan vara annat än fil- och katalognamn. Men det är bara fil- och katalognamn som du får komplettering på! (Skalet kunde inte ana att det var just »arbete« vi ville söka efter.) Prova härnäst de två kommandona date och date -u . Uppgift 1.20 Ge kommandot ls /home för att lista vad som finns i katalogen /home. Vad gav det Uppgift 1.27 Hur löd resultaten? för resultat? Uppgift 1.28 Det står olika förkortningar i de Uppgift 1.21 Om du utan att byta aktuell katabåda svaren. Vad betyder dessa? (Sök på nätet om log nu vill lista innehållet i din hemkatalog, vad du inte vet!) kan du ge för kommando då? (Använd en särskild beteckning för din hemkatalog i svaret.) Uppgift 1.29 Vilken effekt verkar det där -u ha? Uppgift 1.22 Vad gav det för resultat? Uppgift 1.23 Och om du vill lista innehållet i Genom att hänga på > och ett filnamn i slutet Ellens hemkatalog hur gör du då? (Du skulle kun- av ett kommando så kan man spara resultatet i en na skriva ls /home/stp15/ellen , men använd fil istället för att få ut det i terminalfönstret. en kortare beteckning för hennes hemkatalog.) 13 INLUPP 1: INLEDNING Uppgift 1.30 Gör Uppgift 1.38 När man editerar en fil i Emacs så sparar den en backupfil med det gamla innehållet för säkerhets skull. Medan du har labbat Märk att du inte ser någon output alls. Öppna har den därför skapat backupfiler av i alla fall sedan den nyskapade filen arbete.txt i Emacs. favourite-colour.txt och dodo.txt åt dig. Att Hur många rader är det i den? döma av vad du har för filer i den katalogen nu, hur skapar Emacs namnen på dessa backupfiler? (Filhanteraren visar normalt inte dessa backupfiUppgift 1.31 Det finns ett kommando seq som ler, så se efter med ls eller genom att öppna kager en sekvens med tal. Använd det kommandot talogen i Emacs istället.) med argumentet 12 och visa vad du får för resultat då. (I filhanteraren räknas backuperna som dolda filer, och det finns ett menyval Show Hidden Files Om du istället använder argumentet som styr både om dessa och filer med namn som 123456789 (prova!) så har du knappast tid börjar med punkt ska visas. att vänta på att kommandot ska köra klart. I sådana lägen kan man avbryta med Control-C, dvs. genom att trycka in Ctrl och C samtidigt. Efteråt Gör så! Ge ett skalkommando som sparar alla tal från 1 Låt kurskatalogen ligga kvar som den är efter labtill 100 i en fil 100.txt i din kurskatalog. (Denna ben så att jag lätt kan kontrollera att ni utfört uppfil ska inte skapas innan du ger kommandot, utan gifterna! Dessutom kommer ni att behöva dessa du gör i stil med hur arbete.txt skapades ovan.) filer i senare labbar också. Hela din kurskatalog är skyddad för läsning för andra, men just i denna katalog kommer jag att Uppgift 1.32 Hur löd ditt kommando? titta ändå (med mina administratörsrättigheter). Jag skickar kommentarer med mail. Läs den reUppgift 1.33 Ge ett kommando som talar om vilka av raderna i den filen 100.txt som innehål- gelbundet, och om du får frågor som har med ler (minst) en 8:a. Visa både ditt kommando och inlupparna att göra så svara på dem! dess resultat. $ grep dator stp.txt >arbete.txt Öppna i Emacs en ny fil i din kurskatalog med namnet ett ord.txt . Skriv ett valfritt ord i den och spara. Uppgift 1.34 Vad blir det för resultat om du ger kommandot cat ett ord.txt för att se innehållet i den filen från skalet? Uppgift 1.35 Men om man skriver cat ett och sen trycker på TAB för komplettering, vad händer då? Uppgift 1.36 På s. 5 står att man brukar undvika filnamn med mellanslag i för filer som man ska hantera med kommandoraden. Hur kommer det sig? Diverse på slutet Uppgift 1.37 Kolla i filhanteraren vad din katalog Desktop har för skydd. Får andra användare se vad du har för filer och kataloger på ditt skrivbord eller inte? (Passa gärna på att ändra om du vill.) 14 Till nästa gång Titta igenom hela detta kapitel för att se om det var något Per missade att ta upp idag eller om något är oklart. Kapitel 2 Skalet och Emacs 2.1 Skalet 2.1.1 Argument Förra gången provade ni ls, cd, cat, date, fmt och grep, och ytterligare några kommandon nämndes i avsnitt 1.9 på s. 9. Kommandon börjar alltså med ett kommandoord som t. ex. cd, date eller grep och efter det kan det följa ett eller flera argument (även kallat operander), åtskilda av mellanslag. Skalet ger komplettering av sådana argument som är namn på filer och kataloger med TABtangenten. Så i ett kommando $ grep Explain wonderland.txt 'Explain yourself!' 'Explain all that,' said the Mock Turtle. $ grep 'vanished completely' wonderland.txt the little door, had vanished completely. Här är det första argumentet en fras med två ord. (Det finns visst bara en rad i wonderland.txt som innehåller texten »vanished completely«.) Man kan använda enkla ('vanished completely') eller dubbla ("vanished completely") citattecken. Samma metod kan användas för argument som är filnamn när man har filnamn med mellanslag. Ett annat sätt att hantera argument med mellanslag såg ni i uppgift 1.35. Ett speciellt tecken skrivs före varje mellanslag (eller annat tecken som behöver hanteras särskilt). 2.1.2 Aktuell katalog I skalet har man hela tiden en aktuell katalog eller arbetskatalog (working directory). Om man t. ex. är kommandoordet grep och det har två arguger kommandot ls (utan argument) så listar den ment. Det första argumentet är Explain och det filerna där. I exemplet ovan låg filen wonderland. andra är wonderland.txt. Detta skriver ut alla txt i ens aktuella katalog (annars hade man fått rader i filen wonderland.txt som innehåller texett felmeddelande). Med cd kan man byta vilken ten »Explain«. ens aktuella katalog är och med pwd kan man skriEftersom mellanslag skiljer argumenten åt beva ut vilken katalog som är den aktuella (print höver man göra något särskilt när mellanslag inworking directory). går i argumenten. Ett sätt är att hålla ihop sådana Om man ger cd utan något argument så går argument med citattecken. man till sin hemkatalog. Om man ger cd med det speciella argumentet .. (två punkter) så går man upp en katalog, dvs. till aktuell katalogs förälder. Bourne (Again) Shell: Skalet är ett program det också. Det ursprungliga skalet i Unix skrevs av en Steve Bourne på Bell Labs och hette sh (kort för shell). Senare skrevs en del alternativa skal, och det ursprungliga skalet kallas ibland för the Bourne shell för att skilja det från alternativen. Det skal som är skrivet särskilt för GNU och som liknar Bourne shell har därför det skämtsamma namnet Bourne Again Shell, vilket förkortas bash. 2.1.3 Jokrar: * ? [] När man ger filnamn som argument till kommandon behöver man inte alltid ange hela exakta filnamn, utan man kan ofta använda jokrar (wild cards) i namnet och därmed matcha ett eller flera filnamn. Med * matchas godtyckligt antal tecken och med ? matchas exakt ett godtyckligt tecken. 15 2. SKALET OCH EMACS Att kombinera väljare $ ls *.png bar.png kvack.png $ ls f?o foo $ ls foo* foo foo.py $ ls *a* bar.png kvack.png När man ska ange flera väljare till samma kommando så är det bara att lista dem allihop efter varann. Oftast kan man kombinera flera korta väljare och skriva bara t. ex. -abc istället för -a -b -c. Exemplet med grep -c -i ovan skulle alltså ha kunnat skrivas grep -ci istället. Väljare med argument I det sista fallet listas alla filer som har ett a i sitt namn. Observera att »godtyckligt antal tecken« kan vara noll tecken, så att foo* matchar även filnamnet foo utan nånting efter. Man kan också sätta tecken inom [] för att matcha något av dessa tecken. Så foo[abcd] matchar en fil som heter fooa, foob, fooc eller food, men däremot inte en som heter fool. Det går också att skriva foo[a-d] med samma betydelse. Med [3-6] matchar man någon av siffrorna 3, 4, 5 eller 6 och [0-9] matchar en godtycklig siffra. 2.1.4 Väljare (options) Väljare (optioner, flaggor) kan ange hur ett kommando ska utföras. De ges som vanliga argument, men har namn som börjar med bindestreck (-). Kommandot grep har t. ex. en väljare -i som betyder att den inte ska skilja på små och stora bokstäver, och en annan väljare -c som betyder att den bara ska tala om hur många rader den hittade. $ grep fonetik stp.txt utgångspunkter. Delområden som fonetik, $ grep -i fonetik stp.txt utgångspunkter. Delområden som fonetik, särskilt viktiga. Fonetiken och uttryckssida. Fonetiken undersöker hur $ grep -c fonetik stp.txt 1 $ grep -c -i fonetik stp.txt 3 I det sista fallen används båda dessa väljare samtidigt. Olika kommandon har olika väljare, så dessa väljare är specifika för kommandot grep. I uppgift 1.29 såg du som exempel att kommandot date (som talar om vad klockan är), har en väljare -u. Den väljaren är på samma sätt specifik bara för kommandot date. Väljaren -l till ls ger en lång fillistning som tar med inte bara filnamnet, utan även bland annat filens skydd, ägare, storlek och när den senast ändrades. (Det är ett litet L och inte en siffra 1!) 16 Många väljare är som de ovanstående i att de talar om ifall något ska vara avstängt eller påslaget – det finns bara två möjligheter. Sådana väljare kallas också för flaggor. Man tänker sig att en flagga är hissad eller inte hissad. Med en blandning av metaforer talar man ändå ofta om att slå på och slå av sådana flaggor. För andra väljare finns det fler alternativ än bara två, och man ger själva väljaren ett argument direkt efter väljaren. Kommandot date har en väljare -d med vilken man talar om vilken tidpunkt som ska anges istället för den nuvarande. Man kan ange denna tidpunkt i en mängd olika format och date anger den på samma format som vanligt. $ date -d 1912-06-23 Sun Jun 23 00:00:00 CET 1912 $ date -d '11:51:31 September 21, 1976' Tue Sep 21 11:51:31 CET 1976 Observera citattecknen i det sista exemplet för att »hålla ihop« argumentet till väljaren -d. Utan dessa skulle det argumentet till väljaren bara bli »11:51:31« och date skulle få tre ytterligare argument: »September«, »21,« och »1976« som det inte skulle veta hur det skulle hantera. 2.1.5 När det blir fel Om man ger ett felaktigt kommando kan man få ett felmeddelande. Här är ett exempel: $ ls -y ls: invalid option -- 'y' Try 'ls --help' for more information. Först i dessa meddelanden står alltid vem (vad) det är som klagar. I detta fall är det »ls« som klagar. (Det är inte så överraskande eftersom det är kommandot ls vi har kört.) Efter ett kolon kommer så själva klaget, i detta fall att y var en ogiltig väljare. Det finns ingen väljare -y till ls. 2.1. Skalet Här är några till exempel: cp – Kopiera filer Kopiera filer görs med kommandot cp som måste ha minst två argument. Det kan användas på två $ cp sätt. Det första är cp SOURCE DEST för att kopicp: missing file operand era det som har namnet SOURCE till att ha namTry 'cp --help' for more information. net DEST också, t. ex. cp foo.txt bar.txt . $ date -d Här ska alltså foo.txt vara en fil som redan finns, date: option requires an argument -- 'd' medan bar.txt kommer att skapas av kommanTry 'date --help' for more information. $ date -d christmas dot. (Om den redan fanns kommer det gamla indate: invalid date ‘christmas’ nehållet att skrivas över!) $ cta exempel.txt Det andra sättet kan ha två eller fler argubash: cta: command not found ment där det sista argumentet är namnet på en existerande katalog. Då kommer alla de tidigare argumenten att kopieras till denna katalog (och kommer att där ha samma namn). Exempel: Observera i det sista fallet att det är bash självt cp foo.txt bar.txt Desktop . Detta kopierar (skalet) som rapporterar ett fel. (Här hade använ- två filer som redan finns till ens katalog Desktop. daren antagligen tänkt skriva cat istället för cta. Efteråt kommer de nya filerna Desktop/foo.txt Det finns inget kommando som heter cta.) Mär- och Desktop/bar.txt att finnas. ker man inte vilket program som rapporterar felet så kan det ofta bidra till att man inte förstår varför mv – Flytta filer det blev fel. Filer flyttas med mv. Det tar emot samma slags argument som cp, så även det kan användas på 2.1.6 Omdirigering (>) två olika sätt, och beter sig likadant som cp förNär ett kommando ger ifrån sig output lämnas utom att filerna inte ligger kvar med sina gamden vidare till skalet som normalt skriver ut den i la namn också. I den andra användningen där terminalfönstret. Man kan dock tala om för skalet det sista argumentet är en katalog så flyttar man filer från en katalog till en annan. I det försatt det ska spara denna output nån annanstans. Om man vill spara undan resultatet av ett kom- ta fallet så byter man snarare namn på en fil mando i en fil så gör man det genom att skri- ( mv foo.txt bar.txt ). Observera alltså att flytva >hfilnamni på slutet av kommandoraden, t. ex. ta filer och att byta namn på filer görs med samma ls Desktop >fil-lista för att spara en lista kommando! med filerna i en viss katalog i en ny fil fil-lista. Här ska man inte tänka på tecknet som större-än, rm – Ta bort filer utan som en pil. Ni använde detta i uppgift 1.30. Med rm tar man bort filer. Observera att dessa filer Det extra påhänget är alltså inte ett till argutas bort helt och hållet. Detta skiljer sig från det ment till ls. Programmet ls vet här bara om att grafiska gränssnittets borttagning av filer som lägdet ska utföra ls Desktop , och det är skalet som ger det man tar bort i en papperskorg som man sedan gör något annorlunda med den output som kan rädda tillbaka filer från tills papperskorgen detta ger ifrån sig. töms. Det enskilda programmet man kör, som ls i detta fall, skriver ut sin output till en lite ospecificerad mottagare som kallas för standard out- mkdir och rmdir – Skapa och ta bort kataloger put, utan att veta vart detta kommer att hamna, Med mkdir skapar man en katalog och med rmdir och med > styr man om vart standard output ska tar man bort en. Båda dessa kommandon tar ett hamna. Detta kallas för omdirigering (redirection). argument. För att man ska kunna ta bort en katalog måste den vara tom. 2.1.7 Filhantering i skalet 2.1.8 Texthantering i skalet ls – Lista filer cat – Visa filer Med ls listar man filer. Argumenten ska vara de filer och kataloger som man vill lista. Om man inte ger några argument alls så listas aktuell katalog. Ett par vanliga väljare till ls är -l (lilla L) som ger en lång listning med mer information och -a som listar alla filer, inklusive de dolda. Med cat visar man filers innehåll. Argumenten ska vara ett antal filnamn och cat skriver ut alla deras innehåll. Om man ger flera argument så visas alla filerna direkt efter varandra, ihopslagna, och det är därför kommandot heter »cat« som i »concatenate«. 17 2. SKALET OCH EMACS head – Början Kommandot head fungerar ungefär som cat förutom att det bara tar med de tio första raderna av varje fil. Med en väljare -n kan man tala om hur många av de första raderna man vill se (istället för tio), t. ex. Dessutom finns det kortkommandon till många fler kommandon. 2.2.1 Namn på tangenter I Emacs används korta beteckningar på tangenttryckningar. Om man ska trycka på Ctrl och f $ head -n 2 foo.txt samtidigt så betecknas detta inte Ctrl-f utan med bara C-f. Förutom C- för Control finns även bl. a. M- för Meta. Där första versionen av Emacs skrevs hade man nämligen tangentbord med särskilda för att skriva ut de två första raderna av foo.txt. Meta-tangenter. Det har inte vi, och då är det Alttangenten som fungerar som Meta-tangent. Både tail – Slutet C- och M- betyder att man ska trycka in Ctrl- respektive Meta-tangenten (Alt) tillsammans med Kommandot tail är som head förutom att det det tecken som följer. skriver ut slutet istället för början. Även till det De kan kombineras också, så C-M-/ betyder kan man ge en väljare -n. Ctrl och Alt tillsammans med /. (Och eftersom snedstrecket i sin tur kräver skifttangenten blir grep – Sök det totalt fyra tangenter nedtryckta samtidigt!) Kommandot grep söker efter en text (dess första En del andra tangenter har speciella trebokargument) i ett antal filer (alla ytterligare argu- stavsbeteckningar som t. ex. SPC för mellanslag. ment) och skriver ut alla rader i de filerna som Andra har (ofta längre) beteckningar inom <>. innehåller den texten. Några sådana namn visas i tabell 2.1. Observera Vi kommer senare att se hur man kan göra mer att de inte alltid är identiska med vad som faktiskt avancerade textsökningar med grep. står på våra tangentbord, i synnerhet att DEL inte är den tangent som det står »Delete« på, utan vanliga tangenten för att sudda ett tecken. (Den kalwc – Räkna las också för <backspace>.) Även dessa kan komwc står för »word count« och kan användas till att bineras med C- och M-, så om det står att man ska räkna antal ord i en fil, men det kan också räk- trycka t. ex. C-SPC så betyder det alltså Controlna annat. Det finns väljare som anger vad det ska tillsammans-med-mellanslag och <M-left> betyräkna, som -w för ord och -l för rader. der Alt-tillsammans-med-vänsterpil. Dessa namn på tangenterna används bland annat till höger i menyerna, där man kan se hur man $ wc -w stp.txt kan ge samma kommandon från tangentbordet. 238 stp.txt $ wc 1 56 57 -l s*.txt secret.txt stp.txt total Så här tog vi först reda på att stp.txt innehåller 238 ord och sedan hur många rader det finns i en mängd filer, med användning av joker. fmt – Formattera Kommandot fmt för att formattera om en text träffade vi på förra gången. Det finns en väljare -w som man kan ge ett argument som anger hur breda raderna får bli. 2.2 Emacs Man kan göra saker med texten på flera olika sätt i Emacs. I de förra uppgifterna fick ni dels använda knapparna under menyerna, dels menyerna. 18 2.2.2 Tangentsekvenser Kortkommandon kan vara flera steg långa. För att öppna en fil kan man t. ex. använda C-x C-f , dvs. först C-x och sen C-f . Bara C-x ensamt gör ingenting, utan det väntar bara in en fortsättning. Det finns flera sådana prefixtangenter som inleder sekvenser av flera tryckningar, och C-x är en av de vanligaste. Emacs: Den första editorn med namnet Emacs skrevs redan på 1970-talet av Richard M. Stallman på MIT (Massachusetts Institute of Technology). Den nuvarande, GNU Emacs, är skriven särskilt för GNU, och påbörjades av samme Stallman 1984, som ett av de första GNU-programmen. Sedan dess har den kommit många versioner. Den nuvarande, version 24.5, släpptes i april 2015. 2.2. Emacs Tabell 2.1: Beteckningar på några tangenter i Emacs. Beteckning Beskrivning CMDEL ESC RET SPC TAB <left> <right> <up> <down> <prior> <next> <f1> <f2> <kp-1> <kp-2> Control. CtrlMeta. Alt- (hos oss) Suddtangenten Esc = Escape Returtangenten Mellanslag (SPaCe) Tab-tangenten vänsterpil högerpil uppåtpil neråtpil Page Up Page Down F1 (i översta raden) F2 (och så vidare) 1 på numeriska tangentbordet osv (kp = keypad) Figur 2.1: En Emacs med två stora fönster som visar varsin buffert samt en aktiv minibuffert. 2.2.5 Informationsrad, minibuffert, ekoarea Den mörkare raden under buffertens innehåll kallas mode line eller informationsrad. Den innehåller en mängd information om den bufferten, bland I samma Emacs kan man editera flera olika filer. annat vad den heter och vilken mode (vilket läge, Dessa visas då i varsin buffert (buffer på engelsvilken arbetsmiljö) Emacs befinner sig i. ka) och man kan växla mellan olika buffertar och Ibland får man i Emacs skriva in filnamn och även visa flera buffertar samtidigt. Alla buffertar annat i den särskilda minibufferten längst ner i motsvarar inte en fil, utan det kan också vara en Emacs. Den har till skillnad från andra buffertar text som bara finns inne i Emacs. Så är det med ingen informationsrad. Om man ger C-x C-f för den särskilda slaskbufferten *scratch*. Använd att öppna en fil är det till exempel där man får inte den för något som du har tänkt spara, utan skriva in namnet på den fil man vill öppna. öppna en ny fil för sånt! På samma ställe, längst ner, skrivs även diverEtt sätt att byta buffert är att använda menyn se meddelanden från Emacs ut. Detta kallas då Buffers . Ett annat är med C-x b . för ekoarean. Dessa meddelanden sparas även i en särskild buffert *Messages*. 2.2.3 Buffertar 2.2.4 Fönster, ramar Vid övningen med stavningskontroll förra veckan visades ersättningsförslag i en egen ruta i Emacs. Sådana »rutor« kallas för fönster (windows) i Emacs. I figur 2.1 finns ett annat exempel på där Emacs visar två buffertar samtidigt i varsitt fönster. Med C-x 1 tar man bort alla andra fönster än det man just då är i och med C-x 2 klyver man aktuellt fönster till två. Med C-x o byter man fönster. Terminologin kan vara förvirrande eftersom allt detta tillsammans är bara ett fönster i fönstersystemet. Det går även att låta samma Emacs använda sig av flera fönster i fönstersystemet. Dessa kallas då ramar (frames) i Emacs. Som det är uppsatt här kommer ni få en ny ram varje gång ni väljer att editera en fil i filhanteraren. 2.2.6 Att förflytta sig I början är det oftast enklast att använda piltangenterna för att förflytta sig i texten. Tillsammans med Control eller Meta går de hela ord eller stycken i taget. För att förflytta en sida i taget kan man använda <prior> och <next> (Page Up och Page Down). Vana användbara brukar föredra att använda en del kommandon i tabell 2.2 eftersom de tangenterna ligger närmare till hands medan man skriver text. 2.2.7 Bryta och ångra Med ångerknappen kan man ångra inte bara det allra senaste man gjorde, utan man kan ångra sig långt tillbaks i tiden om man kommer på att man gjort hel fel. Det är bara att göra det om och 19 2. SKALET OCH EMACS Tabell 2.2: En del kommandon för förflyttning C-f C-b C-p C-n framåt ett tecken (forward) bakåt ett tecken (backward) upp en rad (up) ner en rad (down) M-f M-b framåt ett ord bakåt ett ord C-v M-v framåt en sida bakåt en sida C-a C-e till början av raden till slutet av raden M-< M-> till början av bufferten till slutet av bufferten om igen i en buffert tills man har tagit tillbaka allt som blev fel där. Det är ett av de kommandon som man har störst nytta av att kunna kortkommandot för så att man snabbt kan rätta till skrivfel medan man fortfarande har fingrarna kvar på tangentbordet. Kortkommandot är C-_ dvs. Ctrl tillsammans med understreck. (Eftersom understreck kräver skift så blir det totalt tre tangenter som trycks ner samtidigt.) Ett påbörjat kommando kan avbrytas med C-g. Om man t. ex. har tryckt C-x C-f för att öppna en fil men sen har ångrat sig kan man trycka på C-g istället för att ge ett filnamn. Man kan också trycka C-g efter ett halvskrivet kommando, t. ex. om man bara hann skriva C-x innan man ångrade sig. Man kan också använda det för att avbryta Emacs om den tar lång tid på sig att slutföra något komplicerat kommando. Om man har hamnat i nån konstig situation i Emacs som man inte vet hur man ska ta sig ur kan man använda ESC ESC ESC för att ta sig ur. (Tre ESC efter varann.) Exakt vad det gör beror på vad man håller på med i Emacs. 2.2.8 Backuper När man har ändrat i en fil så sparar Emacs den gamla versionen i en backupfil som får ett namn som slutar med tilde (~), t. ex. exempel.txt~ eller README~. (Filhanteraren visar normalt inte dessa filer.) Emacs sparar också filer som har namn som börjar och slutar med tecknet # (ofta kallat nummertecken). Detta är autosparfiler som sparas då och då medan man editerar en fil och sedan tas bort när man har sparat filen. Det ger ett sätt att få tillbaka det man gjort om t. ex. det blir strömavbrott innan man har sparat sina ändringar. 20 2.2.9 Klipp-och-klistra Emacs kommer från en annan tradition än program ni förmodligen är vana vid och har sina egna tangenter för sådant. (Det går dock att ställa om, och i labben ska vi se hur.) • C-w cut, klippa ut • M-w copy, kopiera • C-y paste, klistra in (y = yank) Det finns även andra kommandon för att ta bort text, t. ex. för att ta bort rader (C-k ) eller ord (M-d framåt, M-DEL bakåt). Dessa kommandon har namn som börjar med kill (t. ex. kill-region för C-w). All text som man »dödar« med sådana kommandon hamnar i urklipp så att de kan klistras in. Emacs sparar många gamla texter som man »dödat«. I en meny Edit Paste from Kill Menu finns flera såna gamla urklipp att välja från. Från tangentbordet börjar man med C-y och trycker sen omedelbart efter M-y vilket byter ut den inklistrade texten mot nåt man dödade tidigare. Om det fortfarande är fel repeterar man M-y tills man fått fram den text man ville ha. 2.2.10 Punkten och regionen Glöm inte snabbsättet att kopiera text i Unix som vi tog upp förra gången! Man bara markerar en text och klistrar sen in den med mittknappen. Den markerade texten kallas i Emacs även regionen, och det finns flera kommandon som gör saker med denna region. I ena änden av regionen finns alltid punkten (point), som i Emacs är namnet på det ställe där den blinkande markören befinner sig. I den andra änden finns ett så kallat märke. Ett sätt att markera text utan att använda musen är genom att sätta ett märke där man är med C-SPC och sen flytta sig en bit. Inlupp 2: Skalet och Emacs Redovisning Skriv svaren i en textfil i Emacs och skicka den till starback@stp.lingfil.uu.se. Om det är något du inte klarar, så skicka ändå det du har! Se till att du har utfört de övriga uppgifter som står mellan frågorna när du skickar in svaren, för jag kommer att titta på det också. $ cat dikt-1.txt osv. för de andra filerna. Med $ cat dikt-1.txt dikt-2.txt dikt-3.txt Skalet Skapa ett terminalfönster med ett skal. Väljaren -a till ls talar om att alla filer ska listas (även dolda). Jämför vad du får för resultat från ls och ls -a. Uppgift 2.1 Nämn någon dold fil och någon dold underkatalog som du har i din hemkatalog. får du hopslagningen av dessa tre som output, dvs. hela denna dikt. Uppgift 2.5 Hur kan man skriva något annat än cat dikt-1.txt dikt-2.txt dikt-3.txt som ger samma resultat men är kortare, med användning av joker? Uppgift 2.2 Ge ett kommando för att få en lång I katalogen finns också en fil dikt-source som listning av filerna i din kurskatalog. Ange kom- talar om vad det är för dikt. Den har av någon mandot och det svar det gav! (Använd klipp-och- anledning inte ett namn som slutar på ».txt« trots klistra.) att det är en textfil. Se till att den inte kommer med när du ger ditt kommando. Den listningen liknar en del fillistningar från förra labben och visar bland annat filskyddet, vem Uppgift 2.6 Ange ett kommando där du med som äger filen, hur stor den är och när den senast hjälp av omdirigering sparar hela denna dikt i en ändrades. ny fil med namnet hela-dikten.txt. Utför även det kommandot. Uppgift 2.3 Ge ett kommando för att ändra så Gör cat hela-dikten.txt efteråt för att se att introduktion-till-datateknik blir din akatt du fått önskat resultat. tuella katalog. Hur lyder det kommandot? Med denna nya fil har du totalt fem filer som Uppgift 2.4 Lista bara alla filer här som har har med denna dikt att göra. Fundera ut vad du namn som slutar på ».txt«? Ange både ditt komkan skriva för ett uttryck med jokrar som matchar mando och det resultat det gav. alla fem filerna. Där finns bland annat tre filer dikt-1.txt, Uppgift 2.7 Ge ett kommando med ls och ditt dikt-2.txt och dikt-3.txt som innehåller var- jokeruttryck. Resultatet ska bli en listning med alsin strof i en dikt. Titta på innehållet i dessa med la de fem filerna och inga andra. cat, som Får du ingen ny prompt som slutar med dollar?: Du kan råka skriva fel på något kommando i skalet så att du inte får en ny prompt eller får en prompt som slutar med > istället för $. Avbryt i så fall med Ctrl-C för att få en ny prompt. Skapa en ny underkatalog lenngren till din kurskatalog med kommandot mkdir lenngren och flytta alla de fem diktrelaterade filerna till den nya katalogen lenngren i ett kommando (med jokrar). Att flytta filer kan man göra med kommandot mv (»move«) med ett antal filnamn som argument och där det sista argumentet är en katalog som filerna ska flyttas till. 21 INLUPP 2: SKALET OCH EMACS Snabbkommandot C-x C-f för att öppna filer använder man oavsett om man öppnar en fil som Uppgift 2.9 Vad kan du ge för kommando (ut- redan finns eller om man vill skapa en ny fil. Man an att byta katalog) för att få en lång listning av behöver alltså inte först skapa en ny fil som man filerna i denna katalog? sen öppnar, utan man öppnar den direkt. Öppna med C-x C-f en ny fil saga.txt i kurskatalogen. Kommandot echo är ett enkelt kommando som Eftersom den fil du just tittar på ligger i den kataman kan ge godtyckligt många argument och som logen kommer den nya filen också hamna där om ekar tillbaka sina argument ett och ett. (Det kan du inte säger till om nåt annat. nog verka svårt att förstå vad man ska ha det till, När man editerar vanlig text är det oftast men det kommer att visa sig användbart så små- praktiskt om långa rader bryts automatiskt meningom.) dan man skriver. Ställ om så att det blir så Jämför output från följande kommandon: med Options Auto Fill in Text Modes i Emacsmenyerna. När du har det påslaget visas det med or1. echo Hej hopp det Fill i informationsraden. Gör även Options 2. echo "Hej hopp" Save Options vilket sparar denna inställning till 3. echo Hej hopp 4. echo "Hej hopp" nästa gång du kör Emacs! Skriv en liten saga i den filen. Den ska börja (I de två senare fallen har jag skrivit sjutton mellanslag i rad mellan orden, men du kan nåt »Det var en gång« för annars är det ingen riktig annat antal i samma storleksordning när du tes- saga. Tryck inte på retur/enter utan skriv på för att se hur den automatiska radbrytningen fungerar. tar.) Så snart du börjar skriva dyker det upp ett par Uppgift 2.10 Vilka av dessa kommandon ger stjärnor till vänster på informationsraden. De visamma output? Förklara varför, och varför det sar att bufferten inte är sparad. Det märks även som avviker gör det! Frivillig bonusfråga: Om på att knappen Save blir aktiv. Glöm inte att spaman verkligen vill skriva ut "Hej hopp" inklusi- ra efteråt och notera att stjärnorna då försvinner ve citattecknen med hjälp av echo, hur ska man och Save-knappen blir inaktiv. Se efter i menyn vad kortkommandot för Save är. skriva då? Uppgift 2.8 Hur löd detta kommando? Uppgift 2.11 Vad är kortkommandot för Save? Emacs Starta Emacs med Applications Accessories Emacs om du inte redan har en igång. Denna gång ska du inte använda musen utan kortkommandot C-x C-f för att öppna en fil i kurskatalogen. (Eftersom Ctrl-tangenten ska användas till båda tecknen behöver du inte lyfta den tangenten emellan.) När du tryckt C-x C-f står det Find file: ~/ längst ner i Emacs och markören har hamnat där nere, i minibufferten. Den fil du ska öppna är ~/introduktion-till-datateknik/ exempel.txt, så fortsätt att skriva på det påbörjade filnamn som står där (nästa tecken i namnet är i). Använd komplettering med TABtangenten. Avsluta med returtangenten. Observera att det i den mörkare nedre raden i Emacs nu står (Text) vilket visar att Emacs är inställd på att editera vanlig text på t. ex. engelska eller svenska (och inte t. ex. HTML eller ett Javaprogram) – Emacs befinner sig i text mode. Emacs befinner sig alltid i en viss sådan mode. På svenska kallas det ibland för läge (textläge), eller arbetsmiljö. Att Emacs valde textläge för denna fil är för att den har ett namn som slutar på ».txt«. Den mörkare raden i Emacs där bland annat detta står kallas för mode line eller informationsraden. 22 Skriv verkligen en liten text på minst fyra rader som inte bara lyder »bla bla bla« eller liknande, för vi kommer att använda den texten i flera senare övningar där det inte kommer att funka om det inte står en riktig text på svenska där. Uppgift 2.12 Vilka olika sätt att öppna filer i Emacs känner du till nu? Inkrementell sökning Använd C-x C-f i Emacs för att öppna /local/ kurs/ids/wonderland.txt. Eftersom denna fil inte ligger bland dina filer utan på ett helt annat ställe så får du skriva hela filnamnet från början (men du kan förstås använda komplettering med TAB på lämpliga ställen). Detta är hela texten till boken Alice i Underlandet. Nu ska du söka i den. Emacs var först med inkrementell sökning som har blivit allt vanligare även i andra sammanhang. Istället för att skriva in hela texten man söker efter innan sökningen sätter igång, så börjar sökningen direkt när man börjar skriva vad man söker efter. Gör dessa små övningar långsamt så att du ser vad som händer hela tiden. Tryck på C-s för att starta en sökning. Då dyker texten »I-search:« upp i minibufferten därnere för att visa att en sökning pågår. Emacs Säg att du ska söka efter ordet »waistcoat«. Börja med att trycka w (inget mer, tillsvidare). Notera var markören har hamnat och vilken text som färgas. Tryck så a och se hur det förändras. Härnäst i. Nu är du framme. Avsluta då sökningen med RET (retur). Med inkrementell sökning behöver du inte skriva mer än nödvändigt för att hitta texten. Det funkar att sudda medan man skriver söktexten. Pröva härnäst att söka efter det ordet »received«, men »råka« först skriva fel och sök efter »recieved« istället. Den sökningen kommer en bit in att misslyckas. Emacs misslyckas och visar den del som inte gick att hitta med rödfärg. Sudda då i söksträngen och rätta till det till den riktiga stavningen. Den söksträng du använder står hela tiden i minibufferten. När du är framme så tryck på RET . Uppgift 2.13 Vilket ord hade Emacs hittat när sökningen inte längre gick? På vilken rad hittade du sen det rätta ordet? (Radnumret står efter »L« i informationsraden.) det från menyn så får man upp en särskild filväljare men använder man ett kortkommando får man ange filnamn i minibufferten. Använd kortkommandot! Du får upp »Write file:« i minibufferten och får skriva filnamn där. Du ska spara denna fil i din kurskatalog och den har du redan använt tidigare i Emacs, så då behöver du inte skriva så mycket. Tryck på <up> (dvs. uppåtpilen) för att gå tillbaka till tidigare använda filnamn. När du har hittat rätt så editera så att bara namnet på katalogen står, dvs. ~/ introduktion-till-datateknik/ och tryck på retur. Du ska få ett meddelande (i ekoarean) om att filen har sparats där. I början står <!--page--> vilket tydligen markerar var det har varit ny sida i den ursprungliga tidningen. I detta fall vill du att det istället ska stå »[ny sida]« där. Kommandot för att byta ut text finns i menyerna som Edit Replace Replace String. . . Uppgift 2.17 Hur kan man ge samma kommando från tangentbordet? Sök härnäst framåt efter »sister«. Du kommer till ett ställe där det står »in the lap of her sister«. Antag att detta inte är det ställe du var ute efter. Tryck på C-s igen för att gå till nästa ställe. Fortsätt så tills du får »Failing I-search«. Då är du vid den sista förekomsten av »sister« i filen. Ge kommandot! Du får i minibufferten först ange vad du vill byta ut, och sen vad du vill byta ut det mot. Avsluta varje input med RET. Nu har du börjat byta ut. Den första texten som kanske ska bytas ut är färgmarkerad. Tryck y (= yes) för att byta ut denna förekomst och du hamnar vid nästa förekomst. Det finns annat än y Uppgift 2.14 Vilken rad är du då på? och n som man kan svara här. Tryck på ? för att Uppgift 2.15 Tryck nu på C-s en gång till i alla få hjälp. fall, fast du redan var vid sista förekomsten. Vilken rad hamnar du då på? Vad hände? Uppgift 2.18 Med vilket tecken kan man ersätta alla återstående förekomster utan ytterligare fråSökningar bakåt görs precis som framåt, men gor? med C-r istället. (Man kan byta riktning under sökandet genom att trycka C-r eller C-s .) En påUtför det kommandot! I ekoarean får du ett börjad sökning kan avbrytas med C-g. Om man meddelande om hur många utbyten som skedde. avslutar den (med RET) stannar man vid det man Använd M-< eller <C-home> för att gå tillbaks hittade. Om man avbryter (med C-g ) går man till början av bufferten igen. Den första notisen istället tillbaks där man var när man började, som börjar »Bättre ekonomi men fortsatt hög arbetsom man aldrig gjort sökningen. löshet.« Antag att den av någon anledning inte ska vara med. Sätt ett märke där den börjar (med C-SPC). Flytta dig till dess slut och tryck C-w för Flytta och kopiera att ta bort regionen. Avsluta med att rensa bort Nästa fil du ska öppna i Emacs är /local/kurs/ tomraderna i början av filen så att den börjar diids/ivt2-svenska.txt. (Det är en textfil med rekt med den nu första notisen (utan beteckningen del gamla utdrag ur Invandrartidningen på en- en »[ny sida]«). kel svenska.) Sök framåt efter ordet »internet«. (När du söker framåt hittar du före det ett sammansatt ord – Uppgift 2.16 Det finns ett menyalternativ File tryck då på C-s igen för att gå till nästa förekomst Save As. . . i Emacs. Vad är motsvarande kortkom- av det sökta.) mando? Hela detta stycke där ordet »internet« står med ska flyttas till slutet av filen. Prova denna gång Som för andra operationer med filer så beter sig istället kommandot M-h som direkt markerar heEmacs olika om man väljer kommandot från me- la stycket med punkten i början av stycket. Ta nyn eller med ett kortkommando. Om man väljer bort det med C-w. Gå till slutet av bufferten med 23 INLUPP 2: SKALET OCH EMACS M-> eller <C-end> och klistra in stycket med C-y (yank). Avsluta med att spara den ändrade filen. Andra tangenter Om du är van vid att använda C-x, C-c och C-v för klipp-och-klistra så kan du ändra så att Emacs också känner igen dessa. Uppgift 2.19 Det finns ett menyalternativ för att välja detta. Vad heter det? Eftersom dessa tangenter även har andra betydelser i Emacs så får dessa tangenter olika betydelse när man har markerat en region och annars. Uppgift 2.20 Ja just ja, jag känner till att minst en av dessa tangenter används till annat i Emacs. Vad? Väljaren -d till date beskrevs på s. 16. Uppgift 2.27 Prova olika argument till denna väljare -d, nämligen »today«, »tomorrow«, »next year«. Visa dina kommandon och vad du får för resultat! I det sista fallet har du ett argument med mellanslag i sig, så då behöver du ta hand om det på nåt särskilt sätt. Uppgift 2.28 Om man ger date -d ett fyrsiffrigt tal som argument, hur tolkar den det? Uppgift 2.29 Ange ett skalkommando som skapar en fil saga40.txt som innehåller en version av din saga.txt där raderna är högst 40 tecken långa. Uppgift 2.30 Ange ett skalkommando som räknar hur många rader och ord det är i denna nya (Om man gör denna omställning får man även fil och vad det gav för resultat. Det ska bli lika ångra på C-z, som man kanske också är van vid många ord som för saga.txt, men troligen fler från annat håll. Om du vill spara inställningen så rader. välj Options Save Options .) Välj själv om du vill an- Uppgift 2.31 När man räknar både ord och ravända detta eller prova att använda standardtan- der samtidigt, i vilken ordning får man då ut svagenterna i Emacs. ren? Spelar det roll i vilken ordning man ger väljarna? Diverse I ekoarean kommer det då och då små meddelanden från Emacs, t. ex. om att den sparar filer osv. Uppgift 2.32 Ge nu ett kommando för att gå tillbaks till din hemkatalog igen. Ange minst två sätt som du kan göra detta på! Uppgift 2.33 Nämn minst tre tangentsekvenser Uppgift 2.21 Om du ger C-x C-f för att öppna i Emacs med en prefixtangent, och vilka komen fil igen, men ångrar dig och trycker på C-g , vad mandon som dessa utför. får du då för meddelande i ekoarean? Klyv fönstret med C-x 2 många gånger tills det inte går längre. Du har fått ett felmeddelande. Uppgift 2.22 Hur lyder det? (Det skrivs i ekoarean så därför finns det även sparat i bufferten *Messages* så kopiera det därifrån så att du slipper skriva av.) (Återställ sen till bara ett fönster med C-x 1.) Slutkompott Tillbaks till skalet. Gå till kurskatalogen igen om du inte redan är där. Ange kommando och kommandots resultat för att: Uppgift 2.23 . . . visa de två sista raderna i din saga.txt. Uppgift 2.24 . . . räkna orden i din saga.txt. Uppgift 2.25 . . . räkna raderna i din saga.txt. Uppgift 2.26 . . . räkna både orden och raderna samtidigt i din saga.txt, med ett kommando. 24 I Unix-världen brukar man rekommendera folk att inte ha filer vars namn börjar med bindestreck (-). Skapa trots detta en fil som heter -foo. Uppgift 2.34 Kan du komma på varför man brukar avreda från sådana namn? Visa något kommando du försöker använda med din fil -foo som leder till problem. Uppgift 2.35 Vad är det nu igen för tangent som används för att avbryta ett kommando i skalet? Uppgift 2.36 Vad är det nu igen för tangenter som används för att avbryta ett kommando i Emacs? Uppgift 2.37 Om det skulle finnas ett kommando xyzzy, hur skulle då xyzzy -x 17 42 tolkas? a) Kommandot xyzzy har en väljare -x. Sen har kommandot två argument, 17 och 42. b) Kommandot xyzzy har en väljare -x med argumentet 17. Sen har kommandot självt ett argument, 42. Kapitel 3 Mer om skalet 3.1 Långa väljare i ett rör vidare till nästa kommando. På svenska säger man ibland kommandorör. Förra gången såg vi att kommandon kan få väljare. Med I ett kommando som grep -i prins saga.txt är t. ex. -i en väljare som påverkar beteendet för $ head stp.txt | wc -w kommandot grep. Många program har även långa 41 väljare som består av mer än ett tecken (efter bindestreck). I GNU är standarden att långa väljare inleds med två bindestreck. Ofta finns det en kort och en lång väljare med samma betydelse. Den långa är kanske lättare att förstå, men den korta får man t. ex. veta hur många ord det finns i de går snabbare att skriva när man har lärt sig den. tio första raderna av filen stp.txt. Först utförs T. ex. kan man till grep skriva --ignore-case head stp.txt, men istället för att skriva ut resultatet av det kommandot till terminalen så skicistället för -i och --count istället för -c. Man behöver inte alltid skriva ut hela nam- kar skalet vidare det som indata till wc -w som net på den långa väljaren, utan början kan räcka räknar orden i det. De båda programmen head och wc vet inte om ifall det det ändå blir unikt. Det räcker t. ex. med att de kommunicerar med varandra. Det första grep --cou, men inte med grep --co eftersom skriver utdata till standard output och det andra grep också har andra väljare som börjar så. läser indata från standard input utan att veta vad som finns i andra änden. Det är skalet som tar ut3.1.1 Argument till långa väljare data från det ena och lämnar vidare som indata När en lång väljare ska ha ett argument skriver till det andra. Om vi inte kände till kommandorör skulle vi man ofta ett likhetstecken mellan väljare och värkunna lösa samma uppgift så här: de, så här: $ date Tue Sep 8 13:23:11 CEST 2015 $ date --date=tomorrow Wed Sep 9 13:23:14 CEST 2015 $ head stp.txt >smurf $ wc -w smurf 41 smurf $ rm smurf Jaha, 41 ord. Här sparar vi undan resultatet av första steget i en fil (som här fick heta smurf, men det är ju ett jättedumt namn och du skulle förstås 3.2 Kommandorör (|) ha kallat den nåt rimligare). När vi väl har räknat Ni har sett hur man kan spara resultatet av ett orden i den filen så behövs den inte längre, så vi kommando i en fil med hjälp av tecknet > och ett tog bort den efteråt med rm. filnamn. Kommandorör är bättre genom att mellanresulIstället för att spara resultatet i en fil kan man tat inte behöver sparas i några filer utan kan skicockså skicka vidare resultatet som indata till ett kas direkt från kommando till kommando. nytt kommando med tecknet | (lodstreck). Observera att wc i kommandoröret inte har Detta kallas på engelska för en pipe. Man tänker några argument! (Bara en väljare -w.) Alltid tidisig att utdata från det första kommandot färdas gare har vi använt det kommandot med filnamn 25 3. MER OM SKALET head stp.txt ⇒ Språkteknologiprogrammet förenar språkvetenskapens sätt att se på språk med datateknikens mer ingenjörsmässiga perspektiv. Målet är att på ett användbart sätt åstadkomma automatisk analys och generering av naturligt språk. Exempel på tillämpningar är system för maskinöversättning och datoriserade översättningsstöd, språkgranskning, informationssökning och ⇒ wc -w ⇒ 41 Figur 3.1: Hur många ord finns det på de första tio raderna? Kommandoröret head stp.txt | wc -w som argument, och då räknar den ord eller rader i de filerna. Om den inte får några argument räknar den istället i standard input. I figur 3.1 visas hur utdata skickas vidare som indata i detta kommandorör. Ett vanligt fel är att blanda ihop detta och skriva nåt i stil med FEL! ⇒ $ head stp.txt | wc -w stp.txt Här har man gett ett argument till wc (nämligen »stp.txt«), så alltså läser den från den filen och inte från standard input. Så allt det som står före lodstrecket spelar ingen roll. $ echo och/eller | wc -w 1 3.4 Omdirigering av standard input (<) Som en omvändning till > kan man använda < för att visa varifrån indata till ett kommando ska hämtas. Exempel: $ wc -w <start 41 Här hämtar skalet texten i filen start och lämnar den texten som indata till wc -w som tar fram antal ord i detta. Kommandorör är ett sådant fall där kommandot Detta är inte alls lika vanligt att man använder echo kan vara användbart, för att ge en viss speci- som >. Det går ju nämligen lika bra att skriva bafik indata till ett kommando. Antag att vi vill prö- ra wc -w start istället, utan <-tecknet, eftersom va hur wc egentligen räknar ord. Skulle den räkna wc liksom de flesta kommandon som man vill ge »och/eller« som ett eller två ord? Ett sätt skulle text som indata till också accepterar filnamn som förstås vara att skriva texten »och/eller« i en fil argument och då själv läser in dessa filer som införst, men vi behöver inte göra det, utan kan ge data. en bestämd text direkt som indata. Precis som det normala för standard output om man inte säger något är att det skickas till terminalen så är det normala för standard input att om man inte säger något så läses det från terminalen! Så om man skriver bara head får man ingen ny prompt direkt, utan skalet börjar läsa in textrader Tecknet |: Tecknet | kallas för lodstreck (vertical som man skriver in på terminalen.1 bar). Det skiljs egentligen från ett ovanligare tecStandard output och standard input förkortas ken broken bar (¦), men på bland annat svenska ibland till stdout respektive stdin. tangentbord finns bara det ena, och det brukar då Flera kommandon som vi sett tidigare som tar visas som ¦ på tangentbordet trots att tangenten filnamn som argument och som läser sin input faktiskt genererar |. från dessa läser input från standard input istället Tecknet behöver skrivas med AltGr. Förutom dess användning som pipe i Unix anom de inte får några argument. Det gäller bl. a. vänds tecknet också bland annat ofta för att ange head, tail, wc och grep. 3.3 En användning av echo alternativ i flera syntaxer och programspråk. 1 Sådan text som man skriver in kan man avsluta med Control-d. 26 3.5. Långa rör och filter 3.5 Långa rör och filter En kommandorad kan innehålla godtyckligt många rör. I en fyrdelad kommandorad som aaa | bbb | ccc | ddd kommer programmet aaa att lämna vidare sitt resultat till programmet bbb som lämnar vidare sitt resultat till programmet ccc som lämnar vidare sitt resultat till programmet ddd . I detta exempel är det bara output från ddd som hamnar i terminalen. Till detta kan man även lägga till omdirigering med < och >. Med en kommandorad som aaa <infil | bbb | ccc | ddd >utfil läser det första steget aaa sin indata från filen infil och det sista steget ddd skriver slutliga utdata till filen utfil. Det är inte meningsfullt att skjuta in < eller > någonstans i mitten av en sånt här kommandorör. Symbolen | visar ju redan varifrån indata ska tas och vart utdata ska skickas.2 Ett kommando som läser in något från standard input, gör nånting med det, och sedan skriver ut det i modifierad form på standard output kallas ofta ett filter. 3.6 Relativa sökvägar I avsnitt 1.3 såg vi hur fullständiga sökvägar kan användas för att beteckna en fil eller katalog. Sådana sökvägar kan alltid skrivas som argument till kommandon som ska ha filnamn eller katalognamn som argument. De fullständiga sökvägarna börjar alltid med / och har oftast flera / i namnet. Oftast anger man istället ett kortare namn på filer och kataloger. Det enklaste fallet är när dessa filer och kataloger ligger i det som är ens aktuella katalog. Då räcker det med att bara skriva namnet, som README eller kvack.png. Men om Ellen som exempel har sin hemkatalog /home/stp15/ellen som aktuell katalog och vill referera till sin fil med ett slottsfotografi (se figur 1.3 på s. 6) vars fullständiga namn är /home/stp15/ellen/fotografier/slottet. jpg så räcker det inte med bara slottet.jpg eftersom den filen inte ligger i samma katalog. Ett sätt är förstås att först byta katalog, men ett annat är att skriva en relativ sökväg som utgår från ens aktuella katalog. Det skulle i det fallet bli fotografier/slottet.jpg. Om man istället har /home/stp15 som aktuell katalog kan man skriva ellen/fotografier/ slottet.jpg. Alla sådana namn som inte börjar med / (eller ~) utgår från aktuell katalog. Det gäller alltså även den enklaste formen helt utan /, som README och kvack.png. Vad dessa sökvägar betyder beror på vad som är aktuell katalog, så detta är exempel på relativa sökvägar. För att röra sig uppåt i filträdet använder man den särskilda beteckningen ’..’ som finns i varje katalog och pekar till den katalogens föräldrakatalog. Om Ellen har sin underkatalog Desktop som aktuell katalog kan hon t. ex. skriva .. för att referera till sin hemkatalog och ../fotografier/ slottet.jpg för att referera till det där fotografiet. En användning av .. har du redan sett: cd .. för att gå upp ett steg. Fullständiga sökvägar börjar alltså med / och utgår från roten (som ju betecknas /). Övriga sökvägar är relativa och utgår från aktuell katalog. En tilde (~) i början av sökvägar är bara ett förkortat skrivsätt för något som börjar med /home, så sådana sökvägar är också fullständiga. Förutom .. för föräldrakatalogen finns även . i varje katalog och betecknar just den katalogen. Det betyder alltså samma sak att skriva fotografier/slottet.jpg och t. ex. ./ fotografier/slottet.jpg eller fotografier/ ./slottet.jpg. Trots att dessa . och .. finns i varje katalog så syns de normalt inte. Det är helt enkelt eftersom de börjar med punkt och därför är dolda. 3.7 TAB Det finns ett särskilt TAB-tecken som i textfiler visas som ett hopp fram till nästa tabulatorposition, och dessa ligger normalt med åtta stegs mellanrum. Det är alltså bara ett tecken i filen, även om det ser ut som mer. När man editerar text används TAB-tangenten för att göra ett »lagom långt« indrag, vilket kanske är ett TAB-tecken, men kanske längre, och kanske bara nåt enstaka mellanslag, beroende på vad det är för slags text och hur omgivningen ser ut. Det är alltså inte alls alltid så att det verkligen blir ett TAB-tecken i en fil för att man trycker på den tangenten. Den tangenten används ju dessutom även till annat. Vi har t. ex. använt den mycket till komplettering, och den används också ofta för att växla mellan olika inmatningsfält. 3.8 Skalkommandot cut Kommandot cut klipper i sin indata så att bara vissa delar av varje rad kommer med i utdata. Det är vanligt att använda detta kommando för textfiler som innehåller flera kolumner, normalt avgränsade av det speciella TAB-tecknet. Med väljaren -f med ett tal som argument kan man då klippa ut bara någon av dessa kolumner. 2 Man kan även skriva <infil aaa istället för aaa <infil vilket en del tycker gör ordningen tydligare. 27 3. MER OM SKALET $ cat knattarna.txt Knatte Fnatte Tjatte Ole Dole Doffen Rip Rap Rup $ cut -f 1 knattarna.txt Knatte Ole Rip $ cut -f 2 knattarna.txt Fnatte Dole Rap Det går också att klippa ut flera kolumner tillsammans, som t. ex. cut -f 2-3 för kolumn 2 och 3. I figurerna 3.2, 3.3 och 3.4 visas några exempel på kommandorör där cut används tillsammans med den där filen med Knattarnas namn på svenska, norska och danska. 3.9 Att tolka hjälp om skalkommandon I felmeddelanden har du sett att många kommandon tipsar om att man kan ge kommandot med en väljare --help för att få hjälp om det kommandot. Det är en standard för GNU-program att de ska ha en sådan väljare. Hjälptexten är skriven rätt kompakt och kräver att man är van för att veta hur den ska tolkas. I figur 3.5 ges ett exempel, med hjälptexten för head. Först kommer en usage-rad som sammanfattning. Det visar att det som vanligt kan komma ett antal väljare ([OPTIONS]...) och att det sedan kan följa ett antal argument som är filnamn ([FILE]...). Hakparenteserna visar att det är en optionell del som inte behöver vara med. Punkterna visar att det får finnas flera sådana. Man kan jämföra med motsvarande rad för grep som lyder Den första raden beskriver hur man använder cp med två argument, till exempel cp foo.ogg bar.ogg för att kopiera filen foo. ogg till bar.ogg. I den andra versionen kan det finnas flera »SOURCE« (eftersom det står punkter efter) och sista argument måste vara ett namn på en katalog. Det betyder att kopiera allt man räknar upp som en »SOURCE« till den katalogen. I beskrivningen som följer i figur 3.5 beskrivs närmare hur de olika argumenten tolkas. Här står bland annat att om man inte har angivit någon FILE så kommer kommandot att »read standard input« istället. Så beter sig många kommandon som man kan ge filnamn som argument. Större delen av beskrivningen är en lista med olika väljare som kommandot tar. Här listas synonyma väljare tillsammans. T. ex. betyder head -q , head --quiet och head --silent detsamma. Vilka argument som ska ha argument framgår också. Då det står --lines=[-]K så ska tydligen --lines ha ett argument, och därmed även dess synonym -n. Värdet för den väljaren skrivs här som [-]K och tydligen ska K här ska vara ett tal. Hakparenteserna betyder som på andra ställen nånting som kan vara med men inte behöver vara med. Så argumentet är antingen ett minustecken följt av ett tal eller också bara ett tal. Så man kan alltså skriva t. ex. head --lines=-17 och head --lines=17 . (Detta betyder olika saker. I beskrivningen står det mer om det.) Om man använder -n i stället så blir det alltså head -n -17 eller head -n 17 , där det sistnämnda är ett sådant normalt anrop i stil med sådana du har gjort. (Om du vill veta vad det betyder att använda ett minustecken där får du lov att läsa vidare i dokumentationen.) Alla detaljer i hur head kan anropas är inte viktiga, utan det viktiga är här hur olika saker betecknas eftersom ni kan behöva kunna tolka sådana Usage: grep [OPTION]... PATTERN [FILE]... här beskrivningar själv. Framförallt gäller det att Här står det första argumentet, »PATTERN«, kunna plocka ut just den information man själv texten som man ska söka efter, inte inom hak- behöver. Om t. ex. några väljare eller varianter parenteser, så det argumentet måste alltid finnas verkar helt obegripliga så behöver inte det göra med.3 Däremot behöver inte några filnamn finnas något så länge man inte behöver dem. med. Det kan också finnas flera alternativa sätt att köra ett program. Kommandot cp som kopierar filer kan t. ex. anropas på dessa två olika sätt:4 Usage: cp [OPTION]... SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY 3.10 Argumentet - Observera särskilt en sak som står i hjälptexten det första argumentet kallas för »pattern« är för att för head: »With no FILE, or when FILE is -, read det inte behöver vara en fix text, utan kan vara ett mönster standard input«. som man söker efter. Detta tar vi upp senare. Detta gäller för många kommandon att man 4 Detta är en vit lögn. Det finns faktiskt ett tredje sätt ockkan skriva - istället för ett filnamn för att komså, och det första sättet har en extra optionell väljare, men det spelar ingen roll nu. mandot ska läsa från standard input. 3 Att 28 3.10. Argumentet - cut -f 3 knattarna.txt ⇒ Tjatte Doffen Rup ⇒ tail -n 1 Rup ⇒ Figur 3.2: Vad heter Tjatte på danska? Kommandoröret cut -f 3 knattarna.txt | tail -n 1 tail -n 1 knattarna.txt ⇒ Rip Rap Rup ⇒ cut -f 3 ⇒ Rup Figur 3.3: Vad heter Tjatte på danska med en annan metod. Kommandoröret tail -n 1 knattarna.txt | cut -f 3 cut -f 2 knattarna.txt ⇒ Fnatte Dole Rap ⇒ grep a ⇒ Fnatte Rap Figur 3.4: Vilka »Fnattar« har ett namn med a i? Kommandoröret cut -f 2 knattarna.txt | grep a $ head --help Usage: head [OPTION]... [FILE]... Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]K print the first K bytes of each file; with the leading '-', print all but the last K bytes of each file -n, --lines=[-]K print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names --help display this help and exit --version output version information and exit K may have a multiplier suffix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. GNU coreutils online help: <http://www.gnu.org/software/coreutils/> For complete documentation, run: info coreutils 'head invocation' Figur 3.5: Hjälptexten för head. 29 3. MER OM SKALET 3.11 Skalskript Om man vill göra om en följd av kommandon flera gånger så kan man spara undan dessa kommandon i ett skalskript (shell script). Det är helt enkelt en textfil där kommandoraderna står, rad för rad, så som man annars hade skrivit in dem till ett skal. Ofta låter man sådana filer få filnamnsändelsen .sh (som i shell). Det är brukligt att börja sådana filer med en särskild rad i stil med #! /bin/bash Detta talar om att det är just skalet bash som det är tänkt ska utföra kommandona i denna fil. (/bin/bash är nämligen en fullständig sökväg till programmet bash.) Ett sätt att utföra kommandona i en sådan fil är att använda bash som kommando. Då körs ett nytt skal igång som utför skalkommandona i filen. $ cat lista-bilder.sh #!/bin/bash echo Här är några av dina bildfiler: ls *.gif *.jpg *.png echo Ha en trevlig dag! $ bash lista-bilder.sh Här är några av dina bildfiler: ls: *.gif: No such file or directory emacs.png fooey.jpg fooey.png wave.png Ha en trevlig dag! $ ls *.pdf dn.pdf svd.pdf unt.pdf så tänker man det sig kanske som att man bett ls att se efter vad det finns för pdf-filer, men egentligen är det skalet som expanderar *.pdf till dn.pdf svd.pdf unt.pdf och sen utför kommandot ls dn.pdf svd.pdf unt.pdf , så när ls börjar köra är den delen av jobbet redan utfört. I många fall spelar det ingen roll om man tänker fel på det sättet, men i vissa fall så har det betydelse och då blir man lätt förvirrad om man inte inser hur det i själva verket förhåller sig. När inga filer matchar jokeruttrycket så lämnas jokeruttrycket kvar som det var och skickas vidare till skalet. $ ls *.pdff ls: *.pdff: No such file or directory Här har användaren råkat skriva fel och då *.pdff inte matchade någonting så blev det verkligen ls *.pdff som utfördes, varpå ls klagade över att det inte fanns nån fil med namnet *.pdff. Här kan man också ha användning för kommandot echo. Eftersom det bara skriver tillbaka alla argument som man gett det kan vara praktiskt Här användes först kommandot cat för att vi- för att se hur skalet har expanderat argumenten. sa innehållet i skalskriptet lista-bilder.sh och sen kommandot bash för att utföra dessa rader i $ echo foo *zzz* bar ett nytt skal. 3.12 Expansion i skalet foo *zzz* bar $ echo hej *.txt hopp hej cheshire-cat.txt how-doth.txt hopp Det är alltså skalet som skickar ut indata till de olika kommandona och tar hand om deras utdata. (Här fanns det tydligen inga filnamn som matDessutom ändrar skalet de argument man skriver chade *zzz*, så det förblev oförändrat.) på kommandoraden innan den skickar vidare det till de olika kommandona. En sådan ändring är att ~ och ~hanvändarnamni expanderas till något längre. Det är alltså skalet som gör detta och när man skriver cp foo.txt ~ för att kopiera en fil till sin hemkatalog så får cp i själva verket en kommandorad i stil med cp foo.txt /home/stp15/ellen att utföra. (Det är inte bara skalet som gör sådana utbyten, utan många andra program gör det också, så det är därför det går att skriva filnamn med ~ t. ex. i Emacs.) Dessutom är det skalet som ser efter vad det finns för filer så att den kan expandera jokeruttryck med *, ? och []. När man ger ett kommando som 30 Inlupp 3: Mer om skalet Redovisning Uppgift 3.6 Ge ett kommando som tar fram den näst första raden i din saga. Skicka ett mail till Per med svar på frågorna. När du ska ge ett kommando så svara alltid också med vad det gav för resultat! (Den sista uppgiften är lite klurig. Fastnar du så Om du har fått mail angående uppgifter på förgå vidare med andra uppgifter tillsvidare.) ra labben så svara på det separat istället för att skriva ett mail om alltihop! Det underlättar mycket för min rättning om svar på olika inluppar ligFrån begabba till utströ ger i olika mail. Filen /local/kurs/ids/verb.txt innehåller en lista med svenska verb. I denna fil har de baklängessorterats, dvs. sorterats efter slutet på orden. (Det innebär att rimord tenderar att hamna Uppgift 3.1 Väljaren -n till head och tail har efter varann.) den långa varianten --lines. Hur ser ett komKopiera den till din kurskatalog från skalet. Ett mando ut som använder den långa varianten för sätt att använda kopieringskommandot är ju att att ta fram de 15 första raderna av stp.txt? ge ett sista argument som är den katalog som filer ska kopieras till. Använd det sättet, och kopiera Det var en gång . . . till aktuell katalog med en kort beteckning (ett tecken!) för aktuell katalog. Gå till kurskatalogen. Där ska bland annat din saga.txt från s. 22 finnas. Uppgift 3.7 Hur löd ditt kommando? Uppgift 3.2 Ge ett kommando som tar fram de Uppgift 3.8 Ge ett kommando för att räkna ratre första raderna av din saga. der och ord i den där filen. (Det ska ligga ett ord Om detta visar hela din saga har du inte följt per rad, så det borde vara lika många ord som rainstruktionerna riktigt på sidan 22, så gör om det der.) Långa väljare i så fall! Uppgift 3.3 Ge ett kommando som räknar hur många ord det finns i de tre första raderna av din saga. Uppgift 3.9 Ge ett kommando som talar om vilka verb där som innehåller »vv« (som t. ex. »avvisa«). Uppgift 3.10 Ge ett kommando som börjar som det i förra frågan och sen fortsätter med ett kommandorör så att du får fram hur många verb som innehåller »vv«. (Missa inte vad som står fetstilt under »Redovisning« ovan!) I uppgift 2.29 skapade du en fil saga40.txt Uppgift 3.11 Ge ett kortare kommando som som innehåller samma text som saga.txt, men gör samma sak som förra uppgiften genom att anomformatterad så att radlängden är max 40. vända en lämplig väljare till sökkommandot. Därmed behövs inget kommandorör. Uppgift 3.4 Ge ett kommando som räknar hur Uppgift 3.12 Ge ett kommando som listar vilmånga rader det är i saga40.txt. ka av de tio första verben i hela verb.txt som Uppgift 3.5 Om du inte hade den där filen innehåller bokstaven j. saga40.txt hur skulle du då (utan att skapa en sådan fil som mellanresultat) ta reda på hur Uppgift 3.13 Ge ett kommando som listar de många rader din saga.txt skulle få om den bröts första tio verben i verb.txt som innehåller bokstaven j. om till att få så korta rader? 31 INLUPP 3: MER OM SKALET Tycker du att de två föregående uppgifterna är likadana har du inte läst tillräckligt noga! Kommandona och deras resultat skiljer sig åt. Uppgift 3.14 Ge ett kommando som listar de verb som innehåller båda bokstäverna j och y. (I resultatet ska bland annat »djupfrysa« och »nyttja« finnas med.) Av-stav-ning Ge kommandot avstava -l sv Detta är ett exempel som avstavar sina argument med hjälp av svenska avstavningsregler. (Detta är inte ett standardprogram utan något som Per lagt upp för dessa uppgifter.) Väljaren -l (l som i language) tar ett argument (här »sv«) som anger vilket språk texten är på. (Använder man inte den väljaren antar programmet att texten är på engelska.) Språken anges enligt en internationell standard för språkförkortningar, varav några koder nämns i tabell 3.1 (men programmet klarar inte alla dessa språk). Uppgift 3.15 Vad gav det för resultat? Uppgift 3.16 Ge ett kommando som avstavar ordet »Weltschmerz« på tyska. Uppgift 3.17 Ta fram hjälptexten för kommandot avstava. Det står att det finns en lång version av väljare -l också. Gör om förra uppgiften men använd den långa versionen istället. Uppgift 3.18 Vad står det i hjälptexten att programmet gör om den inte får några texter som argument? Uppgift 3.19 Ge ett kommando som ger din saga.txt avstavad. Använd väljaren för att se till att rätt språk används! Uppgift 3.20 Ge ett kommando som visar avstavningar av alla verb i verb.txt som innehåller bokstaven z. Delstater I filen /local/kurs/ids/us-states.txt finns en lista över USA:s delstater tillsammans med datum då de ratifierade USA:s konstitution eller kom med i unionen.5 Kopiera den till din kurskatalog och titta på den i Emacs. Den är sorterad efter datumet. Tryck C-s (för sökning) och sen TAB för att söka efter TAB-tecken. Gå även fram och bak tecken för tecken (med <right> och <left> eller 5 Enligt 32 http://en.wikipedia.org/wiki/U.S._state. Tabell 3.1: Språkkoder enligt standarden ISO 639-1 för några språk med många talare i världen, Europa, Norden eller Sverige sq ar bn nb bs bg da en fi fr el hi is it ja yi zh xy ku albanska arabiska bengali bokmål bosniska bulgariska danska engelska finska franska grekiska hindi isländska italienska japanska jiddisch kinesiska kroatiska kurdiska nl se no nn fa pl pt ro ru sr so es sv cs tr de uk hu be nederländska nordsamiska norska nynorska persiska polska portugisiska rumänska ryska serbiska somaliska spanska svenska tjeckiska turkiska tyska ukrainska ungerska vitryska C-f och C-b ) så märker du också att det bara är ett tecken mellan datumet och namnet. Uppgift 3.21 Ge ett skalkommando som bara listar raderna för de delstater som kom med i USA på 1850-talet. Uppgift 3.22 Ge ett kommando som klipper ut bara alla delstaternas namn. Uppgift 3.23 Ge ett kommando som skriver ut alla delstater (utan datum) som har »New« med i sitt namn. Uppgift 3.24 Ge ett kommando som skriver ut alla delstater (utan datum) som har ett mellanrum med i sitt namn. Kommandot sort är ett filter som sorterar de rader det får in i alfabetisk ordning och skriver ut resultatet. Uppgift 3.25 Ge ett kommando som skriver ut bara deltstaternas namn, sorterade i alfabetisk ordning. Uppgift 3.26 Ge ett kommando som skriver ut de tretton ursprungliga delstaterna (dvs. de tretton första i listan), sorterade i alfabetisk ordning. Uppgift 3.27 Ge ett kommando som skriver ut vilken delstat som kommer sist i alfabetisk ordning. Skalskript Skalskript Öppna en ny fil saga.sh i din kurskatalog och skriv detta innehåll i den: echo Antal ord i min saga: wc -w saga.txt echo echo Sista raden i min saga: tail -n 1 saga.txt Utför sedan kommandona i den med bash saga.sh . Om det inte fungerar har du gjort nåt fel. Se över det föregående tills du får det att fungera. När du editerar denna fil i Emacs står det »Shell-script« i informationsraden i Emacs. Emacs vet alltså om att det är ett sådant du editerar och det finns en del särskilda funktioner för just detta. Det finns bland annat en särskild meny »Sh-Script« med ett kommando Sh-Script Set shell type . Använd det. Du får svara på en uppgift i minibufferten. Tryck bara retur för att få defaultvärdet. Uppgift 3.28 Vad tror du det var som fick Emacs att veta att det var ett skalskript du höll på att skriva? Uppgift 3.29 Kommandot lade till en speciell rad i början av din text. Hur lyder den? Uppgift 3.30 Vad är den till för? två till din kurskatalog. Titta på rummet.words i Emacs! (Interpunktion som ,.;:?! räknas här som egna ord med ordklassen »punkt« – kort för interpunktion.) Uppgift 3.33 Kolumnen med ordklass verkar hoppa lite och stå olika långt till höger för olika ord. Hur kommer det sig? Uppgift 3.34 Ge ett kommando för att spara en sorterad lista av rummet.words i en ny fil rummet. sorted. Uppgift 3.35 Skumma igenom filen för att se efter hur sorteringen har blivit. Är det nåt anmärkningsvärt med den? (Vi återkommer till olika slags sortering senare.) Uppgift 3.36 Ge ett kommando som bara plockar ut ordklasserna från rummet.words och sparar dessa sorterade i en fil rummet.ordklasser. (Det borde bli många rader efter varandra som är likadana där, t. ex. många rader som det bara står »subst« på.) För nästa uppgift behöver du en ny väljare till kommandot som du har räknat ord och annat med. Se på dess hjälptext! Uppgift 3.37 Ge ett kommando som talar om hur långt det längsta ordet i rummet.words är. (Bara själva ordet ska mätas, utan dess ordklassmarkör.) Uppgift 3.31 Kortkommandona för kommandona i menyn Sh-Script börjar nästan alla med samma prefixtangent. Vilken? Uppgift 3.38 Ge ett kommando som ger de tre första raderna i rummet.txt med avstavningar. Den tangenten används i Emacs som prefix för sånt som är speciellt för just den slags fil man editerar just nu. Om det inte vore ett skalskript så kanske samma tangenter hade betytt något annat. Gott och blandat Uppgift 3.32 Utöka detta skalskript så att det även skapar en fil saga-av.txt där din saga har avstavats. Eftersom avstavningen gör raderna längre så använd fmt efteråt för att få lagom långa rader igen. Uppgift 3.39 Om du nu utan att byta katalog vill lista innehållet i din kurskatalog i skalet, (det vill säga katalogen ett steg upp,) hur skriver du då? När ditt skalskript körs ska ingenting skrivas ut i terminfönstret. Det enda som ska hända är att den filen skapas med det angivna innehållet. Skriv cd alice för att gå ner till den underkatalog som du skapade i uppgift 1.6. Uppgift 3.40 Och vad ger du för kommando för att kopiera cheshire-cat.jpg där till din kurskatalog? (Gör detta!) Uppgift 3.41 Vilka av följande sökvägar är fullständiga, och vilka är relativa? a) /local/texts/jabberwocky Röda rummet b) bar.txt c) ~/korpus.txt Filen /local/kurs/ids/rummet.txt innehåller d) ~starback/exempel.txt början av August Strindbergs roman Röda rume) inte/mitt/bord met. Filen rummet.words i samma katalog innef) ~ellen håller samma text, men med ett ord per rad tillg) ../FILNAMN sammans med ordklassangivelse. Kopiera dessa 33 INLUPP 3: MER OM SKALET Uppgift 3.42 Hur många argument ges till kommandot i dessa exempel? Räkna inte med väljare och argument till väljare. a) sort korpus20.txt b) mv foo.txt bar.txt ~/Desktop c) echo I am the walrus. d) echo 'I am a donkey.' e) tail -n 3 Min fil.txt När du börjar komma in i att använda kommandorör så börjar du kanske skriva sånt som cat saga.txt | head -n 1 för att ta fram första raden i din saga. Men det är ju alldeles onödigt! Här behövs inget kommandorör. Uppgift 3.43 Hur skriver man istället som är kortare, vackrare och enklare? »GNOME Calculator« är ett program som man normalt skulle köra från menyerna, men kör det istället från kommandoraden. Programmet heter gnome-calculator. Observera att du inte får någon ny prompt i terminalen förrän du avslutar programmet (genom att ta bort dess fönster). Det är det normala i skalet att endast ett program i taget utförs. Skriv sen gnome-calculator --help för att få se en hjälptext där det står om en del väljare det har. Uppgift 3.44 Vad kan du ge för kommando för att starta en räknare där det står »x = 11147 ∗ 4711« i räknarfönstret från början? Uppgift 3.45 Vad ger det för svar i kalkylatorn när man trycker på retur? Uppgift 3.46 Hur kan du med ett skalkommando skapa en fil foo.txt i vilken det står »blahonga«? Filnamn som börjar med bindestreck Gå till katalogen lenngren som du skapat tidigare och skriv grep Den * för att visa vilka rader i filerna i denna katalog som innehåller »Den«. Uppgift 3.47 Vad gav det för resultat? Skapa (med Emacs) en fil som heter -i (två tecken) i samma katalog. Skriv »Den Den Den« i den. 34 Uppgift 3.48 Gör om samma kommando som i förra uppgiften. Visa ditt kommando och det resultat du fick. Uppgift 3.49 Hittade du den där raden »Den Den Den« som du nyss skrev? Varför blev det som det blev? Uppgift 3.50 Vad blev det för annan skillnad? Varför? Kapitel 4 Teckenrepresentation Temat i detta kapitel är teckenkodningar och lo- 4.2 Teckenkoder cales, men först kommer korta stödanteckningar När en vanlig text (plain text) lagras i en fil eller om tvåpotenser. ska föras över mellan datorer eller program måste en viss teckenkodning användas, dvs. ett sätt att ge varje tecken en numerisk kod. 4.1 Binärt Filer lagrar olika slags data som en sekvens av bytes, som kan ses som värden 0–255, så det enkDen minsta enheten information är en bit – något laste sättet att lagra text är att varje tecken får en som bara kan ha två värden. Av eller på, upp eller kod från 0 till 255. ner, svart eller vitt, 0 eller 1. För varje ny bit fördubblas antalet möjligheter. 4.3 21 = 2 22 = 2·2=4 3 2 = 2·2·2=8 24 = 2 · 2 · 2 · 2 = 16 5 = 2 · 2 · 2 · 2 · 2 = 32 6 = 2 · 2 · 2 · 2 · 2 · 2 = 64 7 2 = 2 · 2 · 2 · 2 · 2 · 2 · 2 = 128 28 = 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 256 9 2 = 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 512 10 = 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 · 2 = 1024 2 2 2 och så fortsätter det 2 048, 4 192, 8 192, 16 384, 32 768, 65 536, osv. Så med t. ex. fyra bitar kan ett av 16 olika värden lagras. Dessa tal dyker upp i många sammanhang. Det finns t. ex. 8 bitar i en byte. Det finns 256 möjliga värden på en byte. Med kilo menas i datorsammanhang oftast inte exakt tusen, utan 1 024, liksom Mega oftast inte betyder exakt en miljon utan 220 som är lite mer än en miljon. Att skriva tal binärt är att skriva dem med bara två siffror, 0 och 1. T. ex. kan 256 olika tal (0255) skrivas med åtta binära siffror. Annat som förekommer är oktalt (åtta olika siffror, 0–7) och hexadecimalt (sexton olika siffror, 0–9 och A–F). (En oktal siffra innehåller lika mycket information som tre bitar. En hexadecimal siffra innehåller lika mycket information som fyra bitar.) Att ange teckenkodning Det finns många olika teckenkodningar, vilket kan ställa till problem. På samma system (i samma operativsystem; i samma program) använder man oftast samma teckenkodning genomgående och råkar inte ut för några problem. Trycker man på en tangent som det står »Å« på får man naturligt nog ett tecken »Å« på skärmen och sparar man det i en fil så kommer samma tecken fram nästa gång man tittar på det. Det besvärliga kommer när man ska föra över data mellan system som använder olika teckenkodningar. Då finns det risk för att den kod man skickar iväg som betyder »Å« i ens egen system betyder nåt annat på det andra systemet. Det är därför viktigt a) att man använder en teckenkodning som mottagande system känner till, och b) att man talar om vilken teckenkodning man har använt. Då får mottagaren(s system) möjlighet att tolka informationen rätt. Oftast fungerar sånt automatiskt. I figur 4.1 ges ett exempel på hur det kan bli annars. Detta görs med standardiserade beteckningar för olika teckenkodningar, och det är organisationen IANA (Internet Assigned Numbers Authority) som håller i dessa beteckningar, precis som de håller i flera andra standarder som används på Internet. I flera sammanhang när text skickas över nätet, t. ex. för datorpost och över webben, så används dessa standardiserade beteckningar, så istället för att bara texten skickas över så skickas det även 35 4. TECKENREPRESENTATION Varf÷r blir det sÕ hõr? s å [SPC] h ä r 115 229 32 104 228 114 s Õ [SPC] h õ r Figur 4.1: Exempel på fel. En text är skriven med vissa koder, men tolkas utifrån andra koder. I detta fall är det Latin-1 som tolkats som CP850. med en etikett som talar om vad det är för slags text så att mottagaren vet hur det ska tolkas. Normalt ordnar sig sådant automatiskt, men ni kan ändå då och då stöta på tillfällen när ni måste kunna hantera detta själva. Även filnamn med åäö eller andra »konstiga« tecken kan orsaka problem när man skickar dem mellan datorer om de inte använder samma teckenkodning. 4.4 ASCII En traditionell teckenkodning med stor genomslagskraft är ASCII (American Standard Code for Information Interchange). Med beteckningar från IANA kan den bland annat kallas ASCII eller US-ASCII. (Det finns ofta flera IANA-namn på samma teckenkodning.) Den omfattar koder från 0 till 127 och visas i figur 4.2. ASCII är en amerikansk och internationell standard från 1960-talet (dagens version är i praktiken ekvivalent med den från 1968) som snabbt antogs av de flesta och som fortfarande används ofta. 4.5 Kontrolltecken och nyrad • 9, [HT] = Horizontal tabulation: »advances the active position to the next predetermined character position on the same line« (= TAB) • 10, [LF] = Line feed: »advances the active position to the same character position of the next line« • 13, [CR] = Carriage return: »moves the active position to the first character position on the same line« Med beskrivningarna ovan behövs två »tecken« för att en text ska fortsätta på början av nästa rad: [CR] och [LF]. [CR] (vagnretur) för att börja skriva på början av raden och [LF] (radframmatning) för att gå fram till nästa rad. De brukar ges i just den ordningen [CR] + [LF] och kombinationen kallas ibland tillsammans för CRLF. I Unix används dock bara ett tecken, [LF], för att börja på en ny rad, så man har tolkat om detta teckens betydelse. Det brukar då kallas för newline och betecknas ibland som \n. MS Windows använder däremot det traditionella [CR]+[LF] och det brukar även krävas vid kommunikation mellan datorer på nätet.1 Dessutom är det vanligt i en del sammanhang att en sådan kod som ursprungligen används för att beteckna ny rad (oavsett vilken variant man använder) istället används för att indikera nytt stycke medan man låter rader brytas automatiskt. Dessa skillnader gör att vanliga textfiler kan skilja sig åt mellan olika system även om båda använder ASCII. Kontrolltecknet [HT] ovan kallas oftare för TAB och har en egen tangent på tangentbordet. (Se avsnitt 3.7.) Ett annat kontrolltecken som har en egen tangent är [ESC] (Escape, tecken 27) som används till många olika saker. I övrigt kan man skicka kontrolltecken från terminalen genom att använda Ctrl-tangenten. Med Ctrl-A skickar man tecken 1, Ctrl-B ger tecken 2, osv., och i en del sammanhang betecknas dessa tecken med ^A, ^B osv. Eftersom J är den tionde bokstaven är alltså ^J tecken 10, dvs. [LF] (line feed, newline). Om man vill lägga in ett kontrolltecken i en fil i Emacs räcker det inte med att bara trycka så. Om man trycker t. ex. C-a så betyder det istället att gå till början av raden, osv. Då får man lov att använda kommandot C-q (med q som i »quote«) före tecknet, så med C-q C-a lägger man in kontrolltecken nummer 1, osv. Även i en ren textfil finns det ofta mer än bara grafiska tecken med utseenden som hämtas från en visst font. De består ju ofta av flera rader, och då måste även nyrad representeras på något sätt. Sådana och andra »tecken« som inte motsvarar något grafiskt tecken som kan skrivas ut på papper eller på en skärm kallas för kontrolltecken. De har istället någon annan betydelse när en text lagras i en fil, när tecken ska skickas från en terminal till en dator eller från en dator till en terminal eller liknande. I ASCII är tecken 0–31 samt 127 kontrolltecken. 1 I Mac-världen användes förr istället endast [ CR ] för denNågra har effekten att flytta på markören. Här na funktion, men eftersom Mac OS X är en Unix så använder moderna Mac-datorer också [LF]. är de viktigaste: 36 4.6. Latin-1 ! 1 65 A 81 Q 97 a 113 q " 2 66 B 82 R 98 b 114 r # 3 67 C 83 S 99 c 115 s $ 4 68 D 84 T 100 d 116 t % 5 69 E 85 U 101 e 117 u & 6 70 F 86 V 102 f 118 v ' 7 71 G 87 W 103 g 119 w ( 8 72 H 88 X 104 h 120 x ) 9 73 I 89 Y 105 i 121 y * : 74 J 90 Z 106 j 122 z + ; 75 K 91 [ 107 k 123 { , < 76 L 92 & 108 l 124 | = 77 M 93 ] 109 m 125 } . > 78 N 94 ^ 110 n 126 ~ / ? 79 O 95 _ 111 o 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 0 64 @ 80 P 96 ‘ 112 p 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 48 127 DEL Figur 4.2: ASCII-tecken 32–127. Kod 32 är mellanslag. Kod 127 är inte ett egentligt tecken utan »kontrolltecknet« Delete. Även kod 0 till 31 är olika kontrolltecken som inte visas här. ¡ ś 193 Á 209 Ñ 225 á 241 ñ ¢ š 194  210 Ò 226 â 242 ò £ ş 195 à 211 Ó 227 ã 243 ó ¤ ´ 196 Ä 212 Ô 228 ä 244 ô ¥ ţ 197 Å 213 Õ 229 å 245 õ ¦ ¶ 198 Æ 214 Ö 230 æ 246 ö § · 199 Ç 215 Ö 231 ç 247 ö ¨ ¸ 200 È 216 Ø 232 è 248 ø © ź 201 É 217 Ù 233 é 249 ù ª º 202 Ê 218 Ú 234 ê 250 ú « » 203 Ë 219 Û 235 ë 251 û ½ 205 Í 221 Ý 237 í 253 ý ® ¾ 206 Î 222 Þ 238 î 254 þ ¯ ¿ 207 Ï 223 ß 239 ï 255 ÿ 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 ° 192 À 208 Ð 224 à 240 ð 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 176 ň ¼ 204 Ì 220 Ü 236 ì 252 ü Figur 4.3: Tecken 160–255 i Latin-1. Tecken 160 är nbsp = non-breaking space. Tecken 173 är shy = soft hyphen – en möjlig avstavningspunkt där »-« ska visas om det blir avstavning där, men som annars inte syns. Tecken 128–159 är kontrolltecken, och visas inte här. 4.6 Latin-1 Standarden utökas eftersom både med gamla tecken och helt nya tecken. Nuvarande versionen I ASCII finns bara ungefär de tecken som finns på Unicode 7.0 släpptes t. ex. i juni i år, och innehålen amerikansk skrivmaskin och alla tecken har ko- ler 2 834 nya tecken jämfört med förra versionen. der från 0–127. Bland de nya tecknen finns bland annat Linear A Eftersom det kan finnas värden 0–255 i varje och två nya valutasymboler för rubel och manat. Unicode har nu totalt över 100 000 tecken och byte så finns det plats för dubbelt så många olika det finns plats för drygt en miljon tecken. tecken när man lagrar text i en fil. Latin-1 är en Kod 0–255 är som för Latin-1 (så 0–127 är som utökning där man även använder koderna 128– 255 till mer tecken. Den är tänkt att innehålla så- för ASCII). dana tecken som behövs för västeuropeiska språk Förutom den numeriska koden innehåller Unisom skrivs med latinskt alfabet. De tecken som code även bland annat lagts till den visas i figur 4.3 och där ingår t. ex. • Ett namn för varje tecken (som LATIN CAPIsvenska åäö. TAL LETTER A WITH RING ABOVE , ARABIC QUESTION MARK och HEXAGRAM FOR DIF FICULTY AT THE BEGINNING ) • Information om vad för slags tecken de oli4.7 ISO 10646 = UCS ≈ Unicode ka tecknen är (alfabetiska, siffror, interpunktion, . . . ) Men det finns ju fler alfabeten, som det ryska och • Information om vilka tecken som skrivs från det arabiska. Och andra skriftsystem med stavelhöger till vänster och vilka som skrivs från setecken och ideografiska tecken. Numer har tecvänster till höger kenkodningen Unicode tagit över allt mer, såväl • Information om vilka tecken som motsvarar under Unix som Microsoft Windows och annars. varandra som små och stora bokstäver Med det är det tänkt att man ska kunna skriva alIbland betecknas tecknen med »U+« och teckla naturliga språk (levande och döda), samt dessutom en stor mängd matematiska och andra sym- nets hexadecimala kod. Tecknet ≤, med namnet LESS - THAN OR EQUAL TO , är t. ex. tecken numboler. Egentligen finns det två olika projekt: Det ena mer åttatusen åttahundra fyra, men oftare beteckär en standard från standardiseringsorganisatio- nar man det hexadecimalt som U+2264 istället nen ISO: UCS = Universal Character Set, eller för 8804. ISO 10646. Det andra är Unicode från ett konsortium av datorföretag. De båda standarderna 4.7.1 UTF-8 har dock anpassat sig till varandra, så i de flesta bemärkelser är det numer samma sak och det är Eftersom det finns långt fler än 256 tecken krävs Unicode som det oftast talas om. det flera bytes per tecken. Detta är ett skäl till att 37 4. TECKENREPRESENTATION H text: namn: LATIN CAPITAL LETTER H a LATIN SMALL LETTER A l l LATIN SMALL LETTER L LATIN SMALL LETTER L unicode: 72 97 108 108 utf8: 72 97 108 108 å ! EXCLA MATION MARK LATIN SMALL LETTER A WITH RING ABOVE 229 195 165 , [SPC] SPACE WHITE SMILING FACE 33 32 9786 33 32 226 152 186 Figur 4.4: Den korta texten »Hallå! ,« lagras med UTF-8. Olika tecken tar olika mycket plats att lagra. Varför blir det sÃ¥ här? s å [SPC] h ä r unicode: 115 229 32 104 228 114 utf8: 115 195 182 32 104 195 165 114 latin-1: 115 195 182 32 104 195 165 114 s à ¥ [SPC] h à ¤ r text: text: Figur 4.5: Exempel på teckenkodningsfel där en text skriven med UTF-8 tolkas som om det vore Latin-1. Unicode är besvärligare att hantera än t. ex. ASCII och Latin-1. För att spara utrymme så lagrar man ofta Unicode-text på ett sådant sätt så att olika tecken tar olika mycket plats att lagra. Det finns flera sätt att göra detta, varav ett heter UTF-8. Där tar tecken mindre plats att lagra ju lägre kod de har: • • • • Kod 0–127: 1 byte (ASCII) Kod 128–2 047: 2 bytes Kod 2 048–65 535: 3 bytes Kod 65 536–1 114 111: 4 bytes Om en fil bara innehåller ASCII-tecken (kod 0–127) så blir det alltså precis likadant med US-ASCII som med UTF-8. Kommunikation över Internet använder allt oftare UTF-8. I december 2007 blev UTF-8 det vanligaste sättet att koda texter på webben, och i början av 2010 hade det kommit upp till hälften av alla webbsidor, enligt interna data från Google. I figur 4.4 ges ett exempel på hur en kort text (åtta tecken) kan lagras där olika tecken tar upp olika många bytes. Det som tar mest plats tar upp 38 tre bytes. Det är nästan bara väldigt ovanliga ideografiska tecken och utdöda skriftsystem som har så höga koder att de behöver fyra bytes med UTF8. Om man ser text som ser ut »sÃ¥ här« istället för »så här« så är det på grund av trassel med teckenkodning. Så ser UTF-8-text ut om den tolkas som Latin-1. Se figur 4.5! Observera att bokstäverna a–z ser likadana ut (de ingår ju i ASCII) medan åäö lagras i två bytes var med UTF-8 och dessa två bytes har här felaktigt tolkats som något helt annat. 4.8 Övriga teckenkodningar Innan Unicode slog igenom användes en mängd olika teckenkodningar i olika sammanhang. Det fanns vissa som bara användes för att hantera rysk text, vissa bara för japansk text, osv. Än idag används inte Unicode genomgående, så ni kommer då och då behöva hantera annat. Nästan alla bygger på ASCII, så man kan vara rätt säker på att »A« är kodat som 65, »B« som 66 osv. i nästan alla sammanhang, trots att det- 4.9. Vad är olika tecken? ta egentligen är rätt godtyckligt och hade kunnat vara på något annat sätt. Här tas bara några av de vanligare upp. figur 4.6 Figur 4.6: Figur 4.6 4.8.1 ISO 8859-* Latin-1 heter egentligen ISO 8859-1 och är bara en av en hel serie standarder från ISO som heter ISO 8859-1, ISO 8859-2, . . . ISO 8859-162 . Hos IANA finns dessa registrerade som ISO-8859-1, ISO-8859-2 osv. De är alla utökningar av ASCII som använder koderna 128–255 till ytterligare tecken. Så som ISO 8859-1 är tänkt för västeuropeiska språk har de övriga andra inriktningar. T. ex. är ISO 8859-3 till för sydeuropeiska språk och ISO 8859-6 för arabiskt alfabet. Att ISO 8859-1 kallas för Latin-1 är för att det är den första av dem som är till för språk med latinskt alfabet. ALPHA ) trots att de (beroende på typsnitt) kan se likadana ut. (Att de är olika märks om inte annat på motsvarande gemena bokstäver a och α.) Samma tecken kan också se olika ut i olika positioner i texten. Ett f följt av ett i blir t. ex. ofta en sammanhängande ligatur fi (se uppförstoringen i figur 4.6), men det räknas ändå som två olika tecken. Många arabiska bokstäver har olika former beroende på om de kommer i början, mitten eller slutet av ett ord. Termen glyf används ibland för ett specifikt grafiskt utseende, till skillnad från den mer abstrakta termen tecken. 4.8.2 4.9.1 Microsoft Windows Microsoft har använt en del egna utökningar av ISO-8859-familjen. Den viktigaste av dessa är windows-1252 som bygger på Latin-1. Den innehåller alla skrivtecken som Latin-1 gör, men ersätter en del av kontrolltecknen 128– 159 med ytterligare skrivbara tecken, t. ex. C, †, h, ž och Ÿ, som inte finns med i Latin-1. Den kallas ibland även för WinLatin1, men windows-1252 är det enda namn för denna teckenkodning som Microsoft har registrerat hos IANA . I MS Windows-världen kallas denna teckenkodning märkligt nog ibland för »ANSI« (såsom den amerikanska standardiseringsorganisationen American National Standards Institute), trots att det inte är någon ANSI-standard! Eftersom den liknar Latin-1 så mycket finns det risk för sammanblandning. Ibland sprids filer från MS Windows-världen med felaktiga etiketter som påstår att texterna är skrivna med Latin-1 fast det egentligen är windows-1252 vilket kan ställa till med problem. 4.9 Vad är olika tecken? Det är inte i första hand det grafiska utseendet som avgör vad som ska räknas som varianter av samma tecken eller som ska räknas som olika tecken. T. ex. är a och a samma tecken (I Unicode LATIN SMALL LETTER A , tecken 97) trots att de ser olika ut. Däremot är svenska A och grekiska A olika tecken (tecken 65: LATIN CAPITAL LETTER A respektive tecken 913: GREEK CAPITAL LETTER 2 Utom Samma tecken i ASCII Med Unicode görs minst lika mycket skillnad på olika tecken som görs när man sätter text i tryck. Men i ASCII finns inte lika många särskillnader. Där finns t. ex. bara ett tecken - trots att man i tryck skiljer på olika långa sådana streck t. ex. i abc-bok (kortare bindestreck) och kl. 13–15 (längre intervalltecken). Ett annat exempel är citattecken. På t. ex. engelska så används olika citattecken före och efter citat. Det kan se ut “like this” eller ‘like this’. Hur skillnaden ser ut skiljer sig åt i olika typsnitt. I figur 4.7 finns ett par rätt olika exempel. På skrivmaskiner nöjde man sig dock med raka neutrala citattecken som skulle gå lika bra att använda både före och efter, och så är det i ASCII och t. ex. Latin-1 också: "like this" eller 'like this'. (Citattecknen är tecken 34 och 39 i figur 4.2.) I ASCII finns det dock även grav accent (tecken nummer 96 i figuren). Ibland kan man stöta på text som använder den som citatstart så det är skrivet `like this'. Detta ser rätt skevt ut, och är inte att rekommendera, men förr fanns det en hel del fonter där tecknet ' inte var rakt, utan vinklat, så då såg det helt OK ut. “quote” “quote” Figur 4.7: Hur tecknen för startcitat och slutcitat skiljer sig åt skiljer sig i olika typsnitt. De två exemplen här är Helvetica och Palatino. ISO 8859-12 som inte finns. 39 4. TECKENREPRESENTATION En apostrof, som i »don’t« är samma tecken som ett slutcitattecken. I Unicode beskrivs tecknet som RIGHT SINGLE QUOTATION MARK, men det används även för apostrof. På svenska kan för övrigt detta tecken användas både före och efter citat: ’så här’. Programspråk använder sällan tecken utanför ASCII i speciella betydelser, så källkod till program innehåller vanligtvis bara ASCII utom kanske i textsträngar och kommentarer. 4.10 Språkinställningar En fil med vanlig text har i allmänhet ingen information i sig om vilken teckenkodning den använder. En fil med två bytes, 241 och 214, kanske är en Latin1-fil med texten »ñÖ«, eller kanske en ISO-8859-7-fil med de grekiska bokstäverna »ρϕ« eller kanske en ISO-8859-5-fil med de kyrilliska bokstäverna »«3 eller något helt annat! Program som gör något med textfiler måste ofta veta vilken teckenkodning de är lagrade med. Om sort ska kunna sortera en fil med en sådan rad så spelar det ju t. ex. roll om första tecknet där är ñ vilket antagligen ska sorteras likadant som n. Dessutom måste de ibland veta vad det är för språk för att rätt kunna behandla en text. Dessa inställningar kallas för ens locale och man har standardinställningar för detta som gäller om man inte säger till om annat. Dessa inställningar kan även ändra vilket språk program ska använda i sin output ifall programmet har översatts till flera olika språk. Programmet läser av användarens språkinställningar och ändrar beteende utifrån det. Tabell 4.1: Koder enligt ISO 3166-1 för några av världens och Europas största länder, samt de skandinaviska länderna AZ BD BE BR BG CD DK EG ET PH FI FR GR IN ID IR IS IT JP CN MX NL Azerbajdzjan Bangladesh Belgien Brasilien Bulgarien Kongo-Kinshasa Danmark Egypten Etiopien Filippinerna Finland Frankrike Grekland Indien Indonesien Iran Island Italien Japan Kina Mexiko Nederländerna NG NO PK PL PT RO RU CH RS ES GB SE TH CZ TR DE US UA HU VN BY AT Nigeria Norge Pakistan Polen Portugal Rumänien Ryssland Schweitz Serbien Spanien Storbritannien Sverige Thailand Tjeckien Turkiet Tyskland USA Ukraina Ungern Vietnam Vitryssland Österrike .se är Sverige osv.4 I tabell 4.1 återges en del av landskoderna. Dessa standarder är reglerade av den internationella standardiseringsorganisationen ISO. Både språk och land anges alltså. Några exempel: • sv_SE : Svenska i Sverige • sv_FI : Finlandssvenska • en_GB : Brittisk engelska • en_ZA : Sydafrikansk engelska 4.10.1 Språkinställning i Gnome • es_ES : Spanska i Spanien • es_AR : Spanska i Argentina Om du normalt vill att datorn ska prata svenska • fr_CA : Franska i Kanada (eller något annat språk) med dig så kan du stäl• zh_CN : Kinesiska i Kina la om språk från inloggningsrutan innan du loggar • zh_TW : Kinesiska i Taiwan in. (Du får en fråga om det bara är under just denObservera att språk och land inte nödvändigtna session du vill använda detta språk eller om du vis har samma tvåbokstavsförkortning när orden vill ändra så att detta blir det normala för dig.) är liknande. T. ex. har danska språket koden »da« och Danmark har »DK«. Till detta lägger man en punkt och en tecken4.10.2 Hur en locale ser ut kodning, t. ex. .iso8859-1 eller .utf8, så en fullEn angivelse av locale kan se ut i stil med ständig locale kan se ut som sv_SE.utf8. (Det pt_BR.iso8859-1 vilket betyder brasiliansk por- finns även locales som har andra slags namn.) I många fall spelar det ingen roll vilket land tugisiska kodat enligt Latin-1. man anger. Det är nog t. ex. knappast många proFörst kommer en beteckningen för vilket språk gram som beter sig olika om man har talat om att det är. I förra kapitlet, på sidan 32, finns en lista man vill ha rikssvenskt eller finlandssvenskt beöver några av dessa språk. Till detta fogas även vilteende. Det betyder inte att man kan sätta ihop ket land det gäller. Landskoderna kan man t. ex. känna igen från toppdomänerna på Internet där 4 3 Vilket 40 betyder igelkott på ryska! I det sammanhanget används dock inte förkortningen GB för Great Britain, utan .uk för United Kingdom, och .us används inte så mycket. 4.11. Olika teckenkodningar i Emacs lands- och språkbeteckningar hur som helst i en locale. Med kommandot locale -a listas alla giltiga locales. istället för »total«, utan det räcker med att en gång för alla tala om vilket språk du ha. Ett viktigt undantag är sortering. Du bör tänka på hur sorteringar sker och veta hur du kan ställa om LANG för att få olika sorteringar, inklusive den 4.10.3 Att sätta om locale temporärt rent »datoriska« med LANG=C som inte tar hänsyn Med LANG=hlocalei hkommandoi kan man utföra till något särskilt språks sorteringsregler. ett kommando med en annan locale än sin norDet gäller förstås också att sätta teckenkodmala. I exemplen i figur 4.8 kan man se hur det ningen rätt! Om en fil är lagrad i Latin-1 betypåverkar både vanlig output och felmeddelanden. der det bl. a. att koden 224 där betyder à och att Ändrar man sin normala locale före inloggning koden 227 betyder ã. (Se figur 4.3!) Om dessa kommer det alltså inte bara att påverka det gra- tecken ska sorteras likadant så måste sort till att fiska gränssnittet, utan även vad skalkommandon börja med veta teckenkodningen. Annars har den skriver ut. ingen anledning att behandla 224 och 227 likadant. 4.10.4 Sortering Hur text ska sorteras är språkspecifikt. På svenska sorterar vi åäö i slutet av alfabetet, medan t. ex. tyskarna som också använder ä och ö sorterar dessa som a och o. I uppgift 3.35 sorterade du svenska ord men med engelska språkinställningar fick du en sortering där åäö sorteras som aao i stil med hur vi sorterar tecken som éèêë likadant som vanligt e. Genom att sätta om LANG ändras dock även hur sort sorterar. Här sorteras samma rader två gånger, först på svenska och sedan på engelska: $ LANG=sv_SE.utf8 sort /tmp/fil citron zebra åsna äpple $ LANG=en_US.utf8 sort /tmp/fil äpple åsna citron zebra Sorteringsreglerna för en del språk kan vara rätt komplicerade. Ibland vill man sortera bara för att föra ihop likadana rader, och då är det onödigt att använda så komplicerade sorteringsregler som naturliga språk ofta har. Då kan man använda en särskild locale »C« vilket ger enklast möjliga sortering. Raderna jämförs bara byte för byte enligt de numeriska koderna. (Det innebär t. ex. att stora och små bokstäver sorteras olika.) Om det är en stor fil kan man märka att en sådan enklare sortering kan gå mycket snabbare. 4.10.5 När använda detta? I de flesta fall kommer du inte behöva bry dig om dessa språkinställningar. Du kommer knappast ha nån nytta av att köra wc på nederländska en specifik gång så att det står »totaal« i summeringsraden 4.10.6 Hur ett skalkommando ser ut Med denna nya ingrediens i skalkommandona är vår nuvarande sanning om hur de ser ut så här: Ett helt kommandorör består av en mängd kommandon avskilda av lodstreck (|). Det första kommandot kan följas av <hfilnamni och det sista kommandot kan följas av >hfilnamni. Varje individuellt kommando i ett sådant kommandorör kan enligt tidigare se ut som hkommandordi hväljarei hargumenti, men dessutom kan det alltså tillkomma LANG=hnåntingi i början. Detta hör då bara till just det kommandot och inte till ett helt kommandorör. Om man i ett längre kommandorör vill ha en sortering med t. ex. locale C blir det alltså ... | LANG=C sort | ... och det är då bara sort som körs med annan locale än den normala. Kommandon tidigare och senare i kommandoröret påverkas inte. 4.11 Olika teckenkodningar i Emacs Emacs kan läsa och skriva filer med flera olika teckenkodningar. Ofta kan den gissa rätt på vilken teckenkodning en viss fil är skriven med. Alla buffertar i Emacs får innehålla vilka tecken som helst som Emacs kan hantera. Det är först när man försöker spara en fil som det krävs att alla tecken i bufferten finns med i den teckenkodning som man ska spara filen med. Om det inte är så talar Emacs om detta och låter en välja en annan teckenkodning. Man kan också tala om explicit vilken teckenkodning man vill använda innan man sparar genom att använda Options Multilingual Environment Set Coding Systems For Saving This Buffer . Till vänster i informationsraden anger Emacs vilken teckenkodning som i första hand ska användas när en viss buffert sparas till fil (1 = ISO8859-1, U = Unicode, . . . ). 41 4. TECKENREPRESENTATION $ ls xx ls: cannot access xx: No such file or directory $ LANG=fr_FR.utf8 ls xx ls: impossible d'accéder à xx: Aucun fichier ou dossier de ce type $ date Thu Sep 13 12:45:04 CEST 2012 $ LANG=es_ES.utf8 date jue sep 13 12:45:13 CEST 2012 $ LANG=fi_FI.utf8 wc *.txt 4552 35715 235593 ivt2-svenska.txt 40 317 2106 rummet.txt 3594 26461 148488 wonderland.txt 8186 62493 386187 yhteensä Figur 4.8: Några exempel på hur olika kommandon ger olika texter ifrån sig beroende på vilken locale som gäller. (I det sista exemplet märks skillnaden bara på »yhteensä« istället för »total«.) I samma meny finns även besläktade kommandon, t. ex. för att tala om uttryckligen vilken teckenkodning en fil har ifall Emacs gissar fel. 4.12 Att konvertera mellan teckenkodningar Ett program som konverterar mellan teckenkodningar är iconv. Det kan användas som iconv -f latin1 -t utf-8 foo.txt för att konvertera filen foo.txt från Latin-1 till UTF8 och skriva ut resultatet till standard output. Om man utelämnar argumentet tas input istället från standard input. Man kan ange namn på teckenkodningarna på lite olika sätt. Istället för »latin1« kan man skriva t. ex. »iso-8859-1« eller »iso8859-1«. Default, dvs. vad som händer om man inte säger till om något annat, är att ens normala teckenkodning (enligt ens locale) används, så om man inte använder väljaren -f omvandlar iconv från ens vanliga teckenkodning, och om man inte använder väljaren -t omvandlar iconv till ens vanliga teckenkodning. Ett annat sätt att konvertera är att öppna filen i Emacs och så spara den igen efter att man ställt om teckenkodning. 4.13 Att skriva tecken i Emacs 4.13.1 C-x 8 I synnerhet finns C-x 8 RET med vilket man kan skriva vilka tecken som helst genom att ange deras Unicode-namn. Riktigt alla tecken finns inte i fonten som Emacs använder. Okända tecken visas som rutor med hexadecimala koder i. 4.13.2 Inputmetoder Om man vill skriva en hel text med något annat skriftsystem, som t. ex. ryska eller kinesiska tecken, så kan man använda en särskild inputmetod. Inputmetoden definierar vilka tecken som genereras när man trycker på olika tangenter. Funktionen Select Input Method finns i menyn Options Multilingual environment och där finner man även ett kommando för att beskriva en viss inputmetod (C-h I). Det finns olika slags inputmetoder. T. ex.: • Prefix- och postfixmetoder där man framförallt kan skriva bokstäver med accenter genom att skriva något särskilt före respektive efter bokstaven. Inputmetoden german-prefix gör t. ex. så att "A genererar Ä men även så att "s genererar ß. • Tangentbordslayouter. Om man t. ex. kan layouten på ett vanligt ryskt tangentbord, kan man använda inputmetoden cyrillic-jcuken för att tangenterna ska generera det tecken som tangenten på motsvarande position ger på ett ryskt tangentbord. • Translitterering. Med cyrillic-translit trycker man t. ex. på tangenterna »Shostakovich« för att skriva »Xostakoviq«.5 • För att skriva ideogram, t. ex. kinesiska, finns det dels inputmetoder där man först anger ordets fonetik, dels sådana där man först Om du behöver skriva in tecken som du inte hittar på tangentbordet så finns det flera Emacskommandon som börjar med prefixet C-x 8 och följs av ett eller flera tecken. Med C-x 8 / O kan 5 Detta följer en engelsk translitterering. På svenska skulle man t. ex. skriva Ø och med C-x 8 L kan man man oftast skriva »Sjostakovitj«, och i vetenskapliga sammanhang translittererar man »Šostakovič«. skriva £. 42 4.14. Hos oss anger några av delarna i det grafiska tecknet. I båda fallen finns det i allmänhet flera möjliga tecken som kan passa in. Man får upp en lista över sådana från vilken man får välja. 4.14 Hos oss På våra GNU/Linux-datorer använder vi en_US.UTF-8 som normal locale, dvs. amerikansk engelska kodad med UTF-8. 43 Inlupp 4: Teckenkodningar Redovisning som sistaargument till cp för att kopiera den till aktuell katalog.) När ett skalkommando efterfrågas ska du ge evenÖppna nu din kopia av filen i Emacs. Emacs tuell output från det kommandot också. känner igen vad det är för teckenkodning och viGör först cd introduktion-till-datateknik sar därför alla bokstäver rätt. och ha sen den katalogen som aktuell katalog vid alla skalkommandon du ger i denna labb! Uppgift 4.4 Vad är det för teckenkodning och Skicka svar i mail till Per. hur kan du se i Emacs att det är det? Tecken och bytes Härnäst gör du Options Multilingual Environment (eller använder motsvarande kortkommando C-x RET f) för Hittills har du bara räknat ord och rader med wc, att ange vilken teckenkodning du vill att denna fil men det kommandot kan även räkna tecken. Välska ha och svarar utf-8. Spara filen. jaren -c har traditionellt använts till detta, men Du har nu omvandlat den filen till UTF-8. (Koleftersom den funnits med sedan urminnes tider la för säkerhets skull med cat i terminalen också.) så räknar den helt enkelt antal bytes, vilket var Öppna /local/kurs/ids/rysk.txt i Emacs. samma sak då. Som man kan gissa av namnet så innehåller den en text på ryska med kyrillisk skrift. Emacs gissar Uppgift 4.1 Ge ett kommando för att räkna andock fel på vad det är för kodning av den filen så tal bytes i filen konto.txt som ligger i din hemtecknen ser inte alls ryska ut. katalog. I ett sånt här läge finns det ett särskilt kommando för att genast öppna om samma fil men då tala (Missa nu inte vad som står om aktuell katalog i om vad det är för teckenkodning i den. Sök upp reglerna under Redovisning ovan! Du ska inte stå det kommandot i Emacs-menyerna i samma mei den katalog där den filen ligger, men ändå skriva ny som nyss. en korrekt relativ sökväg.) Använd det kommandot för att öppna om denMed nyare kodningar som UTF-8 kan antana fil. Ange den teckenkodning i ISO 8859-serien let bytes och tecken skilja, så i operativsystemet som är till för kyrillisk skrift. Sök upp information GNU har wc fått en ny väljare som förstår sig på på nätet om vilken teckenkodning det är. sånt och verkligen räknar tecken (characters). Se efter med wc --help vad den väljaren heUppgift 4.5 Vad heter den teckenkodningen ter. och var hittade du information om den? Set Coding Systems For Saving This Buffer Uppgift 4.2 Ge ett kommando som räknar antal tecken i den där filen konto.txt. Uppgift 4.6 Hur visas den teckenkodningen i informationsraden i Emacs? Uppgift 4.3 Hur stor skillnad blev det i bytes och tecken? Varför just så stor? Vad är det det finns så många av? Uppgift 4.7 Sök upp första ordet i den filen i Google. Vad heter denna figur på svenska? (Du kan t. ex. använda dig av Wikipedia, där det i vänsterspalten finns länkar till motsvarande sidor på andra språk. Teckenkodningar i Emacs Det finns en textfil i katalogen ~ellen/ fotografier. Gör cat på den i skalet. (Använd komplettering för att se vad filen heter.) Några tecken kommer inte att visas rätt, eftersom den filen inte är kodad enligt UTF-8. Kopiera den filen till din kurskatalog. (Använd ».« 44 Öppna härnäst filen /local/kurs/ids/small. txt. Här är det flera tecken som inte visas som det var tänkt. Det står nånting om latin-1 i texten. Normalt så har du sett att Emacs känner igen sånt av sig självt, men kanske inte i detta fall? Öppna om filen som en latin-1-fil istället. Inputmetoder i Emacs Uppgift 4.8 Hur gjorde du det? Det torde bli klart läsligare, men inte helt. Uppgift 4.9 Det är ett tecken som fortfarande inte är rätt. Hur visas det i Emacs-bufferten nu? (Det blir inte bra om du kopierar tecken till ditt svar. Då får du samma tecken där också, men det kanske visas på något helt annat sätt i det program jag läser ditt mail med. Så skriva av beteckningen istället.) Det saknade tecknet var tänkt att vara ett C, som inte finns i latin-1! Tydligen är denna fil inte kodad med Latin-1 trots allt, utan med en teckenkodning som är ungefär som Latin-1. (Och det förklarar att Emacs inte kände igen det som Latin-1.) Uppgift 4.10 Nästa gissning är att filen är kodad med en vanlig teckenkodning under Microsoft Windows som liknar Latin-1. Vad heter den? Prova denna gissning genom att öppna om filen på det sättet. Detta stämde visst. Uppgift 4.11 Hur visas denna teckenkodning i informationsraden i Emacs? Inputmetoder i Emacs C-x C-+ C-x C-C-x C-0 Zooma in Zooma ut Normalläge Figur 4.9: Zoomkommandon i Emacs. Den sista är med siffran 0, inte bokstaven O. Uppgift 4.12 Hur lyder den information du får upp om det där sista tecknet i förra uppgiften (Z) när du använder detta? Öppna en ny fil vinter.txt (i kurskatalogen) och skriv »Snögubbe:« där. Använd C-x 8 RET för att därefter skriva Unicode-tecknet SNOWMAN . Spara filen. Om du inte är mycket skarpsynt så har du användning för kommandon i figur 4.9 för denna uppgift: Uppgift 4.13 Hur många knappar har snögubben och hur många snöflingor är det? Kör i skalet ett kommando od -c vinter.txt som visar innehållet i filen, byte för byte. ASCIItecken visas som tecken och övrigt visas som tal (skrivna oktalt). Uppgift 4.14 Hur många bytes behövs för bokstaven ö? (Dvs. hur många bytes ligger mellan n och g som tar en byte var?) Uppgift 4.15 gubben? Hur många bytes behövs för snö- Öppna en ny fil uttal.txt där du ska skriva en kort fonetisk skrift med uttalsangivelser enligt Uppgift 4.16 Sist kommer \n. Vad betyder det? IPA, nämligen »læNgwIdZ« (= language). Några av tecknen finns inte på tangentbordet. Lös detta genom att ange en särskild inputme- iconv tod i Emacs med Options Multilingual Environment Select Input Method . Välj metoden ipa. Att du har detta aktiverat visas med IPA i informationsraden. Uppgift 4.17 Ge ett iconv-kommando för att direkt skriva ut Ellens fil i uppgift 4.4 kodad med Nu tolkar Emacs det du skriver på ett lite spe- UTF-8 i terminalen. (Använd hennes oförändrade ciellt sätt som ska underlätta att skriva IPA. T. ex. original – inte din kopia.) kan tecknet æ skrivas med »ae«. Med C-h I (versalt I!) får du en beskrivning av en inputmetod. Filen /local/kurs/ids/nordic-authors.txt Tryck på retur för att få just denna inputmetod innehåller namnen på några nordiska författare, beskriven så får du veta hur du kan skriva de öv- listade en per rad med efternamn först. riga speciella tecknen i denna text. Märk medan du skriver att det i ekoarean framgår vad det finns Uppgift 4.18 Vilken teckenkodning använder för möjligheter. den filen? Mer tecken i Emacs Uppgift 4.19 Ge ett skalkommando som sparar en ny fil authors.txt som innehåller /local/ kurs/ids/nordic-authors.txt omvandlad till UTF-8. Om man placerar markören på ett visst tecken i Emacs kan man få information om det teck(Om du har gjort rätt ska filen se rätt ut t. ex. net med C-u C-x = (tre tecken). I informationen man får upp står bland annat tecknets namn. om du tittar på dess innehåll med cat.) 45 INLUPP 4: TECKENKODNINGAR Olika locale Uppror! Uppror! är en science fiction-roman från 1975 av pseudonymen Ferdinand Fitzschkloff.6 Den sprids med författarens godkännande på http: //runeberg.org/uppror/ på webben. Gå dit i en webbläsare och välj (download) Uppgift 4.20 Vad är koden för landet Sverige? (långt ner på sidan) och sen All OCR-text för att Uppgift 4.21 Vad är koden för språket svenska? ladda ner en textfil uppror.txt med bokens inUppgift 4.22 Vad blir därmed en fullständig lo- nehåll. Välj »Save File« istället för att öppna den i Emacs. Dessa filer är skapade med OCR (Optical cale för svenska i Sverige skrivet med UTF-8? Character Recognition) från inskannade boksidor, Uppgift 4.23 Med locale -a kan man lista al- så det kan ha blivit fel ibland. la giltiga locales. Hur många sådana finns det? Flytta denna uppror.txt till din kurskatalog och öppna den sedan i Emacs. Precis efter det Uppgift 4.24 Vilka giltiga locales finns det för U på informationsraden som anger Unicode står USA här? Vilka språk använder dessa? här (DOS). Det visar att denna fil har nyradstecUppgift 4.25 Vilka giltiga locales finns det för ken så som DOS och MS Windows gör, dvs. med Sverige här? CRLF.7 Genom att klicka med musen på detta »DOS« Uppgift 4.26 Ge ett kommando för att visa din så byter du vilken nyradskonvention du vill ha i nya fil authors.txt sorterad med svensk locale. filen. Prova det! Se noga upp med att du skriver locale-namnen rätt i dessa uppgifter! Skriver man fel blir det inget felmeddelande, utan bara ett felaktigt resultat! På svenska har traditionellt v och w sorterats som samma bokstav, men numer vacklar bruket. Senaste upplagan av Svenska Akademiens ordlista sorterar w för sig, som en egen bokstav, men ibland samsorteras fortfarade v och w, i synnerhet för namn. Uppgift 4.27 Hur beter sig svensk sortering här vad gäller v och w? Uppgift 4.28 Ge ett kommando för att sortera samma författarlista med dansk sortering! Vilka skillnader blir det då jämfört med svensk sortering? Du har sedan förra kapitlet en fil rummet.words i din kurskatalog. Uppgift 4.29 Ge ett kommando som ger en lista över de tio sista orden i en svensksorterad lista över raderna i rummet.words, samt resultatet. Några rader där är dubbletter. Det finns ett kommando uniq som man kan använda som filter för att ta bort dubblettrader som kommer efter varann i en input. Uppgift 4.31 Vad står det då istället för »DOS«? Vad betyder det? Klicka igen. Då ska den parentesen helt försvinna och ersättas med bara ett kolon. Då har du ställt in att du vill ha normala nyrader (som i Unix) i den filen. Eftersom filen på disk inte är sån så räknas den bufferten som osparad. Spara den. Uppgift 4.32 När du sparade filen ska du ha fått det gamla innehållet sparat i en backupfil. Kontrollera att du har den. Vad heter den? Uppgift 4.33 Ge ett kommando som talar om hur många bytes det är både i din nya uppror.txt och den backupfil som skapades (som har kvar de gamla nyraderna). (Använd ett jokeruttryck.) Kan du förklara varför skillnaden blev just så stor? Uppgift 4.34 Hur lyder den första raden i uppror.txt som innehåller texten »special«? Ge kommando som tar fram detta, samt kommandots resultat. Kontrolltecken Ett exempel på kontrolltecken i ASCII är tecken nummer 27 = Escape = [ESC]. Uppgift 4.30 Ge ett kommando som sorterar Man kan lägga in det tecknet i en buffert i raderna i rummet.words (på svenska), tar med Emacs genom att trycka C-q ESC . Kommandot varje ord bara en gång, och listar de tio sista orden C-q läser nämligen in ett tecken och lägger in av detta. (Visa som vanligt både ditt kommando det i bufferten, även om det är ett sådant tecken och dess resultat.) 6= I den listan ska inga dubbletter finnas. (Däremot kan samma ordform finnas som två olika ordklasser. Då är ju raderna inte dubbletter!) 46 Gunnar Gällmo. man tittar på samma fil i Emacs under MS Windows skulle det inte stå nåt särskilt, för då skulle det vara det normala. Däremot skulle Emacs skriva (Unix) där för filer som bara har [LF] för nyrad. 7 Om Kontrolltecken Figur 4.10: Ett par vikare, tagna från Wikipedia, som i sin tur har tagit bilden från The Fisheries and Fisheries Industries of the United States av George Brown Goode (1887). som normalt skulle ha en annan betydelse – q i C-q står för quote. (Normalt så har ESC istället effekten att fungera som Meta- till nästa tecken i Emacs, så ESC > är som M->.) Öppna en ny fil konstig.txt i Emacs och skriv där ett ESC-tecken följt av exakt [42m (fyra tecken till efter ESC-tecknet). Uppgift 4.35 Hur visas det ESC-tecknet i Emacs? Prova att förflytta dig tecken för tecken över detta speciella tecken för att se att det verkligen är ett tecken där. Uppgift 4.36 Prova cat konstig.txt i en terminal. Vilken effekt hade den konstiga raden för terminalfönstret? Detta är ett exempel på specialfunktioner som kontrolltecken kan ha, i detta fall med på hur terminalen beter sig. * * * Kopiera /local/kurs/ids/djur.txt till din kurskatalog och öppna den i Emacs. Där står två kolumner med djurnamn med ett TAB-tecken mellan sig. I den sista raden är första ordet så långt så att andra kolumnen visas längre till höger, men där som på de övriga raderna är det bara ett TAB-tecken mellan kolumnerna. Med cut -f 2 djur.txt får du ut bara de svenska namnen. Skriv till »fox« + TAB + »räv«. Uppgift 4.37 Hur många TAB-tecken lades in när du tryckte på TAB? Uppgift 4.38 Ge exempel på något cutkommando som nu inte ger önskat resultat. Emacs vet inte att detta var tänkt att bli en fil med TAB-kolumner, utan gör som den brukar med TAB-tangenten, dvs. går fram till »nästa ställe« (beroende på hur raden ovan ser ut) oavsett hur många tecken som den behöver lägga in i bufferten för att komma dit. För att verkligen lägga in exakt ett TAB-tecken behöver du använda C-q igen. Lägg till två till rader med djur: »ringed seal« = »vikare« och »bat« = »fladdermus«. Fixa till så att alla rader stämmer och kolla så att cut -f 2 djur.txt ger alla svenska namn (och inget annat). Uppgift 4.39 Om du använder det där Emacskommandot för att lägga in ett tecken (som t. o. m. kan vara ett kontrolltecken) i en buffert till att lägga in RET (retur), hur visas det tecknet då i bufferten? Uppgift 4.40 Varför just så? Var står det om detta i kompendiet? Uppgift 4.41 Tryck M-x i Emacs. Då hamnar du i minibufferten och får skriva namnet på ett Emacskommando där. Skriv »whitespace-mode« (du kan använda komplettering) och avsluta med RET. Vad verkar detta ha för effekt? 47 INLUPP 4: TECKENKODNINGAR Snart slut Uppgift 4.42 Klipp ut de svenska namnen från din djur.txt och avstava dem med avstava från förra kapitlet. Ange såväl ditt kommando som dess resultat. Uppgift 4.43 Ge ett skalkommando som lägger texten »räksmörgås« i en ny fil shrimp.txt kodad enligt Latin-1. Om du gjort rätt ska du t. ex. kunna titta på den på samma sätt som i uppgift 4.17. Uppgift 4.44 Hur många tecken är det på den näst sista raden i /local/texts/jabberwocky? Ge skalkommando och dess resultat. Uppgift 4.45 Räkna för hand också för att se att din lösning till förra uppgiften stämmer. Hm, är det inte ett ifrån? Hur kommer det sig? Uppgift 4.46 Hitta på en uppgift som kan lösas genom att kombinera minst två kommandon som vi har haft med hittills i ett rör. Lös din egen uppgift. Om du vill kan du använda dig av vilka filer som helst i din kurskatalog eller i /local/kurs/ ids/ som input. (Trots att detta kapitel handlar om teckenkodningar behöver den sista uppgiften inte ha med sånt att göra.) 48 Kapitel 5 Dokumentation och textbearbetning i skalet 5.1 Dokumentation Även när det finns bra dokumentation till program, vilket tyvärr inte alltid är fallet, är inte alltid lätt att veta var man ska finna den. Det finns olika system för hur program som vara dokumenterade. För större interaktiva program som Firefox eller Emacs väntar man sig i första hand att finna en hjälpfunktion inne i programmet för att få hjälp eller för att få läsa dokumentationen, och man kan leta efter en hjälpmeny. För ett kommando för kommandoraden som cat eller ls har du tidigare sett att det är standard i GNU att de skriver ut en hjälptext om de får en särskild väljare --help, men den huvudsakliga dokumentationen finns istället separat. 5.1.1 Info I figur 5.1 visas en uråldrig man-sida, nämligen den för wc i Unix version 7, från 1979! Den visar flera kännetecken för man-sidor. De är indelade i olika standardiserade avsnitt – här ses name, synopsis, och description. Andra avsnitt som också ofta förekommer är bl. a. see also med hänvisningar till annan dokumentation, author för att ange programmets författare, history för att säga något om programmets historia och bugs för att ange kända hittills ofixade fel i programmet. Detta är en ovanligt kort man-sida, framförallt för att det finns så få väljare. Många kommandon har många väljare som behöver varsin längre förklaring. 5.1.3 Kommandosyntax Avsnittet synopsis behöver du kunna tolka, och där används samma konventioner som ni sett tidigare i avsnitt 3.9 på s. 28. Eftersom både -lwc och name ... står inom hakparenteser i figur 5.1 behöver de inte vara med, så det kortaste anropet av kommandot är bara wc . (Att använda wc utan argument är rimligt att göra som en del i ett kommandorör, då 5.1.2 man-sidor input hämtas från standard input.) Punkterna visar att det kan förekomma flera Det traditionella Unix-sättet att dokumentera program man kör i skalet är istället med man-sidor förekomster av det som står före punkterna. Man och en del program som du använder kommer ba- kan alltså köra programmet som wc hnamei eller wc hnamei hnamei eller ha ännu fler namn. Att ra vara dokumenterade på det sättet. dessa namn ska vara namn på filer framgår i den Man-sidor är linjära texter med början, mitten följande beskrivningen. och slut, utan länkar. Även program som har doBeteckningen -lwc visar i kompakt form att kumentation i Info brukar ofta ha man-sidor också, men då är oftast dokumentationen i Info både väljarna -l, -w och -c finns tillgängliga så att en eller flera av dessa kan användas. Ofta listas inutförligare och lättare att förstå. Det finns ett uppslag (en man-sida) för var- te väljarna upp i synopsen, utan det står bara je program, systemanrop, osv., och ett komman- [OPTION]... där, och så listas de olika möjliga do man med vilket man tittar på dessa. För att väljarna upp i beskrivningen istället. se man-sidan för programmet cat ger man t. ex. Dessutom kan tecknet | användas för att visa kommandot man cat . alternativ och {} som parenteser. I GNU, som vi kör, skrivs sådan dokumentation i ett format som heter Texinfo, från vilket man kan producera bland annat tryckta böcker och Info, som enklast läses i Emacs. Det är ett slags hypertext, dvs. texter med länkar till andra texter (i stil med webben). 49 5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET WC(1) NAME WC(1) wc - word count SYNOPSIS wc [ -lwc ] [ name ... ] DESCRIPTION Wc counts lines, words and characters in the named files, or in the standard input if no name appears. A word is a maximal string of characters delimited by spaces, tabs or newlines. If the optional argument is present, just the specified counts (lines, words or characters) are selected by the letters l, w, or c. WC(1) Figur 5.1: Man-sidan för wc i Unix v7 (1979) Istället för att t. ex. ge två synopsrader till ett kommando, som 5.3 cut Ibland vid textbearbetning använder man textfiler där varje rad består av flera fält. Med kommanUsage: cp [OPTION]... SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY dot cut kan man plocka ut ett eller flera fält därifrån. Fälten avdelas av ett visst tecken. Normalt är det TAB-tecknet, men man kan använda ett ankan man till exempel ge samma informanat tecken och ge en väljare till cut som talar om tion på en rad, med uttrycket cp [OPTION]... vilket tecken som används. { SOURCE DEST | SOURCE... DIRECTORY }. Vilket eller vilka fält den ska skriva ut visar man med väljaren -f med argument. Fälten är numrerade från vänster till höger så att det första fältet 5.1.4 Bläddring är fält 1. Oftast är man-sidan flera sidor lång och man får (Det går också att plocka ut vissa tecken från då bläddra fram en sida i taget. Man kan bläddra en rad istället för vissa fält, t. ex. tecken 4–6. Se framåt med mellanslag och avsluta med q. Mer dokumentationen om du behöver detta!) hjälp om bläddringen får man med h. Se även paste! 5.2 Skalkommandon för texthantering I avsnitt 2.1.8 finns en genomgång av några skalkommandon som gör saker med texter. Här är en del som tillkommit sedan dess, och en del nytt. De flesta av dessa program är radorienterade, dvs. behandlar sin input en rad i taget. Det man vill sortera med sort ska t. ex. ligga uppdelat en enhet per rad. Kommandon som läser text från standard input brukar oftast tolka argument som filnamn och om de får argument så läser de input från dessa filer istället. Detta gäller t. ex. cut, head, more, sort, tail, uniq och wc. 50 5.4 echo Kommandot echo ger tillbaka sina argument som output: echo htexti. . . Det kan vara praktiskt när man vill ge en specifik text som input till ett kommando utan att behöva skapa en fil med den texten. Med väljaren -e tolkas vissa sekvenser som börjar med bakstreck speciellt, i synnerhet kan man då skriva nyrad med \n (som i newline). $ echo -e 'citron\npäron\nbanan' | sort banan citron päron 5.5. grep av gh. Detta matchar textsträngarna »agh«, »argh«, »arrgh«, »arrrgh«, »arrrrgh«, osv. Blanda inte ihop denna användning av * med 5.5 grep jokerbetydelsen! I reguljära uttryck betyder inte Kommandot grep söker efter en visst mönster * nånting för sig själv, utan det modifierar bara som ges som första argument. Med flera argument det som står precis innan. Med »l[aeiouyåäö]*t« matchar man därför ska övriga vara filer att leta i. alla strängar som börjar med l, slutar med t och Bara de rader där den sökta texten finns med däremellan innehåller godtyckligt många bokstäkommer ut. ver i den uppräknade listan. Detta matchar t. ex. Tidigare har vi bara sökt efter en fix text, men »lat«, »låt«, men även korta »lt« och långa »layout«. några tecken är speciella och kan användas för Genom att skriva de två tecknen .* kan man mer avancerade sökningar. Dessa söksträngar kalmatcha vad som helst. Det betyder ju vilket teclas för reguljära uttryck och tecknen med särskild ken som helst (punkten), hur många gånger som betydelse kallas metatecken. På engelska heter det helst (asterisken). Därmed matchar t. ex. uttrycregular expression vilket ibland kortas till bara regket a.*ö vad som helst som börjar med a och sluexp eller regex. Även på svenska talar man ofta tar med ö, t. ex. »adjö«, »atollö« eller »a4! ö«. om regexpar. Observera att det även matchar bara »aö« – det Flera av dessa tecken är speciella i skalet, så ofta behöver man sätta sökmönstret inom citattecken »godtyckliga« kan vara ingenting alls. när man kör grep för att inte skalet ska tolka texten speciellt. 5.5.4 5.5.1 Ett godtyckligt tecken: . Punkten (.) matchar ett tecken vilket som helst. (Det fyller alltså samma funktion som frågetecken gör i jokeruttryck.) Så med b.x matchas »box« och »bmx«, samt även t. ex. »b%x« och »b x« (mellanslag är ett tecken det också). 5.5.2 Ett speciellt tecken: [ ] och [^ ] Om man ska beteckna ett tecken som man vill ställa mer krav på använder man hakparenteser. Genom att räkna upp tecken inom [] kan man ange ett av dessa tecken, så [Dd]ator matchar »Dator« och »dator« och [hmt]um[lm]a matchar »humla«, »humma«, »mumla«, »mumma«, »tumla« och »tumma«. Detta liknar hur man använder [] som jokertecken. Precis som då kan man även ange intervall, så [0-9] betyder samma som [0123456789]. Vill man ta med bindestrecket så får man sätta det först eller sist: [._-] matchar ».«, »_« eller »-«. En skillnad är att i reguljära uttryck kan man använda ^ först för att negera en uppräkning av tecken, så [^@] matchar vilket tecken som helst utom @, [^aouå] matchar vilket tecken som helst som inte är a, o, u eller å och [^0-9] matchar vilket tecken som helst som inte är en siffra. Ankring med ^ och $ Metatecknen ^ och $ betyder början av raden respektive slutet av raden. Så med t. ex. ^xyz hittar man rader som börjar med xyz (radbörjan följt av »xyz«) och med xyz$ hittar man rader som slutar med xyz (»xyz« följt av radslut). Dessa båda tecken matchar alltså inget tecken alls på egen hand, utan ställer bara krav på var det övriga i uttrycket ska befinna sig. Man säger att dessa ankrar ett reguljärt uttryck. 5.5.5 Några väljare till grep Tidigare har ni sett exempel på väljarna -c och -i till grep. En annan användbar väljare till grep är -v som vänder på betydelsen av kommandot och istället tar fram alla rader som inte innehåller ett visst sökmönster. Kommandot grep visar ju hela de rader som innehåller det man sökt efter. Med väljaren --color markeras den del av raden som matchade ens sökmönster i en särskild färg. 5.6 more Kommandot more visar upp sin output i terminalen sida för sida så att användaren kan bläddra i texten, som i man-sidor med man. Det är ofta an5.5.3 Repetition med * vändbart som sista delen i ett kommandorör som Med asterisken * efter något så säger man att det- producerar text, så det är inte ovanligt med komta får förekomma godtyckligt många gånger i det mandon som slutar med »| more«. Det finns däreman söker efter. Godtyckligt många gånger kan mot ingen vits med att stoppa in more före | eller vara noll, en, två, tre, . . . , gånger. > eftersom dess output då inte kommer att hamna Så om man söker efter t. ex. »ar*gh« så bety- i terminalen. der det ett a följt av godtyckligt många r följt En typisk användning ser ut som 51 5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET (Bakstrecket har specialbetydelse i skalet, så det argumentet måste sättas inom citattecken.) $ sort birds.txt | more Man kan inte byta ut ett tecken mot flera, t. ex. byta ut alla »x« mot »ks«. I själva verket så är det enstaka bytes som byts ut, så tr fungerar inte bra med tecken som lagras i flera bytes, så som t. ex. åäö i UTF-8, vilket begränsar dess användbarhet! 5.7 paste (Vi kommer se ett annat sätt att göra utbyten i Kommandot paste gör det omvända från cut, ge- text senare.) nom att det sätter ihop fält från olika filer till en fil. 5.10 uniq Raderna i input till uniq kommer ut igen utom de rader som är likadana som raden innan. Kommandot sort läser in rader från sin input och Det är vanligt att kombinera detta med sorteskriver ut samma rader som output, men i en sor- ring som ... sort | uniq .... Genom att sorterad ordning. tera det som kommer in till uniq så kommer alla Kommandot tar hänsyn till vilka språkinställ- likadana rader att ha hamnat direkt efter varandra ningar man har för att göra sortering enligt något så att uniq kan ta bort så mycket som möjligt. visst språks konventioner. Ifall ens syfte bara är Ofta använder man detta när det egentligen inatt föra samman likadana rader så kan man göra te spelar någon roll vad det är för ordning, bara LANG=C sort som gör den enklaste sortens sor- det är någon ordning så att likadana rader har förts tering, i storleksordning efter tecknens numeriska samman. koder. (Då sorteras till exempel lilla a och stora A Med -c räknar uniq hur många rader det var olika.) också. Med väljaren -n sorterar den istället numeriskt, Med väljaren -u skriver uniq bara ut de rader efter hur stora tal skrivna i siffror är. Då hamnar som var unika. Dvs. istället för att behålla en av t. ex. »9« före »10« vilket det inte gör när man jäm- flera likadana rader så behåller det inga rader alls för tecken för tecken. i sådana fall. Väljaren -d är motsatsen till -u. Nu skrivs bara de rader ut som var duplicerade. 5.8 sort 5.9 tr Kommandot tr byter ut tecken i input. Första argumentet räknar upp tecken som ska bytas ut och andra argumentet räknar upp vad dessa ska bytas mot. $ echo 'Sju sjuka sjuksköterskor' | tr s z Sju zjuka zjukzköterzkor $ echo 'uppercase vowels' | tr aeiou AEIOU UppErcAsE vOwEls En del kontrolltecken kan skrivas som sekvenser som börjar med bakstreck i argument till tr, däribland nyrad med \n och TAB med \t. $ cat tripp tripp trapp trull $ tr '\n' / <tripp tripp/trapp/trull/ 52 $ cat gumma.txt en liten liten liten gumma med en liten liten katt $ uniq gumma.txt en liten gumma med en liten katt $ uniq -c gumma.txt 1 en 3 liten 1 gumma 1 med 1 en 2 liten 1 katt 5.10. uniq $ uniq -u gumma.txt en gumma med en katt $ uniq -d gumma.txt liten liten I exemplen ovan används uniq på rader som inte är sorterade. Det är ganska sällan man har användning för det. Vanligare är att man vill göra en lista över vilka ord som förekommer i den där filen, och då får man lov att sortera raderna först: $ sort gumma.txt en gumma katt liten med $ sort gumma.txt 2 en 1 gumma 1 katt 5 liten 1 med $ sort gumma.txt gumma katt med $ sort gumma.txt en liten | uniq | uniq -c | uniq -u | uniq -d 53 Inlupp 5: Textbearbetning i skalet Redovisning Skicka mail till Per med svaren. När det inte står annat ska svaret fås fram genom ett eller flera skalkommandon. Ange både det resultat du fick och de kommandon du gav för att få fram det. Försök att bara använda ett kommando(rör) när det går. Tänk på att använda citattecken runt argument som innehåller tecken som $[]*?\ och mellanslag så att de inte tolkas särskilt av skalet! Info Välj Help Read the Emacs Manual i Emacs. Du hamnar i ett system som heter Info där dokumentationen till många program finns, däribland Emacs. Nu ser du Info-dokumentet om Emacs. Observera att det står »Info« i parentesen i informationsraden. Till vänster om det står »(emacs) Top«. Det visar att Info-dokumentet du läser heter »emacs« och du befinner dig överst i det. Efter förtugget kommer en lång meny. Cirka 60 rader ner (gå ner en sida med PageDown eller C-v vid behov), under rubriken »Fundamental Editing Commands«, så ser du bland annat menyalternativet Basic. I beskrivningen till höger beskrivs detta som »The most basic editing commands.« Välj Basic och sen Erasing från den meny du då får upp. Då har du fått fram lite samlad information om hur man kan ta bort text i Emacs. De olika noderna i ett Info-dokument hänger ihop i ett träd. Överst ser du nu en särskild rad där det bland annat står »Up: Basic«, dvs. uppåt i trädet ligger den sida du var i senast, från vilken du gick »ner« till denna sida. På samma rad som »Up« står finns även »Next« och »Prev« (= previous) i en tänkt läsordning för avsnitten. Du kan följa dessa länkar genom att klicka på dem eller på symbolerna , , . Gå till föregående, dvs. »Moving Point«. Förutom att man kan röra sig framåt och bakåt i den tänkta läsordningen kan man även backa till varifrån man kom (»last«), oavsett hur man kom därifrån. Det gör man med vänsterpilen på samma rad. Tryck på den nu så kommer du 54 Figur 5.2: Från xkcd av Randall Munroe. http:// xkcd.com/912/ tillbaka till »Erasing Text«, eftersom det var där du var senast. En del Info-dokument har register (index) som man når med . Säg att du undrar vad det står om stavningskontroll i Emacsdokumentationen. Välj »spelling« i registret. Du kommer till ett avsnitt med rubriken »Checking and Correcting Spelling«. Uppgift 5.1 Ett kommando som nämns där beskrivs som »Check and correct spelling of the the word at point«. Vad ska man trycka i Emacs för att utföra detta? Prova! Byt buffert till slaskbufferten *scratch* och skriv ordet speling där (felstavat på detta man sätt!) följt av kommandot för att kontrollera stavTitta på dokumentationen för shuf. ningen. Du får upp ett antal rättelseförslag att välja mellan. Förslag 0 är »spelling«. Tryck på 0 för att Uppgift 5.7 Ge ett kommando för att skriva ut raderna i din saga.txt i slumpvis ordning. rätta din felstavning till detta. Uppgift 5.2 Vad var förslag 4? Uppgift 5.8 Ge ett kommando för att skriva ut talen 1–5 i en slumpvis ordning. Uppgift 5.3 Enligt den fortsatta beskrivningen av kommandot så gör det ibland något annat än att kontrollera ett ord. Vad och när? Uppgift 5.9 Ge ett kommando för att skriva ut en slumpvis frukt från /local/kurs/ids/frukt. Gå tillbaks till Info igen. Ett sätt är att byta till den särskilda bufferten med namnet *info* på något av de vanliga sätten för att byta buffert. Ett annat är att använda C-h i som alltid tar en till Info. I informationsraden står det »(emacs) Spelling«. Det heter den nod i Info som du tittar på just nu. Den första delen inom parentes visar vilket Infodokument det ingår i. Tryck på d för att komma till huvudkatalogen (directory) över Info-dokument. Här finns det en lång meny där de kommandon som är dokumenterade i Info finns med. (Om man inte har startat Info tidigare så är det hit man kommer om man trycker C-h i. Annars kommer man tillbaka till där man var senast.) Uppgift 5.4 Vad heter den Info-nod du nu tittar på? (Svaret står i informationsraden, med en förstadel (dokumentetets namn) inom parentes.) Lös dessa tre uppgifter med bara ett kommando, utan kommandorör. Du får lov att använda olika väljare till shuf. När man söker framåt med C-s beter sig Emacs lite speciellt i Info. När den inte hittar någon mer förekomst på den sida man är på kan den söka vidare i nästa sida i samma Info-dokument. Uppgift 5.10 Hur hittar du i Info information du behöver för att lösa nästa två uppgifter? Uppgift 5.11 Använd ls för att ge en listning av filerna i din kurskatalog i storleksordning, med den största filen först. Uppgift 5.12 Använd ls för att ge en listning av filerna i din kurskatalog i storleksordning med den minsta filen först. (Omvändningen av förra uppgiften.) man Slå upp sort här. Istället för att leta efter det Kommandot cal ger en liten kalender. Detta i den långa långa menyn så använd kortkommankommando är inte så intressant i sig, men används dot m för att välja nåt från menyn och svara sort. här som exempel för att ni ska slå upp och tolka en man-sida. (Det är det enda sätt som programUppgift 5.5 Vad heter den Info-nod du nu tittar met finns dokumenterat.) på? Notera att med »upp« nu kommer du inte tillbaka till huvudkatalogen. Du följde en genväg som gick en bit ner i trädet, och går du uppåt nu kommer du till andra kommandon som också har med sorterade filer att göra. Uppgift 5.6 Ett av de andra kommandona heter shuf. Vilka övriga kommandon tas upp i samma kapitel om sorterade filer? Bokstäver som kommandon: Normalt i Emacs så läggs skrivbara tecken som a, b, c, d in i bufferten när man trycker på dem. Men i speciella Emacslägen som Info där man ändå inte skriver in text så är kortkommandona ofta bara en bokstav. Genom att trycka h i Info får du veta mer om hur man manövrerar i Info helt från tangentbordet. Uppgift 5.13 Hur lyder synopsraden i mansidan till cal? Uppgift 5.14 Det finns ett antal väljare man kan ge till kommandot cal. Efter dessa kan det följa argument. Om man ger tre argument, vad betecknar då det första, andra respektive sista argumentet? Ge ett exempel på ett anrop med tre argument och vad du får för svar då. Uppgift 5.15 Om man ger två argument, vad betecknar då det första respektive det andra argumentet? Ge ett exempel på ett anrop med två argument och vad du får för svar då. I denna man-sida kallas argumenten för parameters och det står om hur »a single parameter« tolkas. Uppgift 5.16 Hur tolkas alltså argumentet om man bara ger ett argument till cal? Detta framgår även av synopsraden. Hur? 55 INLUPP 5: TEXTBEARBETNING I SKALET Uppgift 5.17 Ge en kalender för föregående, nuvarande och nästa månad, med måndag som förstadag i veckorna. med ett led till i ett kommandorör. Ge också ett alternativt svar där båda kraven finns i samma reguljära uttryck. Uppgift 5.18 Kommandot seq kan få ett till tre argument. Kolla dokumentationen för att se hur detta beskrivs. Där finns det tre synopsrader, en för varje antal argument. Hur lyder dessa tre rader? Uppgift 5.32 Hur många verb slutar på något annat än a? Uppgift 5.19 Detta hade kunnat skrivas med bara en synopsrad istället med hakparenteser ungefär (men inte riktigt) så som det var för cal. Hur skulle beskrivningen av seq se ut i så fall? (Ledning: Ett av de möjliga argumenten måste alltid vara med, så det ska inte så inom några [].) Uppgift 5.20 Ge ett kommando för att lista åttans tabell: 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, ett tal per rad. Uppgift 5.33 Samma som uppgift 5.24, men lös den med grep utan att använda väljaren -v denna gång! Uppgift 5.34 Vilka verb har x som sjätte bokstav (som t. ex. förhäxa)? Uppgift 5.35 Vilka verb börjar med k och slutar med iera? Uppror! Uppgift 5.21 Ge en lista över alla tal 1–10 000 som är delbara med 7 och som innehåller »765« när man skriver ut det. I resultatet ska bland annat 7651 (= 7 × 1093) ingå. På sidan 46 sparade du en version av uppror.txt med normal Unix-markering för nyrad. Den ska du använda nu. Alla uppgifter i detta avsnitt använder sig av den filen. Prova gärna kommandona i detta avsnitt med väljaren --color till grep också. Verb Uppgift 5.36 Vilka rader innehåller två j med exakt två tecken mellan sig? Dessa frågor gäller den fil verb.txt som du använt i tidigare uppgifter. Uppgift 5.22 Vilket eller vilka verb innehåller »stp« i sig? Uppgift 5.37 Vilka rader innehåller minst tre siffror i rad? Uppgift 5.38 Vilka rader innehåller minst två siffror? Uppgift 5.23 Vilka verb innehåller fa följt av ett godtyckligt tecken följt av a? Uppgift 5.39 Vad finns det för rad som innehåller ett komma som följs av något annat tecken än mellanslag? Uppgift 5.24 Hur många verb innehåller inte a alls? (Använd väljaren -v till grep!) Uppgift 5.40 Vad finns det för rader som innehåller minst två frågetecken? Uppgift 5.25 Hur många verb innehåller åtminstone någon av bokstäverna j eller y? Uppgift 5.41 Vad finns det för rader som inte innehåller något mellanslag men ändå är minst 15 tecken långa? Uppgift 5.26 Vilka verb innehåller y följt av godtyckligt många s följt av e? (I ett par av orden är det inga s alls, dvs. y följs direkt av e.) Uppgift 5.27 Vilka verb innehåller både j och y, i den ordningen (men kanske med andra tecken däremellan)? Uppgift 5.28 Vilka verb innehåller både j och y? Uppgift 5.29 Hur många verb innehåller j men inte y? * * * Slå upp grep i Info. Sök upp information om ordsökning där. (Det finns en särskild väljare för sånt.) Uppgift 5.42 Vad hette Info-noden du hittade denna väljare på? Uppgift 5.43 Hur bar du dig åt för att hitta till den Info-noden? Uppgift 5.44 Vilka rader i uppror.txt innehåller ordet »dröm«? Uppgift 5.45 Vilka rader innehåller de fyra bokstäverna »dröm« i rad men ändå inte ordet Uppgift 5.31 Vilka verb slutar på y och börjar »dröm«? (Det kan vara rader på vilka det står på g? Ge ett svar där du utökar förra uppgiften »mardröm« eller »drömmar« t. ex..) Uppgift 5.30 Vilka verb slutar på bokstaven y? 56 I fält »Det var en afton i början av maj« Här görs en antal uppgifter med /local/kurs/ ids/rummet.words som du antas ha gjort en kopia av tidigare. Det är alltså filen där det ligger ett ord per rad, tillsammans med ordklassbeteckning. Uppgift 5.53 Ge ett kommando som sorterar raderna i rummet.words så att lika rader hamnar i följd och sedan räknar hur många det är av varje slags rad. (Du behöver inte ange resultatet av detta kommando.) Uppgift 5.54 Utöka föregående kommandorör så att du därefter sorterar detta resultat i nummerordning och ger en tio-i-topp-lista med de vanligaste orden först. I fält I filen /local/kurs/ids/eulang.tsv finns lite data om de officiella EU-språken i en fil med TAB-separerade fält. (Filnamnsändelsen tsv används ibland för »tab separated values«.) Det första fältet ger en kod för språket, det andra ger ungefärligt antal modersmålstalande (inte bara i EU),1 det tredje ger språkets namn på svenska, det fjärde ger språkets namn på engelska och det femte och sista fältet ger vilket år språket blev ett officiellt EU-språk. Uppgift 5.46 Ta fram en sorterad lista över språkens engelska namn. Uppgift 5.47 Ta fram alla fält utom språkkoden, sorterade efter antal talare. Uppgift 5.48 Vilket språk har lägst antal talare? Ta bara fram dess namn på engelska. Uppgift 5.49 Ange språkkoderna för alla språk som var officiella EU-språk redan 1958. Uppgift 5.50 Vilka år har något språk blivit officiellt EU-språk? (Ge ett svar som listar dessa år i tidsordning, utan dubbletter.) Uppgift 5.51 Vilka år har fler än ett språk blivit nya officiella EU-språk? Uppgift 5.52 Vilka år har exakt ett språk blivit nytt officiellt EU-språk? Numerisk sortering ger normalt de lägsta talen först, men sök upp en väljare till sort som gör att man får omvänd sorteringsordning än den annars ger! (Använd den korta versionen av denna väljare.) Här räknades även skiljetecken som egna ord, så flera av de vanligaste »orden« kommer att vara sådana. Uppgift 5.55 Vilka prepositioner förekommer bara en gång i rummet.words? Du kan anta att det räcker med att söka upp rader som innehåller »prep« för att hitta prepositioner. (Som tur är finns inte ord som »preparat« eller »upprepa« i texten, vilket skulle ge falska träffar.) Uppgift 5.56 Modifiera uppgift 5.54 så att resultatet skrivs ut med ett snedstreck (/) istället för TAB mellan ord och ordklass. I rummet.words finns olika rader som de de art pron så grafordet »de« kan både vara artikel och pronomen. Det finns flera sådana ord. Uppgift 5.57 Vilka ord i rummet.words förekommer där med minst två olika ordklasser? Räkna m med skript Du ska skriva ett skalskript countm.sh som räknar m och M i en fil. Låt skalskriptet börja så här: #!/bin/bash echo Antal m: grep -c m $1 1 Uppgifterna är ihopsamlade på en höft och ska tas med några nypor salt. 57 INLUPP 5: TEXTBEARBETNING I SKALET Där det brukar stå ett filnamn står här istället $1. Det är nytt och betyder något man gett som argument till skriptet. Då kan man skriva t. ex. $ bash countm.sh rummet.txt Antal m: 28 Antal M: 3 Antal rader utan m eller M: 4 Och för att räkna i en annan fil är det bara att ge ett annat filnamn när man kör skriptet. Uppgift 5.58 I exemplet ovan skrivs några fler rader ut än vad den givna början av skriptet gör. Utöka skriptet så att det ger alla dessa uppgifter. Hur lyder din countm.sh nu? Uppgift 5.59 Vad får du för output om du kör ditt skript med /local/kurs/ids/wonderland. txt som argument? Ordsegmentering Uppgift 5.60 Ett (för) enkelt sätt att dela upp en textfil i ord är att byta ut alla mellanslag mot nyradstecken. Använd det för att i en fil GNU-w1 lägga en sorterad ordlista med alla ord som förekommer i filen GNU i din kurskatalog. (Ta bort dubbletter.) Uppgift 5.61 Titta igenom resultatet i Emacs och nämn vilka problem du kommer på med detta enkla sätt att dela upp en text i ord. Ditt och datt Uppgift 5.62 Ge en lista över alla årtal som förekommer i us-states.txt. (Ge varje årtal bara en gång oavsett hur många gånger det förekommer i filen.) Uppgift 5.63 Om man skulle göra en stavningsreform så att man ersatte alla z med s, vad skulle det bli för verb som nu stavas olika som då skulle stavas likadant i verb.txt? $2, $3, . . . : Är det kanske så att om man ger fler argument till skriptet så kan man komma åt dem med $2, $3, osv.? Javisst är det så. Prova gärna! 58 Uppgift 5.64 Vilka delstater kom med i USA i mars något år enligt us-states.txt? Uppgift 5.65 Gör en lista för hur ofta de olika månaderna förekommer i datumen i us-states. txt. Resultatet skulle kunna börja med med 7 01 3 02 som visar att det finns sju fall av »01« (= januari) och tre fall av »02« (= februari). Uppgift 5.66 Skapa en fil us-states-rev. txt som innehåller samma två kolumner som us-states.txt, men i omvänd ordning. Kapitel 6 Versionskontroll och Emacs Det blir två olika ämnen idag. 6.1 Versionskontroll Versionskontrollsystem är system som kan hantera flera olika versioner av dokument. Flera personer kan ändra i dokumenten och det går att få fram vilka tidigare versioner som helst och se vilka ändringar som gjorts när. Det finns flera olika versionskontrollsystem som har olika för- och nackdelar. Ett mycket vanligt är CVS. En fördel med det är just att det används så mycket. I labben ska ni få använda Subversion (SVN) som är ett senare system som är likt CVS men har en del viktiga förbättringar. Några exempel på modernare versionskontrollsystem är Bazaar, Git och Mercurial. Databasen där alla versioner av filerna i ett projekt ligger kallas ett repositorium (repository). Att ta fram filer därifrån kallas att checka ut dessa filer. Då får man en arbetskatalog (working directory) där man kan göra de ändringar man vill. Efter att man gjort en ändring som ska in i projektet så checkar man in den filen igen så hamnar den versionen i repositoriet. Alla versioner som checkats in kan tas fram i efterhand, så man kan be om t. ex. hur en viss version såg ut den 1 april förra året. Ofta går det att nå ett repositorium över nätet så att personer som ska medverka i ett projekt inte behöver ha konto på samma dator. Även om versionskontrollsystem framförallt används för programmering så kan det med fördel användas även i andra sammanhang där flera personer skriver något tillsammans. Även för sådant man skriver själv är det användbart, bland annat för att kunna gå tillbaka till tidigare versioner. Figur 6.1: Såna här missöden händer lätt om flera personer kan ändra i samma filer. lösa sådana problem är en av huvudfunktionerna för versionskontrollsystem. I en del versionskontrollsystem så låser man normalt en fil man ska göra ändringar i så att andra inte får göra ändringar samtidigt. I de flesta system nu är det dock oftast inget större problem med samtidiga ändringar. Om en användare gör en ändring i början av en fil samtidigt som en annan ändrar i slutet av samma fil så kan systemet slå ihop dessa ändringar av sig självt. Systemet vet nämligen vilken version av dokumentet som de olika användarna har utgått ifrån. Bara om ändringarna sker på samma ställe behövs hjälp med att reda ut det. Då visar systemet båda versionerna och en människa får reda ut läget. 6.1.2 6.1.1 Om flera ändrar samtidigt Om flera personer har skrivrättigheter i samma katalog där de tillsammans sköter några filer blir det lätt olyckor, som i figur 6.1. Att undvika och Kommandon Oftast är det ett enda skalkommando med vilket man kan göra allt som ett versionskontrollsystem kan göra, genom att ge det olika argument. För CVS heter kommandot cvs och för Subver59 6. VERSIONSKONTROLL OCH EMACS sion heter det svn, och liknande för andra system. Första argumentet till svn är ett underkommando till det. Med svn help får man hjälp. Men Emacs känner igen vilka filer som tas om hand av något versionskontrollsystem och vilket system det är och gör mycket av det där automatiskt åt en, eller med kommandon i en meny Tools Version Control . Man kan använda samma kommandon i Emacs oavsett vilket versionskontrollsystem man använder. Emacs känner igen vilket system som har hand om just dina filer. Ibland används förkortningen VC för Version Control, och det ingår i en hel del namn på Emacskommandon. 6.2 Emacs Det står en hel del om emacs i avsnitt 2.2 på s. 18. Här är några ytterligare delar. På s. 63–64 följer sedan den refcard.pdf som följer med Emacs1 med tips om kortkommandon och annat. (Men en hel del av dessa är sådana som ni antagligen inte kommer att behöva.) 6.2.1 Kommandon I Emacs finns en stor mängd kommandon som gör olika saker med texten. När man trycker på en tangent i Emacs eller väljer något från en meny så utförs något av dessa kommandon. När man trycker på <home> eller C-a utförs t. ex. ett kommando move-beginning-of-line som går till början av raden och när man väljer Tools Spell Checking Spell-Check Buffer i menyerna utförs ett kommando ispell-buffer.2 Normalt behöver man inte veta vad dessa namn på kommandona är. När man lär sig att man kan gå till början av raden med C-a så behöver man därför inte lära sig vad det kommando som utförs heter. Men när man vill använda ett kommando som inte finns i menyerna och som det inte finns ett kortkommando för så kan man ändå utföra kommandot genom att använda M-x och sedan ge kommandots namn (följt av RET ). I sådana lägen kan man använda TAB för att få komplettering. En del kommandon finns det inget snabbkommando för. 6.2.2 Att få hjälp I tabell 6.1 visas några av de kommandon som börjar med C-h. För flera av dessa ska man efter kommandot tala om vad man vill ha hjälp med. Efter C-h c eller C-h k får man t. ex. trycka på en tangent för att få fram hjälp om just den. Om man t. ex. undrar vad som händer om man trycker på C-l kan man fråga med C-h k C-l och om man undrar vad kommandot som utförs med C-x C-b heter kan man använda C-h c C-x C-b. Många av dessa kommandon finns förstås i menyn Help också. Hur fortsätter kommandot? Dessutom kan man använda C-h i ett flerteckenskommando för att se hur det kan fortsätta. Med C-x C-h får man t. ex. veta vad det finns för kommandon som börjar med C-x (så som t. ex. C-x C-f och C-x C-s ) och med C-c C-h kan man se vad som börjar med C-c osv. Ofta så visas den hjälp man får fram i en särskild buffert *Help*. Många speciella buffertar i Emacs har sådana namn som börjar och slutar med asterisk. Istället för C-h kan man även använda <f1> som hjälptangent, dvs. funktionstangenten F1. 6.2.3 Manualen Som ni har sett förut finns den huvudsakliga dokumentationen till Emacs i Info, och med Help Read the Emacs Manual kan man gå till den dokumentationen. (Ofta finns dessa manualer även på nätet i flera olika format. På http://www.gnu.org/ software/emacs/ finns t. ex. länkar till Emacsdokumentationen.) 6.2.4 Musen De tre knapparna kallas i Emacs Mouse-1, Mouse-2 och Mouse-3 från vänster till höger, så mouse-2 är mittknappen (på scrollhjulet). Även dessa kan kombineras med Ctrl och liknande. T. ex. är ytterligare ett sätt att välja buffert i Emacs C-Mouse-1 . (Prova!) 6.2.5 Lägen Det som här kallas lägen i Emacs kallas också moder som mer direkt översättning av modes. Emacs använder olika slags lägen för olika slags filer. Det är alltid en major mode och kan även vara flera minor modes som ändrar beteendet på olika sätt. 1 Med fullständig sökväg /local/share/emacs/24.3/ Olika lägen kan ha olika kortkommandon, olika etc/refcards/refcard.pdf menyer, olika färgläggning av bufferten, osv. Pre2 Flera gånger i denna text kallas tangenttryckningen för ett kommando det också, så det kan stå »använd kommandot fixtangenten C-c inleder ofta kommandon som är C-a«. Förhoppningsvis ska det inte leda till sammanblandning. speciella för olika lägen. Ni har t. ex. sett exempel Man kan få hjälp av olika slag i Emacs med olika kommandon som börjar med C-h (där h står för help). 60 6.2. Emacs Tabell 6.1: Några C-h-kommandon. Tangent Kommando Beskrivning C-h C-h C-h C-h C-h C-h C-h C-h describe-key-briefly describe-key apropos-command info describe-function where-is describe-mode help-with-tutorial Talar om vilket kommando en viss tangent utför Talar även om vad detta kommando gör Hittar ett kommando som innehåller något visst i sitt namn Går in i Info Beskriv ett namngivet kommando Hitta snabbkommando för ett visst kommando. Beskriver aktuellt Emacs-läge. Lär dig en del Emacs-kommandon. c k a i f w m t på att när ni editerade ett skalskript så hamnade Emacs i ett annat läge. Med C-Mouse-3 får man fram en meny för aktuellt läge. Man kan också hålla klicka på lägets namn i informationsraden för att få upp den meny som är speciellt för ett visst läge. 6.2.6 Prefix-argument Vissa kommandon i Emacs kräver ett argument som läses in i minibufferten efteråt. Efter C-x C-f får man t. ex. ange vilken fil det är man vill öppna. Det går dessutom alltid ge ett numeriskt prefixargument direkt före ett kommando. Olika kommandon behandlar detta argument på olika sätt. Med M-f går man t. ex. framåt ett ord. Genom att ge ett argument så går man istället fram så många ord. Ett sätt att ge prefix-argument är att trycka på siffror medan man håller Ctrl eller Meta intryckt. Så med M-1 M-2 M-f går man därmed framåt 12 ord. Eftersom själva kommandot innehåller Meta är det mesta praktiskt att använda Meta med siffrorna också denna gång, så behöver man aldrig lyfta på Alt-tangenten. Om man istället skulle gå fram tolv tecken med C-f använder man lämpligen C-1 C-2 C-f istället, så slipper man lyfta på Control-tangenten. I Emacslägen där man inte skriver in text, t. ex. Dired som är läget man får när man öppnar en katalog i Emacs, räcker det med att trycka på siffertangenter utan Ctrl eller Meta. Ett annat sätt är att använda C-u och sen skriva vanliga siffror: C-u 1 2 M-f. Om man ger bara C-u utan några siffror räknas det som 4, och två C-u som 16. Det ger ett enkelt sätt att t. ex. »gå ner några rader« ( C-u <down> ) eller »gå upp rätt många rader« (C-u C-u <up> ). Vissa kommandon bryr sig bara om ifall de får ett argument eller inte, men inte vad argumentet är. Ett exempel är kommandot M-q (fill-paragraph) som bryter om det stycke man står i. Om man ger det ett prefixargument så läg- ger det dessutom in dubbla mellanslag här och där så att det ska bli en rak högermarginal. När man bara ska ge ett prefixargument vilket som helst och det inte spelar roll vad det är brukar man använda C-u, så t. ex. C-u M-q . Ett annat exempel på det som ni sett var på sidan 45 när ni fick använda C-u C-x =. Själva kommandot där var alltså bara C-x =, men det användes med ett argument för att det skulle bete sig lite annorlunda. 6.2.7 Sökningar Inkrementella sökningar med C-s (framåt) och C-r (bakåt) har ni redan gjort. Om man tar med minst en versal i söksträngen så görs det skillnad på versaler och gemener, men inte annars, så med foo hittar man såväl »foo« som »Foo« som »FOO«, men med söksträngen Foo hittar man bara »Foo« och inte t. ex. »foo« eller »FOO«. Man kan söka efter reguljära uttryck genom att lägga till Meta också, dvs. med C-M-s och C-M-r. 6.2.8 Regionen På sidan 20 stod det om regionen i Emacs. Ett till sätt att markera en region från tangentbordet är att hålla ner skifttangenten medan man förflyttar sig med piltangenterna. Många kommandon beter sig lite annorlunda ifall man har en aktiv markerad region. Kommandot M-$ som du använt för att stavningskontrollera ett ord kontrollerar t. ex. hela regionen om man har en aktiv sådan. 61 Inlupp 6: Versionskontroll och Emacs Versionskontroll Bland relaterade kommandon finns bland annat sådana för att lista en fils historia (logg), ta fram Ge i din kurskatalog skalkommandot tidigare versioner, med mera. Din fil ids6.txt är inte inlagd i Subversion basvn co svn://stp/ids15/username ra för att den ligger i samma katalog. Lägg in den filen också (trots att du än så länge bara svarat på där username är ditt användarnamn. Du blir tillfrågad om ett lösenord. (Inget några få frågor. För detta behöver du göra C-x v v två gånger. kommer att ekas när du skriver in lösenordet.) Det är inte ditt vanliga inloggningslösenord Första gången registrerar du filen och andra gångutan ett annat som står i filen /local/svn/ en checkas den verkligen in. Gör så! (Loggmeddelandet kan vara tomt om du vill.) När du är passwords/username som bara är läsbar för dig. I denna nya katalog som heter som ditt använ- klar ska det stå »SVN:« med siffror efter i infordarnamn finns en fil som heter foo.txt. Öppna mationsraden. Flytta även dina svar från de två förra kapitlen den i Emacs. I informationsraden står det »SVN« till denna katalog under namnen ids4.txt och för att visa att denna fil sköts av Subversion. ids5.txt (oavsett om du är klar med dem elAnvänd C-x 5 f i Emacs för att öppna en ny ler inte) och checka in de filerna. Om du inte fil ids6.txt i samma katalog för att skriva svaren har börjat med den senare så checka in en tom på följande frågor i. fil ids5.txt! Eventuella kompletteringar till desUppgift 6.1 Vad gjorde detta kommando (tyd- sa labbar ska du senare lägga in i dessa filer och checka in. Tillbaks till foo.txt: ligen)? Tillbaks till foo.txt. Byt ut ordet »gamla« mot »nya« där och spara. Nu skiljer sig den version du har i din katalog från den incheckade. Använd Tools Version Control Compare with Base Version för att i kompakt form få se skillnaderna. Det viktigaste Emacs-kommandot för versionskontroll är C-x v v för att checka in en fil, så det är det värt att lära sig kortkommandot för. Använd det nu! Innan själva incheckningen sker får du skriva ett loggmeddelande om vad det är för en ändring du gjort. Gör så. Uppgift 6.2 Vad är kortkommandot för att avsluta detta loggmeddelande? Uppgift 6.3 Hur fick du reda på vad kortkommandot var? Kommer du på nåt annat sätt du kunde ha fått reda på det? . . . is not in a version controlled directory.: Varning! Om du får denna varning tillsammans med en fråga om »VC backend« så avbryt med C-g ! Då har du försökt checka in en fil någonannanstans än i din Subversion-katalog. Tools Version Control Uppgift 6.4 Använd Show History för att få se loggen för foo.txt. Hur lyder den? För varje version står det »r« följt av siffror för att visa vilken revidering den versionen hör till. Uppgift 6.5 Vad är det för siffror för den tidigaste versionen av den filen? Hitta ett kommando i Tools Version Control för att visa en annan version och välj den där allra första versionen. (Skriv bara siffrorna utan inledande »r«.) Uppgift 6.6 Så vad stod det i denna första version av denna fil? Checka in din ids6.txt innan du går vidare! Nu kan du antingen gå vidare med resten av detta kapitel, eller komplettera tidigare labbar du inte är klar med. Följ avsnittet »Klar för idag?« på slutet innan du slutar för idag hursomhelst! Referenskort till Emacs på de två följande sidorna 62 + GNU Emacs Reference Card (for version 24) Starting Emacs To enter GNU Emacs 24, just type its name: emacs Leaving Emacs suspend Emacs (or iconify it under X) exit Emacs permanently C-z C-x C-c Files read a file into Emacs save a file back to disk save all files insert contents of another file into this buffer replace this file with the file you really want write buffer to a specified file toggle read-only status of buffer C-x C-x C-x C-x C-x C-x C-x C-f C-s s i C-v C-w C-q Getting Help The help system is simple. Type C-h (or F1) and follow the directions. If you are a first-time user, type C-h t for a tutorial. remove help window scroll help window C-x 1 C-M-v apropos: show commands matching a string describe the function a key runs describe a function get mode-specific information C-h C-h C-h C-h a k f m Motion entity to move over character word line go to line beginning (or end) sentence paragraph page sexp function go to buffer beginning (or end) scroll scroll scroll scroll scroll Multiple Windows backward C-b M-b C-p C-a M-a M-{ C-x [ C-M-b C-M-a M-< to next screen to previous screen left right current line to center, top, bottom goto line goto char back to indentation forward C-f M-f C-n C-e M-e M-} C-x ] C-M-f C-M-e M-> C-v M-v C-x < C-x > C-l M-g g M-g c M-m Killing and Deleting entity to kill character (delete, not kill) word line (to end of) sentence sexp backward DEL M-DEL M-0 C-k C-x DEL M-- C-M-k forward C-d M-d C-k M-k C-M-k kill region copy region to kill ring kill through next occurrence of char C-w M-w M-z char yank back last thing killed replace last yank with previous kill C-y M-y Error Recovery Marking abort partially typed or executing command C-g recover files lost by a system crash M-x recover-session undo an unwanted change C-x u, C-_ or C-/ restore a buffer to its original contents M-x revert-buffer redraw garbaged screen C-l set mark here exchange point and mark C-@ or C-SPC C-x C-x set mark arg words away mark paragraph mark page mark sexp mark function mark entire buffer M-@ M-h C-x C-p C-M-@ C-M-h C-x h Incremental Search search forward search backward regular expression search reverse regular expression search C-s C-r C-M-s C-M-r Query Replace select previous search string select next later search string exit incremental search undo effect of last character abort current search M-p M-n RET DEL C-g Valid responses in query-replace mode are Use C-s or C-r again to repeat the search in either direction. If Emacs is still searching, C-g cancels only the part not matched. c 2015 Free Software Foundation, Inc. Permissions on back. interactively replace a text string M-% using regular expressions M-x query-replace-regexp replace this one, go on to next replace this one, don’t move skip to next without replacing replace all remaining matches back up to the previous match exit query-replace enter recursive edit (C-M-c to exit) SPC or y , DEL or n ! ^ RET C-r When two commands are shown, the second is a similar command for a frame instead of a window. delete all other windows C-x 1 C-x 5 1 split window, above and below C-x 2 C-x 5 2 delete this window C-x 0 C-x 5 0 split window, side by side C-x 3 scroll other window C-M-v switch cursor to another window C-x o C-x 5 o select buffer in other window C-x 4 b C-x 5 b display buffer in other window C-x 4 C-o C-x 5 C-o find file in other window C-x 4 f C-x 5 f find file read-only in other window C-x 4 r C-x 5 r run Dired in other window C-x 4 d C-x 5 d find tag in other window C-x 4 . C-x 5 . grow window taller C-x ^ shrink window narrower C-x { grow window wider C-x } Formatting indent current line (mode-dependent) indent region (mode-dependent) indent sexp (mode-dependent) indent region rigidly arg columns indent for comment insert newline after point move rest of line vertically down delete blank lines around point join line with previous (with arg, next) delete all white space around point put exactly one space at point fill paragraph set fill column to arg set prefix each line starts with set face TAB C-M-\ C-M-q C-x TAB M-; C-o C-M-o C-x C-o M-^ M-\ M-SPC M-q C-x f C-x . M-o Case Change uppercase word lowercase word capitalize word uppercase region lowercase region M-u M-l M-c C-x C-u C-x C-l The Minibuffer The following keys are defined in the minibuffer. complete as much as possible TAB complete up to one word SPC complete and execute RET show possible completions ? fetch previous minibuffer input M-p fetch later minibuffer input or default M-n regexp search backward through history M-r regexp search forward through history M-s abort command C-g Type C-x ESC ESC to edit and repeat the last command that used the minibuffer. Type F10 to activate menu bar items on text terminals. GNU Emacs Reference Card Buffers select another buffer list all buffers kill a buffer C-x b C-x C-b C-x k Transposing transpose transpose transpose transpose characters words lines sexps C-t M-t C-x C-t C-M-t Spelling Check check spelling of check spelling of check spelling of toggle on-the-fly current word all words in region entire buffer spell checking M-$ M-x ispell-region M-x ispell-buffer M-x flyspell-mode Tags find a tag (a definition) M-. find next occurrence of tag C-u M-. specify a new tags file M-x visit-tags-table regexp search on all files in tags table M-x tags-search run query-replace on all the files M-x tags-query-replace continue last tags search or query-replace M-, Shells execute a shell command execute a shell command asynchronously run a shell command on the region filter region through a shell command start a shell in window *shell* M-! M-& M-| C-u M-| M-x shell Rectangles copy rectangle to register kill rectangle yank rectangle open rectangle, shifting text right blank out rectangle prefix each line with a string C-x C-x C-x C-x C-x C-x r r r r r r r k y o c t C-x C-x C-x C-x C-x M-/ a a a a a g l i g i l e Abbrevs add global abbrev add mode-local abbrev add global expansion for this abbrev add mode-local expansion for this abbrev explicitly expand abbrev expand previous word dynamically Miscellaneous numeric argument negative argument quoted insert C-u num M-C-q char Regular Expressions any single character except a newline zero or more repeats one or more repeats zero or one repeat quote special characters quote regular expression special character c alternative (“or”) grouping shy grouping explicit numbered grouping same text as nth group at word break not at word break entity match start line ^ word \< symbol \_< buffer \‘ class of characters match these explicit set [ ... ] word-syntax character \w character with syntax c \sc character with category c \cc Registers . (dot) * + ? \ \c \| \( . . . \) \(:? . . . \) \(:NUM . . . \) \n \b \B match end $ \> \_> \’ match others [^ . . . ] \W \Sc \Cc International Character Sets C-x r s C-x r i save value of point in register jump to point saved in register C-x r SPC C-x r j Keyboard Macros start defining a keyboard macro C-x ( end keyboard macro definition C-x ) execute last-defined keyboard macro C-x e append to last keyboard macro C-u C-x ( name last keyboard macro M-x name-last-kbd-macro insert Lisp definition in buffer M-x insert-kbd-macro Commands Dealing with Emacs Lisp eval sexp before point eval current defun eval region read and eval minibuffer load a Lisp library from load-path C-x C-e C-M-x M-x eval-region M-: M-x load-library Simple Customization specify principal language C-x RET l show all input methods M-x list-input-methods enable or disable input method C-\ set coding system for next command C-x RET c show all coding systems M-x list-coding-systems choose preferred coding system M-x prefer-coding-system Info enter the Info documentation reader find specified function or variable in Info Moving within a node: scroll forward scroll reverse beginning of node Moving between nodes: next node previous node move up select menu item by name select nth menu item by number (1–9) follow cross reference (return with l) return to last node you saw return to directory node go to top node of Info file go to any node by name Other: run Info tutorial look up a subject in the indices search nodes for regexp quit Info save region in register insert register contents into buffer customize variables and faces M-x customize Making global key bindings in Emacs Lisp (example): (global-set-key (kbd "C-c g") ’search-forward) (global-set-key (kbd "M-#") ’query-replace-regexp) Writing Commands C-h i C-h S SPC DEL b n p u m n f l d t g h i s q (defun command-name (args) "documentation" (interactive "template") body) An example: (defun this-line-to-top-of-window (line) "Reposition current line to top of window. With prefix argument LINE, put point on LINE." (interactive "P") (recenter (if (null line) 0 (prefix-numeric-value line)))) The interactive spec says how to read arguments interactively. Type C-h f interactive RET for more details. c 2015 Free Software Foundation, Inc. Copyright For GNU Emacs version 24 Designed by Stephen Gildea Permission is granted to make and distribute modified or unmodified copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs manual, see: http://www.gnu.org/software/emacs/#Manuals Emacs Emacs Ta fram hjälp Uppgift 6.7 I detta kapitel stod det att kommandot C-x = beter sig lite annorlunda när det får ett prefixargument. Hur beskrivs den skillnaden i kommandots hjälptext? (Citera!) Ta fram en förteckning med Emacskommandon som innehåller »paragraph« i sitt namn för att hitta kommandon som gör saker med hela stycken av texten. Det står vad kommandona heter och hur man kan utföra dem. (Om det inte går på annat sätt så med M-x .) Ibland finns det flera sätt att utföra samma kommando. Uppgift 6.13 Man rör sig runt i bufferten med vanliga förflyttningskommandon som t. ex. <up> och <down>, så dessa fungerar inte som i terminalen så att de tar fram tidigare kommandon. Vad kan man istället ge för kommandon för att få detta? Hur såg du det? Ramar Kommandon som gör saker med ramar (frames) börjar med C-x 5. Ta reda på vad det finns för olika kommandon som börjar med C-x 5 och har ett tecken till. Uppgift 6.14 Vad heter kommandot med vilket man kan öppna en fil i en annan ram som du använde i uppgift 6.1? Jämföra filer med Ediff Uppgift 6.8 I den förteckning du fått fram nämns forward-paragraph för att gå fram ett stycke. Vad finns det för olika kortkommandon för det i Emacs? När man tar fram kommandon som innehåller något i sitt namn kan man också ge ett regexp. Gör det för att ta fram kommandon vars namn slutar på »regexp«. Alltså ska du inte få med t. ex. kommandot regexp-builder, för det slutar ju inte så. /local/kurs/ids/verb.txt har ändrats en del jämfört med motsvarande fil för flera år sen, /local/kurs/OLD/ids09/verb.txt. Nu ska du använda ett Emacskommando för att jämföra dessa. Öppna båda dessa filer i Emacs. Uppgift 6.15 Namnet på en buffert i Emacs brukar ju vara som filnamnet. Hur tycks Emacs sätta namn på buffertar när man öppnar flera filer med samma namn? I menyn Tools Compare (Ediff) hittar du ett Emacskommando för att jämföra två buffertar. Uppgift 6.9 Hur gjorde du det? Använd det! (Välj bufferten med den äldsta filen Uppgift 6.10 Vad visade Emacs för resultat från först (A) och sen den nya (B).) Du får en egen liten ram som heter Ediff. De detta? viktigaste kommandona här är SPC (mellanslag De flesta av dessa kommandon finns det in- alltså) för att gå till nästa skillnad och DEL för te snabbkommandon för, utan det är M-x som att gå till förra skillnaden. Prova att gå fram några nämns för att köra dem, men det finns några un- steg! Det finns annat att trycka än SPC och DEL och dantag som har snabbkommandon. det står hur du kan få hjälp. Uppgift 6.11 Ett av dessa undantag är ett kom- Uppgift 6.16 Hur många skillnader räknar Ediff mando för att visa sådant som matchar ett visst re- med mellan dessa filer? guljärt uttryck på ett visst sätt (med en viss face). Uppgift 6.17 Vilken tangent kan man använda Vad heter det kommandot? här för att hoppa till en viss skillnad genom att Uppgift 6.12 Snabbkommandot för det kom- ange dess nummer som prefixargument? mandot består av tre delar. Ge de två första delarna och tryck sen på hjälptangenten för att få veta Uppgift 6.18 Vad består skillnad nummer 313 vad det finns för möjliga kommandon som börjar av? likadant. Hur såg hjälpen du fick då ut? (Alltså Uppgift 6.19 Vad består skillnad nummer 145 innehållet i bufferten *Help* då.) av? Emacs-kommandot shell finns det inget snabbkommando för, så det får man lov att ge med M-x. Gör så! Detta kör ett skal inne i Emacs. Uppgift 6.20 Hur avslutar man Ediff? Det finns flera andra Ediff-kommandon som du såg i menyn. Ett ytterligare som av någon anledning inte fanns i menyn är ediff-backup. 65 INLUPP 6: VERSIONSKONTROLL OCH EMACS Ta fram beskrivningen av detta kommando nu när du vet dess namn. Uppgift 6.21 Hur lyder den beskrivningen? Prova detta kommando med dodo.txt. Uppgift 6.22 Hur skrev du för att köra detta kommando? Lägen I uppgift 4.41 använde du ett kommando som aktiverar en minor mode. Ge det kommandot igen! Uppgift 6.23 Att denna minor mode är aktiv visas i informationsraden. Hur? Uppgift 6.24 Om du håller muspekaren över detta, vad står det då att vänster musknapp gör där? Uppgift 6.25 Hur kan du slå av denna minor mode? Tangentbordsmakron Med makron kan man »spela in« tangenttryckningar för att sedan upprepa dem flera gånger. Gå till Emacs-dokumentationen i Info (t. ex. med Help Read the Emacs Manual ) och välj menyalternativet »Keyboard Macros« där. Uppgift 6.26 Så vilken tangent kan du använda för att börja spela in? Uppgift 6.27 Och vilken tangent för att sluta spela in (avsluta definitionen)? När detta går bra så spela in medan du gör det. Stå i början av den första raden som ska ändras och tryck på tangenten för att spela in. Ändra raden som du ska och avsluta genom att placera dig i början av nästa rad och avsluta inspelningen. Nu kan du trycka på den senaste tangenten igen för att utföra samma sak för den raden, osv. för alla rader, så att alla rader kommer att bestå av ett delstatsnamn, ett mellanrum och dess årtal inom parentes. När det är klart så spara och checka in resultatet! Uppgift 6.29 Hur skrev du ditt makro? När ditt makro fungerar bra, så gör M-x insert-kbd-macro i svarsfilen för att få fram svar på denna fråga. När du får fråga om name så tryck bara retur. Detta lägger in kod som visar ditt makro. Klar för idag? När du slutar för dagen, så checka in det du har gjort hittills i ids6.txt innan du går! Om du har ändrat saker i tidigare labbar så checka in dem också innan du går. Gå i skalet till Subversionkatalogen och ge kommandot svn status där. Om du får ett tomt resultat är allt som det ska. Om du får rader som börjar med »M« är det filer som är modifierade men inte incheckade. Om du får rader som börjar med »?« är det filer som inte är registrerade. Se till att inga av dina labbfiler listas där. Checka in ändringar och kolla med svn status igen. Uppgift 6.28 Det finns andra sätt att ta reda på detta, men slå ändå upp i Info för att se att du kan det också. Kontrollfråga: Vad är det för nummer på detta avsnitt i Info? (De övriga kommandona som har med makron att göra kan du strunta i denna gång.) Kopiera us-states.txt till us-states-6.txt i den katalog som sköts av Subversion. Öppna kopian i Emacs och checka in den. Placera dig sen först på första raden. Använd nu enbart kortkommandon från tangentbordet för att ändra den raden från 1787-12-07 Delaware till Delaware (1787) genom att »döda« årtalet och sen klistra in det igen på rätt ställe tillsammans med övriga ändringar. (I resultatet är det bara ett mellanslag mellan delstatsnamn och parentes.) 66 Kommer jag åt filerna hemifrån?: Ja, om du har svn på din dator kan du skapa en arbetskatalog med samma filer där också. När du ger det första kommandot för att checka ut katalogen måste du skriva svn://stp.lingfil.uu.se/ids15/username istället för bara svn://stp/ids15/username för att den ska hitta servern. Om du har gjort ändringar på ena stället så ge kommandot svn update på andra stället för att få in ändringarna där också. Kapitel 7 LaTeX LaTeX är ett typsättningsprogram. Det är ett sätt att göra texter färdiga för tryck som skiljer sig från ordbehandlare och mer liknar att lämna in ett manus till ett sätteri. Input är en vanlig textfil skriven i en editor i vilken texten blandas med kommandon för typsättning. Dessa filer brukar ha namn som slutar med ».tex«. LaTeX används mycket för akademiska artiklar. Det finns bra stöd för sådant som bibliografier och källhänvisningar. Matematisk sats är dess specialitet, men även inom t. ex. lingvistik används det mycket. Tidskriftsartiklar inom datorlingvistik skrivs oftast med LaTeX, och STPare skriver sina exjobb och ibland kursrapporter i LaTeX. LaTeX bygger på ett tidigare system TEX. I denna text talas hädanefter om LaTeX även när det som sägs inte är specifikt för LaTeX, utan gäller för TEX överhuvudtaget. Traditionellt producerar LaTeX output på ett särskilt format som heter DVI (Device Indepen- TEX LATEX Figur 7.1: När logotypen TEX med det nersänkta E:et inte kan användas brukar man skriva »TeX«. För LaTeX finns det också en logotyp, LATEX, men den använder jag inte i detta kompendium. dent), men det går även att producera PDF, och det är vad denna text utgår från. PDF (Portable Document Format) är ett populärt filformat utvecklat av Adobe Systems. 7.1 Stycken och rader I själva texten spelar det ingen roll var man bryter raderna i input. LaTeX kommer att bryta raderna i den satta texten där den finner det bäst att göra det sen ändå. Man markerar nytt stycke med tomrad, så som nytt stycke ofta visas t. ex. i text på bildskärm. Vanligen visas nytt stycke (paragraph på engelska) istället med indrag i satt text på papper, så som i denna text. Nu kommer ett nytt stycke: Men hur det visas beror som mycket annat på vad är för slags dokument man skriver. När man behöver göra något särskilt i texten använder man vissa speciella tecken och olika kommandon för det. 7.2 Allmän struktur Ett litet LaTeX-dokument kan se ut som i figur 7.2, som både visar LaTeX-koden och dess resultat. Själva texten står mellan \begin{document} och \end{document}. Före det, i dokumentets huvud, kan en del funktionalitet ändras, bland annat genom att extra paket laddas in, som här, där ett paket »url« laddas in. En sak man kan se direkt är att klamrar {} används som parenteser för att hålla ihop text i LaTeX. Exemplet har två avsnitt (section) med rubrik. Det finns två exempel på matematik. Dels en numrerad ekvation mellan \begin{equation} och \end{equation} och dels en kort text mellan \( och \). I den matematiska texten finns en del extra kommandon, och vanliga bokstäver skrivs kursivt som variabler. 67 7. LATEX \documentclass[a5paper]{article} \usepackage{url} \begin{document} \author{Albert Einstein} \title{Special Relativity} \date{June 30, 1905} \maketitle \section{Some text} Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Read more at \url{http://www.alberteinstein.info/}! Special Relativity Albert Einstein June 30, 1905 1 Some text Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Read more at http://www.alberteinstein.info/! 2 Conclusions I have shown that e = mc2 , and further that \section{Conclusions} I have shown that \( e = mc^2 \), and further that \begin{equation} m = { m_0 \over \sqrt{1 - { v^2/c^2 }}} \end{equation} m0 m= p 1 − v 2 /c2 (1) 1 \end{document} Figur 7.2: Einsteins speciella relativitetsteori (i starkt förkortad version). Till vänster LaTeX-kod och till höger dess resultat. 7.3 Kommandon med \ (bakstreck) 7.3.1 Argument till kommandon En del kommandon tar argument. Då blir det som kommer direkt efter kommandot argument till kommandot. Ett exempel är kommandot \= som lägger en makron (övre streck) över sitt argument, så Liep\=aja ger »Liepāja« (en stad i Lettland). Ett exempel på ett kommando av den första Ett annat exempel är \author i figur 7.2. Där sorten ses i 42\,000\,000 som ger »42 000 000« är argumentet (»Albert Einstein«) längre än ett (42 miljoner). Där används \, som lägger in ett tecken och står därför inom klamrar. smalt mellanrum som inte kan brytas. Så markerar man vanligen tusental för stora tal i tryckt text.1 I Einstein-exemplet finns det två andra exempel, \( och \), som påbörjar respektive avslu- 7.4 Klamrar för grupper tar matematisk text. Den andra sorten, med en eller flera bokstä- Med {} avdelar man nämligen en grupp. Detta ver, finns det flera exempel på i figur 7.2, t. ex. är ett sätt att behandla en del av texten som en \author och \maketitle, och \sqrt för square enhet, och används framför allt för att ge denna root (= kvadratrot) i den matematiska texten. Al- del som argument till ett kommando, t. ex. komla tecken går att skriva med hjälp av bara ASCII. mandot \emph som betonar en text (emphasize) Om man t. ex. inte hittar »©« på sitt tangentbord genom att kursivera den: LaTeX är skapat av \emph{Leslie Lamport} ger »LaTeX är skapat kan man skriva \copyright istället. av Leslie Lamport«. Exemplet Liepāja ovan hade kunnat skrivas Liep\={a}ja, men här behövs inget ihopgruppe1 På bland annat svenska. På t. ex. engelska används istället rande, utan det räcker med Liep\=aja eftersom oftast komma som tusenavskiljare: 42,000,000. argumentet bara är ett tecken. Kommandon i LaTeX inleds normalt med bakstreck. Sedan följer antingen ett tecken som inte är en bokstav, eller ett ord med en eller flera bokstäver. 68 7.5. Speciella tecken 7.5 Speciella tecken Tabell 7.1: Kommandon för att välja typsnitt i LaTeX Bakstreck och klamrar är inte de enda tecken som har särskilda betydelser i LaTeX. Här är en längre lista: # $ % & ~ _ ^ \ { } Om man vill skriva dessa tecken får man därför använda särskilda kommandon. Kommandona \# \$ \% \& \_ \{ \} finns för att verkligen skriva motsvarande tecken. 7.6 Titel och rubriker Titeln i början av dokumentet skapas av \maketitle. Den text som det blir beror på vad man har skrivit innan dess för argument till kommandon som \title, \author och \date, som själva inte skriver någon text i dokumentet. Rubriker gör man med kommandon som \section{Förord}. Lägre rubriknivåer ges med \subsection och \subsubsection. Vilken stil sådana rubriker skrivs med beror på ens dokumentklass och inställningar. Dokumentklassen avgör också vilka nivåer som finns tillgängliga. I bland annat dokumentklasserna book och report finns även \chapter som en högre nivå. 7.8 Kommando Effekt \emph{text} Betonad \textrm{text} \textsf{text} \texttt{text} Vanlig text Sans serif Skrivmaskin \textmd{text} \textbf{text} Medium (vanlig) Fetstil \textup{text} \textit{text} \textsl{text} \textsc{text} upprätt Kursiv lutande KAPITÄLER Typsnitt I tabell 7.1 visas olika kommandon för att byta typsnitt i LaTeX. Varje typsnitt tillhör en familj, en serie och en form. Med »skrivmaskin« menas här en icke-proportionell font, dvs. en där alla tecken är lika breda. Det mest använda av dessa kommandon är \emph{...} för att betona en del av texten. I de flesta sammanhang visas detta med kursiv stil. Det går att kombinera olika familjer, serier och former med varandra. För att skriva text i andra storlekar finns kommandon som \tiny, \scriptsize, 7.7 Omgivningar med begin–end \footnotesize, \small, \large, \Large, \LARGE, \huge och \Huge. Dessa tar inga arguI många fall kan man avgränsa en speciell del av ment utan ändrar storleken på allt som följer texten som en omgivning (environment). En så- inom den grupp de står. Grupper avgränsas av {} dan omgivning börjar med ett kommando \begin och av omgivningar. Med {\huge hej} får man med något argument och slutar med ett \end , till exempel, och med {\tiny hej} får med samma argument. Detta exempel visar koman hej. Utan klamrarna runt skulle ändringen den över och resultatet under den streckade linfortsätta att gälla för resten av texten! jen. hej \begin{itemize} \item surprise \item fear \item ruthless efficiency \end{itemize} 7.9 Hårt mellanslag (~) Med tildetecknet (~) skriver man ett hårt (fast) mellanslag, det vill säga ett där det inte bör bli radbrott. Man bör till exempel helst skriva John~F. Kennedy istället för John • surprise F. Kennedy eftersom man annars kan råka få ett • fear radbrott som anses vara osnyggt, som i denna me• ruthless efficiency ning. Förutom förnamn och initialer anses det även bäst att hålla ihop många fall av ord plus Omgivningen itemize avgränsar alltså en kort sifferuttryck som »figur 1« och »kapitel 2«, punktlista, och i den finns det ett särskilt kom- samt numrerade kungar som »Kristian II«. mando \item som anger att en ny punkt börjar. Med omgivningen enumerate får man istället 7.10 Bindestreck och tankstreck en numrerad lista som börjar med 1 och går uppåt. Det finns olika långa vågrätta streck vilket skrivs Vi har redan sett omgivningen document som med ett till tre tecken i rad: omger hela texten. - (-) Bindestreck, divis 69 7. LATEX -- (–) en-dash --- (—) em-dash. Den mellanlånga används till intervall: 14--15 juni ger 14–15 juni. På svenska används den också som talstreck och tankstreck – då med mellanrum runt sig. (I engelsk och amerikansk typografi används istället oftast det allra längsta strecket som tankstreck—då utan några mellanrum runtom.) Om man har flera väljare så listas de med komma mellan sig. Det här kompendiet är skrivet med LaTeX och börjar \documentclass[a4paper,twocolumn]{memoir} 7.12.1 usepackage Förutom att man på ovanstående sätt kan anpassa dokumentklassen i viss mån kan man även ladda in paket i LaTeX som kan göra allt möjligt, t. ex. definiera fler kommandon eller ändra be7.11 Citattecken tydelsen på det man redan har. Detta görs med På s. 39 stod det om hur man i en del samman- \usepackage. I figur 7.2 används ett paket »url«. hang använder ASCII-tecknen ` och ' för att be- Det gör att ett kommando \url definieras och teckna de olika citattecknen före respektive efter kan användas senare i dokumentet. Vitsen med detta är framförallt att få raddelett citat (på t. ex. engelska). Så gör man i LaTeX. ning på ett annat sätt än normalt för sådana. Så för att få ‘quote’ skriver man `quote' och för Kommandot ser till att det inte blir avstavning att få “quote” skriver man ``quote''. På svensmed bindestreck i delarna eftersom det kan göka används däremot samma tecken före och efter: ra det oklart om bindestrecken ingår i urlen/ ''citat'' (som ger ”citat”). sökvägen eller inte. Dessutom kommer ~ att bli Observera att man skriver två citattecken efen tilde och inte tolkas som hårt mellanslag så ter varann för att få dubbelcitat. Det raka dubbelsom är det normala, och hela texten skrivs ut citattecknet " i ASCII används aldrig som citatmed en särskild stil, normalt skrivmaskinsstil. I tecken i LaTeX, eftersom det skulle vara oklart åt samma paket definieras också ett liknande komvilket håll det skulle vara riktat. mando \path för att skriva sökvägar, som t. ex. \path{~/Desktop/foo.txt}. Ett vanligt paket för att kunna inkludera bilder 7.12 Dokumenthuvudet är graphicx. (Observera stavningen!) (Både url och graphicx är med från början i Det som blir själva texten står som tidigastupp.) re sagt i en omgivning document, dvs. mellan Även till \usepackage kan man ge extra in\begin{document} och \end{document}. Före formation inom []. Paketet babel hanterar t. ex. detta finns det så kallade dokumenthuvudet. sånt som är speciellt för olika språk, och då ger Den första raden anger dokumentklass kan som man språket inom [] så här: enklast se ut som \documentclass{article}. Några standarddokumentklasser som följer med \usepackage[swedish]{babel} LaTeX är article, report och book, men det finns även ett stort antal andra dokumentklasDet gör t. ex. att kommandot för att lägga in inser skrivna på olika håll. En del är specialiserade nehållsförteckning (se avsnitt 7.15) använder »Inför en visst slags text, t. ex. affärsbrev, doktors- nehåll« som rubrik istället för »Contents« och likavhandlingar eller mötesprotokoll. I inluppen får nande för andra kommandon med annars fixa texni använda en lokal klass stupp (språkteknologi ter. Det gör också att svenska avstavningsregler uppsala) som bygger på en som heter scrartcl. används. Med stupp görs följande två automatiskt, men När man anger dokumentklass kan man också ge ett optionellt argument inom [] där man listar annars är det något som du oftast bör ha med, ett antal väljare som ändrar hur den klassen fun- t. ex. i standarddokumentklasserna book, report gerar på olika sätt. Vilka väljare som kan ges be- och article: ror på vilken klass man använder, men några som standardklasserna använder är: \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} a4paper Gör layout för att passa A4-papper. Det är default för stupp. Den första raden talar om vilken teckenkodning 10pt, 11pt, 12pt Någon av dessa kan användas LaTeX-filen är skriven med. Utan den fungerar inför att ange hur stor texten ska vara i »punkte tecken som åäö i filen. ter«. Det görs annorlunda i stupp. Den andra raden talar om vilken fontkodning twocolumn Skriv texten i två kolumner per sida LaTeX ska använda. (Detta behövs för att åäö ska räknas som egna bokstäver och inte bara som ett Hela raden kan se ut t. ex. så här: a eller o med accent. Utan detta kommer klipp\documentclass[a4paper]{report} och-klistra från den resulterande PDF-filen ge fel 70 7.13. Figurer Se till exempel figur~\ref{fig:knuth} Figur 7.3: Donald E. Knuth har skrivit TEX som LaTeX bygger på. resultat, och dessutom kommer avstavningsmönster som innehåller åäö inte att fungera.) 7.13 Figurer Figurer är floats. De har inte en fix exakt placering i texten, utan kan flyta runt och passas in där de får rum i den ordning som de kommer i texten. Se till exempel figur 7.3 som på ett sätt kan sägas ha hamnat mitt i en mening. Den figuren har skapats med ungefär följande: \begin{figure} \centering \includegraphics{donknuth} \caption{Donald E. Knuth har skrivit \TeX\ som LaTeX bygger på.} \label{fig:knuth} \end{figure} Själva bildfilen togs in med kommandot \includegraphics. För att det ska fungera måste ett extra paket graphicx användas, så därför har jag skrivit \usepackage{graphicx} i dokumentets huvud. Det följer med automatiskt med stupp, så i inluppen behöver ni inte göra det. Filen heter egentligen donknuth.png, men filnamnsändelsen behöver inte anges. Med \caption ger man en bildtext som argument. En viktig del är kommandot \label som ger denna figur en etikett – i exemplet »fig:knuth«. Figurer brukar man referera till i texten, och då vill jag inte behöva tänka på figuren som figur »7.3«, för det numret kan ju ändras allteftersom jag tar bort och lägger till figurer medan jag skriver, utan istället tänker jag på den som »figuren Knuth« och kallar den »fig:knuth« i LaTeX-koden. När man vill referera till en sådan etikett i sin text använder man kommandot \ref med etiketten som argument. Jag har därför ovan skrivit vilket gav texten Se till exempel figur 7.3 men kan ändras om jag lägger till eller tar bort figurer. Märk även: • Kommandot \centering anger att text och annat ska centreras. Eftersom det står inne i en begin-end-omgivning gäller det bara innanför den. • Det är inget som nödvändigtvis ingår i figure att det ska vara en bildfil som inkluderas. Det hade kunnat stå godtycklig LaTeX-text istället. Ibland kan man t. ex. vilja lägga ut ett lite programkod i en figur med en verbatim-omgivning. Se avsnitt 7.17. Man skriver in figuren ungefär på det ställe i texten där man vill ha den (normalt där man första gången refererar till den med \ref), så dyker den upp ungefär där, beroende på var den passar in. (Mer detaljer om hur man kan styra placeringen tas inte upp här.) Ofta behöver man anpassa en bildfil för att den ska passa som illustration. I synnerhet kanske bilden inte har rätt storlek för att passa in. Ett sätt att lösa sådant är att ange hur hög bilden får vara, så här: \includegraphics[height=5cm]{dragon} Bilden kommer att förminskas (eller förstoras) så att den får den önskade höjden. Man kan istället ange bildens bredd, med t. ex. width=10cm istället. Ibland kan det vara praktiskt att ange width=\linewidth som ger samma bredd som texten har. 7.14 Kommentarer med % I LaTeX fungerar procenttecknet som kommentarstecken. LaTeX ignorerar allt som följer efter ett procenttecken fram till slutet av raden. Med användning av detta kan man kommentera bort delar av texten så att de inte syns i det man producerar, men ändå finns kvar där i texten man arbetar med ifall man ångrar sig senare. Det är också vanligt att man använder det för kommentarer till sig själv innan texten är färdigskriven. Här är som exempel ett litet utdrag ur min LaTeX-kod till teckenrepresentationskapitlet, närmare bestämt en del från s. 40 med en lista med exempel på locales: \item \texttt{fr\_CA} : \item \texttt{zh\_CN} : \item \texttt{zh\_TW} : % \item \texttt{nb\_NO} % \item \texttt{nn\_NO} Franska i Kanada Kinesiska i Kina Kinesiska i Taiwan : Bokmål : Nynorska 71 7. LATEX Här kan man se hur jag i något skede av skrivandet hade med två exempel till, som jag sen kommenterade bort så att de inte kom med i kompendiet. Genom att göra det till en kommentar istället för att ta bort raderna helt skulle jag enkelt kunna ta tillbaks dessa exempel om jag ångrat mig igen. Det finns annat som också kan kräva flera pass genom filen. Med kommandot \tableofcontents kan man t. ex. lägga in en innehållsförteckning till ett dokument, men vilka kapitel som finns var vet inte LaTeX förrän vid andra körningen, så efter första körningen är innehållsförteckningen ännu tom. 7.15 7.16 Att referera inom texten För att kunna referera till en annan del av texten använder man alltså kommandona \label och \ref som båda tar ett argument. Det gäller inte bara figurer och tabeller, utan andra delar också, t. ex. numrerade kapitel och andra avsnitt. Även då vore det dumt att skriva »kapitel 7« i texten, för innan man har skrivit klart så har man kanske flyttat det kapitlet eller delat upp ett tidigare kapitel i två så det har ett annat nummer. Istället kan man använda kommandot \label direkt efter kommandon som \chapter och \section och sen hänvisa tillbaka till dessa etiketter med \ref som vanligt. Exempel: På sidan 70 står denna parentes, här visad med LATEX-kod och med dess resultat: (se avsnitt~\ref{sec:referera}) (se avsnitt 7.15) Med en etikett kallade jag avsnitted om att referera för sec:referera så att jag kunde hänvisa till det med \ref och få rätt siffror. Att det står ~ istället för vanligt mellanslag mellan »avsnitt« och siffrorna är bara för att undvika nyrad just där. Med \pageref refererar man istället till den sida där motsvarande etikett finns: se avsnitt~\ref{sec:referera} på sidan~\pageref{sec:referera} se avsnitt 7.15 på sidan 72 Man brukar ge figurer etiketter som börjar med »fig:«, kapitel etiketter som börjar med »chap:«, avsnitt etiketter som börjar med »sec:« osv. för att lätt skilja dem åt. När man kör LaTeX på en fil lär den sig sånt som att fig:knuth ska bli 7.3 så att den vet det till nästa gång man TeXar filen. Det gör att när en hänvisning sker framåt i texten så behöver man TeXa filen en gång till innan alla detaljer stämmer. (Det talar LaTeX om vid körningen i så fall, i stil med LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. 72 Övriga tecken Vill man skriva tecken som man inte hittar på tangentbordet kan man använda LaTeX-kommandon för det. I tabell 7.2 visas några kommandon för att sätta accenter över och under bokstäver, inklusive en del lite ovanligare accenter. Alla kommandon hade kunnat använda klamrar runt sina argument, men i tabellen används detta inte för de kommandon vars namn består av en icke-bokstav. 7.17 verbatim och \verb När man vill inkludera skalkommandon eller programkod i en rapport är det besvärligt om en mängd tecken tolkas speciellt av LaTeX. Då kan man använda en speciell omgivning verbatim. Efter \begin{verbatim} återges allt utan några särskilda tolkningar fram till nästa \end{verbatim}. Så genom att skriva \begin{verbatim} Här kan jag skriva \ och % osv. \end{verbatim} får man Här kan jag skriva \ och % osv. Skrivmaskinsstil används, så som man ofta gör när man återger programkod. Tabell 7.2: Några accentkommandon i LaTeX \'o \`o \^o \"o \~o \=o \.o \u{o} \v{o} \H{o} \c{o} \d{o} \b{o} ó ò ô ö õ ō ȯ ŏ ǒ ő o̧ o. o ¯ akut accent grav accent cirkumflex diaeresis/umlaut tilde makron långt ungerskt umlaut cedilj d = dot b = bar 7.18. LaTeX i Emacs – AUCTeX För kortare text inne i ett stycke kan man använda kommandot \verb. Här är ett till exempel med först kod och sen resultat som visar hur man kan använda det: Med det reguljära uttrycket \verb![^0-9]$! fungerade det. Ett annat problem med UTF-8 i LaTeX är att av tekniska skäl måste det ’godtyckliga’ tecknet som används med \verb vara ett ASCII-tecken, så det går inte att använda t. ex. \verb§foo§ eftersom § inte finns med i ASCII. Ofta används något av tecknen !|+=_ som brukar avdela texten rätt tydligt. Med det reguljära uttrycket [^0-9]$ fungerade det. 7.20 Man slipper att ^ och $ tolkas särskilt av LaTeX. För att man ska kunna ha med vilka tecken som helst i argumentet till \verb så beter den sig speciellt. Istället för {} runt argumentet sätter man ett godtyckligt tecken som inte är en bokstav före och efter. Det betyder alltså samma sak att skriva \verb!foo! som \verb=foo= som \verb{foo{. Inom verbatim så bryter LaTeX raderna precis där man själv har brutit raderna, så se upp med att ha för långa rader som inte syns helt för att de sticker utanför papperet! Det kan leda till att texten spiller ut Det finns paket som är till för snitsigare kodlistningar också, men den enkla omgivningen verbatim duger bra ibland. 7.18 Mer information Det finns gott om introduktioner till LaTeX. På http://stp.lingfil.uu.se/lila/tex/ finns en del användbara länkar, bland annat till sånt som handlar specifikt om användning av TEX för lingvistik. Det finns mycket i LaTeX som passar för språkvetenskap, som funktionalitet för att rita träd, skriva fonetisk skrift och grammatiska strukturer enligt flera formalismer med mera. där den inte hör hemma. Dessutom blir det svårt att se va LaTeX i Emacs – AUCTeX Vi använder ett särskilt paket AUCTeX för att använda LaTeX i Emacs. (Det är annars ännu inte det normala i Emacs, så om du editerar LaTeXfiler i Emacs på en annan dator kan det bete sig annorlunda.) Det kommer att användas i labben och ger exempel på hur ett editeringsläge i Emacs kan ge särskilt stöd för en viss sorts text. Det sker bland annat genom att Emacs förstår sig på syntaxen i LaTeX-filer och därmed visar kommandon, text och kommentarer i olika färg, och ger »lagom« långt indrag med TAB-tangenten, beroende på vad det är man skriver. Det märks också på att det finns särskilda kommandon för att lägga in vanliga saker i filen, t. ex. figurer och tabeller; samt att man kan köra LaTeX på filen med kommandon direkt från Emacs och att den då även tolkar eventuella felmeddelanden och direkt tar en till rätt rad i den fil man skrivit. Detta liknar motsvarande stöd för olika programspråk när man programmerar. 7.19 UTF-8 och LaTeX Allt fungerar inte perfekt med Unicode i LaTeX. Långt ifrån alla tecken fungerar rakt av att bara stoppa in i filen. För att skriva på ryska (porusski) är det inte bara att stoppa in sådana tecken i filen, t. ex. 73 Inlupp 7: LaTeX Innan något annat Gå till kurskatalogen och ge kommandot svn co svn://stp/ids15/alla Det skapas en ny Subversion-katalog alla som du ska använda senare i labben, men inte nu direkt. Första LaTeX-dokumentet Dessa labbinstruktioner är pratiga med detaljerade instruktioner som du får följa steg för steg. Början I denna labb ska du skapa en LaTeX-fil med diverse innehåll i Emacs. Börja med att i Emacs öppna en ny fil latex1.tex i katalogen från förra gången som heter som ditt användarnamn och som Subversion sköter. Emacs känner igen ändelsen .tex så du hamnar i en särskild Emacs-mode för att editera LaTeX. I informationsraden står det LaTeX/P inom parentesen och du har särskilda menyer, bl. a. en som heter just LaTeX . Det bör också stå Fill i parentesen i informationsraden, eftersom du har slagit på Options Auto Fill in Text Modes i menyerna tidigare. I samma katalog ska du också skapa och checka in ids7.txt med svar på frågor. svara istället stupp. Sen frågas efter Options. Svara ingenting, dvs. tryck bara på RET. Att C-c C-e började på C-c var väl inte någon överraskning? Det är den normala prefixtangenten i Emacs för kommandon som är speciella för ett visst läge, i detta fall för LaTeX-läget. Ett första avsnitt Skriv in \section{Röda rummet}, ny rad, och lägg sedan in filen /local/kurs/ids/rummet2. txt med Emacs-kommandot File Insert File (eller C-x i) som lägger in en fil i din buffert. (Observera att själva texten visas med normal svart text, medan en del kommandon, deras argument och annat speciellt visas i olika färger. Eftersom detta är en ren textfil så är det inte så att olika delar i filen verkligen har olika färg, utan det är bara Emacs som visar det så eftersom den förstår sig på syntaxen och känner till en del viktiga LaTeX-kommandon.) Att tillverka och titta på en PDF -fil Spara filen. Nu när du har en liten text, så tillverka en PDF-fil från detta genom att köra LaTeX på filen. Tryck på C-c C-c för att ge ett kommando för texten. Det står default LaTeX. Det blir bra, så tryck på RET. Ganska snart står det LaTeX: successfully formatted {1} page. Ge nu kommandot C-c C-c igen. Eftersom du redan har lyckats generera en PDF-fil så är defaultkommandot nu stället »View«. Det passar bra, så tryck på RET. Du får upp ett kommando för att titta på PDF-filen. Detta är så att du ska kunna Omgivningen document ändra i detta om du vill, men det duger bra som Varje dokument ska ha en document-omgivning. det är, så tryck på RET igen. Med C-c C-e kan man lägga in en omgivning i Du får upp en annat fönster som visar innehåltexten, så tryck C-c C-e . I minibufferten får du let i din PDF med hjälp av programmet evince. Se en anmodan om att ange environment type och de- till att flytta runt dina fönster så att du ser Emacs fault-värdet är document, dvs. det är vad det blir och evince samtidigt, sida vid sida. om du bara trycker på RET. Gör så! Huvuduppgiften för C-c C-e är att lägga in \begin{nånting} och \end{nånting}, men bero- Huvudet ende vad det är för omgivning det gäller så kan I första stycket har ordet »stickorna« fått en dålig den ordna lite annat åt en också. I detta fall pas- avstavning. sar den på att lägga in deklarationen om vad det är för dokumentklass. Du har fått en fråga om doUppgift 7.1 Var har det avstavats? kumentklass och defaultvärdet är article, men 74 Första LaTeX-dokumentet Det är för att du inte har talat om för LaTeX att texten är på svenska. Gå därför till dokumentets huvud, dvs. i delen mellan \documentclass{...} och \begin{document} och lägg till en rad som talar om språk och TEXa om filen med C-c C-c igen och se hur den visade texten uppdateras. Du får se två Emacsfönster samtidigt. Ett med din LaTeX-fil där du hamnar där det är fel. Ett med en beskrivning av felet. Först står där »ERROR:« och ett kort felmeddelande. Sen återges precis den del där det blev fel och på slutet står en hjälptext om just detta fel. Uppgift 7.2 Hur avstavas »stickorna« efter att du fixat detta? Uppgift 7.4 Hur lyder det där korta felmeddelandet efter »ERROR:«? Den här textfilen använde inte sådana tecken som är speciella i LaTeX, som t. ex. $ eller %, så den gick att stoppa in rakt av. Det finns bara en detalj som inte är helt rätt, och det är att textfilen använder tecknet - i två olika betydelser. Sök upp alla - i filen med C-s i Emacs. I ett fall är det ett bindestreck i ett sammansatt ord och är bra som det är. I ett annat fall är det ett tankstreck. Byt ut det senare mot -- för att få ett längre streck. (Skillnaden är inte så stor, men en del märker såna detaljer.) Lägg in rader med \author{ditt namn}, \title{Labb 7 -- LaTeX} och \maketitle direkt efter \begin{document}, i stil med hur Einstein gjorde i figur 7.2. (Använd ditt namn och inte Strindbergs – du kommer snart lägga in mer text i dokumentet.) I den figuren anges även datum, men ta inte med nån sån rad alls. Kör C-c C-c och LaTeX igen och kontrollera att du fått med titeln. Felmeddelandet bör vara rätt begripligt. Så \foot var visst fel. Du kommer plötsligt på att visstja, det heter \footnote istället! Ändra till detta men råka göra ett nytt fel. Råka byta ut det { som står direkt efter \footnote mot ett mellanslag och TEXa. Du får då ett nytt fel. Gå till det felet. Uppgift 7.5 de? Hur lyder detta nya felmeddelan- Rätta detta, TEXa din fil och se på resultatet. Du kommer antagligen att göra flera oavsiktliga fel på egen hand efter detta, men nu vet du hur du då kan få hjälp om var det är fel. Ibland kommer felmeddelandet att vara hjälpsamt. Ibland kommer du antagligen inte att förstå vad felmeddelandet handlar om, men du får i alla fall en vink om ungefär var i filen det blivit fel. Det formella felet blir inte alltid exakt där du har gjort fel. I det senaste exemplet blev t. ex. felmarkeringen vid slutparentesen } när felet egentUppgift 7.3 Du angav inget datum. Hur gör ligen var att du glömt den inledande parentesen \maketitle med datum då? en bit tidigare. När det har blivit flera fel så kan du använda Nu är dokumentet längre än en sida. I skiftnycfeltriangeln för att gå vidare till nästa fel efter att kelmenyn i evince kan du välja om dokumentet du tittat på (och förhoppningsvis rättat) ett. Men ska visas Continuous eller inte. Prova och se vad har du fått många fel som du inte förstår så kondet innebär! centrera dig på att fixa det första och kör sedan om. Kanske är de andra följdfel av det första. Att göra fel Ibland råkar man skriva fel så att det man har skri- Listan vit inte är en korrekt LaTeX-fil. Har du inte redan Gör ett nytt avsnitt (section) med titeln »Toppgjort det så kommer du att göra det så småning- listan«. Där ska du härma texten i figur 7.4. Anom, så gör det med flit nu för att se hur man får vänd kommandot \emph för att betona ett par ord hjälp med att se var det blev fel. I texten nämns barège-lappar på ett ställe. Du tänker att det är ett svårt ord som kräver en förUse C-c ‘ to display: I meddelandet i ekoklaring, så du tänker skriva en förklarande fotnot arean när det blir fel står det om C-c `. Det gör till det ordet. samma sak som den där feltriangeln ger så du kan Du har (felaktigt) fått för dig att man kan använda det istället om du vill hålla kvar händerna skriva sådana med ett kommando \foot, så lägg på tangentbordet. Men observera i så fall att eftill \foot{Barège är ett slags tunt, glest ter C-c är det en grav accent som är besvärlig att skriva. Den ligger på en död tangent med akut och tyg} direkt efter det svåra ordet. grav accent så den tangenten måste skiftas (så att TEXa sedan om filen med C-c C-c . det blir rätt accent) och sen får man lov att följa Du får ett meddelande i ekoarean om att det efter med mellanslagstangenten för att få ` utan har blivit fel. I ikonraden direkt under menyerna i något under. Emacs har en varningstriangel dykt upp. Tryck på den för att komma till felet. 75 INLUPP 7: LATEX De Unix-kommandon som är mest inne just nu är 1. grep 2. pwd 3. ls 4. sort 5. iconv Figur 7.4: En del av det dokument ni ska skriva. Utseendet kommer inte att bli helt identiskt, för det här kompendiet är inte skrivet med samma fonter eller inställningar. på vilken du svarar mosebacke och trycker RET. Om du gjort rätt så har du därmed lagt in \section{Mosebacke} \label{sec:mosebacke} i bufferten. Skriv ett par inspirerade rader om Mosebacke i detta avsnitt eller bara bla bla bla om du inte orkar hitta på nåt bättre. Nu ska du använda denna etikett för att kunna hänvisa till detta avsnitt från en annan plats i texten. Gå till slutet av första avsnittet (»Röda rummet«) och lägg till följande där: Läs mer om Mosebacke i avsnitt \ref{sec:mosebacke}. i texten som det är gjort där, och använd omgivningen enumerate för att få själva uppräkningen. Använd C-c C-e för att lägga in omgivningen. Uppgift 7.6 Vilken omgivning föreslås som default då? TEXa filen och se vad du får för nytt meddelande i ekoarean när du gör detta. LaTeX vet inte exakt vad det ska stå i första avsnittet förrän den redan tittat igenom hela texten, så du behöver TEXa den igen. Tryck därför C-c C-c igen. Emacs vet att du behöver TEXa om filen, så defaultkommadot är LaTeX. Nu ska du få »successfully formatted« igen. Använd alltså enumerate istället för det som står som default. Du kan använda komplettering. (Vad gäller själva listan kan du skriva andra kom- Uppgift 7.8 Vilken mycket kort text resulterade mandon eller i en annan ordning om du vill.) \ref{sec:mosebacke} i till slut? Uppgift 7.7 När man skriver sådana här listor finns det ett kortkommando för att skriva ett nytt item. Hur lyder det? (Det finns med i LaTeXmenyn.) Urlar Sök upp någon sida på nätet (t. ex. på Wikipedia) med information om Mosebacke. Ändra meningen »Läs mer om Mosebacke. . . « så att den förutom till dit avsnitt sec:mosebacke även hänviSagan sar till webbadressen (urlen) för denna webbsida. Gör ett nytt avsnitt (section) med en rubrik som Använd samma sätt att hänvisa till en url som i passar din saga, och lägg in texten i din saga där. figur 7.2. Se till att hantera eventuella »konstiga« tecken som LaTeX tolkar speciellt ifall du råkar ha sådana i din text. Använd LaTeX-kommandot \emph Kommandot C-c C-c för att betona något ord eller fras i texten. Du har använt kommandot C-c C-c både för att TEXa en fil (LaTeX) och för att titta på resultatet Hänvisningar (View). Du har även sett att Emacs ofta vet vilket kommando du nog vill göra och föreslår LaTeX Hittills har du skrivit in \section själv för hand. igen när det behövs. Man kan också använda ett kommando för det, Men det går att ge andra kommandon där ockvilket även gör det extra lätt att lägga in en etiketter för denna rubrik. Ställ dig på rätt plats för så. Tryck C-c C-c och välj kommandot Clean. nästa avsnitt om du inte redan är där och tryck Det rensar upp en del filer som LaTeX skapar meC-c C-s . Detta lägger in en rubrik. Du får först dan det kör med mellanresultat. Då får en fråga välja hur hög nivå det ska vara på den. Default- om du verkligen vill ta bort dessa filer. värdet section blir bra, så tryck på RET. Därnäst får du skriva titeln på detta avsnitt. Det ska vara Uppgift 7.9 Vilka filer undrar Emacs om du vill »Mosebacke« så skriv så och tryck RET . ta bort? Nu får du en ny fråga: (Optional) What label: sec: 76 (Du kan svara vilket som på frågan nu.) Första LaTeX-dokumentet Figurer Allt som saknas nu är en figur. Välj ut nånting vad som helst i texten att ge en figur till. Det skulle t. ex. kunna vara en bild på en groda om du har en groda med i din saga. Sök upp en lämplig bild på nätet, t. ex. med bildsökning på http://images.google.com/. En bra källa till bilder som det står det fritt att återanvända är annars illustrationer till artiklar i uppslagsverket Wikipedia på http://wikipedia.org/. Välj en bild på något av formaten png, pdf eller jpg. Lägg bilden i samma katalog som latex1.tex. Innan du lägger in själva figuren, så lägg in en hänvisning till den på lämpligt ställe. Om du t. ex. har valt en bild på August Strindberg så skulle du kunna skriva så här i början av avsnittet »Röda rummet«: Här är den kända inledningen till romanen \textit{Röda rummet}. I figur \ref{fig:strindberg} finns en bild på författaren, August Strindberg. Använd en etikett som börjar med ’fig:’ och som visar vad det är för figur. (Det behöver inte likna filnamnet.) Om du försöker TEXa nu (prova!) kommer du att få ett varning om att det blir »unresolved references«. Den etikett som du refererar till definieras aldrig. Uppgift 7.10 Vad syns i texten på det ställe där denna okända referens används? Dags att lägga in själva figuren! Ställ dig antingen före eller efter det stycke där du har med referensen, och tryck C-c C-e för att lägga in en omgivning – denna gång omgivningen figure. Den första frågan du får är (Optional) Float position: Detta behöver du inte svara på (optional) så tryck bara på RET för att strunta i detta. Nästa fråga är viktigare: Caption: Att skriva citattecken: Eftersom man inte använder det raka ASCII-tecknet " som citattecken i LaTeX så läggs istället två tecken in där man trycker på den tangenten i LaTeX-moden i Emacs. Om man verkligen vill skriva ett ", så ska man trycka på tangenten " en gång till direkt efter. Men som sagt, det tecknet används aldrig som citattecken i LaTeX. Ge en bildtext till denna figur. Avsluta med RET. Center? (y or n) Svara y. (Optional) What label: fig: Denna uppgift sägs också vara frivillig, men man vill nästan alltid ha en etikett på figurer så att man kan referera till dem. Skriv det namn som du refererat till med \ref förut. Nu är all formalia överstökad och du har hamnat på rätt ställe för att skriva in det som ska hamna inne i figuren. Lägg in ett kommando för detta som i avsnitt 7.13. TEXa med C-c C-c tills texten är »successfully formatted« igen. Anpassa bildens storlek ifall det behövs, t. ex. om den är så stor att den hamnar på en egen sida eller inte får rum på sidan. Se sidan 71 i så fall! Använda paket Det finns en mängd paket gjorda för LaTeX som lägger till ytterligare kommandon som är till för särskilda användningar. Ett som detta kompendium använder är menukeys som används för skriva menyval, som System Preferences Keyboard på ett snyggt och behändigt sätt. Nämn sist i avsnittet »Topplistan« något program som går att köra från Applications -menyn där du talar om var det finns i menyn och visar det på ett sånt sätt. Använd \usepackage{menukeys} i dokumentets huvud för att kunna använda kommandona i detta paket. För att veta hur du ska skriva in menyn så gör texdoc menukeys för att ta fram dokumentationen för detta TEX-paket. (Ja, det är ännu ett sätt att hitta dokumentationen för något, denna gång specifikt för TEX.) Det är bara avsnitt 1 (Introduction) i dokumentationen du får fram som du behöver, för där finns exempel på hur man gör sånt. Slut på denna del När du är klar med latex1.tex så checka in den. (Kolla en extra gång att det funkar att TEXa den först.) Skriv att du är färdig med den i incheckningsmeddelandet. Checka även in den bild du använde in din figur. Annars skulle det ju inte fungera för mig att TEXa din fil efter att jag checkat ut innehållet i denna katalog. (Du kan öppna den i Emacs och checka in den som andra filer där, fast det är en bild. Emacs kommer att växla mellan att visa innehållet som bild och inte, men det funkar ändå.) 77 INLUPP 7: LATEX Om du kollar med svn status så ser du att svn anmärker på att det ligger filer i katalogen som den inte vet något om, som latex1.pdf och andra filer som skapades av LaTeX. Det är helt i sin ordning. En gemensam sagobok Den där katalogen alla som du skapade först i labben är en arbetskatalog för ett repositorium som ni alla kan ändra i. Gå till den katalogen och ge kommandot svn update . Ifall någon annan redan har gjort någon ändring så kommer du nu att få filerna där ändrade enligt detta. Uppgift 7.11 Vad gav svn update för output? Öppna med Emacs filen sagobok.tex i den katalogen. Den innehåller början till en sagobok skriven med LaTeX. Prova att TeXa den och se på resultatet med hjälp av C-c C-c ett par gånger. (Om det blir något TEX-fel så är det någon som råkat lägga in något fel. Det fixar nog den personen snart. Då gör du svn update igen för att få den nya versionen.) Det finns en rubrik i filen som heter som ditt användarnamn. Ersätt det som står under rubriken med din saga. Inte min saga! Om du inte vill ta med din egen saga så får du istället kopiera första stycket från någon av dem av Selma Lagerlöf på http://runeberg.org/sagasaga/. Välj någon som inte redan är tagen. Uppgift 7.12 Vad har det för effekt? Nu ska du sätta lite individuell prägel på din fil genom att göra minst tre av följande i dokumentets huvud: • Använd en väljare som fontsize=12 för att ändra textens storlek (mätt i punkter). Prova dig fram till ett värde du trivs med (eller behåll det som det är) • Använd väljaren twocolumn för att få tvåspaltig text. • Använd väljaren twoside för att få texten anpassad för dubbelsidig layout (som skiljer på vänster- och högersidor) • Använd andra typsnitt genom att använda till exempel fonts=palatino som väljare. Andra möjliga värden är fourier, lm, times och uu. (Det sistnämnda använder de typsnitt som ingår i Uppsala universitets grafiska profil.) • Om du föredrar tomrad för nytt stycke istället för indrag, så använd väljaren parskip. • Sätt färg på rubrikerna med \addtokomafont{disposition}{\color{red}} eller med någon annan färg. Eller istället för disposition kanske du hellre vill ändra på captionlabel och/eller caption för bildtexter. • Använd kommandot \urlstyle med ett argument rm, sf eller same för att tala om att urlar ska skrivas med »vanlig stil«, sans-serif eller samma som omgivande text. TEXa om och prova dig fram tills du blir nöjd. Se över en extra gång att allt fortfarande ser bra ut innan du checkar in. Skriv i incheckningsmeddelandet att det är piffandet det gäller. Prova att det går bra att TEXa utan felmedde- Nu är du klar på riktigt, så snart du har checkat landen efter ditt inlägg och checka sedan in din in ids7.txt med svar på frågorna också. ändring. Undvik versionskonflikter! Gör svn update innan du gör dina ändringar och checka in ganska snart efter att du gjort dina ändringar för att undvika att ni kommer i osynk med varandra. Piffa till latex1.tex Du var »färdig« med latex1.tex förut, men nu ska du ändra lite i den ändå. Där du har kommandon \author och \title, så lägg även till ett kommando \course med denna kurs namn som argument. Det är ett kommando som inte finns i de flesta LaTeX-klasser, men det finns i stupp. 78 Revert file: När du i Emacs försöker ändra igen i en fil som har ändrats på något annat sätt så varnar Emacs att filen är »changed on disk; really edit the buffer?« Det händer t. ex. om filen har ändrats av svn update för att nån annan har ändrat den. Ofta är bäst svar varken ja eller nej utan r (för revert) som hämtar in den senaste texten in i Emacs-bufferten. Kapitel 8 Internet & World Wide Web 8.1 ssh futurum.lingfil.uu.se med punkter mellan olika delar. Här är se en toppdomän (= Sverige), Ett program för att logga in på andra datorer över uu (Uppsala Universitet) en underdomän till se nätet är ssh. Gör ssh stp för att logga in på da- och lingfil en underdomän till uu.se, och sluttorn stp. (Du får lov att ange lösenord, och det ligen är futurum namnet på just denna dator. kommer inte att ekas.) Uppgift 8.5 Titta på man-sidan till ssh. Där syns att bland en massa frivilliga saker så är »hostname« det enda som måste finnas med när man kör ssh. Se hur man skriver man för att även taKör igång Emacs på den datorn genom att skri- la om användarnamn. Hur ser ett kommando ut va emacs. Du får upp Emacs inne i terminalfönst- som ssh-ar för att logga in som dig på datorerna ret. Du kan avbryta Emacs med C-x C-z och här? komma tillbaka till den med skalkommandot fg. Uppgift 8.1 När du nu är inloggad på den datorn istället, vad får du för prompt från skalet då? Uppgift 8.2 På datorn stp finns en fil i /opt/ ids som heter som ditt användarnamn. Vad står det för fyrsiffrigt tal i den filen? Avsluta det skal du kör på stp med hjälp av kommandot exit. Får du ett meddelande om »stopped jobs« kan du ge exit igen för att avsluta ändå. Uppgift 8.3 Det finns en väljare till ssh som på dess man-sida beskrivs som »Enables trusted X11 forwarding«. Hur lyder den? Ge ett nytt ssh-kommando där du använder väljaren från förra frågan för att koppla dig till stp igen. Uppgift 8.4 Prova att köra emacs på stp igen. Vad blir annorlunda nu? På detta sätt kan du logga in här hemifrån, men då får du skriva det fullständiga domännamnet stp.lingfil.uu.se istället för bara stp. 8.2 Domännamn Nätverket Internet används för en mängd olika system, bland annat för webben. Datorer på Internet kan ha ett domännamn i stil med 8.3 Toppdomäner Några av de äldsta toppdomänerna på Internet är gov för »US government«, edu för skolor och universitet, org för organisationer och com för företag. (Ofta så följs dock inte denna indelning.) Vid internationaliseringen av Internet tillkom tvåbokstaviga toppdomäner för länder med samma landskoder från ISO 3166 som i tabellen på s. 40. (Dock används här inte gb för Great Britain utan istället uk för United Kingdom.) Senare har fler allmänna toppdomäner tillkommit, som info och biz. I många fall används landskoder flitigt även i helt andra länder. Domänen tv för den polynesiska önationen Tuvalu används t. ex. för flera webbplatser med televisionsanknytning. Domänen nu som är populär bland annat i Sverige hör egentligen till ön Niue med drygt 2 000 invånare. 8.4 World Wide Web World Wide Web (WWW), webben, skapades av engelsmannen Tim Berners-Lee på CERN. (Den första webbservern fanns på http://info.cern. ch och gjordes tillgänglig den 6 augusti 1991.) Det var en kombination av hypertext och det globala datornätet Internet, så att länkar i texten 79 8. INTERNET & WORLD WIDE WEB kunde gå till dokument på en helt annan plats på nätet. Varje dokument på webben har ett beteckning som talar om var en webbläsare kan hitta den – en URL (Uniform Resource Locator). Den kan i ett enkelt fall se ut i stil med http://stp.lingfil.uu.se/lila/www/. Första delen http anger schemat – den metod webbläsaren ska använda för att få tag på dokumentet. Där står http för »hypertext transfer protocol« – det normala sättet att kommunicera på mellan webbservrar och webbläsare, utvecklat särskilt för WWW. Delen stp.lingfil.uu.se anger domännamnet för den dator som ska kontaktas. Delen /lila/www/ slutligen är det som skickas till webbservern på stp.lingfil.uu.se i detta fall och som anger just vilket dokument på den webbservern som vi önskar. Ibland börjar den delen med tilde när en viss användares webbsidor ska nås, inspirerat av hur man betecknar hemkataloger i Unix. Början http:// utelämnas ofta när webbadresser ges. vandet av HTML. Det är bland annat en speciell meny HTML och en SGML . I en av dem finns ett kommando View Buffer Contents. Utför det! Uppgift 8.6 Vad är kortkommandot för det kommandot? Uppgift 8.7 När du utför det öppnas filen i webbläsaren. Vilken URL hamnar du på där? Klipp-och-klistra från fältet där adressen visas i webbläsaren. Uppgift 8.8 En del av det värde som du klippoch-klistrade syns inte där det står i webbläsarens adressfält, men det syns när du kopierar texten. Exakt hur lyder den delen? Så genom att lägga filer i public_html görs de åtkomliga på webben. Om du får en URL som börjar med »file:///« så har du inte lagt filen i en katalog som heter som den ska och ligger där den ska. Se över det igen i så fall! 8.7 8.5 HTML Redovisning Hypertext Markup Language (HTML) är det vanligaste formatet för information på webben och Checka in en fil ids8.txt på det vanliga stället skapades också av Tim Berners-Lee. med svar på frågorna. Använd exakt de filnamn Sedan länge sker arbetet med HTML inom det som står här för att underlätta rättandet. Bli klar av Berners-Lee grundade World Wide Web Consenast onsdag 7/10. sortium (W3C). Det finns flera versioner av HTML samtidigt på webben. Trots att HTML4 standardiserades redan 8.6 Att publicera på WWW 1997 pågår fortfarande arbetet med HTML5. Skapa en underkatalog public_html till din hemkatalog, kopiera dit /local/kurs/ids/peppar. html och öppna kopian i Emacs. Observera att till skillnad från nästan alla filer som du gör i denna kurs så ska det inte ligga under din kurskatalog. Det måste ligga i denna särskilda katalog för att webbservern ska se filen. Eftersom detta är en HTML-fil får du nu som kan vänta sig ett särskilt Emacsläge med menyer och särskilda kommandon för att underlätta skri- Internet-historia: Det amerikanska militärprojektet ARPANET från 1969 och framåt är en direkt föregångare till Internet. Samma teknik användes sen i universitetsnätverk och 1983 skapades ett gemensamt nätverk mellan universitet i hela USA. (Först senare kom även företag in på nätet.) I Sverige kopplades det svenska universitetsnätet SUNET samman med detta amerikanska universitetsnätverk i slutet av 80-talet. Alltmer blev det så att olika datornätverk gick över till samma teknik och förenade sig med andra nätverk så att det blev ett enda stort Internet. 80 * * * Jämför innehållet i peppar.html med hur den visas i webbläsaren! Uppgift 8.9 Första raden i filen är en dokumentdeklaration som talar om vad för slags dokument det är. Hur lyder den? Resten av filen består av element där ett element börjar med en starttagg och slutar med en sluttagg och har ett innehåll mellan dessa. Starttaggarna börjar med < och sluttaggarna börjar med </ , och båda slutar med >. Elementen kan ha andra element inom sig. Ett exempel på ett element är <li>2 ägg</li> med starttaggen <li>, innehållet 2 ägg och sluttaggen </li>. Uppgift 8.10 Vad är det för element som sträcker sig över hela dokumentet? (Det vill säga börjar direkt efter deklarationen och slutar på slutet.) Uppgift 8.11 Dess innehåll är uppdelat i två element som täcker upp allt inom den. Vad är de för slags element? 8.8. CSS Uppgift 8.13 Elementet li används inom två olika andra element. Vilka då? Just de här reglerna för li är tämligen vansinniga. Nu ska du skriva bättre regler i en annan fil för olika slags element. (Om du vill kolla lite vad som händer så kan först du ändra några värden i ful.css och se vilken effekt det har. Du får ladda om webbsidan för att det ska märkas.) Uppgift 8.14 Vad är li förkortning för? (Sök på nätet!) Och namnen på de två elementen i förra frågan? 8.8.1 Uppgift 8.12 Vad är det för element som verkar användas för rubriker? (Jämför med hur dokumentet visas.) fin.css Uppgift 8.15 För stycken används elementet p. Skapa med Emacs en ny fil fin.css i din katalog Vad är det stycke heter på engelska som detta är public_html och ändra i peppar.html så att den använder sig av denna istället för av ful.css. förkortning för? När du skriver en rad i CSS-filen så använd TAB i Emacs för att få lagom stort indrag för olika raStarttaggarna kan ha attribut med värden. T. ex. der. används elementet a för att visa vilka delar av siLägg först till detta för att ge regler för elemendan som ska vara länkar till andra webbsidor. Men tet footer och ladda sen om webbsidan för att se det räcker inte med bara effekten. På <a>UU</a>! för att visa att ordet »UU« ska vara en länk. På något sätt måste man också tala om till vilken URL den länken ska gå. Det gör man med ett värde till attributet href, så här: footer { clear: both; border-top: 1px solid brown; padding: 5px; text-align: center; } På <a href="http://www.uu.se/">UU</a>! Uppgift 8.16 Det finns flera sådana a-element i peppar.html. En av dem ger en länk till texten »Blanka av Namur«. Till vilken URL går den länken? 8.8 CSS CSS är ett språk för att definiera vilken stil olika delar ska visas med. I peppar.html finns en rad <link rel="stylesheet" href="ful.css"> som visar att information om detta ska finnas i ful.css. Kopiera därför /local/kurs/ids/ful. css till samma katalog som du kopierat peppar. html till och ladda om sidan i webbläsaren (antingen med en knapp för det, eller med Ctrl-R). Om du inte får en markant skillnad i utseendet så har något blivit fel. Kontrollera tidigare steg eller fråga i så fall! Öppna ful.css i Emacs för att se hur detta har gått till. Där finns en regel som säger flera saker om hur a-element ska visas, och sen en regel om »footer a« vilket betyder bara sådana a-element som ligger inom ett footer-element. Uppgift 8.17 Ge exempel på en av raderna om a och berätta vad den verkar betyda. Uppgift 8.18 Vad allt detta gör är inte uppenbart, men nämn nån effekt som du direkt märker på den del av dokumentet som ligger inom footer-elementet? (px är en liten längdenhet. Du kan söka efter »css units« på nätet för att läsa om andra enheter som kan användas i CSS-regler.) Lägg till en rad där om att texten i footer vara mindre än huvudtexten. (Jämför med hur storleken ändrades i ful.css. Välj själv hur mycket mindre texten ska vara.) Nästa förändring blir större. Själva receptet står inom ett element section. Skriv en regel section { float: left; width: 40%; } och en likadan regel för det element som avsnittet »Historia« står i, förut att den ska ha right istället för left. Om du gjort rätt så har du fått effekten att dessa båda delar visas sida vid sida på 40 % av bredden var. (Resten blir en glipa mellan dem.) Historietexten är tänkt som extrainformation i marginalen. Ändra de båda bredderna och minska storleken på historietexten, så att den tar mindre plats och inte blir så framträdande. 81 8. INTERNET & WORLD WIDE WEB 8.8.2 Färger 8.9 ids8.html Skriv en regel Skriv en egen webbsida ids8.html som handlar om vadsomhelst utom pepparkakor. Denna nya body { HTML -sida ska ha med åtminstone några rubricolor: lime; ker, några stycken och några länkar till andra sibackground-color: pink; dor, men du får gärna ha mer. Använd TAB när du } skriver för att få så mycket indrag på raderna som HTML -läget i Emacs tycker är lagom. för att ändra färg och bakgrundsfärg i dokumentet Låt en av länkarna gå till din peppar.html. Då och se effekten. Men även om detta blev väldigt räcker det med att skriva peppar.html som adress vackert ska du välja andra färger! Gör en webb- till den eftersom den ligger i samma katalog. sökning på »css color« för att se hur man kan skriTa dessutom med ett par bilder. Det fanns det va och välj ut andra färger att använda. Eftersom inte i peppar.html (utan bara som bakgrundsbild den regeln gäller body så gäller den allt som det i CSS-filen). Sök på nätet efter hur man gör sånt! inte finns mer specifika regler för. (Du kan lägga bildfiler i samma katalog eller länka Lägg nu till andra färger för historietexten i till bilder på andra ställen med en längre adress.) marginalen, så att den skiljer sig tydligare från huSkriv CSS för flera olika element i ids8.html, vudtexten. så att den får ett klart annorlunda utseende än vad den skulle ha utan, men utan att helt planka pepparkakorna för det. Här är några möjliga idéer: 8.8.3 Översta rubriken • Andra storlekar och/eller färger på rubriker • Sök upp CSS som inte tagits upp här, till Nu ska vi sätta en bakgrundsbild till översta ruexempel på http://htmldog.com/guides/ briken »Pepparkakor«. Lägg till denna regel: css/beginner/. • Lägg till en bakgrundsbild på något annat än h1 { h1 background-image: url("..."); Sök på nätet efter »css hover« för att lära dig background-position: center; hur man kan skriva CSS-regler som bara gäller när text-align: center; background-repeat: no-repeat; man håller muspekaren över något, och använd } detta i någon regel. Det är vanligast att man använder sådant för a-element, så att man tydligt men där ... är en webbadress till en bild. Välj an- märker att det finns något att klicka på där. tingen http://stp.lingfil.uu.se/kurs/ids/ gingerbread.jpg eller sök upp en annan bild du 8.9.1 Validering vill ha. Se efter att du får en bakgrundsbild till Använd valideraren på https://validator.w3. rubriken nu! org för att validera din nya HTML-fil och din nya CSS-fil. Fixa till vad den eventuellt klagar på! Uppgift 8.19 Vad händer om inte HTML har regler om vilka slags element som finns background-repeat är satt? och vilka element som får finnas inom vilka. Om du får fel som har med sådant att göra så läs noga Ändra så att rubriktexten blir större, och lägg vad det står där! till lite utfyllnad (padding) som det är för footer, så att mer av bilden syns. Välj själv hur mycket. Uppgift 8.20 Har du gjort klart ovanstående Beroende på vad du har för färg på rubriktexten webbsidor än och sett att valideraren inte klagar kanske den inte syns så bra mot bilden. Lägg till på dem? (ja/nej) (Denna fråga är till för att jag regler för h1 som gör att texten syns ordentligt! ska veta om det är dags för mig att titta på din webbsida än.) 8.8.4 Validering Uppgift 8.21 I elementet head i peppar.html Gå till https://validator.w3.org och knappa finns det två element som inte har sluttaggar. Vilin adressen till din CSS-fil för att få den kollad. ka då? Om du får en gratulation för att det inte är några Uppgift 8.22 Bland de särskilda kommandona i fel så grattis! Fixa annars till vad den nu klagar på. HTML-läget i Emacs finns bland annat några för att lägga in rubriker på olika nivåer. Vad är kortkommandona för dem? 8.8.5 Mer? Detta räcker för pepparkakorna, men om du vill lägga till mer regler som du lär dig själv om, så gör gärna det. Men se till att validera igen efteråt! 82 Uppgift 8.23 Nämn några motsvarigheter eller nästan-motsvarigheter mellan hur olika slags text läggs in i LaTeX och HTML. Kapitel 9 Reguljära uttryck I kapitel 5 togs reguljära uttryck upp som arguTraditionellt har man skrivit t. ex. [A-Z] för att ment till grep. I detta kapitel lär vi oss mer om få en versal, och detta (och [a-z] och [A-Za-z]) sådana och om några andra sammanhang där de kan man se på många håll i exempel på reguljära används. uttryck. Det är dock säkrare att använda namngivna klasser. Då ska man få man med alla bokstäver, även t. ex. åäö, oavsett språkinställningar.1 Observera att hakparenteserna ingår i nam9.1 Ett tecken: . [ ] [^ ] nen på dessa teckenklasser! Det gör att det blir dubbla hakparenteser i de reguljära uttrycken. • . = ett godtyckligt tecken Om man byter ut A-Z mot [:upper:] så be• [abc] = något av tecknen a, b eller c tyder det att ett reguljärt uttryck som [A-Z] • [^abc] = ett tecken som inte är a, b eller c istället blir [[:upper:]] , medan [^A-Z] blir Inom hakparenteser kan - användas mellan två [^[:upper:]], och uttrycket [z[:punct:] ] tecken för intervall. Så [0-9] betyder 0, 1, 2, 3, betyder ett z eller ett interpunktionstecken eller 4, 5, 6, 7, 8 eller 9, och [0-9,.] betyder 0, 1, 2, ett mellanslag. 3, 4, 5, 6, 7, 8, 9, komma eller punkt. De flesta tecken som är speciella annars i regexpar är inte speciella inom []. T. ex. matchar 9.2 Ankring: ^ $ \< \> [9.*] en nia eller en punkt eller en asterisk. (UtMetatecknen ^ och $ för början av raden respekanför hakparenteserna hade båda punkten och astive slutet av raden har vi redan sett. terisken haft en särskild betydelse.) Så med t. ex. ^xyz hittar man rader som börDessutom kan man inom [] stoppa in en be- jar med xyz (radbörjan följt av »xyz«) och med teckning för en hel klass tecken, som betyder [[:blank:]]$ hittar man rader som slutar med t. ex. »en bokstav« eller »ett skiljetecken«. Dessa något blankt tecken. teckenklasser har namn som börjar med [: och Dessa båda tecken matchar alltså inget tecken slutar med :], t. ex. [:lower:] för en gemen alls på egen hand, utan ställer bara krav på var det bokstav. Tabell 9.1 visar några av dessa. övriga i uttrycket ska befinna sig. Man säger att Tabell 9.1: Några namngivna teckenklasser. Betydelserna är inte helt strikta här, utan kan variera med olika locale. Namn Betydelse [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:upper:] [:alpha:] + [:digit:] [:lower:] + [:upper:] Blanka tecken (SPC, TAB) Kontrolltecken Siffror Grafiska: [:alnum:] + [:punct:] Gemena (små) bokstäver Skrivbara: [:graph:] + SPC Interpunktion Versala (STORA) bokstäver dessa ankrar ett reguljärt uttryck. Med \< respektive \> matchar man en ordbörjan respektive ett ordslut. Så med \<anti hittar man »anti« som står i början av ett ord (t. ex. »anti« i »antites« eller »antilop« men inte i »fantisera«). 9.3 Bakstreck: \ Bakstrecket betyder nånting tillsammans med det tecken som följer direkt efter det. I synnerhet kan man sätta ett metatecken efter bakstreck när man verkligen vill söka efter det tecknet. 1 Skriv inte [a-ö] när du menar ’en bokstav’! Dels skulle det vara beroende av en viss sorteringsordning, och dessutom funkar det ändå inte som man skulle kunna tro. 83 9. REGULJÄRA UTTRYCK Så för att söka efter t. ex. en siffra mellan asterisker, som t. ex. »*3*« kan man använda det reguljära uttrycket \*[0-9]\* med bakstreck för att visa att det verkligen ska vara med asterisker i texten. I övrigt används bakstreck följt av annat tecken för lite olika funktioner. Under ankring ovan nämndes två. En annan användbar är \w där »w« står för »word«. Det betyder liksom [[:alnum:]] ett alfanumeriskt tecken, men är kortare att skriva. Så a\wa matchar t. ex. »axa« och »a7a«, men inte »a!a« eller »a a«. 9.4 Utökade reguljära uttryck Det finns olika varianter av reguljära uttryck med lite olika uppsättningar metatecken. Hittills har vi sett enkla reguljära uttryck (basic regular expressions) där de speciella tecknen är Om inte det som står före det som visar repetition är något inom [] eller () (som vi kommer till snart!) så är det ett ensamt tecken som repeteras. Så hej ?hopp matchar »hejhopp« eller »hej hopp«. 9.6 Alternativ: | Med lodstreck (|) visar man alternativ. Så vit|svart|grå matchar »vit« eller »svart« eller »grå« och foo|b[aä]r matchar »foo« eller »bar« eller »bär« (eftersom alternativet efter lodstrecket hade två varianter). Glöm inte att hakparenteser kan användas om alla alternativ består av ett tecken, så istället för a|e|i|o|u är det enklare att skriva [aeiou] . 9.6.1 Parenteser: ( ) Med parenteser kan man föra samman ett större uttryck. Så med en (grå liten|stor) katt Alla andra tecken matchar bara sig själva. Med matchar man »en grå liten katt« eller »en stor så kallade utökade reguljära uttryck (extended regu- katt«. Utan parenteser skulle det bli allt före ellar expressions) tillkommer dessa speciella tecken: ler efter lodstrecket. Parenteser är också användbara för att hålla ihop något som ska repeteras. Det gör t. ex. att + ? ( ) { } | (bar){2,5} matchar »barbar«, »barbarbar«, »barbarbarbar« och »barbarbarbarbar«. Kommandot grep använder normalt de enkla Fler exempel: (basic) regexparna, men med en väljare -E (som i • en (grön|blå)+ kavaj matchar t. ex. »en Extended) använder den de utökade. grön kavaj« eller »en blågrön kavaj« eller »en gröngrön kavaj« eller »en blåblågrönblågrön kavaj«. 9.5 Repetitioner: * + ? {} • en grön|blå+ kavaj vore däremot något Asterisken har vi sett förut. Nytt i de utökade helt annat! Det skulle matcha antingen »en regexparna är + efter något för att säga att detgrön« eller också något som matchas av ta något ska förekomma en eller flera gånger. Det blå+ kavaj , dvs. »blå kavaj« eller »blåå kautökade reguljära uttrycket bä+ matchar därmed vaj« eller »blååå kavaj« osv. strängarna »bä«, »bää«, »bäää«, »bääää«, osv., hur • mo(no)+ton matchar »monoton«, »mononolångt som helst. (Observera att det bara är ä som ton«, »monononoton«, osv. repeteras. Detta reguljära uttryck matchar t. ex. inte »bäbäbä«.) Skillnaden med asterisken * är att den även till- 9.7 Exempel låter att den repeterade delen inte är med någon gång alls. Så bä* matchar samma texter som bä+, Här är några ytterligare exempel på (utökade) remen dessutom även »b«. guljära uttryck. Med ? efter något anger man ett det är frivilligt, • [a-h][1-8] – en ruta på ett schackbräde, dvs. det kan vara med en gång eller inte alls. Så som »e2« eller »b4«. bä? matchar »b« och »bä« och inget annat. • [0-9]*[13579] – en sekvens med siffror Med {n} efter något kan man säga att detta nåsom slutar med en udda siffra, som t. ex. got ska förekomma n gånger. Så [sz]{3} matchar »4711« eller »007«. samma som [sz][sz][sz], dvs. »sss«, »ssz«, »szs«, • (fjor|fem|sex|sjut|ar|nit)ton|tjugo »szz«, »zss«, »zsz«, »zzs« och »zzz«. – något av orden fr. o. m. »fjorton« t. o. m. Med {n,m} ska det vara minst n och högst m »tjugo« förekomster, så br{2,5} matchar »brr«, »brrr«, • (..)* – ett jämnt antal tecken, vilka som »brrrr« och »brrrrr«, och inget annat. helst Maxantalet m kan utelämnas, och 8{3,} betyder minst tre åttor, dvs. »888« eller »8888« eller • \<pre\w*ing\> – ett ord som börjar med »88888« eller . . . (Hur många som helst.) »pre« och slutar med »ing«. . * ^ $ [ ] \ 84 9.8. Olika sorters reguljära uttryck 9.8 Olika sorters reguljära uttryck 9.10 Reguljära uttryck används inte bara av grep utan dyker upp i flera sammanhang. Av historiska skäl används dock tyvärr flera olika varianter av reguljära uttryck. Ibland används de utökade (som grep -E använder), ibland de enkla (som grep använder normalt) där tecknen + ? ( ) { } | inte har någon särskild betydelse, utan betyder sig själva. (En del program som använder reguljära uttryck har dessutom sina egna utökningar av dem. Det har t. ex. Emacs och programspråket Perl. Flera utökningar som har gjorts för Perl har plockats över till andra sammanhang också, t. ex. programspråken Java och Python.) I grep så kan man komma åt all funktionalitet som man kan få med + ? ( ) { } | utan att gå över till utökade reguljära uttryck genom att skriva \+ \? \( \) \{ \} \| istället. Så dessa två kommandon gör samma sak: $ grep -E '^(tre|fyr|fem)' verb.txt trefaldiga femfaldiga fyrfaldiga tredubbla fyrdubbla tremulera trepanera fyra treva $ grep '^\(tre\|fyr\|fem\)' verb.txt [ samma svar ] nämligen hittar de rader i den filen som börjar med »tre«, »fyr« eller »fem«. grep -o Kommandot grep arbetar som många andra kommandon normalt med rader. Den fungerar som ett filter som bara släpper igenom de rader som innehåller ett visst sökuttryck. (Eller med väljaren -v de rader som inte innehåller ett visst sökuttryck.) Med väljaren -o ändras detta och man får istället ut just de delar som matchade sökuttrycket istället för hela rader. $ grep l.ll verb.txt lalla lulla parallellställa parallellisera $ grep -o l.ll verb.txt lall lull lell lell Se sökningarna i figur 9.1 där vi söker efter ord som börjar på »f«. Utan -o spelar det ingen roll om vi söker efter \<f\w* eller bara \<f . Det är samma rader (i detta fall bara en rad) som hittas. Men med \w* på slutet hittas hela ordet, vilket gör skillnad när vi använder -o för att få se vilken del av texten som matchade sökuttrycket. Det kan (som här) bli flera matchningar per rad. 9.11 Girighet och hunger Ett sådant uttryck som [1-9]0* matchar ju en siffra 1–9 eventuellt följt av nollor, t. ex. »5«, »10« eller »30000«. $ echo 'Timmy 2000' | grep -o '[1-9]0*' 2000 9.9 Reguljära uttryck i Emacs Det finns flera kommandon i Emacs som använder reguljära uttryck. Vid sidan av C-s och C-r som söker framåt respektive bakåt efter en textsträng så finns även C-M-s och C-M-r som söker framåt respektive bakåt efter ett reguljärt uttryck. (Här ska alltså både Control och Meta användas tillsammans.) Under en inkrementell sökning kan man också använda M-r för att slå om huruvida sökningen ska gälla reguljära uttryck eller inte. Det finns även andra kommandon som ni kommer att möta i inluppen. De reguljära uttrycken i Emacs är ungefär som enkla reguljära uttryck, men även plustecknet och frågetecknet är metatecken. I exemplet ovan ser vi hur uttrycket matchade »2000«. Men det skulle ju också kunna ha matchat bara »200« eller »20« eller »2«. Ändå är det just matchningen »2000« som vi fick fram. Vid matchningen väljs nämligen den längsta av flera möjligheter som börjar på samma plats. Man säger att operatorn * här är girig eller hungrig (greedy på engelska) vilket innebär att den »vill« matcha så mycket som möjligt. Samma gäller de andra repetitionsoperatorerna vi har tagit upp. Detta behöver man tänka på ibland, i synnerhet med .* eller .+ som lätt kan matcha mer än man egentligen hade tänkt sig. Om man t. ex. vill söka efter citat inom »« kan det ligga nära till hands att använda ett reguljärt uttryck ».*« för att visa att 85 9. REGULJÄRA UTTRYCK $ grep '\<f' saga.txt ingenting, för han var försäkrad. Några dagar senare flyttade $ grep -o '\<f' saga.txt f f f $ grep '\<f\w*' saga.txt ingenting, för han var försäkrad. Några dagar senare flyttade $ grep -o '\<f\w*' saga.txt för försäkrad flyttade Figur 9.1: Greppande med och utan -o i en saga. \<f betyder ett f i början av ett ord, och \w* betyder godtyckligt många ytterligare »ordtecken« efter det, så tillsammans betyder det ett ord som börjar på f. det ska börja med », sluta med « och däremellan får innehålla vad som helst. Men »vad som helst« kan bli mer än man tänkt sig: $ cat testfil Hej hopp! Ska det stå »i dag« eller »idag«? $ grep -o '».*«' testfil »i dag« eller »idag« Detta svar börjar ju och slutar med de efterfrågade tecknen, men är längre än bara »i dag« som man kanske snarare var ute efter. I detta fall är ett sätt att lösa problemet att kräva att tecknen mellan de båda citattecknen inte själva får vara slutcitattecken, dvs. att använda [^«] istället för . för varje tecken mellan citattecknen. $ grep -o '»[^«]*«' testfil »i dag« »idag« 9.12 sed Med kommandot sed kan man göra en mängd olika omvandlingar av text. Namnet står för stream editor. Det kan göra mycket som en editor kan göra, men gör det inte interaktivt utan genom att bearbeta text som kommer in i en inputström. Detta kan läggas in som ett avancerat filter som läser text från standard input och skriver ut en editerad version av texten på standard output. Kommandot sed är lite som en schweizisk armékniv som kan utföra en mängd olika saker, 86 bland annat sådant som ni har använt andra kommandon till, som head, tail och tr. Här kommer vi dock att bara använda detta kraftfulla verktyg till en specifik sak, nämligen att byta ut text. 9.12.1 Att ersätta text med sed Tidigare har vi använt tr för att byta ut text, men det är begränsat genom att det bara är enstaka tecken som hanteras. Det duger inte om vi t. ex. vill byta ut alla förekomster av »foo« mot »bar«. Dessutom har det begränsningar vid hantering av flerbytestecken. Eftersom ni nu bara kommer att använda sed till en sak så kommer alla era anrop av sed att likna varandra. De kommer alla att se ut ungefär som sed 's/regexp/replacement/g' Här är det bara ett argument till sed, och det talar om vilken editering som ska utföras. Det s som argumentet börjar med här är ett kommando i sed för substitute. Det söker upp förekomster av text som matchar det reguljära uttrycket regexp och byter ut dessa mot texten replacement. Så t. ex. kan man skriva ed och sed: Den ursprungliga editorn på Unix, som användes redan i forntiden före bildskärmarnas tid, hette ed och var skriven av Ken Thompson. Det var Thompson som först introducerade reguljära uttryck i editorer. När kommandot sed kom några år senare som en variant att använda för icke-interaktiv editering av en inputström så byggde därför dess kommandon på motsvarande kommandon i ed. Det enda sed-kommando vi tar upp här, s, finns t. ex. även i ed. 9.12. sed sed 's/color/colour/g' för att byta ut alla »color« mot »colour«.2 eller sed 's/s\>/z/g' för att byta ut varje s som står i slutet av ett ord mot z. Man brukar normalt använda snedstreck (/) som här för att avdela argumentet, men det kan vara något annat tecken istället, bara det är samma tecken på alla tre ställen. Så om man behöver snedstreck i sitt reguljära uttryck eller i ersättningen får man lov att välja nåt annat, t. ex. sed 's!1/2!½!g' Kommandot sed använder normalt enkla reguljära uttryck, men har en väljare -r som gör att den istället använder utökade reguljära uttryck. (Ja, grep och sed har olika väljare som betyder »använd utökade reguljära uttryck«. Dumt, va?) 9.12.2 Att återanvända originaltexten I sed 's/regexp/replacement/g' är det bara regexp som är ett reguljärt uttryck. I ersättningsdelen har inte asterisker, parenteser osv. någon särskild betydelse, utan blir sig själva. $ echo 'byt allt' | sed 's/././g' ........ för att byta alla förekomster av de tre tecknen $ echo 'foo bar' | sed 's/[aou]/[äöü]/g' »1/2« mot det enda tecknet »½«. f[äöü][äöü] b[äöü]r Efter det sista snedstrecket står väljare till s$ echo 'hej hopp' | sed 's/e.*o/***/g' kommandot. I exemplen ovan är det g som gör h***pp att alla förekomster byts ut (global). Annars byts bara den första förekomsten på varje rad ut. En annan väljare är i som ignorerar skillnader mellan versaler och gemener. Jämför följande fyra exemEtt tecken som ändå är speciellt i ersättningspel som bara skiljer sig i vilka av dessa väljare som texten är & (ampersand) som betyder hela den har använts. text som matchade det reguljära uttrycket. Om man ger ett andra argument till sed så är Om man vill bryta raden efter varje interpunkdet vilken fil den ska hämta input från. tionstecken kan man därför göra $ cat jaha.txt Procent procent procent PROCENT $ sed 's/procent/%/' jaha.txt Procent % procent PROCENT $ sed 's/procent/%/g' jaha.txt Procent % % PROCENT $ sed 's/procent/%/i' jaha.txt % procent procent PROCENT $ sed 's/procent/%/gi' jaha.txt % % % % sed 's/[[:punct:]]/&\n/g' där ersättningsdelen betyder det som [[:punct:]] matchade följt av ett nyradstecken (vilket skrivs \n här precis som t. ex. i tr). Följande exempel dubblerar vokaler genom att använda ampersand två gånger. sed 's/[aeiouyåäö]/&&/gi' Varför heter det grep?: I editorn ed användes reguljära uttryck inte bara med kommandot s, utan även med bl. a. ett kommando g med vilket man sökte upp rader som matchade ett visst reguljärt uttryck och gjorde nåt med dessa rader. För att ta bort alla rader som innehåller »foo« kunde man t. ex. göra g/foo/d där d är ett kommando som tar bort en rad. För att skriva ut alla rader som matchade ett reguljärt uttryck använde man istället p (= print). Ibland förkortas regular expression med re, så en sådan operation kunde beskrivas g/re/p vilket är skälet till att det senare skrivna program som utförde just den operationen fick namnet grep. 2 I detta fall behövdes inte några citattecken runt argumentet till sed, eftersom inga tecken där är speciella i skalet, men oftast behövs det, så det kan vara säkrast att alltid ha med det. 87 Inlupp 9: Reguljära uttryck Redovisning Checka in en fil ids9.txt med svar på frågorna. Frågorna är samlade i olika teman snarare än att vara sorterade från lätta till svåra, så hoppa gärna runt bland uppgifterna medan du löser dem istället för att fastna på någon klurig uppgift som du kan behöva tänka mer på. När frågan är i stil med »vilka ord finns det som . . . ?« så ge dels svar på frågan och tala dels om hur du fick fram svaret, t. ex. vilket kommando eller vilka kommandon du använt för att få fram svaret. Uppgift 9.7 Vilka ord med minst fem tecken har inte med någon av bokstäverna eantrsildogm? (De vanligaste tecknen på svenska enligt någon källa.) Uppgift 9.8 En del ord i den filen innehåller tecken som inte räknas som ingående i teckenklassen [:alpha:]. Hur många ord? Väljaren -o I dessa uppgifter ska du använda väljaren -o för att bara få ut det som matchar ett uttryck från en fil. Svenska ord I /local/dict/dsso-list.txt finns en stor samling svenska ordformer tagna från Den stora svenska ordlistan. Använd den för frågorna i detta avsnitt. Eftersom filen bara innehåller rader med ett ord per rad kan du använda ^ och $ för ankring till ordbörjan och ordslut och . för ett godtyckligt tecken inne i ordet. Uppgift 9.1 Hur många ord finns det som slutar på bokstaven v? Uppgift 9.9 Vilka tecken var det som fanns med i ordlistan trots att de inte ingår i teckenklassen [:alpha:] i förra uppgiften? Uppgift 9.10 Vilka ord i /local/kurs/ids/ wonderland.txt börjar med »cal«? (Rensa bort dubbletter från ditt svar.) Uppgift 9.11 Vad finns det för ord som börjar med versal och slutar med k i samma fil? Använd \w för att beteckna ett tecken inne i ett ord, och rensa bort dubbletter från ditt svar. Uppgift 9.12 Vad finns det för ord som innehålUppgift 9.2 Vad finns det för ord som innehål- ler q i samma fil? (Rensa bort dubbletter från ditt ler minst tre ä, som t. ex. »självbestämmande- svar.) rätt«? Uppgift 9.13 Använd det utökade reguljära utUppgift 9.3 Vilka ord med minst nio bokstäver trycket [0-9]+ för att ta fram vilka sifgår att skriva enbart med tecknen på översta bok- feruttryck som finns i filen /local/kurs/ids/ THE-GNU-PROJECT och sortera dem i nummerordstavsraden på tangentbordet? (qwertyuiopå) ning. (Rensa bort dubbletter från ditt svar.) Uppgift 9.4 Vad finns det för ord som är minst Uppgift 9.14 Skapa en fil GNU-w2 som listar al12 tecken långa vars enda vokal är o? la ord i filen GNU. Använd denna gång grep -o Uppgift 9.5 Du håller på med korsordet i fi- med lämpliga argument för att plocka ut orden gur 9.2. Hur många ord passar in som det översta och rensa bort dubbletter. På vilka sätt blev denvågrätta ordet, med nyckeln »Har vi svenskar rest na ordlista bättre än den GNU-w1 som du skapade i över 400 år«? i uppgift 5.60 (s. 58)? Uppgift 9.6 »Ödeskvinna« i det korsordet kanske är »norna«, men det skulle också kunna vara »moira«. Vilka ord passar in på översta vågrätta ordet om man tar hänsyn till detta också? 88 En sluttagg i HTML börjar ju med »</« och slutar med »>«. Prova därför med grep -o '</.*>' ~ellen/public_html/saga.html för att ta fram sluttaggar från denna HTML-fil. Ta sed dit man kommer Figur 9.2: Utdrag ur ett korsord som författaren har löst. Uppgift 9.15 En del rader i svaret blev verkligen sådana, t. ex. »</head>«, men andra rader kom att innehålla mer. Vad är problemet? Hur kan du fixa det? Ge ett sorterad lista (utan dubbletter) med alla sluttaggar som förekommer i den filen. Uppgift 9.21 Skapa en fil GNU2 i din ids-katalog som är som GNU, men där du bytt ut varje ord som är minst två bokstäver långt och som bara består av versaler mot samma ord men med »<abbr>« före och »</abbr>« efter. Så t. ex. ska varje förekomst av ordet »MIT« ha bytts mot »<abbr>MIT</abbr>«. Ta sed dit man kommer Uppror! (igen) Uppgift 9.16 Stavningsreform! Skriv ett sedDessa uppgifter använder sig av den uppror.txt kommando som byter ut alla »ck« mot »kk«. som du har sedan tidigare. Använd teckenklasser Du kan prova ditt kommando med t. ex. när det är lämpligt. ditt kommando ck-test.txt där ck-test.txt är en fil som du gjort med lite testord, eller typ Uppgift 9.22 Vilka rader innehåller en liten echo sicksack | ditt kommando. bokstav som följs direkt av en stor? Uppgift 9.23 Hur många rader innehåller minst Uppgift 9.17 Hur lyder din saga på i-sprikit tre interpunktionstecken i rad? (även kallat i-språket), dvs. med alla vokaler utbytta mot i. Svaret ska börja »Dit vir in ging«. Uppgift 9.24 Vilka rader har minst sex konsonanter i rad? Uppgift 9.18 Hur lyder din saga om alla mellanslag byts ut mot dubbla mellanslag? Svaret ska Uppgift 9.25 Vilka rader börjar med bokstaalltså börja Det var en gång. ven c? Uppgift 9.19 Om Strindberg hade behövt skri- Uppgift 9.26 Vilka rader börjar med ordet uppva Roeda rummet på en engelsk skrivmaskin och drag? fått lov att skriva aa ae oe istället för å ä ö, hur Uppgift 9.27 Vilka rader både börjar och slutar hade då början av den lydit? med bokstaven r? Uppgift 9.20 Skriv ett kommando som byter ut Uppgift 9.28 Vilka rader både börjar och slutar alla ord »ej« mot »icke« i en text. Se till att du med bokstaven r, men har inga ytterligare r i sig? bara byter ut hela ord så att du inte råkar byta t. ex. »mejl« mot »mickel«. Uppgift 9.29 Vilka rader innehåller exakt ett w? 89 INLUPP 9: REGULJÄRA UTTRYCK Uppgift 9.30 Vilka rader har med ord som börjar med »flä«? Uppgift 9.31 Hur många rader är minst femtio tecken långa? Uppgift 9.32 Gör en frekvenslista över vilka interpunktionstecken som förekommer, sorterade i frekvensordning. Uppgift 9.33 Vad finns det för parentesuttryck i uppror.txt? På en rad står det t. ex. försvar (och anfall) för att bevara den bästa av Alltså ska (och anfall) ingå i ditt svar. En del parenteser börjar på en rad och slutar på en annan. Dem kan du för enkelhets skull strunta i. (Men har du några idéer om hur du skulle kunna ta hand om det också, så berätta gärna!) I Emacs Öppna filen /local/kurs/ids/wonderland.txt i Emacs. Det finns ett Emacs-kommando som heter occur som listar de rader som innehåller text som matchar ett visst reguljärt uttryck. Detta kommando finns dock inte i menyerna, så använd M-x för att köra det kommandot. Du får sen skriva ett ett reguljärt uttryck. Skriv uet\> för att lista rader som innehåller ord som slutar på »uet«. Uppgift 9.34 Hur många matchingar blev det och hur visas dessa? Sökträffarna visas i en buffert som är i ett särskilt Emacsläge där man kan gå direkt till en träff genom att klicka på den, eller genom att trycka på RET. Uppgift 9.37 En av de väljare som användes till grep-kommandot här var -n. Den har vi inte använt i kursen. Vad betyder den? Uppgift 9.38 En av träffarna är från filen nordic-authors.txt. Vilken författare var det som hittades där? Upproriska ord Låt oss se vad det finns för ord i romanen Uppror!. Denna gång vill vi inte ha sifferuttryck och egennamn som »Fitzschkloff« och »Knöckl«. Vi nöjer oss med ord som bara består av små bokstäver. Uppgift 9.39 Skapa en fil uppror-ord.txt med en svensksorterad ordlista (utan dubbletter) över ord med bara små bokstäver i uppror.txt. Många av dessa ord är säkert helt vanliga ord som finns med till exempel i ordlistan /local/ dict/dsso-list.txt, men andra ord är kanske speciella för just denna bok. Uppgift 9.40 Hitta vilka ord som finns med både i uppror-ord.txt och /local/dict/ dsso-list.txt. Ett sätt att göra det är att sortera ihop de båda filerna och se vad det blir för dubbletter då. Spara dessa i filen uppror-ord-ok. txt. De övriga orden är kanske intressantare, så låt oss jämföra uppror-ord-ok.txt med hela uppror-ord.txt! Kommandot diff visar skillnader mellan två filer. Använd diff uppror-ord.txt uppror-ord-ok.txt för att i kompakt form få se alla skillnader mellan filerna. Det blir rader som börjar med »<« som visar det som bara finns i den första filen. (Raderna med siffror är för att visa var i filen det är.) Uppgift 9.35 När man ger ett kommando med M-x i Emacs får man ett tips i ekoarean om hur man också hade kunnat ge kommandot om det Uppgift 9.41 Vad finns det för ord som slutar finns ett kortkommando för det. Med vilka tanpå p med bland dessa ord? genttryckningar kan man också ge kommandot occur? Uppgift 9.36 I detta särskilda Emacsläge finns Mer( mer)+ det en meny Occur . Vad är det understa kommandot i den menyn, som står ensamt under en linje, och vad gör det? (Prova det!) Uppgift 9.42 Hur lyder din saga.txt om man tar bort alla vokaler? (Svaret ska alltså börja »Dt Använd nu Tools Search Files (Grep) i samma vr n gng«.) Emacs. I minibufferten får du ett påbörjat grepUppgift 9.43 Hur lyder din saga.txt om alkommando. Lägg till gren *.txt till det för att la bokstäver dubbleras? (Svaret ska alltså börja leta efter »gren« i alla filer *.txt i den katalogen »DDeett vvaarr eenn ggåånngg«. Bara bokstäver(/local/kurs/ids). na är dubblerade, men inte mellanslag eller interHär kan du på ett liknande sätt använda muspunktion.) klick eller RET för att gå till sökträffarna. 90 Mer( mer)+ Figur 9.3: Från xkcd av Randall Munroe. http://xkcd.com/208/ Programspråket Perl är känt för att använda regexpar mycket. . Uppgift 9.44 Hur lyder din saga.txt om sista Uppgift 9.47 Ge ett kort utökat reguljärt utbokstaven i varje ord tas bort? (Svaret ska alltså tryck som matchar både »arton« och »aderton« börja »De va e gån«.) (men inget annat). Uppgift 9.45 Hur lyder din saga.txt om alla versaler sätts inom hakparenteser? (Svaret ska En möjlighet är helt enkelt arton|aderton, alltså börja »[D]et var en gång«.) men gör något kortare! Uppgift 9.46 Hur lyder din saga.txt översatt till rövarspråket som blivit känt från Astrid Lind- Uppgift 9.48 Ge ett utökat reguljärt uttryck grens böcker om Kalle Blomkvist där varje konso- som matchar »mormor«, »morfar«, »farmor« och nant byts ut mot konsonanten + o + konsonanten. »farfar« (men inget annat). (Svaret ska alltså börja »DoDetot vovaror enon gogånongog«.) Här är mormor|morfar|farmor|farfar förstås en möjlighet, men försök att skriva något kor(Ännu bättre vore det egentligen med »Dodetot« tare! där bara det första d-et är versalt. Mycket frivillig överkurs.) 91 INLUPP 9: REGULJÄRA UTTRYCK Uppgift 9.49 Ta med grep -Eo och lämpliga argument fram telefonnummer med riktnummer från tidningstexterna i /local/kurs/ids/ ivt2-svenska.txt. Din lösning kan vara mer eller mindre bra. Ju fler korrekta nummer du får ut desto bättre, men undvik att få falska träffar med sånt som inte är telefonnummer. 92 Kapitel 10 Dokumentrepresentation Vi har tidigare sett hur rena textfiler (plain text) representeras för datorn. En teckenkodning ger varje tecken ett visst numeriskt värde, inklusive sådana kontrolltecken som nyrad. Vid teckenkodningar med högst 256 olika värden lagras dessa en i varje byte (som var och en kan ha 256 olika värden). För Unicode som har många fler värden lagras tecknen på något sätt där en del eller alla tecken tar upp flera bytes. När mer komplicerad information, som ordbehandlingstext, ljud, bild, film, databaser, program m. m. ska lagras kan det också ske i form av text på något sätt eller som binärfiler där de olika koderna inte har tecken som motsvarigheter. När texter lagras i filer eller sänds i kommunikation mellan datorer gäller det att avsändare och mottagare är överens om vilken kodning som används så att informationen tolkas som det var tänkt. 10.1 Uppmärkt text Här är kapitelrubriken uppmärkt och dessutom meningar. Det finns taggar som visar var de uppmärkta delarna börjar och var de slutar. En uppmärkning som anger ordklass för alla ord skulle kunna innehålla t. ex. något som <pron>Det</pron> <verb>var</verb> <art>en</art> <subst>afton</subst> <prep>i</prep> <subst>början</subst> <prep>av</prep> <subst>maj</subst><punkt>.</punkt> 10.2 HTML kommer från SGML Den här syntaxen med taggar med <> och / var inget nytt påhitt för HTML, utan använde sig av SGML (Standard Generalized Markup Language). Till SGML hör bland annat syntaxen med </> samt sätt att definiera olika märkspråk genom att tala om vilka element som kan förekomma och i vilka kombinationer. Till HTML-standarderna hör information om t. ex. att ett ul-element kan innehålla li-element men inte tvärtom, osv., och valideraren klagade om du bröt mot några sådana regler. I praktiken är webbläsare förlåtande och gör det bästa den kan även när sidor inte är korrekt HTML , och många sådana fel ger det utseende man väntade sig i alla fall. Det går bra att låta bli att skriva ut sluttaggarna i en del fall. Istället för I många sammanhang är det vanligt att textfiler är uppmärkta med taggar som anger att en viss del av texten ska tolkas eller behandlas på ett visst sätt. Ett exempel vi har sett på det är HTML där uppmärkningen sker med starttaggar som <h1> och sluttaggar som </h1>. Ett helt uttryck som <h1>Hej</h1> kallas för ett element, där elementets innehåll är »Hej«. I andra sammanhang skulle man kunna tänka sig att andra egenskaper hos texten märktes upp, <ul > med helt andra taggar. I en del fall har man kanske < l i >snipp </ l i > anledning att märka upp varje ord med ordklass. < l i >snapp </ l i > I ett annat fall kanske man vill märka upp bara < l i >snut </ l i > kapitel och stycken. I ett tredje fall kanske man </ ul > vill visa exakt hur en viss utgåva av en tryckt skrift kan man skriva bara såg ut och märka upp sidor och rader. En uppmärkning av Röda rummet skulle kunna <ul > börja < l i >snipp <rubrik>Stockholm i < l i >snapp fågelperspektiv</rubrik> < l i >snut <mening>Det var en afton i början av </ ul > maj.</mening> <mening>Den lilla trädgården på ... och blommor.</mening> 93 10. DOKUMENTREPRESENTATION Det är eftersom ett li-element inte får finnas inom ett annat li-element som sluttaggarna kan utelämnas. 10.3.3 Attribut Ett element kan även innehålla attribut med värden. Exempel: <name type="person">Melker Melkersson</name> Här har elementet ett attribut type med värdet person. 10.3 SGML och XML Man använder dubbla eller enkla citattecken runt värdena. (I XML måste citattecken alltid vara SGML är en gammal standard med rötter från med. Annars är det inte obligatoriskt om det bara 1960-talet, och 1998 kom en variant, XML (Exär snälla tecken innanför. Dettza är ännu ett fall tensible Markup Language) inspirerad av den. där XML har gjorts så att det ska vara extra lätt för XML är gjord för att vara enklare att tolka för proprogram att tolka.) gram. T. ex. måste alla element alltid avslutas exEtt annat sätt än det tidigare att märka upp en plicit. mening med ordklasser skulle kunna vara XML har blivit mycket populärt i en mängd <w wc="pron">Det</w> sammanhang där man har strukturerad text. När <w wc="verb">var</w> <w wc="art">en</w> nya märkspråk ska konstrueras så väljer man i all<w wc="subst">afton</w> mänhet att använda XML. Då får man enhetlig<w wc="prep">i</w> <w wc="subst">början</w> het och kan använda sig av en mängd verktyg som <w wc="prep">av</w> analyserar och konverterar XML-filer på olika sätt. <w wc="subst">maj</w><punct>.</punct> Det har även gjorts varianter av HTML som varit Här användes en tagg w för ord (word) med ett XML istället för SGML : XHTML . Men modern HTML, HTML 5 (standardiserad attribut wc (= word category = ordklass). i oktober 2015), är inte XML, och är till skillnad från tidigare HTML-versioner inte strikt SGML 10.3.4 Toppnivå heller, även om det tydligt syns att dess historiska Ett XML-dokument har bara ett element på toppursprung är SGML. nivån. Alla övriga element måste finnas i detta elements innehåll. 10.3.1 Element, taggar och innehåll Förutom element kan XML-dokument även innehålla en del annat som talar om hur dokumenEtt elements innehåll kan i sin tur innehålla nya tet ska behandlas i vissa fall, så detta kan stå före element. Ett litet exempel på texten »Melker elementet på toppnivån. Sådant står också inom Melkersson« uppmärkt är <> men börjar med frågetecken eller utropstec<name><firstname>Melker</firstname> ken. I synnerhet ska en deklaration i stil med <lastname>Melkersson</lastname></name> I exemplet finns det ett name-element som i <?xml version="1.0" encoding="UTF-8"?> sig innehåller ett firstname-element och ett komma allra först i dokumentet. Detta visar villastname-element. Element måste ligga helt inom andra ken version av XML som används och vilken tecelement. Det går inte att låta dem korsa kenkodning detta dokument använder. (Om inget varandras gränser i stil med <kursiv>Herr sägs om detta så är det UTF-8.) <name>Melker</kursiv> Melkersson</name>. Här är det fel vid </kursiv> eftersom name- 10.3.5 Teckenreferenser och entiteter taggen inte har avslutats än. Man kan lägga in vilka tecken som helst genom I XML är det skillnad på versaler och gemener i att skriva deras Unicode-kod mellan &# och ;. Ett taggar. promilletecken (h) kan man t. ex. vid behov beteckna med ‰. Ofta använder man hexadecimala beteckningar istället som börjar med x. 10.3.2 Element med tomt innehåll Då blir t. ex. promille istället ‰. Du förI HTML finns det några element som man aldrig väntas inte kunna räkna med sådana. Det räcker skriver sluttaggar för, eftersom innehållet alltid är med att känna igen att referenserna kan se ut på tomt. Man använder t. ex. <br> för ett radbrott den formen också. och <img ...> för en bild, men avslutar aldrig Entiteter använder också &; men däremellan dessa med </br> eller </img>. skriver man istället ett namn, t. ex. © för ©. Det ingår i definitionen av HTML vilka element Vilka entitetsnamn som finns är olika för olika det är som alltid tar slut direkt så att man inte slags XML-dokument, men alltid finns i alla fall behöver skriva deras sluttagg. I XML måste alla • & (&) element avslutas uttryckligen, så i XHTML måste • < (<) även dessa element ha en sluttagg, men istället för • > (>) <br></br> använder man då kortformen <br/>. • ' (') 94 10.4. MIME • " (") eftersom dessa tecken ingår i XML-syntaxen och därför kan vara besvärliga att få in annars i vissa fall. Observera att de numeriska teckenreferenserna alltid sker till Unicode-koder oavsett vilken teckenkodning som XML-filen använder. Även om man har t. ex. en Latin1-fil med <?xml version="1.0" encoding="ISO-8859-1"?> så går det ändå att på detta sätt referera till vilka tecken som helst. Det är IANA som håller rätt på vilka beteckningar som är de officiella så att alla använder samma. Textfiler använder förleden text och i synnerhet kallas vanlig text text/plain. För text-typer kan man lägga till en specifikation av vilken teckenkodning som används på detta sätt: text/html; charset=ISO-8859-1. Detta används till exempel i post då det i brevhuvudet kan finnas en rad i stil med Content-Type: text/plain; charset=utf-8 som talar om att brevet innehåller ren text kodad med UTF-8. (Denna rad ser man vanligen inte, för program för att läsa post brukar dölja sådana tekXML är liksom SGML inte ett märkspråk, utan niska detaljer, men ha ett särskilt kommando som ett sätt att definiera en mängd olika märkspråk »visa hela huvudet« eller »visa original« som visar som använder samma grundsyntax men helt oliäven detta.) ka uppmärkning. En definition av ett sådant språk Brev med bilagor har ett särskilt format där anger inte bara vilka element som ska finnas, utan varje bilaga får en egen etikett om vad den har även hur de förhåller sig till varandra, t. ex. att en för format. (Mailprogrammet väljer ofta vad den li kan finnas inne i en ul men inte tvärtom för skriver där utifrån filnamnet, så om filen heter att ta ett exempel från XHTML. foo.txt så får den en etikett text/plain, osv. Ett exempel som MIME -typerna används även på webben, där <li > MIME -typen för HTML är text/html. Varje <ul >Funkar i n t e ! < / ul > gång en webbserver skickar ut ett dokument </ l i > till en webbläsare så skickar den först ut en är ogiltig XHTML. Men det är fortfarande välfor- innehållsdeklaration med en rad i stil med mad XML. Med välformad (well-formed) menas Content-Type: text/html; charset=utf-8 bara att man följer de allmänna syntaxreglerna för som talar om vad det är för slags data som den XML , som t. ex. att alla sluttaggar är avslutade. skickar ut. Med giltig (valid) menas att man följer de specifika reglerna för ett visst märkspråk. (Så för att 10.4.1 Utan MIME då? vara giltig måste den till att börja med vara välformad.) Det finns ingen information i sig i filsystemet om vad de olika filerna är för slags dokument, så om man öppnar en fil från t. ex. filhanteraren så får 10.4 MIME den göra en mer eller mindre lyckad gissning om vad det är för slags dokument. Dels kan sådana Program som kommunicerar med varann behöver program gå efter filnamnsändelsen och t. ex. utgå vara överens om hur data som de skickar mellan från att en fil foo.png är en bild i bildformatet varann ska tolkas. När data skickas så följer det PNG . Men den kan också titta inne i filen, i syndärför ofta med en etikett på vilken det står vad nerhet på hur den börjar. I många format börjar det är för slags data så att mottagaren ska få vefiler alltid på samma sätt vilket gör dem lätta att ta det. På sådana etiketter använder man ofta ett känna igen. standardiserat format MIME för att beskriva olika Ett skalprogram som känner igen filer på ett såformat. Denna standard utvecklades först för dadant sätt och beskriver innehållet är file. torpost, och förkortningen står för Multipurpose 10.3.6 Olika XML -språk Internet Mail Extensions, men den används i andra sammanhang också. $ file rummet.txt latex1.pdf verb.txt MIME -etiketterna har två delar med snedstreck rummet.txt: UTF-8 Unicode text emellan, t. ex. image/jpeg för en bild i JPEGlatex1.pdf: PDF document, version 1.5 format, image/png för en bild i PNG-format osv. verb.txt: C++ source, UTF-8 Unicode text Den första delen anger vad det är för typ av format (som image för bilder) och den andra vilket specifikt format det är. Andra möjliga förHär kan man notera att för den ena textfilen led är bl. a. audio för ljud, video för video och application för diverse information som mås- här gissade file fel och tyckte av någon anledte behandlas av något särskilt program, t. ex. ning att verb.txt såg ut att vara ett program i programspråket C++. application/pdf eller application/msword. 95 10. DOKUMENTREPRESENTATION 10.5 Komprimering av filer tar fram det ursprungliga innehållet i filen foo och skickar vidare det till standard output. Om innehållet i en fil är repetitivt eller på andTextfiler innehåller mycket redundans och blir ra sätt delvis redundant så går det att lagra sam- oftast ungefär hälften så stora av att komprimeras. ma information på mindre plats. I en vanlig text- Många format på binärfiler, som PDF och olika fil t. ex. så är en del ord och andra teckenföljder bild- och ljudfiler, är redan komprimerade på ett mycket vanligare än andra, och då kan man på oli- eller annat sätt, och blir därför knappast mindre ka smarta sätt se till att dessa vanliga teckenfölj- av en ytterligare komprimering. der lagras på mindre plats än en byte per tecken. En del program dekomprimerar filer vid behov, Detta kallas att komprimera en fil. det gör t. ex. Emacs om man öppnar en kompriI GNU finns programmet gzip (GNU zip) för merad fil. att komprimera. Filer som är komprimerade med Den komprimering det handlar om här är sådan gzip brukar ha filnamnsändelsen .gz och det nor- som går att vända tillbaka. Ingen information går mala sättet att köra gzip är med ett eller flera fil- alltså förlorad; den tar bara mindre plats att lagra. namn som argument varpå dessa filer ersätts med Man talar också om komprimerade video-, bildkomprimerade versioner av samma filer. och ljudformat där information går förlorad (deMed gunzip går man åt andra hållet, dvs. »de- struktiv komprimering, lossy compression). De tar komprimerar« eller packar upp den komprimera- mindre plats än originalfilerna, men på bekostnad de filen. av att ha sämre kvalitet. Det finns andra komprimeringsprogram med andra format som också används ibland, t. ex. xz $ ls (med filnamn .xz) och bzip2 (med filnam .bz2). bar foo $ gzip foo $ ls bar foo.gz $ gunzip foo.gz $ ls bar foo 10.6 Filarkiv I många fall är det praktiskt att skapa ett filarkiv, dvs. en fil som i sig innehåller en mängd andra filer. Det kan t. ex. användas för att enklare skicka en hel mängd filer till någon annan i ett svep. Man kan packa upp filarkivet och därmed få Eftersom filnamn kan ha flera punkter är det fram de ingående filerna igen. I förra avsnittet tabara att hänga på .gz på filnamnet även om lades det också om att packa upp, men då gällde det redan finns en punkt. Så den komprimera- det att packa upp en komprimerad fil för att få de versionen av ett Javaprogram space.java blir fram originalet igen, vilket inte är samma sak. I flera format av filarkiv ingår komprimering, space.java.gz osv. I en komprimerad fil används alla möjliga vär- men det normala filarkivformatet i Unix, tar, är den 0–255 och innehållet är en binärfil som inte inte komprimerat, utan ett arkiv är ungefär likan läsas direkt av något program som inte kän- ka stort som de ingående filerna tillsammans. En ner till just detta komprimeringsformat. När man sådan tar-fil har filnamnsändelsen .tar och ofta ska använda sig av innehållet i den komprimera- komprimerar man den i sin tur och får då en filde filen är det dock inte nödvändigt att återskapa namn som slutar med .tar.gz. För att hantera sådana filarkiv använder man originalfilen på disken igen, utan man kan ta fram innehållet med zcat. Kommandot zcat foo.gz kommandot tar.1 compress och gzip: gzip är ett fall där GNU inte helt efterliknar Unix. Det normala komprimeringsprogrammet i Unix var nämligen ett program compress som komprimerar med en annan metod. För GNU kunde man dock inte lagligen skriva en ersättning av det programmet eftersom den komprimeringsalgoritm som användes var skyddad av ett patent sedan 1985. Istället fick man lov att använda en annan metod. År 2003 gick det patentet ut, så sedan länge finns det fria program som implementerar den gamla algoritmen, men gzip fortsätter att vara det vanligaste sättet att komprimera filer i GNU. 96 $ tar -c -f texter.tar *.txt $ rm *.txt $ tar -x -f texter.tar Första väljaren är -c för att skapa ett arkiv (Create), väljaren -f ska ha ett argument som är arkivfilen (i detta fall texter.tar) och som argument ger man vilka filer och kataloger som ska läggas i 1 Om man ska dela med sig av ett filarkiv till någon i MS Windows-världen kan det vara bättre att använda zip och unzip som använder ett annat format istället. Se deras mansidor! 10.6. Filarkiv arkivet (här *.txt). De ursprungliga filerna ligger kvar. I det andra fallet är förstaväljaren -x för att packa upp ett arkiv (eXtract). Filerna som togs bort med rm återställs. Med en väljare -v blir tar mer pratig (verbose) och talar om namnet på varje inblandad fil. Eftersom det är så vanligt att man komprimerar tar-arkiv med gzip så kan tar med -x ta hand om det steget själv, och det räcker med $ tar -xvf foo.tar.gz för att packa upp ett komprimerat tar-arkiv. I detta exempel fördes väljarna -x, -v och -f ihop. Då får man lov att sätta -f sist så att man kan ge ett argument till den väljaren. Den vanliga kombinerade ändelsen .tar.gz ersätts ibland med bara .tgz, speciellt i andra filsystem som inte klarar flera punkter i filnamnen. tar = tape archive: Den ursprungliga användningen av tar var att lagra en mängd filer på ett magnetband och därav kommer kommandots namn. 97 Inlupp 10: Dokumentrepresentation Redovisning De olika raderna i filen börjar med indrag med olika många mellanslag för att det ska bli lättare Denna gång ska du skicka svar på frågorna i mail att läsa så att man ser hur strukturen är. Ett protill Per igen, senast onsdagen den 14/10. Med det- gram som förstår sig på XML och som ska göra ta mail ska du också skicka en bilaga med ett kom- något med denna fil kommer inte att bry sig om primerat tar-arkiv som innehåller de filer som du hur indragen är, men det är bra om filen är nåändrat i enligt instruktionerna. Texten med själva gorlunda läsbar för människor också! svaren kan ligga i huvuddelen av mailet, eller vara Detta kan Emacs ordna åt dig. Teveprogramen bilaga den också, men är det en bilaga så se till met Rapport saknar starttid. Gå till den tomma att den skickas med en etikett som talar om att rad där det borde stå och tryck TAB så får du ett det är en text. (Så ska det bli automatiskt om du lagom indrag. TAB fungerar så i de flesta Emacsger filen ett namn som passar en textfil.) lägen, att istället för att alltid gå fram lika långt så går det fram »lagom« långt för det som man just editerar. (Det kan användas både för en ny rad Packa upp filerna som här, eller för att ändra indraget på en rad som redan finns.) De filer du ska använda i denna labb ligger i Skriv nu in <starts>18:55 (precis så, utan filarkivet /local/kurs/ids/xml.tar.gz. Packa sluttagg). Nu blir det Invalid i informationsraupp det i din kurskatalog. Alla filer i filarkivet lig- den igen. En finess i detta Emacsläge är att det ger i en katalog xml så du får en ny underkatalog hela tiden kollar av ifall du har en korrekt XML-fil med detta namn med filer som du ska använda i eller inte. Med rött visas var det finns fel. denna labb. (Gör ingen kopia av arkivfilen först.) Uppgift 10.1 Vad gav du för kommando för att packa upp filarkivet? Uppgift 10.3 Var visas det vara fel? Varför just där? Ta fram hjälpen för denna Emacs-mode. (Se tabellen på s. 61 eller Help Describe i menyerna om du har glömt hur man gör det.) XML i Emacs I den hjälp du får upp nämns ett kommando Öppna filen svt2.xml där i Emacs. Innehållet är som avslutar det aktuella elementet genom att tydligen en tevetablå i nåt XML-format. lägga in en sluttagg. Uppgift 10.2 Vad har elementet på toppnivån i detta dokument för starttagg? Uppgift 10.4 Hur utför man det kommandot? (Gör så!) Notera härnäst att det står (nXML Invalid) i informationsraden. Det första inom parentesen är som vanligt namnet på det editeringsläge som Emacs befinner sig i. Tillägget Invalid betyder i detta fall att det är en ogiltig XML-fil. Detta Emacsläge använder sin kunskap om XML-syntax för att markera när syntaxen inte stämmer. Emacs vet inte vad det är för slags XML i denna fil, men eftersom innehållet inte ens är välformad XML så kan den ändå vara säker på att den är felaktig. Ett sätt att direkt flytta sig till felet är att klicka på detta ord Invalid. Rätta felet! Snart ändras Invalid till Valid. Nu bör bufferten ha blivit Valid igen. Med detta menas än så länge bara att det är välformad XML eftersom Emacs bara vet att detta är XML men inte vet vilket särskilt XML-märkspråk det är. Detta speciella märkspråk för tevetablåer beskrivs i filen schedule.rnc i samma katalog. Tala om det med XML Set Schema File. . . och ange den filen. Du får en förfrågan »Save schema location to . . . « Svara y! Nu minns Emacs vilket schema som gäller för denna fil. Där beskrivs en ganska petig syntax för hur de olika delarna av en sån här tevetablå måste se ut 98 schedule.rnc och denna fil stämmer inte riktigt med denna syntax. Så nu hittas flera fel. Tryck på Invalid i informationsraden för att gå till det första felet. Med C-c C-n kan du gå till nästa fel. Varje gång du går till ett fel så kommer det ett litet meddelande om vad felet är i ekoarean. För att gå till det första felet utan att behöva använda musen kan du använda M-< eller <C-home> för att gå till början av bufferten innan du går till nästa fel. Rätta alla felen! Exakt hur syntaxen måste vara här bör framgå av de exempel som inte ger fel. Lägg till ett par program i slutet av tablån. (Hitta på nåt.) Använd TAB för indrag så att delarna i ditt programinslag får samma indrag som de övriga. Se till att din slutliga fil är »valid«. (Det står på två rader här i kompendiet bara för att spalten är så smal.) Detta talar om att filen tv.css i samma katalog ska ge information om hur olika element ska visas med samma språk CSS som du såg i kapitel 8. Se efter att filen nu visas annorlunda i Firefox! Uppgift 10.6 Vilket attribut har satts till vilket värde i tv.css? Uppgift 10.7 Vad betyder det om hur ett sådant element ska visas? (Sök på nätet.) Uppgift 10.8 Vilket värde är default för det attributet? (Sök på nätet.) Lägg till saker i tv.css så att det blir en fin spalt med en tevetablå. Sätt en ganska smal width för hela schedule så att det påminner om en spalt i en tidning. Ändra så att tid och titel för programmen markeras med annan slags text, kanske schedule.rnc med font, font-weight eller font-size. Se till Titta i den där filen schedule.rnc som beskrev att beskrivningen börjar på ny rad. Sätt färger och formatet. Det finns olika sätt att beskriva syntax- padding och/eller margin som du vill ha dem. Som överkurs kan du läsa på om CSS (t. ex. en för ett viss slags XML-dokument. Detta kallas för RELAX NG. Detta format är inget du be- på http://w3.org/) och komma på ett sätt att höver lära dig, men många delar av det bör ändå använda något av den information som står som framgå tydligt med tanke på hur filen såg ut. Se i attributvärden i filen, t. ex. skriva »(På finska.)« i synnerhet på det pattern som definieras där för att slutet av program som har lang="fi". beskriva vad elementet starts får ha för värden. Detta är ett (utökat) reguljärt uttryck och det godkänner inte bara tider som »17:15« utan också Bildfiler t. ex. »12:75« och »55:15« som inte är riktiga tider. /usr/share/shotwell/icons/ innehåller en del Förbättra detta reguljära uttryck så att det inte bildfiler som används av fotohanteraren Shotwell. godkänner sådana felaktiga tider! När du har ändrat i schedule.rnc måste du sätta filschemat för Uppgift 10.9 Filerna har fyra olika filnamnsexsvt2.xml på nytt för att den ska använda den nya tensioner. Vilka då? (Två av dem finns det bara en filen ifall du vill prova att ditt reguljära uttryck var av.) fungerar som avsett. (Prova gärna med lite felaktiga tider, men glöm Om man öppnar en bildfil i Emacs så visas den inte att återställa till korrekta tider efteråt, så att som en bild, men man kan ändra så att den visas det du lämnar inte innehåller några fel!) »som text«, tecken för tecken istället. CSS för XML Öppna din svt2.xml i Firefox (med File Open File i Firefox, eller från filhanteraren). Dokumentträdet visas utan någon särskild formattering eftersom webbläsaren inte vet något om hur dessa element ska formatteras. Den vet bara att detta är XML (på grund av filnamnet). Uppgift 10.10 Vad kan man trycka i Emacs för att slå om (toggle) mellan att visa som bild och visa som text? Uppgift 10.11 Vilka av de olika bildformaten som används i den katalogen är binärfiler och vilka är textfiler? Det finns minns en av varje slag. Uppgift 10.12 na katalog? Vad säger file om filerna i den- Uppgift 10.13 För ett av de fyra formaten säger Uppgift 10.5 Firefox skriver något just om att file hur stor bilden är också. Vilket? den inte vet vad det är för slags XML. Vad står Uppgift 10.14 Det finns en väljare till file som det? gör att den skriver ut en MIME-beteckning istället. Hur lyder den väljaren? Lägg in följande på en rad som andra rad i filen: Uppgift 10.15 Vilka är de fyra olika MIMEbeteckningarna för filerna i denna katalog enligt <?xml-stylesheet type="text/css" detta? href="tv.css"?> 99 INLUPP 10: DOKUMENTREPRESENTATION Lite ljud som omväxling Uppgift 10.23 Hur kan man skriva q{0,1} enklare i ett utökat reguljärt uttryck? Uppgift 10.16 Vad säger file om ord.flac i din kurskatalog? Uppgift 10.24 I sagobok.tex gjorde Per (dvs. användaren starback) en ändring den 5 oktober. Hur beskrev han den ändringen i filens logg? Detta är ett binärt format, men trots det så finns det några koder som direkt motsvarar tecken i början av filen. Öppna den i Emacs! Uppgift 10.25 Kommandona för versionskontroll i Emacs börjar med C-x v. Ett av dem är till för update. Vad heter det i menyerna och vad har det för kortkommando? Uppgift 10.17 flac-filen? Vilka är de fyra första tecknen i Större delen av filens innehåll motsvarar kontrolltecken sedda i textformat som visas med koder i Emacs. I synnerhet är ^@ en beteckning på kontrolltecknet NUL som har koden 0. Man kan se att rätt många bytes har värdet 0. Ett komprimerat ljudformat som fyller ungefär samma nisch som MP3 men inte är lika vanligt heter Ogg Vorbis. Det finns ett program oggenc som skapar sådana Ogg-filer som brukar ha filnamnsändelsen .ogg. Skapa en fil ord.ogg utifrån ord.flac. (Du får själv hitta lämplig dokumentation om hur detta görs.) Uppgift 10.18 Hur skrev du för att göra detta? Det finns en väljare som sägs sätta kvaliteten för kodningen av oggarna. Skapa en ny fil ord-good. ogg som kodar ord.wav till en ogg enligt den bästa kvaliteten man kan ställa in med den väljaren enligt dokumentationen. Du behöver även en väljare som talar om vad output-filen ska heta. Uppgift 10.19 att göra det? Använd det när du är i sagobok.tex eftersom du ska ändra något där. Detta kan vara mer praktiskt än att skriva svn update eftersom innehållet i Emacs uppdateras på samma gång. Uppgift 10.26 Din saga har ju ditt användarnamn som rubrik. Ändra den rubriken till nåt som passar innehållet i just den sagan istället. TEXa filen tills din titel syns även i innehållsförteckningen och checka sedan in din ändring. Filen /local/kurs/ids/japansk.txt är inte kodad med UTF-8. Gör man cat japansk.txt får man därför ut en konstig ojapansk sörja i terminalen. Den filen har en rad i början som talar om för Emacs vad det är för teckenkodning: -*- coding: euc-jp -*Uppgift 10.27 Använd samma beteckning »eucjp« för att med iconv omvandla från denna teckenkodning. Svara med ett kommando som skriver ut texten rätt i terminalen. Svara också med den text som det blev då. Vad gav du för kommando för Uppgift 10.20 Hur beskriver kommandot file de båda ogg-filerna du har nu? (Använd joker.) (Om det inte är som nånting med »Ogg« så har du gjort fel.) Skapa komprimerat arkiv När du mailar svaren på dessa uppgifter ska du även skicka med ett komprimerat tar-arkiv med de filer som du har ändrat. Filerna som ska vara med i arkivet är svt2.xml, Uppgift 10.21 Visa storleken i bytes för alla schedule.rnc, tv.css, ord.ogg och ord-good. dessa tre dessa ljudfiler med ett kommando. ogg. Ett sätt skulle vara att först skapa ett tar-arkiv ord-good.ogg borde ha blivit större än ord. med tar och sen komprimera det med gzip, men ogg, så är det inte så har du gjort något fel. (Om det finns en väljare till tar som direkt fixar komdu vill lyssna på de olika filerna (ogg och flac) primering också. Ta reda på den och använd den. för att se om du hör någon skillnad är ett sätt att göra det med kommandot play.) Uppgift 10.28 Vad använde du då för kommando för att skapa det komprimerade tar-arkiv som du skickar med som bilaga? Diverse Du behöver både välja ett lämpligt filnamn för Uppgift 10.22 Vilket ord i filen /local/texts/ ett sådant komprimerat filarkiv, och använda en jabberwocky innehåller bokstaven x? (Lös upp- väljare som gör att det blir ett sådant som skapas! giften med bara ett grep-kommando med väljaren -o.) 100 Kapitel 11 Program Ett datorprogram är en samling instruktioner som beskriver något som en dator ska utföra. 11.1 Skript På s. 33 fick du skapa skalskript – textfiler med flera skalkommandon efter varann – och köra dem genom att skriva bash filnamn . Genom att ge ett filnamn som argument till skalet (bash) talar man om att det ska hämta kommandon från den filen. På s. 58 fick du sedan se hur man kan ge argument till ett sådant skript. Detta är ett slags enkla program. På samma sätt kan man köra t. ex. ett program i programspråket Python (brukar ha namn som slutar på .py) med python filnamn. 11.2 skalskript. Ett särskilt program, en interpretator, läser och utför dessa instruktioner. (Det finns även mellanlägen mellan kompilering och interpretering.) Interpreterande och kompilerande programspråk De flesta program man kör är dock inte textfiler utan binärfiler. De innehåller då instruktioner i en maskinnära form (maskinkod) som kan utföras (exekveras, köras) direkt av datorn. Med datorprogram kan man avse både en sådan binärfil, och även källkoden, så som programmet skrivits i något programspråk i en eller flera textfiler. I de flesta programspråk skriver man instruktioner som ligger långt ifrån den typen av instruktioner som datorn kan utföra direkt. Det finns olika sätt att då få datorn att utföra instruktionerna i källkoden: kompilering och interpretering. Kompilering är att översätta källkoden till maskinkod. Översättningen sker med en kompilator – ett särskilt program. Sen kör man den resulterande koden. (Källkoden behövs inte längre för att kunna köra programmet. Men om man behöver göra ändringar i programmet behöver man källkoden igen och får lov att kompilera om den efteråt.) Interpretering är att tolka källkoden bit för bit istället, så som skalet tolkar kommandon i ett 11.3 Att köra program Programmen är filer de också. Om man t. ex. kör bildbearbetningsprogrammet Gimp så är det filen /usr/bin/gimp man kör. Det skulle gå att skriva den fullständiga sökvägen /usr/bin/gimp för att köra det programmet, men det räcker med bara gimp. Om man skriver bara ett namn utan katalog så letar nämligen skalet efter en sådan fil i vissa kataloger (däribland bland annat /bin och /usr/bin). Där ligger de flesta av de program du använt hittills, som t. ex. cat, grep, ls, sed osv. Om programfilen inte ligger i en av dessa kataloger måste man skriva ett längre filnamn där man tar med katalogen, med en fullständig eller relativ sökväg. Observera att skalet inte söker efter filen i aktuell katalog i sådana fall, som annars när man skriver ett filnamn utan katalog. 11.4 Att kompilera program För att kompilera ett program så kör man i de enklaste fallen en kompilator med källkodsfilen som argument. Kompilatorn skapar en ny fil som går att köra. Ett större program består normalt en mängd filer som använder sig av varandra på komplicerade sätt, och för att kompilera detta kan det krävas flera steg. I Unix-världen används oftast ett program make för att göra detta. Det utför alla dessa steg i rätt ordning för att tillverka vissa filer. I en fil Makefile har man skrivit regler som talar om för den vad den ska göra. Man kan ge argument till make som talar om vad det är man vill »tillverka« med det, men bara make utan argument duger ofta. 101 11. PROGRAM 11.5 Att installera program På en GNU-dator som man själv administrerar är det i allmänhet enklast att inte kompilera program man ska använda, utan istället installera färdigkompilerade program som färdiga paket med filer som läggs ut på rätt ställen på disken. Program som sköter sådant kallas pakethanterare. Detta förutsätter att någon har gjort ett sådant paket som passar till ens system, men är det ett välanvänt program så är det antagligen så. Ett par vanliga paketsystem är APT och RPM. Vårt system använder det sistnämnda av dessa. Men som vanlig användare utan administratörsrättigheter så kan du oftast inte använda dig av sådant eftersom du inte har rätt att lägga filerna på de centrala ställen där de då är tänkta att hamna. Då får du ofta lov att installera program någonstans under din hemkatalog genom att kompilera dem själv. (Så kan det också vara för att ingen har gjort nåt behändigt paket av just det programmet.) Programmen distribueras då i allmänhet i form av ett (komprimerat) filarkiv som källkoden finns i. Du börjar med att packa upp detta filarkiv och sen se efter om det bland filerna finns någon fil README med allmänna instruktioner eller kanske en fil INSTALL med instruktioner om hur du ska installera programmet. (Dessa filer heter ofta just så, med versaler.) Ofta säger instruktionerna att du ska använda make på något sätt. hemkatalog kan man förstås använda hemkatalogen själv: Med --prefix ~ hamnar själva programmen i ~/bin osv.1 Det kan även finnas andra saker man ställer om vid konfigureringen med olika väljare till configure. 11.6 Upphovsrätt och licenser Upphovsrätt gäller för program, både för källkod och maskinkod, precis som för litterära och konstnärliga verk. Inga som har skrivit program för moderna datorer har dock varit döda i sjuttio år så att upphovsrätten har gått ut för deras verk, så som skett för t. ex. Strindberg och Lenngren.2 Trots det finns det en mängd program som det står en fritt att använda, kopiera och sprida, eftersom programmens författare uttryckligen givit en tillstånd till detta. Sådant sker i form av en licens där upphovsrättsinnehavarna talar om vad de tillåter. I synnerhet är hela operativsystemet GNU sådan »fri programvara«, men för att komma till GNU går vi via Unix. 11.6.1 Unix Operativsystemet Unix skapades i slutet av 1960talet på Bell Labs i USA. I mitten av 1970-talet började det spridas utanför Bell Labs. Det såldes rätt billigt (speciellt till 11.5.1 Att installera med make universitet) och gick att köra på relativt billiga daI GNU har det utarbetats en standard för hur torer (vid en tid när datorer var stora och dyra), installation går till. Med distributionen av provilket bidrog till dess popularitet. Dessutom följgrammet följer det med ett skalskript configure de källkoden med så att man kunde se precis hur som man börjar med att köra. Det skapar en fil det fungerade och även införa egna ändringar i syMakefile som är särskilt anpassad för det system stemet. Det ökade populariteten ännu mer i den man kör på. Efter det kan man kompilera proakademiska världen, där en mängd universitet angrammet med make och sedan installera det med vände Unix i undervisningen i datorvetenskap. make install . I det sista steget kopieras filerna Möjligheten att göra ändringar i koden ledde ut till olika ställen i filsystemet. till att det uppstod en stor mängd varianter av De tre kommandona kan vara Unix. En viktig variant var BSD (Berkeley Software Distribution) från University of California, Berkeley. Berkeley spred sina tillägg och föränd$ ./configure --prefix ~ ringar fritt, och många använde dessa. $ make På 1980-talet tillverkade flera företag olika en$ make install användardatorer med Unix – arbetsstationer. De var mycket kraftfullare och dyrare än den tidens vanliga persondatorer, och använde olika versioNormalt läggs program i /usr/local/bin/, ner av Unix. De olika tillverkarna skickade med man-sidor i /usr/local/man/ och diverse and- olika tillägg från BSD och andra håll, och skrev ra filer i några andra underkataloger till /usr/ också mycket egna tillägg (som inte spreds fritt), local. Men där har vanliga användare inte rätt 1 Tidigare har jag skrivit att det normala sättet att ge att lägga filer, så det kommer inte att funka om man inte är administratör! Med --prefix ovan argument till långa väljare är med ett likamedtecken, som till configure talar man om var programmet --prefix=~/foo, men just i detta fall ställer det till problem eftersom skalet bara ersätter ~ med ens hemkatalog när det och alla dess filer ska installeras, så med t. ex. står först i ett argument. 2 Detta är förstås skälet till att texter av dessa figurerat i --prefix ~/foo installeras själva programmen i ~/foo/bin/ osv. Istället för en katalog under ens flera övningar. 102 11.6. Upphovsrätt och licenser så de olika Unix-systemen skilde sig åt. En viktig del var fönstersystemet X som spreds fritt från Massachusetts Institute of Technology (MIT) där det var skrivet. Även till detta lade de olika tillverkarna till olika nya finesser, så på olika datorer körde man lite olika versioner av X. Fönstersystemet X kallas också ofta för X11, eftersom det är version 11 av det som man använder, och det har ingenting med det mycket senare OS X att göra. 11.6.2 GNU och fri programvara När Unix var nytt hade de flesta av dess användare möjlighet att läsa koden för att lära sig hur den fungerade och även möjlighet att införa egna ändringar för att få delar av systemet att bete sig annorlunda. Med tiden hade det blivit allt ovanligare. De flesta Unix-användare kom att sitta vid arbetsstationer som till stora delar var som svarta lådor som man inte hade insyn i. Det uppfattades av många som frustrerande vid en tid när en stor del av datoranvändarna var programmerare själva. 1983 utannonserade Richard M. Stallman på MIT planer på att skriva ett fritt operativsystem som skulle få namnet GNU. Eftersom Unix redan då hade en så stark ställning så valde han att det skulle vara Unix-kompatibelt, dvs. bete sig som Unix trots att det inte var Unix. GNU stod för »GNU’s Not Unix«. Snart startades en särskild stiftelse, Free Software Foundation (FSF), för att hålla i projektet och även i övrigt verka för fria program. En del program som redan fanns och som var fria kunde användas. T. ex. bestämde Stallman tidigt att man inte behövde skriva ett nytt fönstersystem eftersom fönstersystemet X var fritt. En del tillägg till Unix som skrivits på Berkeley och andra ställen var också möjliga att återanvända. Men den största delen av koden fick man skriva själva. 11.6.3 Linux Många delar av GNU kom snabbt till, och användes som separata delar på andra Unix-system, men en viktig del som kom på efterkälken var den mest centrala delen av operativsystemet, kärnan. Utan den var det inte möjligt att sätta ihop ett helt GNU-system. 1991 offentliggjordes Linux av den finlandssvenske studenten Linus Torvalds. Det var ett litet Unixliknande system, framförallt inspirerat av Minix, ett tidigare minimalt Unixliknande system, gjort särskilt för undervisning i operativsystem av Andrew S. Tanenbaum i Nederländerna. Inom kort sattes hela GNU/Linux-system samman som använde Linux som operativsystemskärna istället för HURD som var den fortfaran- de bara halvfärdiga kärna som skulle användas i GNU. Oftast kallas sådana system bara för Linuxsystem, efter den kärna som används. Detta gick att köra på vanliga persondatorer, som annars oftast körde MS-DOS från Microsoft. Persondatorerna hade med tiden blivit så pass kraftfulla att de kunde klara ett mer krävande system. 11.6.4 Unix och Unix-liknande system idag En stor del av Unix-liknande system idag är fri programvara. Det finns nu en mängd olika distributioner av GNU/Linux som publiceras av olika företag och organisationer. Dessa skiljer sig åt mer eller mindre mycket beroende på vilka val distributörerna har gjort angående vilka program som ska vara med och inte vara med. Några av de populärare distributionerna är Debian GNU/Linux, Ubuntu, Red Hat Enterprise Linux, Fedora, Centos, Linux Mint, openSUSE och Gentoo. Dessa är Unix-kompatibla, men de är inte Unix, dvs. de är inte licensierade att använda varumärket Unix, som ägs av The Open Group. Det är däremot kommersiella Unix-versioner som AIX, HP-UX, IRIX, Solaris, Tru64, A/UX och OS X. Alla dessa olika system skiljer sig åt på en mängd små sätt. Det har gjorts flera försök att få dem att närma sig varandra för att underlätta flyttandet av program från ett system till ett annat, och bland annat genom standarderna POSIX och Single Unix Specification (och genom att en del kommersiella system slagits ut på marknaden) är dagens Unix-system mycket mer lika varandra än hur det var för ett par decennier sedan. 11.6.5 GNU GPL och »Copyleft« Många fria program finns det ofria varianter av. Så är det t. ex. med fönstersystemet X från MIT och med de Unix-tillägg som gjordes för BSD. Företag © Figur 11.1: Copyleft-tecknet har bildats genom att spegelvända copyright-tecknet. 103 11. PROGRAM har vidareutvecklat dessa fria program men inte gjort sina nya versioner till fri programvara. Den som har använt dessa versioner har inte t. ex. kunnat läsa eller ändra i programmet de kört, trots att den ursprungliga versionen var fri programvara. De som skrivit dessa program hade inget emot detta, men för GNU ville man inte ha det så. Man ville att alla som använde de program man skrev skulle använda fria versioner av programmen. För att de program som skrevs för GNU skulle fortsätta att vara fria för alla som använde dessa program skrev man en ny licens, GNU GPL (General Public License), där en av de viktigaste nyheterna var något som man kallade för copyleft. Det innebär att man inte tillåter att någon sprider modifierade versioner av programmet om inte dessa ändringar också sprids med samma villkor. Den som delar med sig av program enligt GPL till en grupp människor ser alltså till inte bara att programmet är fritt för den gruppen, utan även för dem som den gruppen i sin tur sprider vidare programmet till. Ibland använder man ett spegelvänt copyright-tecken (figur 11.1) för detta. Med tiden har det skapats fler licenser för fri programvara med lite olika egenskaper, men GPL är den klart vanligaste inte bara för sådant som skrivits direkt för GNU, utan även för t. ex. kärnan Linux och webbläsaren Firefox. Istället för att formulera dessa villkor själv brukar man i allmänhet använda någon av de licenser som redan har formulerats. Ett skäl är att det underlättar mycket för den som vill använda programmet om en välkänd licens som man redan känner till har använts. Ett annat är att det underlättar återanvändning av delar av programmet tillsammans med delar av andra program som använder samma licens. Licenser för icke-fria program är i allmänhet utformade som avtal eller överenskommelser mellan två parter. För att få komma åt programmet så förbinder man sig till att uppfylla vissa villkor. En licens som GNU GPL fungerar inte så, utan är helt enkelriktad. Det finns ingenting som man behöver gå med på för att använda ett GPL:at program. Allt den licensen gör är att öka vilka rättigheter användare har, genom att uttryckligen göra vissa saker tillåtna som annars inte hade varit det på grund av upphovsrätten. Figur 11.2: Byggblock i Creative Commons-licenser. 11.6.7 Annat än program Programförfattares fria spridande av sina program har varit en inspiration även för fritt spridande av andra upphovsrättsligt skyddade verk, som texter, bilder och musik. Ett exempel är ett stort samarbetsprojekt som encyklopedin Wikipedia. Licenser som GNU GPL som är gjorda för program passar inte alltid så bra in på annat material. Organisationen Creative Commons har gjort en mängd olika licenser som är till för att upphovsrättsinnehavare ska kunna ge en del av sina rättigheter till allmänheten utan att släppa all kontroll. Dessa används rätt ofta vid spridande av texter, musik, bilder osv. och en del av dessa licenser är »fria« i den betydelse som används inom fri programvara. En del har även en copyleft-klausul, som där kallas för Sharealike. I figur 11.2 ses ikoner som ofta används vid beskrivning av de olika CC-licenserna. Creative Commons. BY = Attribution: man måste ange upphovsmakare. NC = Noncommercial: bara icke-kommersiell spridning är tillåten. ND = No Derivate Works: man får inte sprida härledda verk, utan bara exakta kopior SA = share alike: man får bara sprida det med samma villkor. Här har share alike fått en symbol som liknar den för det liknande copyleft. En CC-licens använder någon kombination av dessa element, t. ex. Attribution + NoDerivates = 11.6.6 Öppen källkod = Open source by-nd = för något som andra får sprida vidare Termen öppen källkod (open source) kom till sei oförändrat skick, om de anger ursprung, oavsett nare, och brukar användas av dem som snarare om det görs kommersiellt eller inte. Det är inte betonar de tekniska fördelarna som att ökad tillalla dessa licenser som räknas som fria enligt den gänglighet av källkoden kan leda till förbättrade betydelse som friprogramvarurörelsen använder. program genom att fler har möjlighet att hitta fel eller bidra med fixar. Då ses det som ett medel till att nå bättre resultat snarare än som ett mål i sig, även om vilka program som är fri programvara och vilka som är öppen källkod i praktiken oftast räknas likadant. 104 Inlupp 11: Program Redovisning Uppgift 11.1 Efter att du har checkat in den, så ta bort filen sagobok.tex och ge svn status Checka in svar på frågorna i en fil ids11.txt i igen. Att en fil som borde finnas saknas i din arden versionskontrollerade katalog som heter som betskatalog vill Subversion verkligen uppmärkditt användarnamn och som du har sedan tidigare. samma dig på. Vad använder den för tecken för Gör en incheckning redan första dan du hållit på att markera sådana filer? med detta, och en ny efter nästa gång du arbetat med det, osv. Eftersom filen var versionskontrollerad kan du hämta tillbaka den från repositoriet igen. Gör svn update så får du den senaste versionen. Versionskontroll igen Gå i skalet till katalogen alla som du skapat tidi- Uppgift 11.2 Vad svarade svn då? gare som kontrolleras av Subversion. Kolla läget här med kommandot svn status * * * som säger något om hur din arbetskatalog skiljer sig från vad som finns i repositoriet. Du borde På http://stp.lingfil.uu.se/lila/vc/svn/ står om hur man kan starta egna projekt under bland annat få rader som Subversion här. Vissa av De lila sidorna kan bara läsas om man ? sagobok.aux är inloggad på dem, för att inte säga onödigt myc? sagobok.pdf ket om hur våra datorer är uppsatta till allmänheoch några till eftersom LaTeX skapade de filerna ten. Detta är en sådan sida. Skapa en sådan webbnär du TeXade sagobok.tex, men Subversion in- inloggning för att kunna läsa den. (Detta är ett te vet något om dessa filer. Det är helt i sin ord- exempel på ett lösenord som inte är så himla vikning. Dessa filer bör inte checkas in, eftersom de tigt. Återanvänd inget viktigt lösenord här, t. ex. skapas automatiskt från andra. inte ditt vanliga inloggningslösen!) Ett M står för modified, så om du har en rad som Uppgift 11.3 Vad står det för exempel på en M sagobok.tex svn import-rad för att starta ett projekt där? betyder det att du har gjort ändringar i den filen som du inte har checkat in. (Gör det i så fall om det är riktiga ändringar!) Ett A står för added, så om du haft en rad som Att köra program Gå till svn-katalogen som heter som ditt användarnamn. I föräldrakatalogen, alltså din kurskataA groda.png log ligger ett program som du körde från den grafiska miljön i uppgift 1.4 (s. 11). skulle det betytt att du har registrerat den filen i Om du istället ska köra samma program från Subversion, men sen inte checkat in den ännu. skalet kan du använda en relativ sökväg för förÖppna sagobok.tex och använd samma kom- äldrakatalogen (ett snäpp upp). Prova! mando som i uppgift 10.25 för att se till att den är uppdaterad. Ändra sedan i den genom att Uppgift 11.4 Hur skrev du då? byta ut Det var en gång i början av din saga mot \lettrine{D}{et var en gång}. TEXa fiGå upp till föräldrakatalogen så att du står i len, och om allt gick bra så checka in din ändring. samma katalog som programmet. För att köra Där används ett LaTeX-kommando för stor initial programmet härifrån är det enklaste att använda med två argument. en relativ sökväg som betyder »samma katalog«. Prova! 105 INLUPP 11: PROGRAM Uppgift 11.5 Hur skrev du då? NR-grep Du har fått nys om ett program NR-grep som är ett grep-liknande program, men som bland annat Att kompilera skiljer sig genom en väljare -k med vilken man kan hitta ungefärliga träffar, som kan skilja sig lite Gör svn update i svn-katalogen som heter som från det man letar efter. ditt användarnamn. Det visar sig att en ny fil dyI exemplet nedan söker jag efter felstavningen ker upp – trappa.c. »aprksimativ« i en ordlista. Först tillåter jag två Det är ett litet program i programspråket C. skillnader, men hittar ändå inget. När jag tillåter Kompilera programmet med cc trappa.c. tre skillnader hittar jag ordet. Om jag tillåter hela (cc är C-kompilatorn.) Det skapas då en ny fil fyra skillnader finns det flera möjligheter. med det körbara programmet. Uppgift 11.6 Vad heter den fil som då skapas? Uppgift 11.7 Vad säger kommandot file att den filen är för något slags fil? Den skapade filen är ett körbart program. Kör den med /local/texts/jabberwocky som input. (Programmet accepterar inga argument, så du får lov att använda omdirigering.) $ nrgrep -x -k2 'aprksimativ' dsso-list.txt $ nrgrep -x -k3 'aprksimativ' dsso-list.txt approximativ $ nrgrep -x -k4 'aprksimativ' dsso-list.txt approximativ approximativa approximativt predikativ presumtiv primitiv Uppgift 11.8 Hur skrev du kommandot för att göra detta och hur löd resultatet? Normalt skulle man vilja att detta program vars källkod ligger i trappa.c skulle heta trappa istället. Det finns väljare till cc för att göra så istället, men tillverka istället en sådan fil trappa med hjälp av kommandot make. Kör alltså make trappa. Det skriver ut vilket kommando det i sin tur utför. Sök upp detta program på nätet och hämta källkoden (till den senaste versionen). Flytta den till din kurskatalog och packa upp den där. Uppgift 11.12 Vad heter filen du hämtade? Uppgift 11.13 Vad gav du för kommando för att packa upp den? I katalogen du får då hittar du information om Uppgift 11.9 Vilken väljare till cc använde make för att tala om vad det kompilerade pro- hur programmet kan installeras. Gå till den nyskapade underkatalogen och gör så. (Det kommer grammet skulle heta? upp en drös varningar när programmet kompileUppgift 11.10 Om du gör make trappa igen ras, men det är inget du behöver bry dig om. Ifall vad får du för meddelande från make? du vore programmets författare borde du bry dig om dem.) Såg du vad programmet gjorde med textfilen? Här finns inget sista installationssteg som lägAntagligen kan du inte C, men öppna ändå källger in programmet i nån särskild katalog, utan det koden med Emacs och se om du kan gissa en del ligger bara kvar i denna katalog. av hur programmet fungerar. Indent betyder indrag. Uppgift 11.14 Ge ett kommando som plockar ut alla rader i /usr/share/dict/words som ligUppgift 11.11 Vissa delar av programmet är ger högst två steg ifrån »starback«, samt det resulkommentarer – de har ingen effekt på vad protat du får av detta. grammet gör, utan finns där för att underlätta läsningen och förståelsen av programmet. Vad skriver man tydligen före respektive efter kommen- Uppgift 11.15 I FSF och friprogramvaruvärlden talar man om fyra friheter som ska vara uppfyllda tarer i C? för att program ska räknas som fri programvara. Ändra i trappa.c så att den gör indrag med Vilka är dessa fyra? (Sök på nätet.) mellanrum istället för med understreck. Skriv make trappa för att kompilera om programmet När man kör nrgrep -H säger den att det är och provkör det för att se att det stämmer, och free software och att man ska se »the GNU Genchecka sedan in den ändring du har gjort, med ett eral Public License for details«, men här finns loggmeddelande som talar om vad du har ändrat. motstridig information, för det följer med en fil 106 Bugg i grep med programmet som innehåller upphovsrättsinHämta den senast publicerade på nätet och formation som inte är GNU GPL utan en egen kompilera och installera den för att se om den text. har samma fel. Använd hela det normala GNUsättet för att installera program, och använd --prefix ~ vid konfigureringen för att få din Uppgift 11.16 Vad heter den filen? hemkatalog som prefix. Uppgift 11.17 Enligt vad som står om rättigheterna där finns det minst en av de fyra friheterna Uppgift 11.21 Exakt vilka kommandon skrev i uppgift 11.15 som man inte har som användare du då? av detta program. Nämn en sådan, och förklara på Uppgift 11.22 I vilken katalog hamnade nu det vilket sätt den inte är uppfylld! nyinstallerade programmet grep? Hur kan du enklast skriva för att köra det? Bugg i grep Uppgift 11.23 Finns buggen kvar? Vad använde du för kommando för att testa det? Förra veckan upptäckte en anonym student, vi kan kalla honom Christian3 , en bugg i grep där När du kompilerade programmet så skapades \w ibland inte matchade vissa bokstäver. en massa filer som inte längre behövs. En del var bara mellanresultat, och de som var det resultat som du var ute efter har kopierats till en annan $ grep -E '^\w{4}t\w{2}g$' dsso-list.txt katalog när du installerade. Läs i INSTALL för att se vad du kan ge för make-kommando för att rensa bort de filer där som inte längre behövs och ge det Detta hittar bara 45 svar. Där saknas t. ex. flykt- kommandot. väg som borde ha varit med, då det ju består av fyra ordtecken (flyk) följt av t följt av två ordtec- Uppgift 11.24 ken (vä) följt av g. Det skulle kunna vara bra att rapportera buggen till programutvecklarna. Hur löd det kommandot? * * * DSSO I tidigare uppgifter har ni använt Den stora svenska ordlistan. Denna fria svenska ordlista fanns under flera år inte tillgänglig i sin källform på nätet. När jag skriver detta ser jag att den dök upp igen i somras på http://dsso.se/ i ett nytt format, men uppDu ska förstås inte använda dig av någon fil gifterna nedan bygger på hur den såg ut tidigare, dsso-list.txt, för den har inte den som ska ta så istället för att hämta den på nätet själva får ni emot rapporten. Och inte ett långt sammansatt använda den senaste versionen jag hämtade där regexp, utan något kortare som ändå visar upp för ett par år sen, /local/kurs/ids/dsso-1.52. buggen. Ett mål är att den som tar emot rappor- txt. Den filen innehåller ordlistans information på ten lätt ska kunna prova själv och se buggen. ett särskilt textformat. Du får se efter själva hur (Om det vore på riktigt skulle du skriva på enginnehållet i filen är upplagt. Från detta format elska, men du kan skriva på svenska istället nu.) skapades flera filer i andra format, till exempel rättstavningsfiler till ordbehandlare. * * * I figur 11.3 finns ett par utdrag ur filen. En sak Fast när man ska rapportera buggar är det ännu att märka är att det bara är rader med < och > som bättre om man först ser efter om de redan är fixainnehåller ordformer. de genom att jämföra med den senaste versionen. Lägg filen i svn-arbetskatalogen och skapa en fil dsso.sh i samma katalog. Checka in den, fast den Uppgift 11.19 Vilken version av grep kör vi är tom, så att jag ser att du har kommit igång med här? Hur tog du reda på det? denna uppgift. Här ska du skriva ett skalskript så att om Uppgift 11.20 Vilken är den senaste publicerade versionen av GNU grep? Var på webben hittade du ger kommandot bash dsso.sh skapas en du det? (Den är från i år, så är inte den du hittade fil ordformer.txt som innehåller en UTF8-fil med en ordform per rad. Hoppa över flerordsutfrån i år har du hittat fel.) tryck från filen som »au pair« och »science fic3 ulfen tion«. Resultatet ska vara sorterat (på svenska) Uppgift 11.18 Formulera en buggrapport om den buggen. Ge ett kort kommando utan onödiga detaljer som ger ett oönskat resultat. Tala om både vad det ger för resultat och vad du väntade dig för resultat istället. 107 INLUPP 11: PROGRAM # Copyright (c) 2011 Göran Andersson # This work is licensed under the Creative Commons Attribution-Share Alike License. ... 890212r5<verb>näta:näta:nätade:nätat:nätar:näta:nätas:nätades:nätats:nätas:nätad:nätat:nätats:nätande: DEFINITION 1: Göra mål, dvs bollen hamnar i målets nät. ... 571187r5<adjektiv>rätt:rätt:rätt:rätta, rättan:rätta:rättare:::rätte:::::::: Figur 11.3: Utdrag ur dsso-1.52.txt. och utan dubbletter. Det är alltså i stil med den dsso-list.txt som ni har använt förut, förutom att den är gjord från en ännu tidigare version av DSSO. Använd flera skalkommandon i rad och lagra mellanresultat i filer som du tar bort i slutet av skalskriptet. Det första skulle t. ex. kunna vara ett kommando som skapar en fil dsso-u8.txt som är likadan som originalet, men omvandlad till UTF8. Senare i skalskriptet skulle du i så fall göra rm dsso-u8.txt för att rensa upp efter dig. * * * Tips: Fokusera inte på att det ska bli ett skalskript till att börja med, utan försök bara hitta kommandon för att lösa uppgiften. Sen kan du stoppa in dina kommandon i skriptet och köra alltihop samlat. I skalskript kan man skriva kommentarrader som börjar med »#«. Använd det för att förklara vad som händer, t. ex. med en kommentarsrad # Omvandla till UTF8 före första kommandot. Rapport Efter att du är klar med detta så använd kommandot Lista även hela skalskriptet i rapporten. Använd det sätt som nämns på Lila sidorna under TEX, Kodlistingar. Avsluta med ett avsnitt där du berättar något om det resultat du fick. Berätta hur många ordformer du hittade, och tala om några tillägg och borttagningar jämfört med dsso-list.txt. Skaluppgifter Dessa uppgifter ska lösas med ett eller flera kommandon i skalet. Ange både vilket eller vilka kommandon du gav, samt vad resultatet blev. Uppgift 11.25 Vilka delstater i USA har namn som består av mer än ett ord? Använd filen /local/kurs/ids/us-states.txt. Låt resultatet bli sorterat och med bara namnen (utan datum). Uppgift 11.26 Vad finns det för rader i /local/ kurs/ids/wonderland.txt som bara innehåller ett ord, eventuellt med ett eller flera mellanslag före eller efter, men inga andra tecken. Uppgift 11.27 Vad finns det för ord som börjar på stor bokstav i den ryskspråkiga textfilen /local/kurs/ids/rysk.txt. Glöm inte att den filen är kodad med ISO 8859-5! Svaret ska vara i vårt vanliga UTF-8 och innehålla en lista över bara de orden, ett per rad, utan dubbletter. diff -u /local/dict/dsso-list.txt ordformer.txt för att se vilka skillnader det har blivit jämfört med den gamla listan. Skriv en kort rapport dsso.tex i LaTeX om din lösning av DSSO-uppgiften. Checka in den filen på samma ställe som det övriga. (Du ska inte lämna in den PDF du gör särskilt, utan den genererar jag själv när jag ska titta på den.) Använd dokumentklassen stupp, och \course för att ange kursnamn. Sätt lämplig titel. (Du kan ha en undertitel med \subtitle också.) Beskriv i några avsnitt uppgiften, din lösning och hur resultatet blev. 108 Att rensa upp efter sig Snart har du förhoppningsvis blivit godkänd på denna kurs, och då kan det vara läge att rensa upp i din kurskatalog. Du borde inte ha skapat så mycket stora filer i denna kurs, men i en annan kurs kan det bli rejält med data som du antagligen inte behöver ha kvar efteråt, så det är en bra vana att efteråt se över vad som kan komprimeras eller kanske till och med tas bort. Se http://stp.lingfil.uu.se/lila/disk/ för en del tips som har med diskanvändning att göra. Leta filer Uppgift 11.28 Vad kan du enligt detta ge för skalkommando för att se hur mycket plats din hemkatalog tar upp? Hur mycket var det? Ett par väljare används till kommandot. Vad betyder de? Uppgift 11.29 Använd samma skalkommando (med andra väljare/argument) för att lista storleken på alla filer och kataloger i din hemkatalog och sortera dessa rader i storleksordning. Uppgift 11.32 Lista filer hos användaren ellen som har namn som slutar på .jpg. Ellen har flera kataloger som du inte får leta i, så därför får du en mängd varningar. Häng på 2>/dev/null på slutet för att slippa se varningarna. Varningar och felmeddelanden skrivs ut »för sig« och kan omdirigeras med 2> istället för >. Allt som skrivs till den speciella »filen« /dev/null i Unix försvinner i ett svart hål och kommer aldrig Med ls -l eller wc -c får man filers storlek, tillbaks. men det duger inte till denna uppgift eftersom det inte säger nåt om katalogers storlek. Uppgift 11.33 Det finns en särskild sökmöjlighet i find för sånt som är tomt också. Vad finns Uppgift 11.30 Se även vad det står på de lila si- det för tomma filer som heter README under dorna om att man kan lagra filer på andra ställen. /usr/share? Du kanske har noterat att det finns ett nobackup i din hemkatalog. Vad sägs om detta nobackup här? Med »under« menar jag i den katalogen, eller i en underkatalog till den katalogen, eller i en Uppgift 11.31 Se även tipsen där om hur man underkatalog till en underkatalog till den katalohittar stora filer som man inte använt på länge. gen, eller i en underkatalog till en underkatalog till en Använd kommandot som nämns där för att lista vilka filer under din kurskatalog som är minst någon viss storlek. Välj en gräns så att det blir flera men inte jättemånga filer som nämns. (Visa som vanligt kommando och resultat.) underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en I exemplet på sidan används »M« för Megabyte. Se dokumentationen för det kommandot om du vill använda något mindre eller större prefix. underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en Leta filer Läs i dokumentationen om kommandot find för att ta reda på hur man kan sätta krav på filnamnet för de filer som den ska hitta. underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller . . . (fnord) 109 Figurer 1.1 Gnuhuvudet är ritat av Aurelio A. Heckert och är taget från http://www.gnu.org/ graphics/heckert_gnu.html. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 De två döda tangenterna på våra tangentbord. Fotografi. . . . . . . . . . . . . . . . . . . 1.3 Ett filträd, ritat med hjälp av LaTeX-paketet forest. . . . . . . . . . . . . . . . . . . . . 1.4 Filhanteraren om konto.txt. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Mer om konto.txt. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Teleprintern ASR33. Bilden är fotograferad av Marcin Wichary som sprider den med Creative Commons Attribution License på flickr.com. Jag har hämtat den från uppslagsordet »ASR-33 Teletype« på Wikipedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 4 6 8 8 9 2.1 En Emacs med två stora fönster som visar varsin buffert samt en aktiv minibuffert. Skärmdump. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.1 Hur många ord finns det på de första tio raderna? Kommandoröret head stp.txt | wc -w 3.2 Vad heter Tjatte på danska? Kommandoröret cut -f 3 knattarna.txt | tail -n 1 . 3.3 Vad heter Tjatte på danska med en annan metod. Kommandoröret tail -n 1 knattarna.txt | cut -f 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Vilka »Fnattar« har ett namn med a i? Kommandoröret cut -f 2 knattarna.txt | grep a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Hjälptexten för head. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Exempel på fel. En text är skriven med vissa koder, men tolkas utifrån andra koder. I detta fall är det Latin-1 som tolkats som CP850. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 ASCII-tabell. Gjort som en LaTeX-tabular. . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Tecken 160–255 i Latin-1. Gjort som en LaTeX-tabular. . . . . . . . . . . . . . . . . . . 4.4 Den korta texten »Hallå! ,« lagras med UTF-8. Olika tecken tar olika mycket plats att lagra. 4.5 Exempel på teckenkodningsfel där en text skriven med UTF-8 tolkas som om det vore Latin-1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6 Figur 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7 Startcitat och slutcitat i olika typsnitt (Helvetica och Palatino). . . . . . . . . . . . . . . . 4.8 Några exempel på hur olika kommandon ger olika texter ifrån sig beroende på vilken locale som gäller. (I det sista exemplet märks skillnaden bara på »yhteensä« istället för »total«.) . 26 29 29 29 29 36 37 37 38 38 39 39 42 4.9 Zoomkommandon i Emacs. Den sista är med siffran 0, inte bokstaven O. . . . . . . . . . 4.10 Ett par vikare, tagna från Wikipedia, som i sin tur har tagit bilden från The Fisheries and Fisheries Industries of the United States av George Brown Goode (1887). . . . . . . . . . . 45 5.1 Man-sidan för wc i Unix v7 (1979) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 5.2 Från xkcd av Randall Munroe. http://xkcd.com/912/ . . . . . . . . . . . . . . . 54 6.1 Exempel på missöde när flera personer kan ändra i samma filer. Taget från boken Version Control with Subversion, publicerad av O’Reilly Media, skriven av Ben Collins-Sussman, Brian W. Fitzpatrick och C. Michael Pilato, spridd enligt Creative Commons Attribution License v2.0, tillgänglig på http://svnbook.red-bean.com/. . . . . . . . . . . . . . . . 59 7.1 Logotyperna TEX och LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Einsteins speciella relativitetsteori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 47 111 Figurer Figurer 7.3 Donald E. Knuth som har skrivit TEX. Bilden är tagen från http://www-cs-faculty. stanford.edu/~knuth/closeup.tif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7.4 En liten text som ni skulle efterhärma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 9.1 Greppande med och utan -o i en saga . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 9.2 Utdrag ur ett korsord som författaren har löst. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.3 Från xkcd av Randall Munroe. http://xkcd.com/208/ 89 91 11.1 Copyleft-tecknet. Detta tecken finns inte i typsnittet Berling antikva som kompendiet är satt med så för att skriva det i denna figur använde jag \reflectbox{\copyright} för att spegelvända ett ©. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 11.2 Byggblock i Creative Commons-licenser. . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 11.3 Utdrag ur dsso-1.52.txt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 112 Tabeller 2.1 Beteckningar på några tangenter i Emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 En del Emacs-kommandon för förflyttning . . . . . . . . . . . . . . . . . . . . . . . . . . 19 20 3.1 Språkkoder enligt standarden ISO 639-1 för några språk med många talare i världen, Europa, Norden eller Sverige . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1 Koder enligt ISO 3166-1 för några av världens och Europas största länder, samt de skandinaviska länderna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.1 Några C-h-kommandon i Emacs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 7.1 Kommandon för att välja typsnitt i LaTeX . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Några accentkommandon i LaTeX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 72 9.1 Några namngivna teckenklasser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 113 Innehåll 1 Inledning 1.1 Om kursen . . . . . 1.2 Vårt datorsystem . . 1.3 Filer och kataloger . 1.4 Grafisk filhantering 1.5 Klipp och klistra . . 1.6 Textfiler . . . . . . 1.7 Editorer . . . . . . . 1.8 Filskydd . . . . . . 1.9 Kommandoraden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 5 6 7 7 7 7 8 Inlupp 1: Inledning 11 2 Skalet och Emacs 2.1 Skalet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 18 Inlupp 2: Skalet och Emacs 21 3 Mer om skalet 3.1 Långa väljare . . . . . . . . . . . . . 3.2 Kommandorör (|) . . . . . . . . . . 3.3 En användning av echo . . . . . . . 3.4 Omdirigering av standard input (<) . 3.5 Långa rör och filter . . . . . . . . . 3.6 Relativa sökvägar . . . . . . . . . . . 3.7 TAB . . . . . . . . . . . . . . . . . . 3.8 Skalkommandot cut . . . . . . . . . 3.9 Att tolka hjälp om skalkommandon 3.10 Argumentet - . . . . . . . . . . . . 3.11 Skalskript . . . . . . . . . . . . . . . 3.12 Expansion i skalet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inlupp 3: Mer om skalet 4 Teckenrepresentation 4.1 Binärt . . . . . . . . . . . . . . . . . . . 4.2 Teckenkoder . . . . . . . . . . . . . . . 4.3 Att ange teckenkodning . . . . . . . . . 4.4 ASCII . . . . . . . . . . . . . . . . . . . 4.5 Kontrolltecken och nyrad . . . . . . . . 4.6 Latin-1 . . . . . . . . . . . . . . . . . . 4.7 ISO 10646 = UCS ≈ Unicode . . . . . . 4.8 Övriga teckenkodningar . . . . . . . . . 4.9 Vad är olika tecken? . . . . . . . . . . . 4.10 Språkinställningar . . . . . . . . . . . . 4.11 Olika teckenkodningar i Emacs . . . . . 4.12 Att konvertera mellan teckenkodningar 4.13 Att skriva tecken i Emacs . . . . . . . . 114 25 25 25 26 26 27 27 27 27 28 28 30 30 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 35 35 35 36 36 37 37 38 39 40 41 42 42 Innehåll Innehåll 4.14 Hos oss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inlupp 4: Teckenkodningar 43 44 5 Dokumentation och textbearbetning i skalet 5.1 Dokumentation . . . . . . . . . . . . 5.2 Skalkommandon för texthantering . . 5.3 cut . . . . . . . . . . . . . . . . . . . 5.4 echo . . . . . . . . . . . . . . . . . . 5.5 grep . . . . . . . . . . . . . . . . . . 5.6 more . . . . . . . . . . . . . . . . . . 5.7 paste . . . . . . . . . . . . . . . . . . 5.8 sort . . . . . . . . . . . . . . . . . . 5.9 tr . . . . . . . . . . . . . . . . . . . . 5.10 uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 49 50 50 50 51 51 52 52 52 52 Inlupp 5: Textbearbetning i skalet 54 6 Versionskontroll och Emacs 6.1 Versionskontroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 59 60 Inlupp 6: Versionskontroll och Emacs 62 7 LaTeX 7.1 Stycken och rader . . . . . . . 7.2 Allmän struktur . . . . . . . . 7.3 Kommandon med \ (bakstreck) 7.4 Klamrar för grupper . . . . . . 7.5 Speciella tecken . . . . . . . . 7.6 Titel och rubriker . . . . . . . 7.7 Omgivningar med begin–end . 7.8 Typsnitt . . . . . . . . . . . . . 7.9 Hårt mellanslag (~) . . . . . . 7.10 Bindestreck och tankstreck . . 7.11 Citattecken . . . . . . . . . . . 7.12 Dokumenthuvudet . . . . . . 7.13 Figurer . . . . . . . . . . . . . 7.14 Kommentarer med % . . . . . 7.15 Att referera inom texten . . . 7.16 Övriga tecken . . . . . . . . . 7.17 verbatim och \verb . . . . . . 7.18 LaTeX i Emacs – AUCTeX . . 7.19 UTF-8 och LaTeX . . . . . . . 7.20 Mer information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inlupp 7: LaTeX 8 Internet & World Wide Web 8.1 ssh . . . . . . . . . . . 8.2 Domännamn . . . . . . 8.3 Toppdomäner . . . . . 8.4 World Wide Web . . . 8.5 Redovisning . . . . . . 8.6 Att publicera på WWW 8.7 HTML . . . . . . . . . . 8.8 CSS . . . . . . . . . . . 8.9 ids8.html . . . . . . . 67 67 67 68 68 69 69 69 69 69 69 70 70 71 71 72 72 72 73 73 73 74 . . . . . . . . . 79 79 79 79 79 80 80 80 81 82 9 Reguljära uttryck 9.1 Ett tecken: . [ ] [^ ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Innehåll 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 Innehåll Ankring: ^ $ \< \> . . . . . . Bakstreck: \ . . . . . . . . . . Utökade reguljära uttryck . . . Repetitioner: * + ? {} . . . . Alternativ: | . . . . . . . . . . Exempel . . . . . . . . . . . . Olika sorters reguljära uttryck Reguljära uttryck i Emacs . . . grep -o . . . . . . . . . . . . Girighet och hunger . . . . . . sed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inlupp 9: Reguljära uttryck 10 Dokumentrepresentation 10.1 Uppmärkt text . . . . . . . 10.2 HTML kommer från SGML 10.3 SGML och XML . . . . . . 10.4 MIME . . . . . . . . . . . . 10.5 Komprimering av filer . . . 10.6 Filarkiv . . . . . . . . . . . 83 83 84 84 84 84 85 85 85 85 86 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inlupp 10: Dokumentrepresentation 11 Program 11.1 Skript . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Interpreterande och kompilerande programspråk 11.3 Att köra program . . . . . . . . . . . . . . . . . 11.4 Att kompilera program . . . . . . . . . . . . . . 11.5 Att installera program . . . . . . . . . . . . . . . 11.6 Upphovsrätt och licenser . . . . . . . . . . . . . 93 93 93 94 95 96 96 98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 101 101 101 101 102 102 Inlupp 11: Program 105 Figurer 111 Tabeller 113 Innehåll 114 Register 117 116 Register ’, se apostrof . (i reguljära uttryck), 51, 83 . (i sökvägar), 27 .. (i sökvägar), 15, 27 <, se omdirigering >, se omdirigering $1 (i skalskript), 58 \, se bakstreck |, se lodstreck -, se bindestreck, se även em-dash, en-dash #, se nummertecken ˜, se tilde aktuell katalog, 15, 27 Alt-tangent, 18 AltGr, 4 ankring (av reguljära uttryck), 51, 83 ANSI (American National Standards Institute), 39 användarnamn, 4 apostrof (’), 40 arbetskatalog, se aktuell katalog argument, 10, 15 ASCII (American Standard Code for Information Interchange), 36 backup, 20 bakstreck (\), 6, 36 för att skriva kontrolltecken, 52 i LaTeX, 68 i reguljära uttryck, 83 bash (kommando), 30, 101 Bell Labs, 15, 102 Berkeley Software Distribution (BSD), 102 Berners-Lee, Tim, 79 binära tal, 35 binärfiler, 5, 93 bindestreck (-) dubbla, 25 inleder väljare, 16 som argument, 28 bit, 35 Bourne, Steve, 15 broken bar (¦), 26 BSD, se Berkeley Software Distribution buffert (i Emacs), 19 byte, 5, 11, 35, 93 bzip2 (kommando), 96 C (locale), 41 C (programspråk), 5, 106 cal (kommando), 55 carriage return, se returtangenten cat (kommando), 9, 17 cc (kommando), 106 cd (kommando), 9, 15 citattecken, 39, 70 compress (kommando), 96 Control-tangent, 7 copyleft, 103, 104 copyright, se upphovsrätt cp (kommando), 9, 17, 28 CRLF, 36, 46 cut (kommando), 27, 28, 50 väljare -f, 27 CVS, 59 date (kommando), 16 väljare -d, 16 väljare -u, 16 default, 42, 74 Desktop (katalog), 7 /dev/null, 109 diff (kommando), 90, 108 directory, se katalog dold fil, se fil domännamn, 4, 79 drag and drop, 11 död tangent, 4 echo (kommando), 22, 26, 30, 50 väljare -e, 50 ed (kommando), 86, 87 editor, 7, 86 ekoarea (i Emacs), 19 element, 93 em-dash (—), 70 Emacs, 7, 18–20, 41–43, 60–61, 85 referenskort, 63–64 en-dash (–), 70 entertangenten, 9, se även returtangenten Escape, 36, 46 eurotecken (C), 39 evince (kommando), 74, 75 exit (kommando), 79 expansion (i skalet), 30 fg (kommando), 79 fil, 5 117 Register dold, 5, 17, 27 file (kommando), 95 filnamn, 5 filnamnsändelse, 5 filskydd, 7–8 filter, 27, 86 filträd, 5–6 find (kommando), 109 flagga, 16, se även väljare float (i LaTeX), 71 fmt (kommando), 13, 18 väljare -w, 18 folder, se katalog Free Software Foundation, 103 fullständig sökväg, se sökväg, fullständig fönster (i Emacs), 19 girighet (om reguljära uttryck), 85 glyf, 39 Gnome, 3 GNU, 3, 15, 18, 44, 49, 96, 102–103 GNU Emacs, se Emacs GNU GPL (General Public License), 104 GNU/Linux, 3, 103 grep (kommando), 13, 16, 18, 25, 51, 83–85, 87 väljare -c, 16 väljare -E, 84 väljare -i, 16 väljare -o, 85 väljare -v, 51 väljare --color, 51 grupp, 8 gunzip (kommando), 96 gzip (kommando), 96, 97 head (kommando), 18, 28, 29 väljare -n, 18 --help (väljare), 28 hemkatalog, 4–6, 15 hexadecimala tal, 35, 94 HTML , 5, 80, 82, 88, 93–95 hunger (om reguljära uttryck), 85 hypertext, 79 hårt mellanslag i TEX, 69 IANA (Internet Assigned Numbers Authority), 35, 36, 39, 95 iconv (kommando), 42, 45 Info, 49, 54–55 informationsrad (i Emacs), 19, 22, 33, 41, 45, 46 inloggning, 4 inputmetod (i Emacs), 42 Internet, 79–80 interpretator, 101 ISO (Internationella standardiseringsorganisationen), 37, 40 ISO 639-1, 32 118 Register ISO 3166-1, 40 ISO 8859-*, 39 ISO 8859-1 (= Latin-1), 37 ISO 10646, se UCS Java (programspråk), 85 joker, 15, 30 Kaka, Ellen, 6, 8 katalog, 5, se även hemkatalog, underkatalog aktuell katalog, 15 kilo, 35 klipp-och-klistra, 7, 12 Knuth, Donald E., 71 kommandorad, 8 kommandorör, 25–27, 41 kompilator, 5, 101 komplettering, 13 i Emacs, 22 komprimering, 96 kontrolltecken, 36, 93, 100 källkod, 5, 101 LANG (miljövariabel), 41 LaTeX, 67–73 Latin-1 (= ISO 8859-1), 37 LibreOffice.org, 7 licens, 102, 104 line feed, 36 Linux, 103, se även GNU/Linux locale, 40, 41, 43 locale (kommando), 41 lodstreck (|), 26 för alternativ i kommandosynops, 49 i kommandorör, 25 i reguljärt uttryck, 84 ls (kommando), 9, 10, 16, 17 väljare -a, 17, 21 väljare -l, 16, 17 länder koder för, 40 lösenord, 4 make (kommando), 101, 102, 106, 107 man (kommando), 49 man-sida, 49–50 mapp, se katalog Massachusetts Institute of Technology (MIT), 18, 103 Mega, 35 mellanslag, 18, se även hårt mellanslag i filnamn, 5, 15 Meta-tangent, 18 metatecken (i reguljära uttryck), 51, 83, 84 Microsoft, 103 Microsoft Windows, 36, 37, 39 MIME , 95, 99 minibuffert (i Emacs), 19 mkdir (kommando), 9, 17 modeline (i Emacs), se informationsrad Register more (kommando), 51 MS-DOS, 103 mv (kommando), 9, 17, 21 märkspråk, 95 \n (nyrad), 36, 50, 52 newline, 36, 50, 52 nod (i Info), 54, 55 nummertecken (#) i namn på Emacs autosparfiler, 20 nyrad, 36, 52 Ogg Vorbis, 100 oggenc (kommando), 100 oktala tal, 35 omdirigering, 17, 25–27 med 2>, 109 med <, 26 med >, 17 med |, 25 omgivning (i LaTeX), 69 Open Group, The, 103 open source, se öppen källkod operand, 15, se även argument option, se väljare ordbehandling, 7, 67 paste (kommando), 52 PDF (Portable Document Format), 67 Perl (programspråk), 85, 91 pipe, 25, se även kommandorör plain text, 7, 35, 93 play (kommando), 100 POSIX, 103 prefixtangent (i Emacs), 18 program, 101–102 programspråk, se C, Java, Perl, Python, 101 prompt, 9 punkten (i Emacs), 20 pwd (kommando), 9, 15 Python (programspråk), 85, 101 ramar (i Emacs), 19 redirection, se omdirigering regex(p), se reguljärt uttryck region (i Emacs), 20, 61 regular expression, se reguljärt uttryck reguljärt uttryck, 51, 83–87 enkelt, 84 i Emacs, 85 utökat, 84 relativ sökväg, se sökväg, relativ repositorium, 59 RET, return, se returtangenten returtangenten, 9, 19 rm (kommando), 9, 17, 25 rmdir (kommando), 9, 17 sed (kommando), 86, 87 väljare -r, 87 seq (kommando), 14 Register (Standard Generalized Markup Language), 93 shell, se skal shell script, se skalskript Single Unix Specification, 103 skal, 9 skalskript (shell script), 30, 57 sort (kommando), 32, 40, 41, 52 väljare -n, 52 sortering, 41 språk koder för, 32 språkinställning, 40 ssh (kommando), 79 Stallman, Richard M., 18, 103 standard input, 25, 26 standard output, 17, 25 stdin, se standard input stdout, se standard output Subversion, 59, se även svn svn (kommando), 60, 62, 74 sökväg fullständig, 6, 27 relativ, 27 SGML \t (TAB), 52 TAB-tangenten, 27 TAB-tecken, 27, 36, 50, 52 tagg, 93 tail (kommando), 18 väljare -n, 18 tangent död, 4 tangentbord, 4 tar (kommando), 96, 97 tecken, 39 teckenklass, 83 teckenkodning, 7, 35 terminal, 9 TEX, 67 Texinfo, 49 textfil, 7, 36, 93 texthantering i skalet, 17–18, 50–53 textredigerare, se editor .tgz (filnamnsändelse), 97 Thompson, Ken, 86 tilde (˜) hur man skriver tecknet, 5 i namn på backupfiler, 20 i sökvägar, 6, 30 i TEX, 69 i URL, 80 toppdomän, 79 Torvalds, Linus, 103 tr (kommando), 9, 52, 86 Turing, Alan, 16 UCS (Universal Character Set), 37, se även Unicode 119 Register underkatalog, 5 Unicode, 37, se även UCS uniq (kommando), 46, 52, 53 väljare -c, 52 väljare -d, 52 väljare -u, 52 University of California, Berkeley, 102 Unix, 3, 36, 37, 96, 102–103 unzip (kommando), 96 upphovsrätt, 102 URL (Uniform Resource Locator), 80 US-ASCII, se ASCII UTF-8, 38 utloggning, 4 vagnretur, se returtangenten wc (kommando), 9, 18, 44, 49 väljare -l, 18 väljare -w, 18 versionskontroll, 59–60 vertical bar (|), se lodstreck windows-1252, 39 WinLatin1, se windows-1252 working directory, se aktuell katalog World Wide Web (WWW), 79–80 välformad (om XML), 95 väljare, 16 i LaTeX, 70 kombinera, 16 långa, 25 med argument, 16 X Window System, 103 XHTML , 94, 95 XML (Extensible Markup Language), 94–95 xz (kommando), 96 zcat (kommando), 96 zip (kommando), 96 , öppen källkod, 104, se även fri programvara 120 Register
© Copyright 2024