Unix design. Unix är ett operativsystem från mellan 1969 och 1972, beroende på hur man räknar. Unix utvecklas fortfarande.

Relevanta dokument
Olika shell. Skalprogrammering. Pipor och omdirigering av strömmar

Terminal vad det är vad man kan göra med den

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Programvaror - Jo, tack, det vill vi ha...

Datorsystem och programmering

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Föreläsning 2. Operativsystem och programmering

Open Source - Eller som vi säger, Fri programvara

Open Source - Eller som vi säger, Fri programvara

Inledande programmering med C# (1DV402) Introduktion till C#

Textbearbetning i skalet och man-sidor

Innehålls förteckning

En kort text om programmering i C.

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem

Windows, vs Mac, vs Linux

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix

Översikt. Texthantering med bl.a. kommandona cat, less och grep Omdirigering och piping Gnuplot. Linux 2 2 / 12

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Allmänt om programvaror och filer i Windows.

Inledande programmering med C# (1DV402) Introduktion till programmering

TDDC74 Lab 02 Listor, sammansatta strukturer

Programmering i C++ Kompilering från kommandoraden

Tentamen i Introduktion till programmering

Operativsystem och användargränssnitt

Open Source - Program och hur man väljer

Föreläsning 3. Programmering, C och programmeringsmiljö

Kapitel 11. Program Att köra program Skript Interpreterande och kompilerande programspråk Att kompilera program

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Handbok SSCd. Peter H. Grasch

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Introduktion till Unix och Linux

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Introduktion till programmering

Föreläsning 3. Programmering, C och programmeringsmiljö

Kapitel 11. Program Skript Att köra program Interpreterande och kompilerande programspråk

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Språket Python - Del 2 Grundkurs i programmering med Python

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

TDDI16: Datastrukturer och algoritmer

Program. Kapitel make Program Interpreterande och kompilerande program

Magnus Nielsen, IDA, Linköpings universitet

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

open_ports.sh Vet du vad din dator gör på nätet? tisdag den 19 oktober 2010

Linux tips. Korta tips

Operativsystem. Informationsteknologi sommarkurs 5p, Agenda. Slideset 7. Exempel på operativsystem. Operativsystem

Laboration: Whitebox- och blackboxtesting

Sed och Awk. Linuxadministration II 1DV421. Monday, August 8, 11

Thomas Pettersson. Sammanfattning. Född: Telefon: Kristinagatan 23B Norrköping.

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Objektorientering/ Klasser

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Introduktion till programmering. Undervisning. Litteratur och examination. Lärare. Föreläsning 1

Introduktion till Linux. TDDE23 Funktionell och imperativ programmering, del 1 Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Guide: Programmera Ryze Tello

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Linux på skrivbordet - Myt eller möjlighet

JavaScript Block Editor:

Program & programmering

Programmeringsuppgifter 1

Föreläsning 18 Filer och avbildningar

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, Raphael Corsoski, Erik Eliasson, Christian von Schultz, 2008.

SMD 134 Objektorienterad programmering

Planering Programmering grundkurs HI1024 HT data

Definition DVG A06. Varför operativsystem? Operativsystem. Översikt. - Vad är ett operativsystem?

Exempel att testa. Stora problem och m-filer. Grundläggande programmering 4. Informationsteknologi. Informationsteknologi.

Introduktion till datateknik för språkvetare ht 2007

LABORATION 4: Textmanipulering Introduktion till lingvistik och datalingvistik XD1110

Avslutning. Kapitel Komprimering av filer

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Uppgifter teknik HT17 (uppdaterad v. 40)

Tommy Färnqvist, IDA, Linköpings universitet

Filöverföring i Windowsmiljö

16 Programmering TI -86 F1 F2 F3 F4 F5 M1 M2 M3 M4 M5

Välkomna till NADA. Datalogi, grundkurs 1, 15hp. (Numerisk Analys och DAtalogi) och kursen. DA2001 (Föreläsning 1) Datalogi 1 Hösten / 28

