Module
Principes van Operating Systems;
werken met UNIX of Macintosh
Inhoudsopgave Module 2
Practicum
*1 Doelstellingen van het practicum bij module 2
*2 Introductie UNIX (niet voor Scheikunde)
*2.1 Een stukje geschiedenis
*2.2 UNIX en DOS
*2.3 Gebruik van handleidingen en help in UNIX
*3 Het CDE-scherm
*3.1 De (werking van) verschillende onderdelen van CDE X-windows
*4 De (UNIX-) shell
*4.1 Functies van de shell
*4.2 De shell opstarten
*4.2.1 Wiskunde en Informatica
*4.2.2 Natuur- en Sterrenkunde
*5 Enkele eenvoudige commando's
*5.1 Date, who, ls, lpr en man
*5.1.1 date
*5.1.2 who
*5.1.3 ls
*5.1.4 lpr
*5.1.5 man
*5.2 Een commando afbreken
*5.3 Password wijzigen
*6 Werken met directories
*6.1 Directories maken, de inhoud bekijken en veranderen van directory
*6.2 De weg kwijt??
*7 Werken met files
*8 Meer commando's
*8.1 Commando's combineren
*8.2 Speciale tekens
*8.2.1 ?
*8.2.2 *
*8.3 Redirectie van invoer en uitvoer
*8.4 Pipes
*8.5 Grep
*8.6 Sorteren
*8.7 Met meer programma's tegelijk werken
*9 Werken met een editor
*9.1 De editor ipe opstarten (alleen W & I)
*9.2 De editor dtpad opstarten (alleen N & S)
*9.3 Belangrijke toetsen: CTRL en META
*9.4 Noodrem
*9.5 Bewegen door de file
*9.6 Wijzigingen aanbrengen
*9.7 Wijzigingen opslaan en de editor verlaten
*10 Meer mogelijkheden met de editor
*10.1 Meer wijzigingen aanbrengen
*10.2 Volgorde veranderen en tekst wissen
*10.3 Woorden vervangen
*10.4 Woorden zoeken
*10.5 Een nieuwe file maken
*10.6 Met meer files tegelijk werken
*11 Het gebruik van floppies binnen UNIX
*12 Shell-scripts (alleen W & I)
*12.1 Een zeer eenvoudig shell-script
*12.2 Shell-scripts met variabelen
*12.3 Een shell-script executable maken
*12.4 De plaats van shell-scripts
*12.5 Argumenten meegeven aan een shell-script
*12.6 Keuzes maken
*12.7 Keuzes: de case-functie
*12.8 Herhalen: de while-functie
*12.9 Meer mogelijkheden met shell-scripts
*13 Protectie en Permissie
*13.1 Werkwijze 1
*13.2 Werkwijze 2
*14 Introductie MacOS (alleen Scheikunde)
*14.1 Inleiding
*14.2 Scherm lay-out
*14.3 Sherlock2
*14.4 Printen
*14.5 Uitloggen
*
Computers en computersystemen
P.R.J. Asveld, A. Nijmeijer, J. Reuzel, J. Scholten, J.T. van der Veen, W.A. Vervoort (1997)
Inhoudsopgave
1 Inleiding 5
2 Programmeerbare automaten 5
2.1 Specifiek én algemeen 6
2.2 Geheugen 6
3 Opbouw van een computer 7
3.1 Componenten van een computer 8
3.2 Werking van een computer 8
4 Achtergrondgeheugen en files 9
4.1 Waarom een extern geheugen? 9
4.2 Opslagcapaciteit en toegangstijd 9
4.3 Bewaren van gegevens 10
5 Systeem programmatuur 10
6 Voorbeeld van het gebruik van een computersysteem 10
6.1 Programma ontwerpen 10
6.2 Programma in editor zetten 10
6.3 Fouten corrigeren (I) 11
6.4 Compileren van het programma 11
6.5 Fouten corrigeren (II) 11
6.6 Linken van het programma 11
6.7 Laden en uitvoeren van het programma 11
7 Groei 11
Door de grote opkomst van computers en computersystemen in de laatste tientallen jaren is de belangstelling voor computerprogrammering en computergebruik groter dan ooit tevoren. Het hoofdthema van deze cursus is computergebruik. We zullen in grote lijnen aangeven wat een computer en een computersysteem is en wat er zoal komt kijken bij het programmeren en gebruiken daarvan.
2 Programmeerbare automaten
Computers zijn programmeerbare automaten die in staat zijn gegevens te verwerken. Computers zijn niet de oudste programmeerbare automaten. Van veel oudere datum is bijvoorbeeld het weefgetouw van Jacquard. Dit getouw wordt gestuurd door een soort ponsband waarin door middel van gaatjes wordt aangegeven welk patroon geweven moet worden. Deze ponsband is het programma dat door het weefgetouw wordt uitgevoerd. Een andere ponsband, dus een ander programma, betekent een ander weefpatroon. Ook een draaiorgel is een voorbeeld van een programmeerbare automaat. Een draaiorgel wordt gestuurd door eenzelfde soort ponsband als het weefgetouw van Jacquard.
Programmeerbare automaten zijn enerzijds heel specifiek, anderzijds toch ook algemeen. Ze zijn specifiek omdat zij slechts in staat zijn bepaalde handelingen of instructies uit te voeren. Een weefgetouw van Jacquard kan alleen maar weven en een draaiorgel maakt alleen maar muziek.
Ze zijn algemeen omdat ze elk op hun eigen gebied, tot allerlei dingen in staat zijn. Het weefgetouw kan allerlei patronen weven. Door het programma wordt uit alle mogelijke patronen net dat ene uitgekozen dat gewenst wordt. En zo kan ook een draaiorgel allerlei muziek maken, van evergreens tot pop; het programma bepaalt weer welke melodie er ten gehore gebracht wordt. Het weven van patronen of het spelen van een bepaalde melodie gebeurt automatisch en onder besturing van het ingevoerde programma. Het automatisme bestaat daarin dat met elke programma-instructie een bepaalde handeling wordt verricht en dat bovendien, als een instructie is afgehandeld, de automaat vanzelf begint aan de uitvoering van de volgende instructie. Dat de automaat zo werkt hangt samen met z'n constructie, meer kan hij ook niet.
2.2 Geheugen
Hetzelfde geldt voor een computer. Ook een computer is specifiek in die zin dat hij slechts een beperkt aantal instructies kan uitvoeren. Maar er is één groot en principieel verschil tussen computers en andere automaten: een computer beschikt over een geheugen. Dit geheugen wordt het interne geheugen of werkgeheugen genoemd. Daarin worden bij het begin van de uitvoering van het programma de invoergegevens (de gegevens die verwerkt moeten worden) en het programma geplaatst. Ook zullen hierin de resultaten of tussenresultaten van de bewerkingen worden opgeslagen. Dit alles blijft aanwezig tot het programma volledig is afgewerkt.
Dat het programma zelf gedurende z'n uitvoering in het interne geheugen is opgeslagen, staat bekend als het stored-program concept (store = opslagplaats; stored = opgeslagen in het geheugen). Alle computers, in tegenstelling tot andere programmeerbare automaten, maken gebruik van dit principe. Omdat bij een computer invoergegevens, (tussen)resultaten en programma tegelijk in het werkgeheugen aanwezig zijn, is het mogelijk een speciaal soort instructies op te nemen in een computerprogramma. Instructies namelijk die bedoeld zijn voor besturing van het programma (program control).
Er kan bijvoorbeeld in het programma worden voorgeschreven om bepaalde gegevens met elkaar te vergelijken en op grond hiervan kan dan een deel van het programma worden herhaald (het programmadeel moet hiervoor wel aanwezig zijn!), een bepaalde instructie worden overgeslagen (voorwaardelijke uitvoering) of een keuze worden gemaakt uit een tweetal instructies (alternatieve uitvoering). Voorbeelden hiervan zijn:
"ZOLANG x>0 HERHAAL instructie 1"
"ALS x<0 DAN instructie 2"
"ALS p=q DAN instructie 3 ANDERS instructie 4"
Zonder dit soort instructies voor programmabesturing zou een computer slechts beperkt bruikbaar zijn. Het is juist de combinatie van deze besturingsinstructies met de "gewone" rekeninstructies (als vergelijken of optellen) die ons in staat stelt programma's te schrijven voor het verwerken van allerlei soorten gegevens. Dit kan variëren van het alfabetisch ordenen van een lijst met namen of het doen van spelletjes tot het laten uitvoeren van een zachte landing door een ruimtevaartuig. Door deze grote variatie aan
toepassingsmogelijkheden heeft het computergebruik zo'n grote vlucht kunnen nemen.
Een moderne computer is samengesteld uit een zeer groot aantal elektronische basiscircuits. Het zou te ver voeren om nader op de samenstelling van deze circuits in te gaan. Dit is iets voor hardware-specialisten (hardware = apparatuur) en niet van belang voor software-mensen (software = programmatuur). Om toch inzicht te krijgen in de bouw en de werking van een computer zullen we zeer schematisch te werk gaan en een computerinstallatie onderverdelen in een aantal blokken die elk een functionele eenheid vormen. Dit brengt ons tot het volgende schema van een computerinstallatie:
Figuur 1: Apparatuurcomponenten van een computerinstallatie
3.1 Componenten van een computer
Het invoerorgaan
is nodig om het programma (stored-program) en de invoergegevens in te voeren in het interne geheugen zodat er mee gewerkt kan worden. Het bestaat uit bijvoorbeeld een toetsenbord of een optische lezer.Het uitvoerorgaan
dient ervoor om de resultaten van de bewerkingen vanuit het interne geheugen in de buitenwereld, bijvoorbeeld een beeldscherm of printer af te leveren.Bij een PC, workstation of terminal zien we dat het in- en uitvoerorgaan gecombineerd zijn. Toch blijven het geheel gescheiden functies! Intikken van invoergegevens betekent dan ook niet, zoals bij een typemachine, dat deze zonder meer worden afgebeeld op het beeldscherm of op het papier. Dat afbeelden gebeurt onder controle van de computer en zoals altijd vanuit het geheugen. De invoer wordt alleen maar weergegeven, geëchood zoals we dit noemen, als de computer daartoe opdracht heeft gekregen: de echo-functie kan aan- en afgezet worden. Normaal zal de echo aanstaan om de gebruiker in staat te stellen de ingevoerde gegevens te controleren op fouten. Maar soms is het aanstaan van de echo niet gewenst. Bijvoorbeeld bij het invoeren van geheime informatie als een password (een woord dat toegang verschaft tot de computer).
De computer zelf is opgebouwd uit 2 hoofdcomponenten: de centrale verwerkingseenheid (CVE of CPU van central processing unit) en het interne geheugen. De CPU zelf is weer opgebouwd uit een besturingseenheid en een bewerkingseenheid.
De besturingseenheid interpreteert instructies (decodeert ze) en genereert daarbij de nodige stuursignalen naar de overige componenten. Deze stuursignalen hebben een transport van gegevens of instructies tot gevolg, of een rekenkundige of logische bewerking. De besturingseenheid bestuurt en coördineert de hele computerinstallatie; er is niets dat niet via of op initiatief van de besturingseenheid gebeurt.
De bewerkingseenheid voert instructies voor rekenkundige of logische bewerkingen uit als optellen, aftrekken, vermenigvuldigen, delen of vergelijken. Andere namen hiervoor zijn rekenorgaan en ALU (arithmetic and logical unit).
Het interne geheugen kunnen we beschouwen als een rij cellen of locaties. Bestaat het geheugen uit n locaties dan kunnen we deze nummeren van 0 t/m n-1. Het aldus verkregen nummer van een locatie noemen we het adres van deze geheugenlocatie. De geheugencellen moeten instructies en gegevens kunnen bevatten. Deze moeten in de een of andere code vastgelegd worden. We gebruiken daarvoor een binaire code, dus een rijtje nullen en enen. Een geheugenlocatie is daarom samengesteld uit een aantal componenten die zich in slechts 2 toestanden kunnen bevinden. Deze toestanden worden aangeduid met 1 en 0 of met waar en onwaar (true en false). Zo'n 2-waardige component wordt bit genoemd. Dat is een samentrekking van binairy digit (een getal uit het 2-tallig stelsel). Een groepje van 8 bits wordt een
byte genoemd en een groepje van een vast aantal, bijvoorbeeld twee bytes, een woord.Nu we de voornaamste componenten van een computer hebben leren kennen vragen we ons af hoe een computer eigenlijk werkt. Om dit goed te kunnen bespreken, tekenen we het schema van een computerinstallatie nog een keer opnieuw, maar nu op een wat andere manier.
Figuur 2: Apparatuurcomponenten van een computerinstallatie en hun wisselwerking tijdens de uitvoering van een programma
We gaan er van uit dat het programma via het invoerorgaan in het interne geheugen is geplaatst op last van de besturingseenheid (stored program). Ook nemen we aan dat de te bewerken gegevens in het interne geheugen aanwezig zijn. De besturingseenheid zal er dan voor moeten zorgen dat de afzonderlijke instructies één voor één en in de juiste volgorde worden uitgevoerd. Om dit te kunnen doen zal de besturingseenheid moeten weten welke de eerste instructie is en ook welke instructie moet worden uitgevoerd steeds nadat er een is afgewerkt. De besturingseenheid zal daarom telkens het adres bijhouden van de geheugencel waarin de instructie staat die aan de beurt is of komt.
Het afwerken van de aan de beurt zijnde instructie verloopt als volgt.
Met behulp van het adres waarop de uit te voeren instructie staat, wordt deze vanuit het werkgeheugen gekopieerd en in de besturingseenheid geplaatst. Merk hierbij goed op dat er echt gekopieerd wordt en dat de instructie nu dus niet alleen in de besturingseenheid staat maar ook nog steeds in het werkgeheugen! Dit laatste is nodig voor eventuele herhalingen.
De (kopie van de) instructie wordt geïnterpreteerd door de besturingseenheid. Daarbij wordt vastgesteld wat de operatiecode (opcode) is, dus welke bewerking (operatie) moet plaatsvinden, welke gegevens (operanden) bewerkt moeten worden en waar het resultaat van de bewerking moet worden opgeslagen (resultaatadres). Dit alles wordt doorgegeven aan de bewerkingseenheid.
De instructie wordt daadwerkelijk uitgevoerd door de bewerkingseenheid.
Het resultaat wordt op initiatief van de besturingseenheid naar het resultaatadres gekopieerd.
Het adres waarop de volgende instructie te vinden is, wordt bijgewerkt.Deze cyclus wordt steeds automatisch herhaald totdat er een stopinstructie wordt uitgevoerd.
4 Achtergrondgeheugen en files
Figuur 3: Het externe geheugen als onderdeel van de computer
4.1 Waarom een extern geheugen?
Dat er meestal een extern geheugen aanwezig is komt doordat in een computersysteem vaak grote hoeveelheden gegevens langdurig of zelfs permanent bewaard moeten blijven. Denk maar eens aan een programma dat veelvuldig gebruikt wordt, aan een abonneebestand voor een tijdschrift of aan een grote hoeveelheid administratieve programma's met bijbehorende gegevens in een bedrijf. Dit soort gegevens kan niet bewaard blijven in het interne geheugen om de doodeenvoudige redenen dat dit meestal een vluchtig geheugen is en bovendien de capaciteit ervan in het algemeen niet toereikend zal zijn. Vluchtig wil zeggen dat de gegevens er uit zullen verdwijnen (vervluchtigen) zodra de computer wordt uitgeschakeld (door de gebruiker of ten gevolge van een storing). Bij magnetische opslag daarentegen op band of schijf blijven de gegevens gewoon bewaard, ook al wordt het apparaat uitgeschakeld. Vergelijk dit maar met muziek die in magnetische vorm is opgeslagen op een cassettebandje.
4.2. Opslagcapaciteit en toegangstijd
De opslagcapaciteit van het interne geheugen ligt in de orde van grootte van enkele tot enkele honderden Mbytes (1 M = 1 mega = 220) en die van het externe geheugen bedraagt al gauw enkele Gigabytes. Dat de werkgeheugencapaciteit relatief laag is, is een kwestie van prijs. Werkgeheugen is per eenheid vele malen duurder dan extern geheugen omdat het werkgeheugen zo nauw gekoppeld is aan de centrale verwerkingseenheid. Tussen deze twee componenten bestaan altijd rechtstreekse verbindingen waarlangs de besturingseenheid de afzonderlijke bytes in het werkgeheugen rechtstreeks kan adresseren (benaderen) en waarlangs er rechtstreeks gegevens uitgewisseld kunnen worden tussen werkgeheugen, besturingseenheid en bewerkingseenheid. Dit alles vergt vele en mede daardoor complexe en dure elektronische schakelingen.
Externe geheugens zijn typisch bedoeld voor de min of meer permanente opslag van grote hoeveelheden gegevens. De tol die voor de grote capaciteit van een extern geheugen betaald moet worden is een drastische verhoging van de toegangstijd (accesstijd) van gegevens op het externe geheugen in vergelijking tot die van gegevens in het werkgeheugen. Het grootste deel van de tijd wordt hierbij in beslag genomen door de noodzakelijke mechanische instelbewegingen van het medium. Bij een schijfeenheid is dat de insteltijd van de leesarm en het wachten (gemiddeld een halve omwentelingstijd lang, of minder als er meer koppen gemonteerd zijn) tot het begin van de gegevenslocatie onder de leeskop aankomt. De feitelijke overdracht van de gegevens gaat vervolgens weer snel. Om de insteltijd zoveel mogelijk te ontlopen en optimaal gebruikt te kunnen maken van deze hoge overdrachtssnelheid, vindt het gegevenstransport van of naar achtergrondgeheugen meestal niet per woord plaats, maar broksgewijs, dat wil zeggen met een groot aantal woorden tegelijk (bijvoorbeeld 1 kilobyte of een veelvoud hiervan, afhankelijk van het computersysteem). Zo'n blok gegevens wordt dan in z'n geheel getransporteerd naar of van een bufferruimte in het werkgeheugen.
Buffering in deze vorm komt ook vaak voor bij het invoerorgaan en het uitvoerorgaan. Want in vergelijking met de centrale computer zelf zijn ook dit meestal erg langzame (gedeeltelijk mechanische!) apparaten.
4.3 Bewaren van gegevens
Het bewaren van gegevens in het externe geheugen zelf gebeurt in de vorm van files. Een file (of eigenlijk de inhoud ervan) is een hoeveelheid gegevens die bij elkaar hoort en samen één geheel vormt. Niet alle files zijn even lang. De lengte van een file wordt bepaald door de hoeveelheid gegevens die er in opgeslagen wordt. Een file kan bijvoorbeeld bestaan uit een tekst, uit de invoergegevens van een programma of uit de gegevens van alle abonnees van een tijdschrift.
Iedere file heeft een unieke naam, de systeemfilenaam. Deze unieke systeemnaam is vanzelfsprekend nodig om eenmaal opgeslagen gegevens weer te kunnen bereiken. Ook kunnen files op het achtergrondgeheugen worden gemanipuleerd. Ze kunnen bijvoorbeeld worden gelezen, beschreven, gecreëerd of vernietigd.
5 Systeem programmatuur
Als we een computer gebruiken dan hebben we niet alleen te maken met een brok hardware (apparatuur) maar ook met een hoeveelheid systeemsoftware (systeemprogragrammatuur). Dit geheel van hardware en systeemsoftware noemen we een computersysteem.
De systeemprogrammatuur wordt meestal meegeleverd door de computerfabrikant of -leverancier en dient er voor te zorgen dat we op een acceptabele manier kunnen werken met de computer. Naast de systeemprogrammatuur onderscheiden we de gewone toepassings- of gebruikersprogrammatuur. Deze is voor de gebruiker ontwikkeld ten behoeve van de een of andere toepassing, bijvoorbeeld het werken met teksten of het uitvoeren van berekeningen.
De systeemprogrammatuur kent vele taken. Een ervan is bijvoorbeeld het beheren van files op het achtergrondgeheugen. Dit gebeurt door het operating system. Het operating system is een speciaal programma dat in feite alles wat er zich in de computer afspeelt bijhoudt, bestuurt, controleert en coördineert. Om files te kunnen beheren worden deze aan de hand van een unieke systeemfilenaam ondergebracht in bibliotheken. Een bibliotheek is op zichzelf genomen een hoeveelheid gegevens (van files) en als zodanig ook weer ondergebracht in een file die op het achtergrondgeheugen bewaard wordt. Het spreekt vanzelf dat in grotere computersystemen de nodige voorzorgsmaatregelen getroffen moeten worden om de inhoud van de bibliotheken tegen ongewenst gebruik te beveiligen.
Het zou te ver voeren om uitgebreid aandacht te besteden aan de systeemprogrammatuur en de daarmee samenhangende taken. Dit is ook niet nodig omdat het juist de hoofdtaak is van de systeemprogrammatuur de gebruiker en de programmeur in dit opzicht te ontlasten.
6 Voorbeeld van het gebruik van een computersysteem
Laten we eens nagaan wat er zoal komt kijken bij het gebruik van een computersysteem, als we er een door ons zelf ontworpen en geprogrammeerd programma op willen draaien.
6.1 Programma ontwerpen
Nadat de programmeur zijn programma heeft ontworpen en zich er van overtuigd heeft dat het correct is (het programma staat dan nog slechts op papier) biedt hij het aan de computer.
6.2 Programma in editor zetten
Daartoe moet hij het operating system opdracht geven om een tekstverwerker (Engels: editor) aan het werk te zetten. De editor is een systeemprogramma waarmee files aangemaakt kunnen worden die een of andere ingetoetste tekst bevatten. Bijvoorbeeld een programmatekst of een tekst met invoer-gegevens voor een programma. Zo'n editor maakt deel uit van een ontwikkelomgeving voor programma's.
Eerst moet aan het operating system opdracht gegeven worden om de ontwikkelomgeving op te starten. Daarna kan het programma worden ingetoetst.
6.3 Fouten corrigeren (I)
Bij dit intoetsen worden vaak fouten gemaakt. Het editor programma biedt dan ook faciliteiten om dergelijke fouten te herstellen. Als het intoetsen en verbeteren beëindigd is dan wordt de editor door een opdracht daartoe verlaten en keert het systeem terug in de ontwikkelomgeving. Het programma is nu in de vorm van een tekstfile aanwezig. Deze tekstfile heeft (natuurlijk) een unieke systeemnaam gekregen. Zouden er voor dit programma nog invoergegevens nodig zijn die op file moeten staan, dan wordt opnieuw de editor aangeroepen.
6.4 Compileren van het programma
Nadat het programma is ingetoetst moet het vertaald (gecompileerd) worden. Dit komt doordat een programma geschreven wordt in een hogere programmeertaal als C, Modula of Java, terwijl een computer alleen maar programma's kan uitvoeren die zijn geschreven in de bij de computer behorende machinetaal.
Machinetalen zijn erg georiënteerd op de hardware van de computer en ongeschikt om algoritmen in te formuleren. Voor het programmeren maken we dan ook gebruik van meer probleemgeoriënteerde talen, de hogere programmeertalen (higher level languages).
De vertaling laten we uitvoeren door een speciaal systeemprogramma dat vertaler of compiler genoemd wordt. Ook een compiler maakt deel uit van de ontwikkelomgeving. Vanzelfsprekend moet daarbij worden meegedeeld welke systeemnaam de file heeft waarin de programmatekst staat. Zo'n vertaler produceert een file met daarin de machinetaalversie van het programma, tenminste als de aangeboden tekst geen fouten bevat.
6.5 Fouten corrigeren (II)
Bevat deze wel fouten tegen de syntaxregels (taalregels) van de gebruikte hogere programmeertaal, dan detecteert de compiler die en geeft in dat geval zogenaamde foutmeldingen. Zo'n foutmelding bevat doorgaans aanwijzingen over het soort fouten dat is gedetecteerd. De ontwikkelomgeving zorgt meestal voor automatische terugkeer in de editor.
Na het aanbrengen van de wijzigingen kan de vertaler weer aan het werk gezet worden. Als de vertaler tenslotte geen fouten meer vindt, dan wordt er (door de vertaler dus) een machinetaalversie van het programma geproduceerd in een file.
6.6 Linken van het programma
Het vertaalde programma kan nu meestal nog niet rechtstreeks verwerkt worden. Eerst moet de zogenaamde linker (weer een ander systeemprogramma dus) nog enkele zaken afhandelen. Bijvoorbeeld het koppelen of toevoegen van subprogramma's voor in- en uitvoer. Als de linker klaar is dan staat het nu uitvoerbare programma of reeds in het werkgeheugen of wederom in een file.
6.7 Laden en uitvoeren van het programma
In het laatste geval moet het dan nog eerst vanaf het achtergrondgeheugen in het werkgeheugen worden gekopieerd. Dit in het werkgeheugen laden zoals dat heet gebeurt door de lader. En nu pas kan de computer de opdracht gegeven worden om het programma uit te voeren (executeren).
Meestal kan er overigens worden volstaan met het geven van één enkele opdracht (als run of execute) waardoor verder automatisch wordt vertaald (indien nodig na verbetering), gelinkt, geladen en geëxecuteerd.
7 Groei
De opkomst van de computer is er niet één van geleidelijke groei. Het tegenovergestelde is juist het geval: computers worden steeds sneller steeds krachtiger. Dit gaat zo snel dat je wanneer je drie jaar geleden een hypermoderne en zeer snelle (100 Mhz) computer kocht deze vandaag als oud wordt omschreven. Van je aankoopbedrag van enkele duizenden guldens krijg je met veel geluk nu tweehonderd gulden terug!
Onderzoeker Gordon Moore van Intel kwam al in 1965 met een opvallende observatie naar buiten. Hij ontdekte dat de prestaties van computerchips bij elke nieuwe versie ongeveer zijn verdubbeld en dat elke chip ongeveer 18 tot 24 maanden uitkomt na de vorige. Op basis van deze informatie concludeerde hij dat de groei van de mogelijkheden van computers exponentieel is.
Deze observatie is later bekend geworden als de Wet van Moore. Opvallend is dat deze trend zich sinds 1965 nog steeds heeft doorgezet en ook nog op dit moment nog actueel is. Bijvoorbeeld: sinds 1971 is het aantal transistoren op een chip meer dan 3200 keer gegroeid, van 2300 tot 7.500.000.
Ook op andere (computer)gebieden is de groei exponentieel: bijvoorbeeld als het gaat om de snelheid van een computer, de omvang van het externe geheugen en de groei van het aantal websites op Internet. In onderstaande tabel en bijbehorende figuur worden de exponentiële groei van het aantal transistoren in een computer en de snelheid geïllustreerd.
|
Naam |
Introductie |
Aantal Transistoren |
Snelheid (MIPS) |
|
4004 |
1971 |
2300 |
0.06 |
|
8080 |
1974 |
6000 |
0.6 |
|
8086 |
1978 |
29000 |
0.8 |
|
80286 |
1982 |
134000 |
2.7 |
|
80386 |
1985 |
275000 |
6 |
|
80486 |
1991 |
1185000 |
13 |
|
Pentium |
1993 |
3100000 |
100 |
|
Pentium Pro |
1995 |
5500000 |
440 |
|
Pentium I |
1997 |
7500000 |
|
|
Pentium II |
1999 |
9500000 |
|
|
Celeron |
1999.3 |
19000000 |
Tabel 1: Toename van aantal transistoren en snelheid (MIPS) bij computers
Figuur 4: Grafische weergave van de toename van het aantal transistoren en de snelheid van computers
Aan het eind van het practicum:
Macintosh
UNIX is het systeem waarmee binnen de divisies Wiskunde & Informatica en Natuurkunde & Sterrenkunde wordt gewerkt. Natuurlijk zijn er ook andere systemen denkbaar, maar UNIX heeft al geruime tijd zijn waarde bewezen voor de universitaire omgeving. Een achtergrondartikel over de geschiedenis van UNIX is te vinden op: http://www.bell-labs.com/history/unix/
In tegenstelling tot bijvoorbeeld Microsoft Windows en Macintosh is UNIX van zichzelf geen grafische omgeving waarin je met behulp van de muis kunt manoeuvreren, maar wordt er gebruik gemaakt van commando's. De grafische laag die op de meeste UNIX systemen wordt gebruikt heet het X Windowing System, kortweg X.
Tijdens je studie zul je zeer veel commando's leren gebruiken. Tijdens Inleiding Computergebruik leer je enkele (maar lang niet alle) zeer belangrijke commando's.
Wanneer je wel eens met DOS hebt gewerkt zul je merken dat er veel overeenkomsten zijn. Hieronder is een tabel opgenomen met enkele veelgebruikte commando's in UNIX en DOS. Tijdens het practicum zullen we met deze commando’s oefenen.
|
ACTIE |
UNIX |
DOS |
|
Maak een directory |
mkdir |
mkdir |
|
Verander van directory |
cd |
cd |
|
Geef de inhoud van een directory weer |
ls |
dir |
|
Verwijder een directory |
rmdir |
rmdir |
|
"Edit" een bestand |
emacs of vi |
edit |
|
Verwijder een bestand |
rm |
del |
|
Kopieer een bestand |
cp [oldfile] [newfile] |
copy [oldfile] [newfile] |
|
Wijzig de naam van een bestand |
mv [oldfile] [newfile] |
rename [oldfile] [newfile] |
|
Toon bestand |
more [filename] |
type [filename] |
De informatie die in deze cursus wordt gepresenteerd is lang niet volledig, een voorzichtige schatting is dat maar 5% (!) van de mogelijkheden van UNIX aan bod komt. Een handleiding over UNIX waarin alle mogelijkheden worden besproken is vele honderden pagina's dik!
Toch zul je als je deze module hebt doorlopen redelijk met UNIX uit de voeten kunnen. Het is daarna belangrijk om regelmatig zelf op zoek te gaan naar de informatie die je nodig hebt. Je kunt dat doen door die dikke boeken te gaan lezen. Een andere mogelijkheid is om de manual-pages te raadplegen die al in UNIX zijn ingebouwd. Hoe je dat moet doen staat beschreven in hoofdstuk 5 van deze module.
Belangrijk is dat je je realiseert dat je met UNIX zeer veel kunt doen. Alleen door jezelf steeds vragen te blijven stellen en de antwoorden in de manuals op te zoeken leer je UNIX echt goed gebruiken.
Een goede houding is om er steeds vanuit te gaan dat binnen UNIX alles kan. Slechts zeer zelden zul je merken dat deze uitspraak toch niet helemaal waar is.
Wanneer je inlogt in UNIX (zie module 1) verschijnt over het algemeen een scherm dat eruit kan zien als het onderstaande: het CDE scherm. Soms zijn er één of meerdere windows naast of over elkaar op het scherm te zien zoals hier, maar meestal is alleen het Control Panel onderaan zichtbaar. De belangrijkste onderdelen van het CDE-scherm staan hieronder aangegeven.

