1 Computergebruik: oefeningenreeks Pictogrammen: Voor elke oefening wordt door één of meerdere pictogrammen aangegeven of ze kan worden uitgevoerd op ...
Pictogrammen: Voor elke oefening wordt door ´e´en of meerdere pictogrammen aangegeven of ze kan worden uitgevoerd op EduServ of in Knoppix. Oefeningen waarvoor zowel Knoppix als EduServ vereist zijn, worden aangeduid met een apart pictogram. Daarnaast geeft een bijkomend pictogram aan of de oefening deel uitmaakt van de opgelegde oefeningen die tijdens de evaluaties kunnen bevraagd worden. Dergelijke opgelegde oefeningen kunnen steeds uitgevoerd worden op EduServ. Het gebruik van Knoppix is dus niet verplicht, maar Knoppix kan eventueel wel vlotter werken. Wanneer nodig kan je vanuit Knoppix ook inloggen op EduServ door het commando ssh -l eduserv.ugent.be uit te voeren. Dat commando zal echter enkel werken indien Knoppix je internetverbinding kan activeren, wat spijtig genoeg in de praktijk niet altijd het geval is. Bovendien wordt er in sommige oefeningen gewerkt met bestanden die je eerst moet downloaden via internet. Je gebruikt dus best zoveel mogelijk EduServ als je geen internettoegang hebt in Knoppix. De volgende tabel geeft een overzicht van de betekenis van de gebruikte pictogrammen: E Deze oefening kan je op EduServ maken. K Deze oefening kan je in Knoppix maken. E&K Deze oefening vereist zowel EduServ als Knoppix. Opgelegde oefening die tijdens de evaluaties aan bod kan komen.
?
Indien gewenst kan je een Knoppix-CD verkrijgen bij een begeleid(st)er voor 2. Studenten die beschikken over een computer die CD/DVD’s kan schrijven, kunnen Knoppix ook downloaden op http://www.knoppix.com. Evaluatie: Tijdens de werkcolleges mogen de studenten onderling van gedachten wisselen wanneer ze hun oefeningen aan het afwerken zijn. Ter evaluatie van de opgelegde oefeningen van deze oefeningenreeks moet elke student zich echter individueel aanbieden bij een begeleid(st)er. De volgende planning wordt vooropgesteld: 03/10 10/10 17/10
oefeningen 1.* oefeningen 2.* oefeningen 3.*
24/10 31/10 07/11
oefeningen 4.* oefeningen 5.* EVALUATIE
V´o´or zeven november (dus ten laatste op zes november om 24u) moet je alle aangemaakte bestanden indienen. In de oefeningenles van zeven november zal er dan minstens ´e´en opgelegde oefening worden gekozen, waarvoor de student zijn resultaat moet laten zien aan de begeleid(st)er. Door middel van bijkomende vragen zal worden gepeild naar het beheersen van de vaardigheden van de student. Het spreekt vanzelf dat ook niet-opgelegde oefeningen ter nazicht mogen voorgelegd worden. Indienen: Alle aangemaakte bestanden, inclusief het cg oefreeks1.txt bestand (zie oefening 1.4), moeten als volgt samengevoegd worden in een ZIP-bestand: zip <stamnummer>.zip 1
waarbij <stamnummer> het nummer is dat je terugvindt op je studentenkaart. Windows gebruikers kunnen het zo bekomen bestand van EduServ naar hun lokale schijf kopi¨eren met behulp van WinSCP (http://helpdesk.ugent.be/webhosting/bestand scp.php). Als je Linux gebruikt, dan kan je dat met het commando scp doen. Daarna kan je het ZIP-bestand dan indienen via de dropbox op Minerva (http://minerva.ugent.be). Regels: We hanteren de volgende regels bij de evaluatie: • Er wordt normalerwijze ´e´en oefening uitgekozen voor evaluatie. Wanneer die oefening ondermaats is, dan kan er echter nog een tweede oefeningen ge¨evalueerd worden voor 2/3 van de punten. • Breng zo snel mogelijk een begeleid(st)er op de hoogte als je je oefeningen niet op tijd kan laten evalueren. Je kan dan immers later nog een evaluatie laten doen voor de helft van de punten. Enkel wanneer je een doktersbriefje kan voorleggen, is het mogelijk om na zeven november nog het volledige aantal punten te verdienen.
2
Oefening 1.1
E K
Open een terminal en probeer vervolgens te achterhalen wat de volgende commando’s doen: date cal sleep time history clear Dat kan (onder andere) op de volgende drie manieren: 1. Het commando uitvoeren en nagaan wat er gebeurt. 2. De handleiding van een commando bekijken door man uit te voeren. 3. Gebruik maken van de --help of -h optie: --help -h Hou er wel rekening mee dat niet alle commando’s een “help-optie” voorzien. Bepaal nu voor elk van de volgende doelen welk commando uit de bovenstaande lijst er kan gebruikt worden om het te verwezenlijken, en welke argumenten en/of vlaggen/opties er daarvoor moeten meegegeven worden: • Een kalender voor het (volledige) huidige jaar uitschrijven. • E´en minuut wachten. • Meten hoelang er effectief gewacht wordt wanneer de opdracht wordt gegeven om ´e´en minuut te wachten. • Vier lijnen uitschrijven die elk bestaan uit ´e´en getal en waarbij de getallen corresponderen met de dag, de maand, het uur en de minuten van dit moment. • De drie laatste commando’s tonen.
Oefening 1.2
E
Experimenteer even met de volgende commando’s: lynx pine 3
who finger talk Gebruik de kennis die je op die manier verwerft om • een zoekopdracht uit te voeren op de website van Google, • een e-mail te versturen naar jezelf en • te chatten met een medestudent(e) via EduServ. Het commando exit kan daarna gebruikt worden om terug uit te loggen.
Oefening 1.3
E&K
Voer de volgende commando’s uit in een Knoppix-terminal: hostname arch uname -a uptime top Log vervolgens in op EduServ, voer ook daar de bovenstaande commando’s uit en log daarna terug uit. Welke informatie wordt er teruggeven door de commando’s? Is de uitvoer gelijk op beide systemen?
Oefening 1.4
E
?
Voer het commando wget http://users.ugent.be/~klbostee/cg/practdb.txt uit en open daarna het bestand practdb.txt met de editor vi: vi practdb.txt Leid het formaat van een regel in practdb.txt af uit de reeds bestaande regels en voeg vervolgens enkele nieuwe regels van de juiste vorm toe. Voor uitleg in verband met de werking van vi kan je hoofdstuk 4 van het boek raadplegen. Maak ook eens gebruik van pico en emacs om een aantal regels toe te voegen: pico practdb.txt emacs practdb.txt 4
Welke editor vind je het gemakkelijkst om mee te werken, en welke van de drie biedt de meeste functionaliteit denk je? Open nu een bijkomende terminal en gebruik vervolgens een editor naar keuze om het (nieuwe) bestand cg oefreeks1.txt te openen. Hou je resultaten van de volgende oefeningen bij in dat bestand. Zorg ervoor dat op het einde van de oefeningenles alle wijzingen aan cg oefreeks1.txt bewaard worden vooraleer de editor afgesloten wordt!
Oefening 1.5
E
?
OPGELET! Door reorganisatie van de netwerkschijven is de opgave lichtjes aangepast sinds 10/10/06 (tweede oefeningenles). Voor studenten die deze oefening in de eerste oefeningenles opgelost hebben, blijft de eerste opgaveversie bestaan. Alle andere studenten volgen best de tweede versie. Schrijf in je oplossingenbestand welke versie je gevolgd hebt. Versie 03/10/06 Op pagina 43 in het boek wordt er uitgelegd hoe reguliere expressies kunnen gebruikt worden om te zoeken in de teksteditor vi. In deze opgave wordt het opstellen van dergelijke reguliere expressies ingeoefend. We gebruiken daarvoor de regel-geori¨enteerde editor ed. Hoewel het normalerwijze voor deze oefening niet nodig is, kan je meer uitleg over ed vinden in hoofstuk 13 van het boek. Open het bestand /etc/passwd door het commando ed /etc/passwd uit te voeren. Als je nu een reguliere expressies ingeeft (en vervolgens op <ENTER> duwt), dan zal ed de overeenkomstige regels van het bestand uitschrijven. Zo zal de expressie /fwet de eerste regel teruggeven waarin “fwet” voorkomt. Om alle regels te vinden die “fwet” bevatten, moet er een g voor de expressie geplaatst worden: g/fwet. Het afsluiten van ed gebeurt door het commando q in te geven. De regels in /etc/passwd zijn van de vorm: :x: : : ::<shell>
Geef reguliere expressies waarvoor de volgende regels uitgeschreven worden (´e´en expressie per puntje): • De eerste regel waarbij de gebruikersnaam begint met “ab”. • De eerste regel waarbij de gebruikersnaam eindigt op “ab”. • De eerste regel waarbij de voornaam niet eindigt op een medeklinker. • Alle regels waarbij zowel de gebruiker-id als de groep-id even is. • Alle regels die corresponderen met personen van de faculteit wetenschappen, waarbij de volledige naam uit drie delen bestaat (bijvoorbeeld Marleen de Veij). Probeer de expressies zo eenvoudig mogelijk te houden, en maak geen veronderstellingen over de lengtes van de velden in een regel. Log terug uit als je klaar bent met deze oefening. Versie 10/10/06 Alleen de laatste opgave is aangepast. “Alle regels die corresponderen met personen waarvan 5
de gebruikersnaam met dezelfde letter begint als jouw gebruikersnaam, en waarbij de volledige naam uit drie delen bestaat.”
Oefening 1.6
E K
?
Open opnieuw het bestand practdb.txt met vi. We gaan nu gebruik maken van de substitutiefunctionaliteit van vi. Een commando van de vorm :, s/<patroon1> /<patroon2> / zorgt ervoor dat in regel tot en met telkens het eerste voorkomen van <patroon1> vervangen wordt door <patroon2> . Als je alle voorkomens van <patroon1> wil vervangen door <patroon2> , dan moet je achteraan een g toevoegen: :, s/<patroon1> /<patroon2> /g Zo zal :1,10s/a/A/ bijvoorbeeld in de eerste tien regels telkens de eerste “a” vervangen door een “A”, terwijl :1,10s/a/A/g alle “a”’s in de eerste tien regels zal vervangen door een “A”. Verder zijn de volgende zaken voor deze oefening ook nuttig om weten: • Voor en kan je ook $, wat staat voor het nummer van de laatste regel, of een reguliere expressie gebruiken. Als je alle “a”’s vanaf de eerste regel die begint met “b” wil vervangen door een “A” dan kan je bijvoorbeeld het commando :/^b/,$s/a/A/g gebruiken. • Bij substitutie kan er ook gebruik gemaakt worden van veldjes, zoals uitgelegd in sectie 13.14 van het boek. • <patroon2> kan uit meerdere lijnen bestaan. De verschillende lijnen moeten dan gescheiden worden door ^M, wat je ingeeft als ^V^M ( + V gevolgd door + M) in vi. Geef nu (zo eenvoudig mogelijke) substitutie-commando’s die de volgende zaken doen (´e´en commando per puntje): • De eerste en de tweede naam omwisselen van plaats, bijvoorbeeld: (N1=Van lier),(N2=De wale) wordt (N1=De wale),(N2=Van lier) • Elk “?” dat bij “P2” of “P3” staat vervangen door “??”, bijvoorbeeld: (P2=?),(P3=?),(P4=?) wordt (P2=??),(P3=??),(P4=?) • Haken rond de groepsnaam zetten, bijvoorbeeld: groep01 wordt (groep01). 6
• Elke regel opsplitsen in twee regels, namelijk ´e´en voor iedere student. Zo moet de regel (groep01),(N1=Van lier),(N2=De wale),(P2=G),(P3=N),(P4=?),(P5=?) bijvoorbeeld omgezet worden in (groep01),(N1=Van lier),(P2=G),(P3=N),(P4=?),(P5=?) (groep01),(N2=De wale),(P2=G),(P3=N),(P4=?),(P5=?)
Oefening 1.7
E K
?
Voer het commando echo COMPUTERGEBRUIK > sorteer.txt uit en open daarna het bestand sorteer.txt met vi. Probeer dan de letters van het woord “COMPUTERGEBRUIK” alfabetisch te rangschikken, zonder daarbij manueel letters te verplaatsen. Je moet dus vi het werk laten doen door gebruik te maken van (een viertal) commando’s. Tip: Ga na wat de volgende commando’s doen: :1,$ !sort :1,$j! In Knoppix kan je het laatste commando ook als volgt ingeven: :1,$s/\n//
Oefening 1.8
E K
In deze opgave beschouwen we een zeer primitieve vorm van encryptie. Voer het commando wget http://users.ugent.be/~klbostee/cg/perl regexps.txt uit en open het bestand perl regexps.txt met vi. Gebruik dan (in de opgegeven volgorde) de substitutie-commando’s 1,$s/\(.\)\1/&&/g 1,$s/\(.\)\(.\)\2\2\2/\2\2\2\1\2/g 1,$s/\(.\)\(.\)\(.\)\(.\)/\3\1\4\2/g 1,$s/\(...\)\(...\)/\2\1/g om het bestand onleesbaar te maken. Welke vier substitutie-commando’s moeten er daarna ingegeven worden om het bestand in zijn originele staat te herstellen?
7
Oefening 2.1
E K
Probeer te achterhalen wat volgende commando’s doen: pwd cd ls De bedoeling van deze oefening is zicht te krijgen op het UNIX bestandssysteem. Naast de bovenstaande commando’s zullen we daarvoor ook het commando find gebruiken. Dat commando kan aangewend worden om bepaalde directories (´e´en of meerdere) te doorzoeken. In de meest eenvoudige vorm wordt het commando als volgt gebruikt: find <padnaam> -name met andere woorden: ga op zoek naar het bestand met naam dat zich ergens in de opgegeven directory (of ´e´en van de directories daaronder) bevindt. Omdat er bij het zoeken soms veel foutmeldingen gegenereerd worden, worden die meldingen best weggeschreven in een aparte file. Dat gebeurt als volgt: find <padnaam> -name 2> foutlog Meer informatie over find kan je vinden vanaf pagina 305 in het handboek, of in de manual pages. Los nu de volgende vragen op: • Gebruik find om uit te zoeken waar commando’s zoals who, date, enz. zich bevinden. • Neem een kijkje in die map(pen). Wat zit er daar allemaal in? • Keer met behulp van ´e´en enkel commando terug naar je home-directory. Doe dit met zo weinig mogelijk tekens. • Voer het volgende commando uit: ps Kan je uit de uitvoer afleiden met welke terminal je momenteel werkt? • In hoofdstuk 8 wordt kort uitgelegd dat een randaparaat (device) binnen een UNIXsysteem voorgesteld wordt door een bestandsnaam. We noemen deze files “special files”. Voorbeelden van devices zijn diskettestations, CD-ROM-stations, harde schijven, enz. Een voorbeeld van een special file is fd0, dat het eerste diskettestation (floppy drive nummer 0) voorstelt. Zoek uit waar die special files zich bevinden. • Wat zit er allemaal in de gevonden map? Waar vind je ergens de special file voor jouw terminal? • Wat is/doet /dev/null? • Keer terug naar jouw home-directory, maar doe dit zonder rechtstreeks cd <pad home-directory>, of de oplossing uit puntje 3, te gebruiken.
8
• Zoek uit waar de paswoordgegevens (aangeduid door passwd) van alle gebruikers zich bevinden. Wat zit er nog allemaal in deze map?
Oefening 2.2
E K
Probeer te achterhalen wat volgende commando’s doen: cat pr more less ls Gebruik vervolgens de kennis die je zo verwerft om de onderstaande vragen op te lossen. • Maak de inhoud van het paswoordbestand (gevonden in de vorige oefening) zichtbaar. Doe dit op vier verschillende manieren, m.b.v. commando’s uit bovenstaande lijst. Wat is het verschil tussen de drie? • De output van twee van die commando’s rolt zeer snel over het scherm. Een eenvoudige, meer overzichtelijke manier, bestaat uit het wegschrijven van de output naar een bestand. Op pagina 77 in het handboek wordt uitgelegd hoe dit m.b.v. “I/O-redirection” kan gebeuren. Gebruik deze techniek om de inhoud van het paswoordbestand weg te schrijven naar de file paswoordmooi en zorg er voor dat de file ingedeeld is in drie kolommen, en een mooie linkermarge (vrij te kiezen) heeft. • Men kan ook met behulp van pipelining (pagina 80 in het handboek) zorgen dat de output van een commando wat overzichtelijker wordt. Zorg er voor dat de inhoud van het paswoordbestand per pagina van het scherm rolt, waarbij elke pagina voorzien is van een kopregel (naam file, datum en paginanummer). • Wanneer werd paswoordmooi voor het laatst gewijzigd? • Probeer in je home directory een harde link terminal te maken die wijst naar de special file van je terminal. Wat gebeurt er? Hoe komt dit? • Probeer hetzelfde met een symbolische link. • Geef een lijst met uitgebreide gegevens (zoals eigenaar, datum van laatste wijziging, enz) over de inhoud van je home-directory. Doe dit daarna nogmaals, maar zorg dat deze keer de symbolische links niet uitgeschreven worden. Met andere woorden, in plaats van terminal -> <padnaam special file terminal> wordt enkel terminal uitgeschreven.
9
Oefening 2.3
E
?
Cre¨eer in je home-directory op EduServ drie mappen: adresboek, verjaardagen en contactgegevens. Doe dit met ´e´en commando. Maak vervolgens drie bestanden in je home-directory: adres <jouw loginnaam> , adres buur en adres kot, waarin je resp. jouw adres, het adres van je buur thuis, en je kotadres opgeeft. Elk bestand heeft de volgende vorm: <straatnaam> (geen busnr) <postcode> Los nu de volgende vragen op: • Verplaats de files naar de map adresboek. Je mag er van uit gaan dat er verder geen bestanden zijn die beginnen met adres . Doe dit in ´e´en commando en in zo weinig mogelijk tekens. Verplaats daarna integraal de map adresboek naar de map contactgegevens. Doe hetzelfde voor de map verjaardagen. • Wie kan er de inhoud van jouw adresbestand (i.e. adres <jouw loginnaam> ) lezen? • In hoofstuk 15 (pagina 293) in het handboek wordt uitgelegd hoe de protectie van een bestand ingesteld/veranderd kan worden met behulp van het commando chmod. Kijk goed hoe de protectie van jouw home-directory, bestanden en mappen ingesteld staan. Wat is de standaard “file creation mode”? • Maak jouw home-directory volledig privaat. Controleer met je buur dat er inderdaad niemand toegang heeft. Herstel daarna alle gemaakte wijzigingen. Geef daarvoor twee mogelijke werkwijzes. • Zorg ervoor dat niemand de inhoud van de map adresboek kan doorzoeken. • Probeer de inhoud van het adresbestand van de persoon op de computer naast jou te lezen. Lukt dit nog? Zoja, hoe komt het dat dit nog steeds lukt? • Kopier jouw adresbestand samen met adres buur naar je home-directory. • Verwijder in ´e´en commando de map contactgegevens samen met alle mappen en bestanden daaronder.
Oefening 2.4
E
?
In deze oefening zullen we wat dieper ingaan op het find commando. Het volledige commando ziet er als volgt uit: find directory [directory ...] criterium [criterium ...] acties In de eerste plaats moet er gespecificeerd worden in welke directories (en onderliggende subdirectories) er gezocht moet worden. Dit mag meer dan ´e´en pad zijn. Daarna wordt er opgegeven waarnaar exact gezocht moet worden. Dit gebeurt door de zogenaamde selectie-criteria. Enkele voorbeelden zijn: -name, zoekt bestanden met een bepaalde naam
10
-mtime, zoekt bestanden die sinds een bepaalde dag niet meer aangeraakt zijn -type, zoekt bestanden van een bepaald type (bv d voor directory, f voor een gewone file) -inum, zoekt bestanden met een bepaald inode-nummer. ... Andere criteria kan je vinden in het handboek vanaf pagina 306, of in de manual pages. Finaal moeten we ook opgeven wat er juist moet gebeuren met de gevonden bestanden. Voorbeelden van zulke acties zijn -print, drukt de naam af van het bestand -exec, voert een commando uit -ok, voert een commando uit, nadat de gebruiker daar de toestemming voor gegeven heeft. Bijvoorbeeld, als er gevraagd wordt om het pad van alle files in /dev af te drukken, kan dit gebeuren via find /dev -name ’*’ -print Merk op dat we dus ook meerdere bestandsnamen kunnen opgeven, zoals gebruikelijk met behulp van *, ?, enzovoort. Aangezien de shell deze moet doorgeven aan het commando find, en ze niet zelf mag interpreteren, moeten deze tussen quotes staan. Lees eerst goed pagina 305 t.e.m. pagina 308 in het handboek (en snuister even rond in de manual pages) vooraleer je aan deze oefening begint! Geef daarna een commando voor elk van de volgende zaken: • Zoeken naar alle files onder je home-directory die in de laatste twee dagen aangepast zijn (goede kandidaten voor een back-up). • Je home-directory doorzoeken en de padnamen geven van alle files die recenter aangepast zijn dan /etc/passwd. • Uitzoeken welke .profile bestanden van de studenten waarvan de loginnaam met een zelfde letter begint als de jouwe, leesbaar zijn voor iedereen. Wat gebeurt er? • Verwijderen van alle lege files in je home-directory, zonder verdere output. (Zoek even uit wat het commando touch doet.) • Uitgebreide informatie geven (via ls -l) over de bestanden in je home-directory die jij niet kan uitvoeren. • Alle .gif files en alle bestanden waarvan de bestandsnaam niet enkel uit hoofdletters bestaat uit jouw PC map verwijderen, nadat je daar expliciet de toestemming voor gegeven hebt.
11
Oefening 2.5
E K
?
Beschouw de verzameling van patronen a b c d e f g h i j k. De reguliere expressie [a-k] zal met elk patroon uit die verzamelingen “matchen”. Bovendien “matcht” [a-k] met geen enkel ander patroon. Zoek nu voor elk van de volgende verzamelingen van patronen een dergelijke reguliere expressie: • a b c d 5 6 7 8 X Y Z • aa ab ac • ab ba aa bb • aaab aaba aaaa aabb abab abba abaa abbb acab acba acaa acbb • aab abb aAb aBb aac abc aAc aBc Probeer je expressies zo eenvoudig mogelijk te houden en controleer je oplossingen met behulp van vi.
Oefening 2.6
E K
Een zogenaamde “binaire string” is een sequentie van 0-en en 1-en, bijvoorbeeld 011011. De reguliere expressie [01][01]* “matcht” dus met elke mogelijke binaire string. Geef nu reguliere expressies die enkel “matchen” met alle binaire strings die: • eindigen op 00; • beginnen en eindigen met een 1; • het patroon 110 bevatten; • minstens drie 1-en bevatten; • minstens drie opeenvolgende 1-en bevatten. Probeer je expressies opnieuw zo eenvoudig mogelijk te houden.
Oefening 2.7
E K
?
Download de file unixboeken.txt (http://users.ugent.be/∼klbostee/cg/unixboeken.txt) met behulp van wget. Geef vi-substitutiecommando’s die de volgende zaken met dat bestand doen (´e´en substitutiecommando per puntje): • Elk voorkomen van “Unix” vervangen door “UNIX”. • Alle titels die beginnen met “UNIX” tussen ronde haken zetten. • Het jaartal-veld omwisselen met het code-veld. • De auteurs van plaats wisselen indien er twee auteurs zijn.
12
Oefening 3.1
E K
In deze oefening zullen we gebruik maken van I/O redirection. Meer informatie hierover kan je vinden in hoofdstuk 6. • Schrijf het woord ‘COMPUTEROEFENINGEN’ weg naar de file Oefeningles2.txt. • Schrijf de data uit adres buur weg in Oefeningles2.txt en zorg dat dit bestand niet overschreven wordt. Eventuele foutmeldingen worden weggeschreven in foutlog. • Schrijf de uitvoer tesamen met eventuele foutmeldingen van het commando who am i weg naar de file ikke. Welke informatie geeft dit commando? • Voer de volgende commando’s uit: sort x 2> ikke sort < x 2> ikke Wat is de bedoeling en wat stel je vast? Verklaar de verschillende output. • Download het bestand Vak1.txt (dat zich op dezelfde locatie als de andere bestanden bevindt) m.b.v. het commando wget en zorg dat onnodige output onmiddellijk in de prullenbak verdwijnt.
Oefening 3.2
E
Het outputkanaal van een bepaald commando koppelen aan het inputkanaal van een ander commando, gebeurt door pipelining. Meer informatie hierover kan je vinden in hoofdstuk 6. Geef nu commando’s voor de volgende zaken (´e´en commando per puntje): • Schrijf het aantal woorden en lijnen in ‘adres loginnaam’ weg naar het bestand Oefeningles2.txt. Deze twee getallen zijn de enige gegevens die weggeschreven moeten worden. • Schrijf de laatste 25 lijnen van /etc/passwd uit op het scherm. • Schrijf lijnen 25 t.e.m. 75 van /etc/passwd uit op het scherm. • Schrijf de tweede lijn van /etc/passwd uit op het scherm. • Voer een commando uit dat telt hoeveel files er aanwezig zijn in al jouw directories. Tips: • Het commando wc (pagina 103 in het handboek) telt regels, woorden en letters van een standaard invoer of opgegeven files. • Het commando tail (handboek pagina 106) laat het laatste stukje van een file zien. Het commando head doet iets gelijkaardig, zoals de naam wel laat vermoeden. Meer informatie over de werking van head kan je vinden in de manual pages. • Kijk even terug naar oefening 2.4 (over find).
13
Oefening 3.3
E
Met behulp van de patroonzoekers grep, egrep en fgrep kan je op een eenvoudige manier bestanden terugvinden waarin een bepaald stukje tekst voorkomt. Daarnaast bieden egrep en grep ook de mogelijkheid om naar zoekpatronen te zoeken. Een korte samenvatting van hun functionaliteit kan je vinden vanaf pagina 110 in het boek. • Gebruik grep om de lijn met jouw login gegevens in /etc/passwd te isoleren. • Geef een egrep patroon dat alle lijnen “matcht” die geen twee opeenvolgende a’s bevatten, en ´e´en voor alle lijnen die geen drie opeenvolgende a’s bevatten. Bekijk hiervoor zeker de reguliere expressies op pagina 113 en 114.
Oefening 3.4
E K
?
Geef een lijst van de permissies van alle files in jouw home-directory. Gebruik die oplossing om de verschillende permissietypes te tellen. De output kan er bijvoorbeeld als volgt uitzien: 16 -rw-r--r-2 drwx-----... 1 drwxr-xr-x Tips: • Met behulp van cut kan men een bepaald gedeelte van een regel afdrukken. Op pagina 115 in het handboek vind je meer uitleg. Twee belangrijke vlaggetjes zijn f en d. Met het eerste vlaggetje wordt een regel in velden opgedeeld; daarna werkt cut op velden i.p.v. op karakters. Standaard is de veldafscheiding de tab-toets. Een andere afscheiding instellen kan m.b.v. het d vlaggetje. • Gebruik eventueel od (pagina 107) samen met de tabel op pagina 159 om te ontdekken welke veldafscheiding ls -l gebruikt.
Oefening 3.5
E
?
We gebruiken opnieuw het bestand /etc/passwd. Geef een commando dat alle info uitschrijft over de 10 gebruikers met kleinste user-id van de groep met het hoogste groep-id. Deze lijst moet volledig in hoofdletters zijn, gerangschikt zijn op gebruikersnaam, en met een plusteken als scheiding tussen de velden. Doe dit met zo weinig mogelijk tekens. Schrijf je resultaat weg naar een bestand.
Oefening 3.6
E
?
Zorg dat jouw bestand adres in de home-directory staat en leesbaar is voor iedereen. Schrijf de straatnamen (= waarin ‘straat’, ‘laan’ of ‘weg’ in voorkomt) uit de adresfiles van alle studenten waarvan de gebruikersnaam begint met dezelfde letter als jouw gebruikersnaam, weg naar de file overzichtstraten, waarbij naast elke straat ook staat hoeveel keer die in alle files voorkwam. De enige informatie die in overzichtstraten staat moet van de volgende vorm zijn: 14
5 STRAAT1 1 STRAAT2 enz. Hou er rekening mee dat een straatnaam zowel met een hoofdletter als een kleine letter kan voorkomen, maar wel gelijk behandeld moeten worden. Voor de eenvoud mag je ervan uitgaan dat straatnamen uit ´e´en deel bestaan, en dat de woorden “straat”, “weg” en “laan” enkel in het straatnaamgedeelte kunnen voorkomen. Zorg ervoor dat eventuele foutboodschappen bij het zoeken weggeschreven worden in foutlog en dat alle output in hoofdletters staat. Doe dit in zo weinig mogelijk commando-tekens.
Oefening 3.7
E K
?
Sla de bestanden Vak1.txt, Vak2.txt en Vak3.txt op, indien deze nog niet allemaal in je home-directory zouden staan. Deze zijn te vinden op http://users.ugent.be/∼klbostee/ cg/Vak?.txt. Elk van die bestanden bevat regels van de vorm: De code is een letter van A tot en met D, en punten bestaan uit 1 of 2 cijfers. Je mag er van uitgaan dat de voornaam en naam uit ´e´en deel bestaan, en enkel uit hoofd- en kleine letters bestaan. De namen staan niet alfabetisch gerangschikt. Elke regel in Vak1.txt heeft wel een corresponderende regel in Vak2.txt en in Vak3.txt. Ga er van uit dat er nog andere vakbestanden in je directory kunnen staan. Gevraagd: cre¨eer een bestand waarin enkel personen voorkomen die een A haalden voor het eerste vak, maar niet voor het tweede. De personen moeten geordend worden volgens het puntenaantal behaald voor vak A (van hoog naar laag). De regels in het bestand moeten van de vorm zijn, m.a.w. velden gescheiden door een spatie, en geen puntenaantallen meer. Doe dit opnieuw in zo weinig mogelijk tekens. Het(de) zoekpatro(o)n(en) dat(die) je gebruikt moet(en) enkel voor regels van bovenstaand formaat gelden. Stel je dus als het ware voor dat er in die bestanden ook andere regels kunnen voorkomen, met willekeurige cijfers en letters.
Oefening 3.8
E K
Geef voor de volgende filmrecensie op http://users.ugent.be/∼klbostee/cg/reservoir. txt een lijst van alle paren opeenvolgende woorden, geordend volgens aantal voorkomens. Woorden bestaan enkel uit hoofd- of kleine letters, alle andere tekens moeten worden genegeerd. Je hebt een drietal regels nodig. Voorbeeld: In de tekst “ik ben Filip en ik heb twee zussen en ik heb twee broers”, zijn “ik ben”, “ben Filip”, “Filip en”, “en ik”, “ik heb”, “heb twee”, “twee zussen”, “zussen en”, “en twee” en “twee broers” opeenvolgende paren. Het paar “en ik” komt bijvoorbeeld twee maal voor.
15
Oefening 4.1
E K
Doe achtereenvolgens de volgende zaken: • Ga na welke processen er actief zijn. • Voer het commando echo ’man man’ | sh & uit en controleer welke processen er bijkomen. Waarvoor dient elk van die bijkomende processen denk je? • Teken een hi¨erachie van de processen, waarbij elk proces met zijn ouder-proces wordt verbonden. • Bepaal welk proces er gedood moet worden om alle bijkomde processen te be¨eindigen, en dood dat proces.
Oefening 4.2
K
Download de shell file calcsum door wget http://users.ugent.be/~klbostee/cg/calcsum uit te voeren. Het commando sh calcsum kan dan gebruikt worden om de som van de eerste natuurlijke getallen te berekenen. Meet nu hoelang het duurt om de som van de eerste 100 natuurlijke getallen te bepalen, en herhaal dat nog eens nadat je tweemaal het commando yes > /dev/null & uitgevoerd hebt. Merk je een verschil? Zoja, kan je dat verschil ook verklaren? Vergeet de twee “yes-processen” niet te doden vooraleer je aan de volgende oefening begint.
Oefening 4.3
E K
?
Voor deze oefening gebruik je best de bash-shell. Op EduServ kan je die shell starten door het commando bash uit te voeren. In Knoppix is bash de standaard shell. Stel ´e´en commando-regel op die de kalender voor de eerste drie maanden van 2006 onder elkaar uitschrijft. Doe dat door drie aparte cal-commando’s te combineren. Pas de bekomen regel vervolgens aan zodanig dat: • het volledige commando in de achtergrond uitgevoerd wordt; • het commando in de achtergrond uitgevoerd wordt, en de uitvoer bewaard wordt in een bestand; • de verschillende deel-commando’s tegelijkertijd worden uitgevoerd, en alle uitvoer in een bestand terecht komt. 16
Herhaal de laatste commando-regel een aantal keer en ga na of het bekomen bestand steeds hetzelfde is. Bewaar daarna alle versies van het commando in een shell file en maak die file uitvoerbaar met behulp van chmod.
Oefening 4.4
E K
?
E K
?
Voer de volgende commando’s uit: wget http://users.ugent.be/~klbostee/cg/do.perl echo -e ’-n\n-a’ > vlaggen cat vlaggen | perl do.perl ls Kan je achterhalen wat het perl-script do.perl doet? Zorg er nu voor dat het laatste commando ook als volgt kan ingegeven worden: cat vlaggen | ./do.perl ls Wat kan er in dit commando nog weggelaten worden nadat je export PATH="$PATH:." uitgevoerd hebt? Tip: Bekijk de uitvoer van whereis perl om het volledige pad naar het perl programma te weten te komen.
Oefening 4.5 Implementeer de volgende commando’s aan de hand van (uitvoerbare) shell files: ./argten <arg 1> <arg 2> ...<arg n> Schrijft <arg 10> uit. ./crypt
Het tekstbestand onleesbaar (of terug leesbaar) maken door de substitutie :1,$s/\(...\)\(...\)/\2\1/g uit te voeren met ex, de regel-geori¨enteerde versie van de editor vi. ./pkids Alle (rechtstreekse) kind-processen van het proces uitschrijven. Voor elk kind-proces moet er een lijn geprint worden die bestaat uit de pid en het commando van het proces. ./reverse <arg 1> <arg 2> ...<arg n> Schrijft de argumenten <arg 1> <arg 2> ...<arg n> uit in omgekeerde volgorde. 17
Tip: Bekijk sectie 4.3 in het boek. ./revln Doet hetzelfde als ln, maar de argumenten worden in omgekeerde volgorde doorgegeven. Gebruik het perl-script do.perl uit de vorige oefening om dit commando te implementeren.
Oefening 4.6
E
?
Log in op EduServ, cre¨eer de directory ~/WWW/cgi-bin en maak daar een shell file counter.cgi die de volgende uitvoer genereert: Content-type: text/plain Huidige aantal bezoekers: waarbij met ´e´en verhoogd wordt bij elke uitvoering van het script. Zorg er daarna voor dat “de rest van de wereld” • elke directory op het pad vanaf je homedir tot counter.cgi kan “uitvoeren”; • het bestand counter.cgi kan lezen en uitvoeren. Als dat gebeurd is, dan moet het script kunnen uitgevoerd worden door de corresponderende URL te bezoeken met een webbrowser, bijvoorbeeld: lynx http://studwww.ugent.be/~ /cgi-bin/counter.cgi Tip: Maak gebruik van de calculator bc.
Oefening 4.7
E K
Schrijf de volgende shell files: ./printline Schrijft de -de regel van het bestand uit. ./countten Schrijft telkens het getal uit dat het resultaat is van het vorige getal ge¨ıncrementeerd met 1. Wanneer 10 bereikt wordt, dan wordt er terug begonnen vanaf 1. Dus: ./countten 1 ... ./countten 9 ./countten 10 ./countten 1 ./countten 2 18
Download daarna het bestand quotes.txt (http://users.ugent.be/∼klbostee/cg/quotes. txt) en voer het commando ./printline quotes.txt `./countten` een aantal keer uit. Wat doet dit commando?
19
Oefening 5.1
E K
Download het bestand deelratings.txt. De regels zijn van de vorm: <product-id> <member-id> <status>
Elke regel bevat informatie over een bepaald product: de score die een bepaalde gebruiker gegeven heeft, wanneer de gebruiker voor het eerst en voor het laatst een score gegeven heeft voor dit product, of de score zichtbaar mag zijn voor andere gebruikers (<status> ), enzovoort. Gevraagd: geef substitutie-commando’s die volgende zaken doen, en doe dit in zo weinig mogelijk tekens. Bepaal eerst welke scheiding tussen de velden gebruikt wordt, en zorg ervoor dat deze behouden wordt na substitutie. • Markeer alle doorlopende tekst (=geen regels van bovenstaande vorm) als commentaar door # voor elke regel te plaatsen. • Verwijder de gegevens uit de laatste kolom. • Op elke rij waar de last-modified kolom niet ingevuld is, deze aanvullen met de waarde uit de creation kolom. • Vervang alle hoge ratings (4 of 5) door “OK!”. • Vervang alle andere ratings door “NOK”. • Verander de datumschrijfwijze van yyyy/mm/dd naar dd/mm/yyyy. • Vervang alle lijnen waarvan de status op 0 staat door een lege lijn. • Zoek alle lijnen met een object-id dat begint met een cijfer tussen 1 en 5, en waarvoor er maar ´e´en keer een score gegeven is. Markeer deze door een sterretje vooraan de lijn te zetten. • Reorganiseer het bestand op de volgende manier: <product-id> <member-id> <status>
wordt omgezet naar <product-id> A <member-id> <product-id> B <product-id> C <status>
Oefening 5.2
E K
Schrijf een shell file findlinks die alle links in een gegeven webpagina uitschrijft. Met een link bedoelen we daarbij een URL van de volgende vorm: http://.<domeinnaam> /<pad> / waarbij:
20
• <domeinnaam> van de vorm .<extensie> is, bijvoorbeeld ugent.be; • uit meerdere delen kan bestaan, bijvoorbeeld www.lib; • <pad> , en . optioneel zijn; • de slash (/) op het einde optioneel is wanneer er geen gespecificeerd is (als wel opgegeven wordt dan kan het laatste karakter geen slash zijn). Bij de uitgeschreven links moet de eventuele slash op het einde verwijderd worden, en mag elke link slechts ´e´en keer voorkomen. Een mogelijke uitvoering van findlinks is bijvoorbeeld: ./findlinks http://helpdesk.ugent.be http://helpdesk.ugent.be/extra/news.php http://helpdesk.ugent.be/rss.xml http://lib1.ugent.be/cmsites/default.aspx http://www.lib.ugent.be http://www.opleidingen.ugent.be/studiekiezer/nl/index.htm http://www.ugent.be http://www.ugent.be/favicon.ico http://www.ugent.be/phonebook http://www.ugent.be/portal/nl/CA60.htm http://www.w3.org/1999/xhtml Probeer ervoor te zorgen dat foutieve URLs, zoals bijvoorbeeld http://.ugent.be of http: //be, genegeerd worden. Gebruik vervolgens findlinks als basis voor een shell file die telt hoeveel keer elke domeinnaam voorkomt in de links van een gegeven webpagina, bijvoorbeeld: ./domaincounts http://helpdesk.ugent.be 9 ugent.be 1 w3.org