Kursansvarig. Välkomna till NADA. Datorn som verktyg. Datalogi, grundkurs 1, 15hp

Introduktion till hårdvara, mjukvara och operativsystem

Hur man programmerar. Exempel på problemlösning i Python

DVG A06. Operativsystem, mm. Karlstads universitet Datavetenskap. DVG A06 Johan Eklund. Datavetenskap, Karlstads universitet 1

TDP003 Projekt: Egna datormiljön

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Svenska Linuxföreningen. Fri programvara Mycket mer än gratis 1(36) Copyright 2005, 2006 Marcus Rejås

Handbok Simond. Peter H. Grasch

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Programmeringsteknik med C och Matlab

Instruktioner för uppkoppling mot NyA Open

IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Test av lösenordsknäckningsattacker mot Windowsanvändare

Dedikerad Server Vilket operativsystem ska jag välja? Är ni i startgroparna och ska beställa en dedikerad server eller en virtuell server?

Operativsystem DVG A06. Definition. Varför operativsystem? - Vad är ett operativsystem?

Transkript:

Unix design Vad är Unix? Unix är ett operativsystem från mellan 1969 och 1972, beroende på hur man räknar. Unix utvecklas fortfarande. Designen bakom Unix har influerat nästan alla exististerande operativsystem. GNU/Linux Designade för att vara kompatibla med Unix. Linux är operativsystemskärnan, GNU är alla viktiga program. GNU kan kombinaras med kärnor från andra Unix-liknande operativsystem, och Linux med annat än GNU, till exemple Andriod. 4.3 BSD, FreeBSD, OpenBSD, NetBSD,... Vidareutvecklingar av Unix och av varandra. OS X Vidareutveckling av NeXTSTEP, FreeBSD och NetBSD. Några exempel vi inte pratade om: Minix Designat efter Unix för att undervisa om Unix. Designat för att vara lättare att studera än Unix. Nyare version av Minix är designat för att vara extremt stabilt. Xenix OS Microsofts och SCO:s vidarutveckling version av Unix. Delar av Xenix har återanvänds för att göra Windows mer kompatibellt med Unix. SunOS, Solaris Vidigt populära vidarutvecklingar av Unix fron Sun Microsystems (nu Oracle.) 1

Haiku Designat efter BeOS, men är väldigt likt Unix och väldigt kompatibellt med Unix. OS/2, ecomstation Inte utvecklat efter Unix, men är delvis kompatibellt med Unix. Plan 9 from Bell Labs Nytt operativsystem utvecklat för att adressera brister i Unix. Detta har gjorts genom att ta Unix loso till nästa steg. Det är mer Unixaktigt än vad Unix är. Det enda idag populära exempelt på ett operativsystem som inte är Unixliknande är Windows. Microsoft försöker dock göra Windows mer likt Unixliknande operativsystem för att underlätta för administratörer. (Programspråket C utvecklades för Unix så att det skulle vara enkelt att få Unix att köras på alla CPU-arkitekturer istället för endast en, som traditionellt var fallet för andra operativsystem. Idag programmeras nästan alla operativsystem i C.) Filoso Simplistisk. Lösningar ska vara så enkla som möjligt att utveckla. De behöver dock inte vara enkla att använda, det är dock ofta fallet. Minimalistisk. Endast det som verkligen behövs ska vara med. Principer stdin stdout-principen. Program kommunicerar med varandra genom att ett program skriver ut och ett annat program läser in vad det andra programmet skriver ut. Istället för att program kommunicerar med varandra kan de även kommunicera med användaren eller läsa från eller skriva till ler. För programmet är det ingen skillnad mellan att kommunicera med användaren, ler eller andra program. Text är universiellt. Program kommunicerar med varandra och med användaren på samma sätt. Programmen använder mänskligt läsbar text. Detta kör det möjligt för användaren att förstå programmet och programmet behöver inte vet om den kommunicerar med användaren eller med ett annat program. Det 2