:
Kies Desktop Introduction door er één keer op te klikken. Soms duurt het even voordat een programma is opgestart: aan het knipperende "lichtje" boven de exit-button kun je zien dat UNIX nog bezig is met de opzoeken en starten van het programma.
De woorden in de tekst die onderstreept zijn (ook gestippeld onderstreept) kun je aanklikken. Er verschijnt dan meer informatie over dat onderwerp. Met behulp van de knop Backtrack keer je steeds terug naar het voorgaande scherm.
Kies Basic Desktop Skills en lees de volgende paragrafen aandachtig door. Volg waar nodig de links naar extra informatie. Probeer de mogelijkheden die worden beschreven uit.
Sluit het venster Introduction to the Desktop volledig af, zodanig dat er ook geen icoon van dit window meer zichtbaar is. Informatie over hoe dit moet is te vinden in de paragraaf Working with Windows.
:
Kies nu Front Panel Help. Lees de volgende informatie aandachtig door:Probeer de genoemde buttons en submenu's op het scherm terug te vinden. Bekijk wat er gebeurt als je de buttons aanklikt. Lees tenslotte de informatie over Front Panel Controls door. Sluit alle geopende windows.
De server-computers bij de divisies Wiskunde & Informatica en Natuurkunde & Sterrenkunde aan de VU werken allemaal onder het bedrijfssysteem UNIX (wettig gedeponeerd handelsmerk van Bell Laboratories).
Functies van de shellShell is de naam van het programma dat de commando's van je scherm leest of ontvangt en zorgt dat de commando's worden uitgevoerd. Er zijn verschillende soorten shells en als je een loginnaam krijgt toegewezen wordt daarmee een van die typen shells aan jou verstrekt. In principe werken we bij de divisie Wiskunde en Informatica met de Bash-shell en bij de divisie Natuurkunde met de C-shell. De shell is niet alleen een programma dat je commando's interpreteert, maar ook een programmeertaal. Tijdens het vak Inleiding Programmeren zul je nog uitgebreid met deze functie van bash kennismaken.
Van de shell zijn verschillende versies in omloop. De originele versie, de zogenaamde Bourne shell, heet sh. Als student van de divisie Wiskunde en Informatica krijg je meestal de Bourne-again shell, ofwel 'bash'. Deze lijkt in heel veel aspecten op 'sh' maar kan ook een aantal handige dingen meer. Zo probeert bash als je tijdens het intikken van een commando op de Tab toets drukt zo goed mogelijk waar je mee bezig was voor je af te maken. Als je dus een file met een hele lange naam zou willen bewerken bv. 'dit_is_een_file_met_een_hele_lange_naam' kun je na het intikken van 'dit' (maar voordat je op return drukt) op Tab drukken waarna de shell de naam voor je afmaakt, vooropgesteld dat er in je directory geen andere file is die zo begint. Als die wel zou bestaan geeft bash de verschillende mogelijkheden en kun je wat karakters aan de filenaam toevoegen om de keuze duidelijk te maken.
Verder beschikt bash over een geheugen: er wordt onthouden welke commando's je allemaal al hebt ingetikt. Met behulp van de pijltjestoetsen kun je door de lijst van opdrachten wandelen en het geschikte commando opnieuw laten uitvoeren. Dit kan je een hoop denkwerk schelen bij meer ingewikkelde commando's.
Er zijn nog meer zaken waarop sh en bash verschillen, maar bovengenoemde mogelijkheden kunnen je al heel wat tikwerk besparen.
De C-shell die door de divisie natuurkunde wordt gebruikt kent ook de meeste van deze handigheidjes. Het basisprincipe van beide shells is gelijk, maar op onderdelen kunnen er flinke verschillen bestaan.
i
Gebruik nooit twee shells door elkaar, dit kan door de verschillen behoorlijk verwarrend zijn. In het algemeen is het is beter eerst één shell heel goed te leren kennen en eventueel later over te stappen.
Het enige dat nu nog gedaan moet worden is het creëren van een window waarin je met de shell kunt gaan werken. De procedures voor het opstarten van de shell verschillen per divisie.
Wiskunde en Informatica:
Plaats de muiswijzer op de achtergrond (dit is alles wat niet binnen een ander window of het "Control Panel'' zit) en druk één maal op de rechter muisknop. Open het Machines submenu.Er verschijnt een menu waarmee je uit verschillende machines kunt kiezen. Klik op de regel "local host". Na enkele seconden verschijnt er een window waarin de shell draait.
i
In niet-CDE desktops heet zo’n window vaak ‘xterm’ of ‘terminal’.
:
Kies Terminal. Na enkele seconden verschijnt er een
(terminal)window waarin de shell draait
Voor het werken met de shell gebruiken we shell-commando's. In dit hoofdstuk komen enkele eenvoudige, maar veelgebruikte commando's aan de orde.
Date, who, ls, lpr en manCommando's zoals who, date, ls, lpr en man worden ook wel shell-commando's genoemd. In de loop van deze module kom je nog een aantal andere shell-commando's tegen. Een overzichtje van nuttige shell-commando's staat achterin de handleiding van Inleiding Programmeren (appendix A).
:
Zorg ervoor dat je een window hebt waarin een shell draait (zie het vorige hoofdstuk). Plaats de muiswijzer binnen het window zodat je commando's kunt invoeren.Iedere opdracht die je aan de computer geeft moet altijd met de toets waar ENTER op staat afgesloten worden. Dat is het teken dat jij klaar bent met intikken en de computer nu aan het werk moet met jouw commando. Als je geen ENTER intikt gebeurt er dus niets. We zullen dat van nu af aan er niet meer bij vertellen. Als je je afvraagt of het klopt dat er niks gebeurt, geef dan nog een keer ENTER, misschien was je het vergeten (teveel keer kan nooit kwaad).
Linksboven in het window staat op de onderste niet-blanco regels de prompt (een $ bij W & I, een % bij N & S) gevolgd door de cursor. De prompt geeft aan dat de computer klaar is met het verwerken van je vorige opdracht. Je zou het inloggen dus kunnen beschouwen als het eerste commando dat jij aan de computer gegeven hebt. Achter de prompt kun je opdrachten voor UNIX intikken.
:
druk op ENTERAls dat het enige is wat je doet, je hebt dus geen commando ingetikt, dan wordt dit verstaan als "Voer geen opdracht uit''. Daar is het systeem (vrijwel) meteen mee klaar, en je wordt daarvan op de hoogte gesteld door de volgende prompt.
date7
dateDe computer geeft de datum en het tijdstip. Ten teken dat de opdracht uitgevoerd is verschijnt op de volgende regel dus weer een prompt.
7
whoHet resultaat is een lijst van personen die op dit moment op de computer zijn ingelogd. Ook is de tijd te zien waarop ze hebben ingelogd en hoe de terminal heet waarop ze werken. Wanneer je op een NT-machine of een workstation bent ingelogd dan wordt na dit commando alleen je eigen naam genoemd. Dit komt omdat op een NT-machine of een workstation maar één persoon tegelijkertijd kan inloggen, terwijl je via een terminal met een aantal mensen op hetzelfde systeem werkt.
Wanneer de uitvoer meer dan een scherm beslaat kun je dat scherm voor scherm (of regel voor regel) bekijken, door de commando’s more, yap of less aan het commando who mee te geven.
7
who | moreHet "|"-teken heet een pipe. Je vindt het meestal naast de BACKSPACE-toets op je toetsenbord (met SHIFT). Meer over pipes in paragraaf 8.4. Met more wordt zoveel van een file afgedrukt tot het scherm vol is. Door op ENTER te drukken worden nieuwe regels weergegeven, met de spatiebalk verschijnt een nieuwe pagina. Wanneer alle regels zijn afgedrukt keer je automatisch terug naar de prompt. Met q (quit) kun je tussendoor terugkeren naar de prompt.
7
who | yap (alleen W & I)Het commando yap (yet another page) drukt ook de eerste pagina van de output af. Met ENTER kun je regel voor regel laten verschijnen. Druk op h (HELP) om een lijst te krijgen van alle opties die er zijn om binnen de output te navigeren.
7
lsIedere gebruiker heeft een zogenaamde home directory, een eigen werkplek in het geheugensysteem waar je automatisch terechtkomt als je inlogt (hierop komen we later nog terug). Die plaats wordt door systeembeheer ingesteld en aangemaakt. Wanneer je het commando ls geeft zonder verdere argumenten, dan wordt de inhoud van je home-directory getoond. Omdat je nog niet eerder met UNIX hebt gewerkt is er nog geen enkele file zichtbaar.
Aan een commando kun je in het algemeen twee soorten argumenten toevoegen:
7
ls -l (dit is geen één, maar een L)Optie -l bepaalt dat niet alleen de namen van de files worden afgedrukt maar ook een aantal nadere gegevens, zoals het soort file, de grootte, de naam van de eigenaar, wat je er mee mag doen en het laatste moment van wijziging.
7
ls -aDit commando toont alle files in je huidige (in dit geval home-) directory. Er zijn namelijk al een paar files voor je aangemaakt door het systeem. De namen daarvan beginnen met een punt. Je home-directory wordt aangegeven door een . (punt).
7
ls -l fredJe krijgt dan niet van alle files de bovengenoemde gegevens te zien, maar alleen die van de file fred. Omdat je nog geen file hebt met de naam fred wordt dit je keurig meegedeeld.
lprHet printen van files kan met het commando lpr gevolgd door de filenaam.
Alleen W & I: omdat je maar een beperkt printbudget hebt zullen we je niet vragen dit commando uit te voeren. Uitdraaien gaan standaard naar de grote Océ-laserprinter op de vierde etage.
Het commando pbudget geeft aan hoeveel pagina's je nog kunt printen. Wanneer je pbudget -all doet krijg je een overzicht van alle pagina's die je geprint hebt met een aanduiding wanneer dat was.
We hebben je er al gewezen dat het kunnen hanteren van de manuals van groot belang is voor het leren werken met UNIX. De manual roep je op door het commando man met als argument het onderwerp waarover je meer informatie wilt
7
man lsJe komt nu in een aparte help-file terecht. Vaak past niet alle informatie op één scherm: met de pijltjestoetsen kun je door het document lopen. Met de spatiebalk spring je naar de volgende pagina. Met q (quit) verlaat je de manual en keer je terug naar de prompt van de shell.
Een commando afbrekenSoms kan het voorkomen dat je een commando wilt afbreken voordat het volledig uitgevoerd is. Dat doe je door de control toets (meestal linksonder op het toetsenbord met afkorting CTRL) in te drukken, deze vast te houden en de c in te drukken.
7
whoZodra de lijst met loginnamen begint:
:
druk CTRL-cDe computer breekt het commando dan af, en antwoordt weer met een prompt.
Het password dat je van de afdeling systeembeheer hebt gekregen is meestal een ingewikkeld, moeilijk te onthouden password en bovendien op het moment dat je het krijgt niet alleen aan jou bekend (immers ook aan systeembeheer). Omdat het niet verstandig is je password in je agenda te schrijven (het zou gestolen kunnen worden), is het handig je password te wijzigen in een voor jou wel makkelijk te onthouden password. Ook wanneer je denkt dat iemand achter je password is gekomen kun je dit het beste wijzigen.
7
passwdEr wordt eerst gevraagd om je oude password in te tikken, dit om te controleren of jij het wel bent. Bedenk nu een nieuw password. Wacht met het intypen van het password totdat de computer daar om vraagt. Een password moet tenminste 6 karakters of tekens en maximaal 8 karakters/tekens lang zijn, en bij voorkeur niet alleen kleine letters bevatten maar ook hoofdletters en tekens als [, %, en &. Passwords met alleen kleine letters zijn makkelijker te kraken en passwords die alleen uit een voornaam of een straatnaam bestaan zijn voor een beetje computerinbreker helemaal kinderspel.
Wacht niet te lang met het veranderen van je password, want na een aantal weken zorgt systeembeheer er voor dat de logins van studenten die hun password niet hebben veranderd worden geblokkeerd.
i
Een goede manier om een password te bedenken is een zinnetje te nemen waar niet alleen letters in voorkomen maar bijvoorbeeld ook haakjes, cijfers, komma's enzovoorts. Door dan de eerste letters van de woorden achter elkaar te zetten en ook wat leestekens mee te nemen heb je een vrij moeilijk te kraken password. N.B. Onthoud dit password, want anders kun je de volgende keer niet meer inloggen.Directories zijn te vergelijken met grote multomappen waarin verschillende soorten documenten (files) zitten. Bijvoorbeeld notities, memo's, schetsen en berekeningen. De vergelijking met een multomap gaat echter niet helemaal op, omdat een directory ook weer verschillende sub-directories kan bevatten. Dit is in het echt natuurlijk niet mogelijk.
Het UNIX-systeem heeft een hiërarchisch filesysteem, dit houdt in dat directories en files in relatie tot elkaar zijn georganiseerd.
Directories maken, de inhoud bekijken en veranderen van directoryAls je steeds meer files maakt en geen verdere actie onderneemt zal je home-directory heel onoverzichtelijk worden. Zo'n handelwijze zou overeenkomen met het op één grote stapel leggen van alle papieren die je ontvangt zodat je tenslotte in die stapel niets meer kunt terugvinden. Als je dat beter wilt beheren doe je er verstandig aan om bij elkaar horende spullen ook bij elkaar te bewaren. In het Unix filesysteem kan dat gelukkig ook. Je kunt nieuwe directories maken met het commando mkdir (make directory). Achter dit commando typ je de naam van de directory die je wilt aanmaken.
Je kunt bijvoorbeeld een directory maken waarin je je files kunt zetten die je maakt bij het practicum Inleiding Computergebruik. De naam die je voor die directory zou kunnen gebruiken is inlcomp.
7
mkdir inlcompIn je home-directory is nu een sub-directory met de naam inlcomp gemaakt.
7
lsJe ziet de directory inlcomp die je net hebt aangemaakt staan.
7
mkdir inlprog7
lsJe hebt nu alvast een directory gemaakt waarin je de bestanden van het vak Inleiding Programmeren, dat binnenkort start, kunt plaatsen. Met het commando ls zie je nu de twee subdirectories inlcomp en inlprog staan. Schematisch kunnen je je dit zo voorstellen:
Dit proces van creëren van directories kun je verder doorzetten. Ook in de directory inlcomp kun je weer directories maken enz. Je krijgt op deze manier een (omgekeerde!) boom van directories. Aan de uiteinden van de takken zitten de bladeren (de files) waarin gegevens staan. Over files meer in het volgende hoofdstuk.
Het hele filesysteem van Unix is dus in boomvorm georganiseerd. Uiteraard is jouw homedirectory niet de belangrijkste file in het hele systeem (behalve dan misschien vanuit jouw optiek). Ook boven jouw directory bevindt zich een hele boom van directories. Het startpunt van de hele boom is de zogenaamde 'root', die wordt aangeduid met het teken '/'. Deze wortel bevindt zich volgens het spraakgebruik van de informatica bovenaan de boom. Zoals je misschien al had gemerkt groeien in de informatica de bomen op hun kop!
Via het commando cd (change directory) kun je door een groot gedeelte van de boom wandelen. Sommige delen van de boom zijn echter niet voor iedereen toegankelijk, je kunt deze directories dan ook niet bekijken.
7
cd inlcompMet het commando cd verplaats je dus je werkdirectory (de directory waarmee je aan het werk bent) naar die nieuwe directory. Je stapt als het ware de directory binnen en kunt daar vanaf nu subdirectories en files bekijken en maken.
7
lsVia ls kun je weer bekijken welke documenten of sub-directories er aanwezig zijn in de directory inlcomp. Hij is natuurlijk nog leeg.
Je kunt altijd direct terug naar je home-directory met het commmando cd ~ (~ is de naam van jouw home directory). De home directory van een andere gebruiker, bv. van piet wordt aangegeven door ~piet). Een andere mogelijkheid om naar je home directory te gaan is door het tikken van cd zonder argument.
:
Ga terug naar je homedirectory.De directory 'boven' de directory waar je bent wordt de parent directory van die directory genoemd. Een parent directory wordt in Unix aangegeven met '..'. Met '.' wordt de directory aangegeven waar je op dat moment bent. Je kunt één stap teruggaan in de directory-boom door het commando cd .. te gebruiken.
:
Ga naar de parent directory van je home-directory. Bekijk welke documenten en/of subdirectories in deze directory te vinden zijn. Gebruik hiervoor het commando ls -l. Als het goed is zie je je eigen homedirectory staan met al zijn eigenschappen. De home-directories van je medestudenten zijn ook te zien.:
Ga naar je home-directory. Met het commando ls -l inlcomp krijg je informatie over wat er in de directory inlcomp staat. Ga met behulp van de manual na welke optie je aan ls kunt meegeven zodat niet de inhoud maar de eigenschappen van de directory worden getoond.Wanneer je de weg kwijt bent en niet meer precies weet in welke directory je je bevindt dan kun je dat vragen aan Unix met het commando pwd (Print Working Directory).
:
Ga terug naar je home-directory7
pwdWat wordt afgedrukt is de volledige padnaam (pathname) van de directory waar je op dat moment bent. De naam ontstaat door achter elkaar alle directories (gescheiden door het symbool '/', de zogenaamde slash) op te schrijven die je vanaf de root moet doorlopen om bij de huidige directory te komen: dus via / kom je bij de sub-directory home en daarna bij je home-directory. Oftewel: /home/jenaam.
Wanneer een padnaam begint met een "/" wordt vanuit de root directory naar die file gezocht, we noemen dit de absolute padnaam. Wanneer een padnaam niet begint met een "/'' wordt naar de file gezocht vanuit de directory waarin je je bevindt, dit is de relatieve padnaam. Relatieve en absolute namen onderscheiden zich dus doordat de absolute namen beginnen met een slash, en de relatieve juist niet.
Het kan natuurlijk voorkomen dat je een file zoekt die ergens op de schijf staat, maar waar? Het volgende commando begint te zoeken in de huidige directory (daar staat het puntje ‘.’ voor) en zal afdrukken waar het file met de naam ‘verhaaltje’ staat.
7
find . –name verhaaltjei
Je kunt altijd teruggaan naar je home directory met het commando cdM
Let op: in andere systemen (MS-DOS of Windows) wordt voor de slash '/' het teken '\' (backslash) gebruikt. Dit teken heeft binnen UNIX een andere betekenis.M
Binnen UNIX mogen in een directory- of filenaam geen spaties voorkomen, behalve als je er quotes om plaatst (bijvoorbeeld: "a b")Een file is een bestand ergens in het geheugen van de computer. Alle informatie in de computer en de daarbij behorende geheugensystemen is georganiseerd in de vorm van files. In feite kunnen ze niet alleen tekst bevatten maar ook computerprogramma's in machinetaal.
:
Zorg ervoor dat je in je home-directory staat.7
cp /usr/prac/ip/file inlcomp/mijnfileLet er op dat er een spatie is tussen cp en de eerste /.
Met dit commando kopieer je het bestand met de naam file dat staat in de subdirectory ip van de subdirectory prac van de subdirectory usr van de root.
Met inlcomp/mijnfile geef je aan waar je deze file precies wilt neerzetten (gerekend vanaf de directory waar je je op dat moment bevindt, in dit geval je home-directory) en hoe je hem noemt: je plaatst hem in de subdirectory inlcomp en je geeft het oorspronkelijke bestand file nu de naam mijnfile.
7
cd inlcomp7
lsDe file mijnfile staat in de subdirectory inlcomp
De inhoud van een file kun je bekijken met het commando cat.
7
cat mijnfileUNIX antwoordt met de inhoud van de file. Deze bestaat uit drie regels tekst.
7
cp mijnfile file2Nu heb je twee files met identieke inhoud. Je kunt dat controleren door met cat de beide files te bekijken.
7
diff mijnfile file2De computer schrijft alle regels op het scherm die niet gelijk zijn in beide files (in dit geval nul regels).
Het is mogelijk files van naam te laten veranderen. Daarvoor is het commando mv ("move'').
7
mv mijnfile rommelStel vast met het commando ls dat de file nu rommel heet.
Het verwijderen van een file gaat met het commando rm ("remove'').
7
rm rommelGa na dat deze inderdaad verdwenen is. Kijk altijd uit met het gebruik van het remove-commando. Als je een file hebt weggegooid is deze onherroepelijk verdwenen. Er bestaat niet zoiets als een prullenbakje waaruit je nog wel weer je documenten kunt opvissen.
In dit hoofdstuk laten we de werking zien van enkele veelgebruikte commando's. We geven slechts een korte uitleg over deze commando's. Wanneer je meer wilt weten over de mogelijkheden van een commando maak dan gebruik van de manual.
Commando's combinerenDe shell kan nog veel meer dan regel voor regel commando's uitvoeren. Zo kun je twee commando's op een regel combineren door ze, gescheiden door een ; achter elkaar te zetten
7
who;dateNu worden achtereenvolgens de personen die ingelogd zijn en de datum en tijd afgedrukt.
Er zijn een paar characters die in de shell een speciale betekenis hebben.
? betekent ieder willekeurig karakter
* betekent nul of meer willekeurige karakters
Deze worden ook wel wildcards (jokers) genoemd.
?7
ls f?le2Er wordt hier gezocht naar alle files in de directory waar deze beschrijving op past (het is er maar één: file2).
Het is niet altijd nodig om de volledige naam van een file als argument aan een commando mee te geven. Je kunt een soort kortschrift gebruiken waarbij het systeem zelf aanvult wat je niet hebt meegegeven. De aanduiding m* in een commando betekent: "alle files in de directory die beginnen met een m''. Een enkele "*'' is een kortere schrijfwijze voor "alle files in de directory". Ze mogen ook in combinatie gebruikt worden.
Voorbeeld 1:
7
ls /u*/pr??/ip/?anton*Er blijken twee files te zijn die aan deze beschrijving voldoen.
Voorbeeld 2:
Neem even aan dat je in je directory een aantal versies hebt staan van een bepaald programma dat je aan het schrijven bent, die je allemaal zou willen afdrukken (niet iets om in werkelijkheid aan te raden want misschien wel een flinke hap uit je printerbudget).
prog
prog1.1
prog1.2
prog1.3
prog1.4
prog2
Je kunt dat doen door het commando lpr prog*. Alle files waarvan de naam begint met 'prog' worden dan naar de printer gestuurd. De * staat dus voor een willekeurig aantal tekens.
Die speciale betekenis van ? en * kun je weer omzeilen door de naam waar ze in voorkomen tussen enkele aanhalingstekens te zetten zoals bv. in ls '?'. Hiermee wordt alleen de file gemeld waarvan de naam ook werkelijk ? is.
M
Kijk erg goed uit bij het gebruik van * bij het weggooien van files. Of liever nog, gebruik het dan helemaal niet. Als je bedoelt rm *2 (gooi alle files weg die op 2 eindigen) maar je tikt per ongeluk rm * 2 (met een spatie tussen de * en de 2), betekent dat: gooi alle files weg, en bovendien de file 2. Het systeem klaagt dan dat de file 2 niet bestaat, nadat (zoals je zelf hebt opgegeven) al je files zijn weggegooid!De meeste commando's die we tot dusver hebben gezien produceren output op het beeldscherm. Sommige vragen ook om input vanuit het toetsenbord. Je kunt in Unix de input of output ook altijd uit een file halen of naar een file wegschrijven.
Je kunt de output van ls bijvoorbeeld naar een file sturen in plaats van naar het scherm.
7
ls > naarfile7
cat naarfileDe output van ls komt nu in de file naarfile terecht. Wanneer de file naarfile nog niet bestaat wordt die aangemaakt. Als de file al wel bestaat is de oude inhoud nu verdwenen!! Pas daarmee op! Als je wilt dat de output van het commando niet de gegevens in de file vervangt, maar ze er achter plakt dan kun je >> in plaats van > gebruiken.
7
date >> naarfile7
cat naarfileOp dezelfde manier kun je een programma dat invoer van het toetsenbord verwacht in plaats daarvan uit een file laten lezen door achter het commando een < teken en de naam van de file te zetten.
Het commando who vertelt wie er ingelogd zijn op de machine waarop jij op dat moment aan het werk bent. Veronderstel dat je die lijst zou willen bekijken met yap; dat kan door de output van who eerst naar een file te sturen en daarna die file met yap te bekijken:
who > temp
yap temp
In Unix bestaat de nogelijkheid om dit proces te stroomlijnen door middel van een zogenaamde pipeline of pipe: je geeft de output van het ene commando (who) mee als input voor het tweede commando (yap) door ze achter elkaar te zetten met een '|' (vertical bar) symbool ertussen.
7
who | yapHet resultaat is hetzelfde als hierboven, alleen wordt de file temp niet gecreëerd of gewijzigd. Het voorkomt dus dat je veel tijdelijke files moet aanmaken die je later weer weggooit.
Een heel handig commando is 'grep' (afkorting van: Get Regular ExPression). Grep doorzoekt een file naar een woord of een combinatie van karakters dat je opgeeft en drukt de regels waarin dit woord voorkomt af.
7
grep drie mijnfileHet resultaat is dat de regel in de file mijnfile waarin het woord drie voorkomt wordt afgedrukt. Geef dus altijd eerst aan welk woord je zoekt en daarna in welke file.
Vul in: De optie om zowel naar hoofd- als kleine letters te zoeken is: ___________
:
Ga na hoe je kunt zoeken naar regels waarin een woord NIET voorkomt. Druk hierbij ook de regelnummers af.M
Wanneer je geen tweede argument (in dit geval mijnfile) meegeeft aan grep dan wordt er gezocht in de inputfile, oftewel datgene wat jij op je terminal intikt. Er wordt net zolang gezocht totdat jij de inputfile sluit. Zolang je de file niet gesloten hebt blijft grep zoeken in de inputfile en is je terminal niet beschikbaar voor iets anders! Sluiten van de file gaat met CTRL-d. SorterenSort is een commando dat de regels van een file (bv. een file met namen) alfabetisch lexicografisch sorteert en het resultaat afdrukt.
7
sort mijnfileHet resultaat van deze sorteeractie komt op je beeldscherm. Je kunt dit resultaat echter ook in een nieuwe file zetten:
7
sort mijnfile > alfa:
Controleer dat er een file met de naam alfa is gemaakt. Bekijk de inhoud.M
Pas op met sort lijst > lijst. Als je dat doet wordt de inhoud van lijst eerst weggegooid (altijd bij redirectie) waarna er niets meer te sorteren is, en je al je gegevens kwijt bent. Experimenteer alleen met files waarbij het niet erg is als je de inhoud kwijt raakt!:
Ga met behulp van de manual na:1) hoe je de file in omgekeerde volgorde kunt sorteren
2) hoe je de gesorteerde gegevens met behulp van een hulpfile in de oorspronkelijke ongesorteerde file kunt krijgen
De volgende moeilijke opgave is niet verplicht, maar wel een uitdaging!
Vul hier je antwoorden in:
Tegelijkertijd met verschillende programma's werken heeft als voordeel dat je bijvoorbeeld ingewikkelde berekeningen die veel tijd kosten kunt uitvoeren terwijl je tegelijk je verslag aan het schrijven bent.
7
xcalc&7
ipe& (alleen W & I)7
dtpad& (alleen N & S)xcalc
is een rekenmachine. ipe is een van de vele editors die gebruikt wordt bij W & I, dtpad de editor de gebruikt wordt bij N & S. Met de editor leer je werken in het volgende hoofdstuk. Door achter de naam van het programma een & te zetten geef je aan dat je deze applicatie wilt starten terwijl je ook met de andere programma's blijft werken. De programma's worden ieder in een afzonderlijk window geopend. Door op de applicatie te klikken waarmee je wilt werken haal je deze naar de voorgrond en kun je gegevens invoeren.UNIX geeft aan elke applicatie een process-number, waarmee de draaiende applicaties kunnen worden geïdentificeerd.
7
ps -aMet het commando ps (Process Status) krijg je een overzicht van de applicaties die op de achtergrond draaien met hun process-numbers.
Wanneer je een applicatie geforceerd wilt stoppen, bijvoorbeeld omdat deze niet meer normaal af te sluiten valt, gebruik je het commando kill -9 gevolgd door het process-number.
:
Sluit de twee applicaties door eerst de lijst van processen op te vragen, en vervolgens de juiste processen te killen. Bijvoorbeeld:kill –9 666
waarna het bijbehorende proces stopt.
Je gaat nu zelf een file "editen" met een zogeheten editor. W & I maakt gebruik van de editor met de naam ipe (Inleiding Programmeren Editor- in feite een versie van de Emacs-editor), N & S werkt met dtpad. Alleen de manier waarop de editor wordt opgestart en de vormgeving van het window zijn verschillend, de eigenlijke werking van het programma is daarna nagenoeg gelijk.
Eenvoudig gezegd is een editor een applicatie om tekst in een file te zetten en te veranderen. Aangezien je nog veel met de editor zult moeten werken, is het belangrijk om deze paragraaf goed door te nemen. Appendix D in de reader van Inleiding Programmeren geeft je een handig overzicht van vaak gebruikte toetscombinaties.
7
cdTerug naar je home-directory.
7
cd inlcompDe directory van Inleiding Computergebruik die je net hebt aangemaakt.
7
cp /usr/prac/ip/maan maanJe hebt nu een kopie gemaakt van de file met de file maan in de sub-directory ip naar de directory inlcomp en je hebt hem maan genoemd.
De editor ipe opstarten (alleen W & I)Het shell commando ipe roept de editor GNU-Emacs aan. Met een editor kun je zowel bestaande files veranderen als nieuwe files creëren. We gaan de editor eerst gebruiken om een bestaande file te veranderen; hoe je nieuwe files creëert wordt verderop uitgelegd.
7
ipe maan
Je krijgt dit scherm. De file maan blijkt een bekend lied te bevatten. Alleen zijn er op onverklaarbare wijze een paar fouten ingeslopen die we gaan herstellen.
De cursor staat helemaal linksboven in de file.
Bijna onderaan het scherm zien we een zwarte balk, die de mode-line wordt genoemd. In deze mode-line staat onder andere de naam van de file waar we mee bezig zijn. Onder de mode-line bevindt zich nog een regel (de echo area). Op deze regel komen eventuele (fout)meldingen of aanwijzingen van de editor te staan.
De editor dtpad opstarten (alleen N & S):
Klik op het driehoekje boven het Personal Applications icoontje. Er ontvouwt zich een submenu.Kies Text Editor. Na enkele seconden verschijnt er een
window waarin de editor draait
Er zijn twee belangrijke toetsen die je veel zult gebruiken, CTRL (control) en META. De CTRL toets zit meestal linksonder op het toetsenbord. Het opschrift van de META-toets verschilt per toetsenbord. Meestal is het de ALT-toets. Soms zit naast ALT een toets met een à (wiebertje/diamant) erop. Dit is dan de META-toets.
De notatie CTRL-a betekent: druk de CTRL toets in, houdt deze toets vast en druk op 'a'.
Bij het gebruik van een nieuw instrument is het altijd nuttig om te weten waar de noodrem zit. Wanneer er iets mis gaat probeer dan (een paar keer) CTRL-g.
We doen nu even expres iets fout en corrigeren de fout dan weer:
7
CTRL-x7
CTRL-fOnderaan het scherm in de statusbalk zie je nu staan Find file: met de huidige directorynaam. Hierachter kan je de gewenste filenaam intypen. Dit commando wordt normaal gebruikt om een nieuwe file te openen.
Stel nu dat je je vergiste, je wilde helemaal geen nieuwe file openen.
7
CTRL-gAls het goed is is nu alles weer normaal.
We gaan nu door de file bewegen met de pijltjestoetsen, HOME en END. Deze toetsen bevinden zich aan de rechterkant van het toetsenbord.
pijltje-naar-links (of CTRL-b): naar links (backward)
pijltje-naar-rechts (of CTRL-f): naar rechts (forward)
pijltje-naar-beneden (of CTRL-n): naar beneden (next)
pijltje-naar-boven (of CTRL-p): naar boven (previous)
HOME (of CTRL-a): naar begin van de regel
END (of CTRL-E): naar einde van de regel (end)
META-< naar het begin van de file
META-< naar het eind van de file
META-: ga naar de opgegeven regel
META® of META-f één woord vooruit
META¬ of META-b één woord achteruit (of META-F resp. META-B)
PAGE-DOWN of CTRL-v ga een scherm omlaag (vooruit)
PAGE-UP of META-v ga een scherm omhoog (terug)
:
beweeg de cursor door de file met behulp van deze commando's/toetsen.Er is nog een andere manier om de cursor op een bepaalde positie te zetten: de muis. Als je met de linker muisknop op een letter klikt, komt de cursor op die positie te staan.
Onderaan het window zie je een zwarte statusbalk. Daarin kun je zien op welke regel de cursor op dit moment staat.
We gaan de tekst nu veranderen.
:
ga met de cursor naar het eind van de zesde regel. Vul deze regel aan totdat er staat (je kunt gewoon gaan typen): Hoe huplt zijn paardje het dek op en neer Als je typfouten maakt kun je ze uitwissen met de toets BACKSPACE.:
Ga nu met de cursor terug naar het begin van het woord het op dezelfde regel en druk een paar keer op de toets DELETE (of Ctrl-D). Het blijkt dat de letter waar de cursor op staat van het scherm verdwijnt, iedere keer als we DELETE gebruiken. Na acht keer staat er dus: Hoe huplt zijn paardje op en neerEr zijn dus twee manieren om een letter te wissen: BACKSPACE en DELETE. Het verschil is dat BACKSPACE het karakter links van de cursor wist, terwijl DELETE het karakter waar de cursor op staat verwijdert.
:
Voeg nu de woorden het dek weer in. Ga terug naar het woord huplt, en verander dit in huppelt.:
Probeer, om enige vaardigheid te krijgen, de letters pe weer uit te wissen met DELETE en voeg ze daarna op dezelfde plaats weer in. Zet de cursor achter het woord paardje op de zesde regel, en druk op ENTER. Je ziet dat de regel gesplitst wordt. Met ENTER voeg je dus een nieuwe lege regel in. Gebruik BACKSPACE om de oude toestand weer te herstellen.:
Voeg na regel 6 de nieuwe regel Hoe zwaaien de wimpels al heen en al weer toe.Er is nog een ander commando om tekst weg te gooien: CTRL-K. Dit commando wist alles vanaf de positie van de cursor tot aan het einde van de regel. Als de cursor al aan het einde van een regel staat, voegt het de volgende regel samen met de huidige.
:
Zet de cursor op de tweede regel tussen het woord somber en zwijgen. Druk op CTRL-K. Je ziet dat het woord zwijgen gewist is.:
Druk nu nog een keer op CTRL-K.De derde regel is aan de tweede toegevoegd. We realiseren ons hoe stom we zijn geweest: het woord zwijgen moet helemaal niet weg, en die twee regels moeten ook niet samengevoegd worden. Maar geen paniek, met behulp van het 'undo'-commando kunnen we onze laatst uitgevoerde commando weer herstellen.
:
Druk nu twee keer CTRL-_ . Dat is tegelijk CTRL, SHIFT en de '-' toets naast de Backspace-toets.Als het goed is, is onze fout weer hersteld. Door meerdere keren CTRL-_ te gebruiken, kun je steeds meer wijzigingen ongedaan maken.
:
Wis de regels Hoe huppelt... en Hoe zwaaien....Voordat je de editor verlaat is het belangrijk om te beslissen of je de gemaakte wijzigingen wilt bewaren of niet. Alle wijzigingen die je met de editor hebt aangebracht staan namelijk nog niet in de file in jouw directory! Je kunt de (oude) file in je directory overschrijven met de nieuwe, verbeterde file met het commando CTRL-X CTRL-S (save). Daarna kun je de editor verlaten met Ctrl-X Ctrl-C [close].
Wanneer je de wijzigingen nog niet zelf had opgeslagen vraagt de editor bij gebruik van het commando CTRL-X CTRL-C of je de wijzigingen wel of niet wilt opslaan. Als je heel beslist uit de editor wilt zonder de file terug te schrijven moet je 'n' antwoorden. Dit is gevaarlijk! Daarom vraagt de editor nu of je dit echt wel wilt. Antwoord alleen in dat geval 'yes'. Realiseer je dat de file in je directory is bijgewerkt tot op het moment dat je voor het laatst CTRL-X CTRL-S hebt gedaan. Heb je tijdens het editen nooit gesaved, dan is dus al het edit-werk verloren gegaan. Soms kan het gebeuren dat je met editen de zaak totaal verknoeid hebt. In dat geval is dit een mogelijkheid om de oude versie van de file terug te krijgen.
:
Bewaar het bestandJe ziet op de onderste regel nu staan dat de file is weggeschreven.
:
En sluit tot slot de editor af:De editor wordt gesloten en je keert nu terug naar de shell.
:
cat maanJe ziet dat de file maan inderdaad de inhoud heeft die we het laatst op het scherm hadden.
i
Het kan gebeuren dat de computer "down'' (plat) gaat terwijl je aan het editen bent. In dat geval staat in jouw file natuurlijk nog steeds de oude versie die je als laatste bewaard hebt. De editor bewaart voor noodgevallen ongeveer elke 10 minuten een versie van de file waarop jij aan het werk bent. Start 'ipe' gewoon weer op, en als het goed is krijg je op de onderste regel de waarschuwing: file had auto save data; consider M-X recover file. Toets META-x recover-file, gevolgd door ENTER. De naam van de file wordt nu gevraagd. Toets de naam van de file in en beantwoord de erop volgende vraag met yes. Controleer of dit inderdaad de gewenste versie van de file is. Zo ja, bewaar deze dan met behulp van CTRL-X CTRL-S. Omdat maar om de 10 minuten de file wordt bewaard zullen meestal niet al je wijzigingen zijn bewaard.i
Je files steeds consequent "saven" als je belangrijke wijzigingen hebt aangebracht is de beste manier om er zeker van te zijn dat jouw briljante invallen bewaard blijven.We gaan verder met het editen van de file maan.
7
ipe maan
Na het uitvoeren van dit shell-commando hoor je dit op het scherm te krijgen.
Mocht het er helemaal niet op lijken dan kun je:
Meer wijzigingen aanbrengen
Probeer nu de volgende dingen te veranderen:
:
Vervang achter op de eerste regel door door en wolken door bomen.:
Ga een regel naar beneden, en vervang somber zwijgen door wild geraas.:
Verander Vrienden in Makkers.:
De vierde regel is dubbel, dus wis die in z'n geheel (met Ctrl-K).:
Verander Zwarte Piet (nu op de vierde regel) in Sinterklaas.:
Het woord koek is dubbel, verwijder er één.
Als alles gelukt is hebben we nu de volgende situatie:
We hebben ons tot nu toe alleen bezig gehouden met invoegen, verwijderen en veranderen. Wat er nu echter moet gebeuren is het veranderen van de volgorde van tekst. We gaan proberen het woord 'avondje' op de derde regel te kopiëren.
:
Selecteer het woord 'avondje' op de derde regel. Dat doe je door de linker muisknop in te drukken en ingedrukt te houden op de 'a' van 'avondje'. Beweeg de muis (nog steeds met de linker knop ingedrukt) zodanig dat de muis-cursor naar de spatie achter 'avondje' wijst en laat de muisknop los. Klik met de middelste muisknop op de spatie achter het woord 'schijnt' op de eerste regel. Je ziet dat 'avondje' wordt ingevoegd. Je kunt het woord ook een aantal keren achter elkaar invoegen door de middelste muisknop enkele keren in te drukken.:
Gebruik CTRL-_ om de zojuist ingevoegde woorden weer te verwijderen.Het kopiëren van meerdere woorden, of zelfs hele regels gaat op precies dezelfde manier. Je kunt tekst ook verplaatsen: selecteer eerst de tekst en voer daarna het commando CTRL-W uit. De oorspronkelijke tekst verdwijnt dan eerst, maar met behulp van de middelste muisknop kun je de tekst weer invoegen op de plaats waar jij dat wilt.
:
Klik op de 'a' van 'avondje' op de derde regel en houdt de muisknop ingedrukt. Beweeg (nog steeds met de muisknop ingedrukt) de muis zodanig dat de muis-cursor naar de spatie achter 'avondje' wijst. Laat de knop los. Druk op CTRL-W. Beweeg daarna de cursor in de file (met de pijltjestoetsen of de muis). Je ziet dat het gemarkeerde woord verdwenen is.Klik met de middelste muisknop op de spatie achter het woord 'schijnt' op de eerste regel.
Naast verplaatsen en kopiëren kun je op deze manier ook tekst wissen, door de laatste stap bij verplaatsen weg te laten. Je wist dan tekst zonder het ergens weer tussen te voegen. In het algemeen gaat het verplaatsen/kopiëren/wissen van tekst dus zo:
:
Zorg ervoor dat de zesde regel de vierde regel wordt:
Verplaats de regels 1 t/m 3 naar het eind van het liedje.i
Het verwijderen van enkele woorden of een regel kan ook heel handig met de volgende toetscombinaties:META-BACKSPACE wis het vorige woord
META-DELETE wis het volgende woord
CTRL-u wis een regel
i
Je kunt elk willekeurig commando automatisch x keer uit laten voeren, door vooraf META-x in te tikken. Bijvoorbeeld: META-5 BACKSPACE wist vijf karakters, META-12 DELETE wist 12 karakters.Dit is handig voor het undo commando: META-6 Ctrl-_ maakt de laatste 6 wijzigingen ongedaan.
Woorden vervangen
Soms wil je in de tekst een woord door een ander woord vervangen. Dat kan met META-%
:
Vervang alle woorden 'de' door 'deze'. Woorden zoekenZoeken naar een woord in de tekst kan met CTRL-S
:
Sla het bestand op en log uit Een nieuwe file makenJe kunt een nieuwe file creëren door de naam van een niet-bestaande file aan de editor op te geven.
7
ipe xyz:
Je komt in de (geheel lege) file xyz terecht. Tik één of twee regels onzin in en bewaar het bestand. Overtuig je ervan dat de file xyz met deze inhoud nu daadwerkelijk bestaat.
Het is met Emacs heel eenvoudig met meerdere files tegelijk te werken. Als je een tweede file opent zonder de eerste te sluiten dan blijft de eerste file ook nog open. Gebruik hiervoor het commando CTRL-x CTRL-F. Typ de naam in van de file die je wilt openen.
Als je klikt op Buffers in het menu zie je daar beide files staan. Door met je muis naar de file te gaan waar je nu in wilt werken wordt deze geselecteerd en zie je op het scherm de tweede file verschijnen. Op dezelfde manier kun je weer terug gaan naar de eerste file .
In MS-DOS en Windows is elk diskettestation en elke harde schijf een apart filesysteem. Onder Unix is er maar één systeem met de root als basis. Eventuele andere systemen kunnen daaraan worden gekoppeld. De technische term daarvoor is mounten. Daarvoor bestaan commando's, die alleen door de afdeling systeembeheer kunnen worden gebruikt.
Toch heb je wel de mogelijkheid om een floppydrive aan het bestaande filesysteem te koppelen Dit gaat als volgt:
:
Stop een floppy in het diskettestation van workstation7
volcheckJe hoort het diskette station draaien en de diskette wordt gemount. Je hebt het filesysteem nu uitgebreid met de opslagcapaciteit van je floppy. De inhoud van de diskette vind je in de directory /floppy/floppy0. Met die directory ga je precies zo om als met andere Unix files.
Je kunt nu bijvoorbeeld files kopiëren van een willekeurige plaats in het filesysteem naar je floppy (of andersom) via de bekende Unix commando's en je kunt binnen die floppy-directory ook weer nieuwe directories maken enzovoort.
Als je klaar bent met werken op de floppy wil je natuurlijk de floppy meenemen
:
Zorg dat je de directory /floppy/floppy0 hebt verlaten, want een directory waar je op dat moment in bezig bent kun je niet unmounten.7
ejectDe diskette komt naar buiten.
Je hebt al kennis gemaakt met een groot aantal commando's in UNIX. Vooral in het begin zul je met deze commando's voldoende uit de voeten kunnen. Na verloop van tijd zul je echter merken dat je sommige handelingen te vaak moet uitvoeren of een aantal commando's achter elkaar moet intypen. Dit wordt al snel vervelend. In deze gevallen is het handig om een shell-script te schrijven dat deze handelingen voor je kan uitvoeren.
Een shell-script wordt geschreven in de editor, waarna deze file door UNIX wordt aangeroepen en uitgevoerd. Net zoals je dat met een willekeurig commando als grep of sort kunt doen, kun je tegen de shell zeggen dat zijn invoer uit een file komt en niet van het toetsenbord.
Eigenlijk is een shell-script dus niets meer dan een file met tekst, maar deze tekst moet wel aan bepaalde regels voldoen: het moet een syntactische structuur bezitten, zodat het voor UNIX duidelijk is dat het om een script gaat. UNIX kan het shell-script dan lezen, de commando's interpreteren en zorgen dat deze commando's worden uitgevoerd. Op deze manier gebruik je de shell (zowel sh als bash) dus niet alleen als een programma dat je commando's interpreteert, maar ook als programmeertaal. Op deze manier kun je lange, moeilijk te onthouden commando's of een serie commando's afkorten tot enkele letters.
Een zeer eenvoudig shell-scriptWe hebben al eens de commando's date en who gecombineerd (zie hoofdstuk 9: Meer commando's). Wanneer je deze informatie wilt hebben, maar je hebt geen zin om de commando's steeds in te tikken, dan kun je hiervan een shell-script maken.
:
Start de shell:
Start ook de editor Emacs (commando ipe)en zorg ervoor dat de windows van de shell en Emacs tegelijk op je scherm leesbaar zijn. Pas hiervoor zonodig de grootte van de windows aan.:
Typ in de editor onderstaande tekst letterlijk over en bewaar de file onder de naam datetime in de directory inlcomp.who
date
:
Ga naar de shell. Zorg ervoor dat je in de directory inlcomp staat.7
sh datetimeMet dit commando run je het script in de shell. Met het commando sh roep je eerst de shell aan, die het shell-script datetime voor je uitvoert. De gevraagde gegevens worden op je scherm gezet. Op zich bespaart dit shell-script je niet heel veel tijd (je moet nu zelfs meer letters intypen!), maar het geeft wel in een notendop de werking van een shell-script weer.
In shell-scripts (en in computerprogramma's in het algemeen) wordt veel met variabelen gewerkt. Een variabele is een plaats waar een waarde kan worden opgeslagen. Deze waarde kan van geval tot geval verschillen, afhankelijk van de keuze van de gebruiker. Een variabele begint altijd met een letter, gevolgd door een combinatie van letters, cijfers of andere tekens.
Binnen UNIX zijn al een groot aantal standaard variabelen in gebruik, deze worden in hoofdletters geschreven. Daarnaast kun je zelf in je shell-scripts variabelen definiëren, wanneer je kleine letters gebruikt ontstaan er geen problemen met de standaard gedefinieerde variabelen.
:
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam welkom in de directory inlcomp.
echo Wat is je naam?
read antwoord
echo Hallo $antwoord, welkom bij Inleiding Computergebruik
:
Run het shell-script welkom. Beantwoord de vraag die je gesteld wordt.Dit shell-script maakt gebruik van de variabele antwoord.
$antwoord geeft aan dat de waarde moet worden genomen van de variabele antwoord.
Het commando echo drukt altijd het argument (datgene dat er achter staat) af.
Wanneer je een fout hebt gemaakt in het overtypen, dan verschijnt er een foutmelding op het scherm. Probeer de fout te herstellen en bewaar de file weer. Run het shell-script opnieuw. Wanneer je de foutmelding niet begrijpt of de oplossing niet weet vraag dan je practicumbegeleider of een medestudent om je even te helpen.
:
Probeer nu zelf de shell-script uit te breiden met de volgende vragen: hoe oud ben je, waar woon je en welke studierichting doe je? Verzin zelf leuke reacties op de antwoorden die je in moet voeren. Bewaar en run de script.i
Voor verschillende soorten shells (sh, csh, ksh enz.) kan de werking anders zijn. Studenten Wiskunde & Informatica hebben steeds te maken met wat beschreven staat voor de Bourne shell (sh)!Wanneer je een shell-script wilt uitvoeren typ je nu steeds sh gevolgd door de filenaam. Wanneer je de file executable maakt hoef je alleen nog maar de filenaam in te typen. Het executable maken van een file gaat door middel van het commando chmod 700 of chmod +x. Beide commando's hebben dezelfde werking, namelijk ervoor zorgen dat de file nu door de shell uitvoerbaar (executable) is. Een script werkt, als je het executable hebt gemaakt, dus op dezelfde manier als een Unix-commando.
7
chmod 700 welkomHet intypen van de naam van de file is nu voldoende om het shell-script uit te voeren.
7
welkomDe file welkom uit de vorige paragraaf moet voordat die kan worden uitgevoerd wel staan in de directory waar je op dat moment bent. Als je niet bent in de directory waar de file staat dan kan de shell je opdracht niet vinden en komt er een foutmelding:
:
Ga naar je home-directory.7
welkom
Je kunt er echter voor zorgen dat je vanuit elke plaats een (zelfgemaakt) commando kunt uitvoeren door de file waarin het commando staat te verplaatsen naar de subdirectory met de naam bin in je home-directory. Als die directory er nog niet is moet je die eerst maken. De shell zoekt standaard op een aantal plaatsen waar commando's zouden kunnen staan, en één daarvan is je bin (bin staat voor binary) directory.
:
Ga na of je in je home-directory een subdirectory hebt met de naam bin. Maak deze directory zonodig aan.:
Verplaats de shell-scripts simpel en gesprek naar de directory bin. Voer beide shell-scripts (als je in de directory bin staat) een keer uit om te controleren of ze nog werken.:
Ga naar je home-directory.7
welkomJe merkt dat het shell-script nu wel werkt.
Als je wilt weten op welke plaatsen de shell zoekt kun je dat opvragen door te kijken naar de waarde van de variabele PATH.
7
echo $PATHJe ziet dan, gescheiden door ':' de locaties waarin de shell naar commando's zoekt. Tezamen vormen ze de waarde van de variabele PATH.
Voor de duidelijkheid: onderstaand commando drukt alleen het woordje PATH af.
7
echo PATHi
Als je de waarde van een variabele wilt gebruiken moet je dus de naam van de variabele vooraf laten gaan door een $-teken.Je kunt de waarde van de PATH-variabele, en ook die van allerlei andere variabelen, zelf instellen.
Het meest gebruikelijk is dat te doen door allerlei waarden die bepalen hoe jij de shell wilt gebruiken in te stellen in de file .profile die zich in je home-directory bevindt. De commando's die in die file staan worden uitgevoerd als je inlogt, en de dan ingestelde waarden gelden dan verder voor de duur van de sessie, tenzij je ze tussendoor weer verandert. Je kunt de file .profile op de gebruikelijke manier met de editor bewerken.
Je kunt, net als bij bestaande UNIX-commando's, argumenten meegeven aan een shell-script. Wanneer het commando of shell-script wordt uitgevoerd wordt de waarde van de argumenten meegenomen bij het berekenen van het antwoord.
:
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam showarg in de directory bin.echo Het aantal argumenten is $#
echo Het eerste argument is $1
echo Het tweede argument is $2
echo Het derde argument is $3
7
sh showarg jan piet (wanneer je het shell-script eerst executable hebt gemaakt typ dan showarg jan piet)Je voert hier het commando showarg uit met twee argumenten: argument jan en argument piet.
De waarden van deze argumenten worden opgeslagen in de parameters $1 en $2. Bij dit commando is er geen derde argument, deze krijgt dan ook geen waarde. Het totaal aantal argumenten wordt geteld en bevindt zich in $#.
7
sh showarg jan piet klaasNu is er ook een derde argument. De waarde wordt opgeslagen in parameter $3.
Met behulp van de variabelen en/of parameters kun je in het shell-script keuzes maken.
:
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam moeilijk in de directory bin.echo Vind je shell-scripts schrijven moeilijk? Typ ja of nee.
read antwoord
if test $antwoord = ja
then
echo Je hebt $antwoord ingetikt. Je vindt het moeilijk
else
echo Je hebt $antwoord ingetikt. Je vindt het niet moeilijk
fi
:
Run shell-script moeilijk. Beantwoord de vraag eerst met ja. Run het script daarna nog een keer met het antwoord nee.:
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam verwijder in de directory bin.echo Wil je echt $1 verwijderen?
read antwoord
if test $antwoord = ja
then
echo $1 is verwijderd!
rm $1
else
echo dan verwijder ik niets
fi
7
sh verwijder moeilijkWanneer je 'ja' invoert wordt het shell-script moeilijk verwijderd.
De variabele test is hier het hulpmiddel dat een berekening uitvoert over wat er achter staat, dwz. kijkt of dat waar of niet waar is. Op grond van de berekende waarheidswaarde kiest het script de actie die tussen then en else staat (in het geval van true) of de actie die tussen else en fi staat, in het geval van false.
:
test kan ook voor je kijken of een file, waarvan je de naam als argument meegeeft, wel of niet bestaat. Ga na hoe je dat moet doen.Een andere mogelijkheid om keuzes te maken is de case functie. Daarbij wordt datgene wat na het commando case staat vergeleken met elk van de patronen in de rij die volgt op het woordje in.
:
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam stoplight in de directory bin. Test of het shell-script naar behoren werkt.echo Geef een kleur
read stoplicht
case $stoplicht in
rood) echo STOP ;;
oranje) echo Stoppen als het kan, anders doorrijden ;;
groen) echo Doorrijden ;;
blauw|bruin|paars) echo Dit zijn geen stoplichtkleuren! ;;
esac
i
Commando's als if en case dien je altijd op een goede manier af te sluiten, zodat de computer weet dat hij niet verder hoeft te zoeken naar meer keuzemogelijkheden. Het einde van een if-statement wordt aangegeven met fi, het einde van een case-statement met esac. (de commando's achterstevoren gelezen).7
sh showarg:
Het script showarg dat je eerder hebt gemaakt werkt niet helemaal naar behoren. Als je geen argumenten meegeeft wordt toch drie keer een regel begonnen over de waarde van een argument, zonder dat het script er iets achter kan invullen. Kun je met behulp van case het script showarg zo veranderen, dat het eerst meldt hoeveel argumenten er zijn, en daarna:- bij 0 argumenten klaar is
- bij 1 argument meldt: "het enige argument is ...."
- bij 2 argumenten: "het eerste argument is ......"
"het tweede argument is ..."
- bij 3 of 4 argumenten:
"meer dan twee argumenten mag niet"
Door middel van het commando while kun je de shell één of meer opdrachten laten herhalen, zolang aan een bepaalde voorwaarde is voldaan.
7
Typ in de editor onderstaande shell-script letterlijk over en bewaar de file onder de naam herhalen in de directory bin.antwoord="ja"
while test $antwoord = "ja"
do
echo "OK, nog een keer"
echo "Moet ik nog steeds doorgaan?"
read antwoord
done
Deze shell-script voert de regels tussen do en done uit zolang de gebruiker als antwoord ja intikt.
In plaats van de regel
while test $antwoord = "ja"
mag je ook schrijven:
while [ $antwoord = "ja" ]
Zowel de functie test als de vierkante haken zorgen ervoor dat de uitdrukking $antwoord = "ja" wordt geëvalueerd. Op grond van de uitkomst (true of false) wordt besloten of er nog moet worden doorgegaan met herhalen.
:
Schrijf nu zelf een script dat de gebruiker steeds om twee dingen vraagt: een zoekterm en de naam van een file. Als de laatste de naam is van een bestaande file uit de huidige directory, zoekt je script op in hoeveel regels van de file de zoekterm voorkomt en drukt dat aantal af. Dit proces wordt steeds herhaald totdat de gebruiker de naam van een niet-bestaande file opgeeft. Het script geeft dan een melding en stopt.HINT: je kunt van een regel een aantal karakters afhakken met behulp van het 'cut' commando. Kijk in de manual hoe dat precies moet.
Met shell scripts kan nog veel meer. Het is zelfs mogelijk om complete programma's te schrijven met specifieke shell commando's samen met gewone UNIX commando's. Het voert echter te ver om hier dieper op in te gaan; zie voor meer informatie de manual of een andere uitgebreide handleiding over UNIX.
Niet iedereen mag zomaar alles doen met elke file. Als je een file creëert ben je eigenaar en kan je zelf bepalen wie er wat mee mag doen. Voor dat doel is de UNIX-wereld verdeeld in drie categorieën:
Voor elk van deze categorieën kun je apart opgeven wat ze wel of niet met jouw files mogen doen. Er zijn twee werkwijzen om de protectie-mode van je directories en files in te stellen, ze komen hier beide aan de orde. Kies voor het instellen van de protectie-modes de werkwijze die jij het prettigst vindt. Raadpleeg ook eens de manual page over dit onderwerp (man chmod)!
:
ga binnen je home-directory naar de directory inlcomp7
ls -alJe krijgt nu een overzicht van de bestanden met veel informatie.
Voor iedere file staat een aanduiding in de vorm "-rw-r--r--''. Deze aanduiding geeft aan welke gebruikers wat mogen doen met de file. Hierbij staat r voor read (lezen), w voor write (schrijven) en x voor execute (uitvoeren). Deze regel van 10 karakters heeft een eerste karakter die aangeeft of het een directory (d) is of niet (-), De volgende negen karakters wordt onderverdeeld in 3 stukjes van 3 karakters:
Met het commando chmod kun je deze bescherming veranderen. chmod who=permission filenaam verandert de protection mode van de file genaamd filenaam. Hierbij is who u (voor user), g (voor group), o (voor others) en a (voor all).
Bijvoorbeeld:
u=rw : maak lees en schrijfbaar voor jezelf.
g=rx : maak lees en uitvoerbaar voor iedereen in jouw groep.
ug= : jij en iedereen in je groep kunnen de file niet lezen, schrijven en
uitvoeren.
ugo=rwx : maak leesbaar, schrijfbaar en uitvoerbaar voor iedereen (gevaarlijk!).
a=r : maak leesbaar voor iedereen
7
chmod u= maan7
chmod g=rw maan7
chmod o=r maan7
ls -lNu blijkt de file leesbaar te zijn voor derden, lees- en beschrijfbaar voor groepsleden maar niet lees- of beschrijfbaar voor jezelf!
7
ipe maanJe krijgt nu de mededeling dat de file wel bestaat, maar dat je hem niet mag lezen.
Uiteraard mag je alleen de mode veranderen van files waarvan je zelf eigenaar bent. Het is verstandig om files alleen voor jezelf lees- en beschrijfbaar te houden, zodat anderen niet je files kunnen verpesten. Daarom veranderen we de protection mode weer:
7
chmod ugo= maan7
chmod u=rw maan:
Controleer dat je de file maan weer kunt lezen en veranderingen kunt aanbrengen. Werkwijze 2Bij methode twee maken we gebruik van de binaire notatie van de protectie-modes. Voor elk van de hierboven aangegeven categorieën eigenaren kunt je de protectie-mode instellen door middel van een getal van 0 tot 7.
Het handigste is om je dat getal voor te stellen in binaire notatie (zo wordt het natuurlijk ook opgeslagen); dan gaat het dus om getallen tussen 000 en 111. Stel dat voor een bepaalde categorie het meest rechtse binaire cijfer een 1 (dat staat voor het voorkomen van 1 in de binaire ontwikkeling) is, dan mogen de personen uit die categorie de file gebruiken (= execute) en als het cijfer een 0 is dan mag dat niet.
Als het middelste binaire cijfer een 1 is (dat staat dus voor het voorkomen van 2 in de binaire ontwikkeling) mag je in de file schrijven (= write). Met 0 mag je weer niet schrijven.
Het meest linkse cijfer (dat staat voor het voorkomen van 4 in de binaire ontwikkeling) bepaalt op dezelfde manier of je in de file mag lezen (= read) of niet: 1 is wel lezen, 0 is niet lezen.
Als het binaire getal dus 101 is mag de betreffende categorie de file gebruiken en er in lezen, maar er niet in schrijven.
Voor elk van de drie categorieën gebruikers ontstaat er zo dus een binair getal. Deze drie binaire getallen worden weer vertaald naar de decimale notatie: de 101 wordt dan een 5. Omdat voor alle drie de categorieën zo'n getal wordt bepaald krijgen we dus een rijtje van drie octale cijfers, waarvan het eerste gaat over de mogelijkheden van de eigenaar, de tweede over die van de andere leden van zijn groep, en het derde over alle andere personen. Deze drie octale cijfers vormen samen de protectiemode.
Onderstaand ter verduidelijking een tabel met enkele codes in de binaire en octale notatie en de protectie-mode.
|
Binaire notatie |
Octaal getal |
Protectiemode |
Betekenis |
|
000 000 000 |
000 |
--------- |
Niemand mag lezen, schrijven of uitvoeren (komt niet voor??) |
|
100 100 100 |
444 |
r--r--r-- |
Iedereen mag lezen, maar niemand mag schrijven of uitvoeren |
|
110 100 100 |
644 |
rw-r—r-- |
Eigenaar mag lezen en schrijven, anderen alleen lezen |
|
111 100 100 |
744 |
rwxr—r-- |
Eigenaar mag lezen, schrijven en uitvoeren, anderen alleen lezen |
|
110 110 100 |
664 |
rw-rw-r-- |
Eigenaar en groep mogen lezen en schrijven, rest alleen lezen |
|
111 111 111 |
777 |
Rwxrwxrwx |
Iedereen mag lezen, schrijven en uitvoeren. GEVAARLIJK!! |
Je kunt als eigenaar de protectiemode weer zelf instellen door middel van het commando chmod.
7
chmod 444 maan:
Verander de protectie-mode van de file maan zodanig dat de eigenaar mag lezen en schrijven en de andere categorieën alleen mogen lezen.Deze sectie is bedoeld om gebruikt te worden met de programmatuur die geïnstalleerd is op de Mac computers van de Divisie Scheikunde in de computerruimtes P3.23.
Als je de Mac net hebt opgestart zie je een blauw veld, met daarop twee harddisk icoontjes, een vuilnisvat en een horizontale balk bovenaan het scherm.
i
Als het scherm donker is en de controlelampjes van de computer en het scherm zijn allebei groen, dan is waarschijnlijk de screensaver actief. Beweeg de muis even en wacht enige tijd. De screensaver reageert niet op toetsaanslagen.
De balk bovenaan bevat het menu van het programma dat actief is. In het begin is dat de Finder (anders dan de naam suggereert kun je hier veel meer mee doen dan alleen files vinden). Bij Windows hebben de vensters die bij een programma horen een eigen menubalk, op de Mac is dat niet zo. De bovenste balk bevat de menu's van het programma dat op dit moment gebruikt wordt. Je kunt van het ene programma naar het andere springen door op een bijbehorend venster te klikken, of via het
icoontje rechts boven in de balk.
Enkele eenvoudige programma's kun je opstarten via het Apple icoontje
links boven.
:
Start de Calculator en spring heen en weer tussen de Calculator en de Finder.Vensters kun je afsluiten door op het blokje linksboven in de rand van het venster te klikken (bij Microsoft Windows zit die functie rechtsboven!) Het afsluiten van alle vensters van een programma betekent nog niet dat het programma beëindigd is. Gebruik daarvoor Fileà Quit of ð Q.
Op de schijf System, de schijf Programs en de file server zitten nog meer programma's.
Als je dubbel-klikt op een disk vind je een stel folders (=directories) en files. Files kunnen, net als onder Windows, verplaatst worden door ze met de muis te verslepen. Je kunt echter niets aan de schijf Programs veranderen.
Om files te kopiëren houd je tijdens het slepen de Option(Alt) toets en de muistoets ingedrukt.
:
Zet Helpà Show Balloons aan en loop langs de menu-items van de Finder. Sommige items die grijs zijn gekleurd worden pas zwart (=toegestaan) als je een file, een folder of een disk selecteert. Bekijk welke items wanneer toegestaan zijn.Files kun je zoeken op naam, grootte, aanmaakdatum en nog wat andere uiterlijke eigenschappen met behulp van het programma Sherlock2 (onder het
menu).
Je kunt met Sherlock2 ook files zoeken die een bepaald woord bevatten. Omdat dit een langduriger proces is dan het zoeken op uiterlijke kenmerken kun je het zoeken beperken tot een aantal files (of folders met files) die je met de Finder geselecteerd hebt (met Shift-klik, of door een kadertje om een aantal files te tekenen). Om een hele schijf (volume) te doorzoeken moet dat volume geïndexeerd worden, wat op zichzelf een tijdrovend karwei is. Als je veel zoekopdrachten uit wilt voeren is dat wel de moeite waard.
De printer in zaal P3.23 is met de Mac verbonden via het netwerk.
Selecteer de Chooser in het
menu en controleer of Appletalk "Active" is. Kies dan in de Chooser dialoog de zone Chemie, printer type Laserwriter 8 en printer Chemie-P323 Spooler. Je kunt nu vanuit allerlei applicaties printen. De printer is gevuld met A4 papier, en zorgt dus, via Fileà
Page Setup, dat je applicatie op A4 formaat print.
Je logt uit via Specialà Log Out .