blir också enklare att studera programmet. Komposition. Istället för att skriva ett stort program skriver man många små program som arbeter tillsammans. Mångfald. Program ska gå att använda på andra sätt en vad som förväntas av programmets utvecklare. Detta realiseras genom att programmet utför en enda funktion och ingenting annat. Dena funktion sak vara så liten och väldeneras som möjligt. Frågeställning Traditionellt när ett operativsystem utvecklas funderar utvecklarna på vad som krävs av ett bra operativsystem. När Unix utvecklades var frågeställningen istället Vad kan vi ta bort för att göra Unix bättre? Detta leder till färre buggar då utvecklarna behöver skriva mindre kod och det nns mindre plats för att göra fel. Som följd av detta kan mer tid läggas där det behövs och på så sätt hitta de existerande buggarna och utveckla bättre (enklare) lösningar. Dessutom blir det enklare för användaren att utföra arbeten, särskild sådana som utvecklarna inte har tänkt på. Det blir dessutom enklare för utvecklare. Unix pipes Unix pipes är ett sätt för att få program att arbeta tillsammans för att utföra ett arbete som beskrivs av användaren. Unix pipes är det viktigaste i hela Unix design. När man använder Unix pipes, skriver man en såkallad shellsekvens (programmet man skriv i som startar programmen kallas för ett skal eller shell.) Programmen som startas körs i parallellt med varandra och kommunicerar med varandra i en kedja. Ett program skriver ut och samtidigt så läser nästa program vad programmet innan skriver ut. Varje program i sekvensen utför en specik uppgift och inget annat. I början av kedjan kan antigen användaren (terminallen) vara (användaren skriv till programmet) eller en l som läses in av det första programmet. I slutat av kedjan kan antigen användaren (terminallen) vara (användaren läser från programmet) eller en l som det sista programmet skriver till. Exempel på program som brukar användas: 3

sort Sorterar indata. Användaren kan välja ut datat ska sorteras, till exempel alfabetisk ordning, numerisk ordning och månadsordning. uniq (unique) Tar bort på varandra följande dubbletter. Dubbletter som inte följer varandra tas inte bort, därför vill man vanligtvis sortera indatat först. Man kan även specier att antalet dubbletter ska skrivas ut. sed (stream editor) Modifera indata efter ett eller flera angivna mönster. cat (concatenate) Skriv ut en eller flera ler. cut Dela ut varje rad i kolonner och välj ut vilka kolonner som skall behållas. Några exempel vi inte pratade om: grep Liknanade sed men isället för att modifera rader så behåller grep, eller tar bort, de rader som beskrivs. Programmet kan även användas gör att behålla delar av raderna istället för att behålla raderna fullständigt. diff (difference) Jämför ler för att hitta ändringar som har gjorts. comm (compare) Jämför två sorterade ler radvis. Unix behövde inte ett rättstavningsprogram eftersom comm kan jämföra varje ord i en l mot en ordlista: grep -Po [A-Za-z]+ < len dd conv=lcase \ sort uniq comm -23 - /usr/share/dict/english grep -Po [A-Za-z]+ skriver ut alla ord på varsin rad. dd conv=lcase konverterar alla A Z till a z. shuf (shuffle) Skriv ut varje rad från indata i slumpmässig ordning. tac (cat baklänges) Skriv ut varje rad från indata i omvänd ordning. 4

tee Skriv ut indata till nästa program och till andra ler. yes Skriv ut bokstaven y om och om igen. Varje y skrivs ut på sin egna rad. Programmet slutar skriv när nästa program avslutas, och pausas (automatiskt av operativsystemet) om nästa program inte har lästa in tillräckligt många av raderna som har skrivits. Vad som skall skrivas ut kan specieras av användaren. nd Skriv ut alla ler på varsin rad, samt ler som ligger i kataloger. xargs Kombineras ofta med nd, varje rad i indata används som ett argument till ett program som anges. Exempelvis kan man utföra säker (irreversibel) borttagning av alla ler i katalog genom att köra nd katalogens namn xargs shred -u (shred -u a b c utför säker borttagning av lerna a, b och c.) Under demonstrationen skriv vi en l med namnet m. Filen innehåll vilka månader vi är födda: oct nov jul Med programmet cat kunde vi skriva ut innehållet i len: cat m Programmen cat och sort kan kombineras för att skriva ut en sorterad version av len: cat m sort jul nov oct 5

Denna information kan även sorteras med kännedomen att det är månader som är listade i len: cat m sort -M jul oct nov Med hjälp av programmet uniq kan vi ta bort dubbletter: cat m sort -M uniq jul oct nov Vi kan även säga till uniq att skriva antalet dubbletter: cat m sort -M uniq -c 2 2 1 jul 1 oct 1 nov Istället för att använda programmet cat för att skriva ut len m, kan vi låta programmet sort läsa från len direkt: sort -M < m uniq -c Vi kan även skriv utdata till len mm istället för till terminalen: sort -M < m uniq -c > mm Med hjälp av ett litet program kan vi skriva ut ett diagram av informationen: sort -M < m uniq -c./hist (2) (2) jul (1) oct (1) nov (1) 6

Programmet./hist är skrivet med samma språk används i terminalen för att köra program. Detta gjorde att programmet blev väldigt kort: #!/bin/bash -e while read -r line; do count=$(echo "${line}" cut -d \ -f 1) title="$(echo "${line}" cut -d \ -f 1 --complement) (${count})" if (( count > ${#title} )); then title="$(printf %s%*.s "${title}" $((count - ${#title})) )" echo $ \e[07m "${title::$count}"$ \e[27m "${title:$count}" done Det blev dessutom väldigt enkelt att förstå. Beroende på hur mycket man använder terminallen skulle det ta mellan ett halv år och två år att lära sig allt som krävs för att skriva detta program, utan några kunskaper i programmering. (Första rad i len specierar vilket program som används för att köra koden) Om man kör sort -M uniq -c sort -n tac./hist istället för sort -M uniq -c./hist så sorteras raderna i diagrammet på hur vanliga månaderna är istället för på månadernas ordning. Det är alltså väldigt flexibellt att program gör så lite som möjligt. Detta form av sortering skulle inte vara möjligt om programmet var skrivet med sort uniq -c inbyggt. #!/bin/bash -e sed /^$/d sort "$@" uniq -c while read -r line; do count=$(echo "${line}" cut -d \ -f 1) title="$(echo "${line}" cut -d \ -f 1 --complement) (${count})" if (( count > ${#title} )); then title="$(printf %s%*.s "${title}" $((count - ${#title})) )" echo $ \e[07m "${title::$count}"$ \e[27m "${title:$count}" done (sed /^$/d tar bort tomma rader.) 7

Att utföra samma arbeta som den inflexibla versionen av diagramprogrammet utan att utnyttja Unix s design, skulle kräva ett program med tre gånger så lång kod. #!/bin/bash -e declare -A events while read -r line; do if [ "${line}" = ]; then continue if [ -z ${events["${line}"]} ]; then events["${line}"]=1 else : $(( events["${line}"]++ )) done tmple="$(mktemp)" for title in "${!events[@]}"; do echo "${title}"; done sort "$@" > "${tmple}" while read -r title; do count=${events["${title}"]} title="${title} (${count})" if (( count > ${#title} )); then title="$(printf %s%*.s "${title}" $((count - ${#title})) )" echo $ \e[07m "${title::$count}"$ \e[27m "${title:$count}" done < "${tmple}" rm -- "${tmple}" Denna kod är inte bara mycket svårare att förstå, den är också svårare att skriva och det är mycket enkelt att köra slarvfel (speciellt eftersom det inte är skrivet i ett ordentligt programspråk.) Denna kod använder dock programmet sort för att sorter händelserna som ritas ut i diagrammet, och låter användera välja hur de ska sorteras genom programmet sort. Hade sort inte utnyttjats med detta sätta hade programmet blivit väldigt mycket längre. 8