Debian Tutorial Havoc Pennington <[1]hp@debian.org> Vertaald door: Ellen Bokhorst <[2]bokkie@nl.linux.org> © 1998 Software in the Public Interest and individual contributors. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the sections that reprint "The GNU General Public License," "The GNU Library General Public License," and other clearly marked sections held under separate copyright are reproduced under the conditions given within them, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language under the conditions for modified versions. "The GNU General Public License" and "The GNU Library General Public License" may be included in a translation approved by the Free Software Foundation instead of in the original English. At your option, you may distribute verbatim and modified versions of this document under the terms of the GNU General Public License, excepting the clearly marked sections held under separate copyright. _________________________________________________________________ Inhoudsopgave 1. [3]Over dit handboek [4]Erkenningen 2. [5]Introductie [6]Wat is Debian? [7]Wat is een besturingssysteem, en wat voor soort besturingssysteem is Debian? [8]Wie maakt Debian? [9]Wat is vrij-verkrijgbare software? [10]Hoe Dit Boek te Lezen [11]Het Linux Documentatie Project 3. [12]Van start gaan [13]Een multi-user, multitasking besturingssysteem [14]Inloggen [15]Toetsen [16]Opdrachthistorie en het wijzigen van de opdrachtregel [17]Als root inloggen [18]Virtuele consoles [19]Afsluiten van het Systeem 4. [20]De Basis [21]De opdrachtregel en man pages [22]Beschrijven van de opdrachtregel [23]Introductie in bestanden [24]Bestanden gebruiken: een tutorial [25]Processen [26]De shell [27]Beheren van processen met Bash [28]Een paar Bash kenmerken [29]Tab Voltooiïng [30]Je identiteit beheren 5. [31]Lezen van documentatie en hulp verkrijgen [32]Soorten documentatie [33]HOWTO's [34]Van iemand hulp verkrijgen [35]Wel of niet stellen van een vraag 6. [36]Gebruiken van de shell [37]Omgevingsvariabelen [38]Ouder- en kindprocessen [39]Waar opdrachten te vinden zijn: de variabele PATH [40]Aliassen en shell-functies [41]Invoer en uitvoer besturen [42]Bestandsnaam uitbreiding ("Wildcards") [43]Interactief/niet-interactief [44]Interactieve shells 7. [45]Meer over bestanden [46]Permissies [47]Bestandseigenaarschap [48]Mode [49]Permissies in praktijk [50]Welke bestanden bevinden zich op mijn systeem? Waar kan ik mijn eigen bestanden plaatsen? [51]Een bestandsbeheerder gebruiken 8. [52]Aanmaken en wijzigen van tekstbestanden [53]Wat is een tekstbestand? [54]Teksteditors [55]Aanmaken en wijzigen van een tekstbestand met vi [56]Aanmaken van een bestand [57]Wijzigen van een bestaand bestand [58]Door een bestand manoeuvreren [59]Verwijderen van tekst [60]Verfijnde verplaatsing [61]Opdrachten herhalen [62]Geavanceerde referentie 9. [63]Aanpassen van de shell [64].rc bestanden en ls -a [65]Systeemomvattende versus gebruikers-specifieke configuratie 10. [66]Het X Window Systeem [67]Starten van de X-omgeving [68]Intro: Wat is X [69]Basis X-bewerkingen [70]X-clients [71]Probleemoplossing [72]Afsluiten van de X-omgeving [73]Aanpassen van je X startup 11. [74]Tekst tools [75]Reguliere expressies 12. [76]Bestandstools [77]Bestandscompressie met gzip [78]Bestanden in kleinere stukken opdelen [79]Naar bestanden zoeken [80]Vaststellen van de inhoud van bestanden 13. [81]Het gebruik van disks [82]Concepten [83]mount en /etc/fstab [84]Mounten van een bestandssysteem [85]Voorbeeld: Mounten van een CD-ROM [86]/etc/fstab: Automatiseren van het mount-proces [87]Verwijderbare disks (floppies, Zip disks, enz.) [88]PPP [89]Voorbereiding [90]De gemakkelijke manier: wvdial [91]Handmatige instelling 14. [92]Verwijderen en installeren van software [93]Het dpkg package utility [94]Apt configureren [95]Gebruiken van apt-get. [96]Handmatig gebruiken van dpkg 15. [97]Probleemoplossing [98]Debian is bevroren of gecrasht! [99]Mijn terminal functioneert niet zoals het hoort [100]De computer genereert een beep wanneer ik een toets indruk en mijn scherm toont een tekstbestand en/of een heleboel ~ symbolen. 16. [101]Geavanceerde onderwerpen [102]De werkelijke aard van bestanden: hardlinks en inodes [103]Type bestanden [104]Symbolische links [105]Devicebestanden [106]/dev/null [107]Named pipes (FIFO's) [108]Sockets [109]Het proc bestandssysteem [110]Geavanceerde aspecten van bestandspermissies [111]Numierieke argumenten gebruiken met chmod 17. [112]Samenvatting van de componenten van een GNU/Linux-systeem 18. [113]Booten van het systeem 19. [114]Diversen [115]Unix Historie [116]GNU/Linux Historie [117]De versienummering van de Linux-kernel _________________________________________________________________ Hoofdstuk 1. Over dit handboek Dit is de Debian Tutorial. Het is bedoeld voor lezers voor wie Debian GNU/Linux nieuw is. Er wordt geen voorgaande kennis van GNU/Linux of een ander op Unix lijkend systeem verondersteld, maar er wordt wel vanuit gegaan dat je algemene basiskennis van computers en hardware hebt (je zou moeten weten wat de basisonderdelen van een computer zijn, en waarvoor men een computer zou kunnen gebruiken). De bedoeling van dit handboek is dat het in de aangegeven volgorde wordt gelezen; ieder hoofdstuk gaat uit van wat kennis van voorgaande hoofdstukken, alhoewel je het misschien prettiger vindt van het ene deel naar het andere deel te springen. Er is ook een Debian Referentie Gids gepland, die veel omvangrijker, maar minder inleidend zal zijn. In deze tutorial zal ervan worden uitgegaan dat je Debian GNU/Linux reeds volgens het installatie-handboek (welke op moment van dit schrijven incompleet is) hebt geïnstalleerd en geconfigureerd. Echter misschien wil je de tutorial eerst eens bekijken om meer over Debian te leren, voordat je gaat installeren. Deze tutorial probeert in het algemeen redenen voor zaken te geven, en je te helpen begrijpen wat er zich binnenin het systeem afspeelt. Het is de bedoeling je in staat te stellen nieuwe problemen op te lossen en zoveel mogelijk uit je computer te halen. Er is dus ruim voldoende aan theorie, historie en leuke feiten ingeschakeld met de "How To" aspecten van het handboek. Stuur alsjeblieft commentaar over dit handboek naar de Debian Documentation Project mailing list <[118]debian-doc@lists.debian.org>. We zijn vooral geïnteresseerd in of het van nut was voor je, en hoe we het kunnen verbeteren. Als je tijdens het lezen verward raakt, of bemerkt dat we een term gebruiken zonder dat we het eerst hebben uitgelegd, email ons dan alsjeblieft. Stuur de auteurs alsjeblieft GEEN technische vragen over Debian, aangezien daar andere forums voor zijn. Zie de [119]paragraaf Van iemand hulp verkrijgen in Hoofdstuk 5. Stuur alleen mail betreffende het handboek zelf naar het hierboven vermelde adres. Ga voor de laatste versie van dit handboek naar [120]http://www.debian.org/doc/ en volg de links. _________________________________________________________________ Erkenningen Veel mensen hebben met dit handboek geholpen. De grootste dank gaat uit naar Larry Greenfield en zijn Linux User's Guide, die de basis vormde voor het handboek. De Linux User's Guide maakt onderdeel uit van het Linux Documentatie Project. Veel dank aan degenen die ons hebben geholpen bij het redigeren van het handboek; ze hebben het veel en veel beter gemaakt. Als je vond dat dit handboek plezierig te lezen was, stuur je bedankjes dan naar Thalia Hooker en Day Irmiter. Met dank aan Richard Stallman van de Free Software Foundation voor het advies, redigeren, en het aanbod voor het publiceren van de tekst. Met dank aan James Treacy dat hij me wat van zijn schrijven voor de Debian website liet lenen. Met dank aan iedereen die wat onderdelen van het handboek heeft geschreven: Craig Sawyer schreef over shells, Ole Tetlie is aan het schrijven over programmeren, Oliver Elphick droeg bij over een bespreking van wat basisutility's, Ivan E. Moore II droeg bij in de bespreking van PPP. Veel mensen, waaronder Eric Fischer en Mike Touloumtzis, hebben patches en commentaar aangeleverd. Veel dank aan Ardo van Rangelrooij voor het aan de gang krijgen en beheren van de DebianDoc DTD die werd gebruikt om het handboek te schrijven. Uiteraard is het onmogelijk de honderden Debian ontwikkelaars en duizenden free-software auteurs te bedanken die ons iets gaven om over te schrijven en te gebruiken. Ook dank aan een ieder die ik hier niet heb genoemd, aangezien ik er zeker van ben dat ik hier een knoeiboel van heb gemaakt. Ik hoop dat niemand er aanstoot aan zal nemen --- email me alsjeblieft en laat me het weten als je naam hier zou moeten staan. _________________________________________________________________ Hoofdstuk 2. Introductie Wat is Debian? Debian is een vrij-verkrijgbaar besturingssysteem (OS) voor je computer. Een besturingssysteem is de set met basisprogramma's en utility's die er voor zorgen dat je computer draait. Het hart van een besturingssysteem is de kernel. De kernel is het meest fundamentele programma op de computer: het doet al het basisonderhoud en laat je andere programma's starten. Debian maakt gebruik van de Linux-kernel, een volledig vrij-verkrijgbaar stukje software gestart door Linux Torvalds en ondersteund door (waarschijnlijk meer dan 1000) programmeurs over de gehele wereld. Een groot deel van de basistools die het besturingssysteem bevat, is afkomstig van het ([121]GNU project), en ook deze tools zijn vrij-verkrijgbaar. Wat mensen willen, is natuurlijk applicatie-software: programma's om ze te helpen bij wat ze gedaan willen krijgen, van het editen van documenten tot het draaien van een zaak tot het spelen van spellen tot het schrijven van meer software. Debian wordt geleverd met meer dan 1000 packages (voorgecompileerde software gebundeld in een fraai formaat zodat het gemakkelijk op je computer is te installeren) --- het is allemaal vrij. Het lijkt wat op een toren. Aan de basis is er Linux. Bovenop bevinden zich alle basistools, voornamelijk van GNU. Vervolgens heb je alle applicatie-software dat je op de computer draait: veel hiervan is ook van GNU. De Debian ontwikkelaars fungeren als architecten en coördinatoren --- het systeem behoedzaam organiserend en alles passend makend voor een geïntegreerd stabiel besturingssysteem: Debian GNU/Linux. _________________________________________________________________ Wat is een besturingssysteem, en wat voor soort besturingssysteem is Debian? Een besturingssysteem is de verzameling aan software dat een computer bruikbaar maakt. Het beheert hardware-apparaten en voorziet in utility's en applicaties. Debian GNU/Linux is gebaseerd op het Unix besturingssysteem, welke een lange historie heeft (zie de [122]paragraaf Unix Historie in Hoofdstuk 19). Debian is fundamenteel compatibel met Unix, maar voegt een beduidend aantal aanvullende features toe. De ontwerp filosofie van GNU/Linux (en Unix) is zijn functionaliteit in kleine, voor meerdere doelen geschikte delen te distribueren. Op die manier kun je eenvoudig nieuwe functionaliteit en nieuwe features tot stand brengen door de kleine onderdelen (programma's) op nieuwe manieren te combineren. Debian is als een monteursset; je kunt ervan alles mee bouwen. Wanneer je een besturingssysteem gebruikt, wil je de hoeveelheid werk die je moet doen om een taak te volbrengen, minimaliseren. Debian voorziet in vele tools die je kunnen helpen, maar alleen als je weet wat je met deze tools kunt doen. Het is niet erg productief een uur te besteden met proberen iets aan het werk te krijgen en het dan uiteindelijk op te geven. Dit handboek zal je de belangrijkste tools leren waarop Debian is gebaseerd: welke tools in welke situaties te gebruiken, en hoe deze diverse tools met elkaar te verbinden. _________________________________________________________________ Wie maakt Debian? Debian is een ontwikkelingsproject bestaande uit allemaal vrijwilligers via het internet. Er werken honderden vrijwilligers aan. De meesten zijn belast met een klein aantal software-packages en ze zijn zeer bekend met de software die ze tot een package bundelen. Deze vrijwilligers werken samen volgens een stricte verzameling leidraads die handelen over hoe packages worden geassembleerd. Deze leidraads worden in samenwerking ontwikkeld via besprekingen op internet mailinglijsten en internet relay chat (IRC) forums. _________________________________________________________________ Wat is vrij-verkrijgbare software? Als de ontwikkelaars en gebruikers van Debian het hebben over "vrij-verkrijgbare software", refereren ze daarbij naar vrijheid in plaats van naar de prijs. Debian is in deze zin vrij: je bent vrij het te wijzigen en te herdistribueren, en je zal voor dit doel altijd toegang hebben tot de broncode. De [123]Debian Free Software Guidelines beschrijven in meer detail wat precies met "vrij" wordt bedoeld. De [124]Free Software Foundation, oprichter van het GNU project, is een andere bron met informatie. Je kunt een meer gedetailleerde beschrijving van vrije software vinden op de [125]Debian web site. Free software wordt soms Open Source (R) software genoemd --- Open Source is een waarborgmerk. Aangezien Open Source (R) van een handelsmerk is voorzien, kan slechts echt vrije software zichzelf Open Source (R) noemen. Je komt misschien verkopers tegen die je proberen te misleiden door te claimen dat hun software "vrij" is, terwijl er in werkelijkheid veelbetekenende voorwaarden aan gekoppeld zijn. Het Open Source (R) handelsmerk geeft je wat verzekering dat de software echt vrije software is. 'Open Source software' wordt bij gelegenheid afgekort tot 'OSS'. Je vraagt je misschien af: waarom zouden mensen uren van hun eigen tijd besteden aan het schrijven van software, het met zorg tot een package bijeenbrengen, en het dan allemaal weggeven? De antwoorden zijn net zo gevarieerd als degenen die eraan bijdragen. Velen geloven in het delen van informatie en het hebben van de vrijheid om met elkaar samen te werken, en hebben het gevoel dat vrije software dit aanmoedigt. Er is een lange traditie begonnen in de jaren 1950 die deze waarden hooghouden, soms de Hacker Ethic genoemd. (Je kunt hier meer over lezen in het amusante boek van Steven Levy Hackers: Heroes of the Computer Revolution). Anderen willen meer over computers leren. Meer en meer mensen zoeken naar wegen om de opdrijvende prijs van commerciële software te vermijden. Een groeiende menigte draagt bij als dank voor alle geweldige vrij-verkrijgbare software die ze van anderen hebben ontvangen. Velen op academia maken vrije software als hulp om het resultaat van hun onderzoek voor breder gebruik beschikbaar te maken. Bedrijven helpen vrije software te beheren zodat ze een zegje kunnen doen in hoe het ontwikkelt --- er is geen snellere manier een nieuwe feature te verkrijgen dan het zelf te implementeren of een consultant in te huren om het te doen! Bedrijven zijn ook geïnteresseerd in betere betrouwbaarheid en de mogelijkheid tussen support verkopers te kiezen. Weer anderen zien vrije software als een sociaal goed, democratiseren van toegang tot informatie en het voorkomen van buitensporige centralisatie van de wereldse informatie infrastructuur. Natuurlijk vinden velen van ons het gewoon ontzettend leuk. Debian is zo gebonden aan vrije software dat we dachten dat het nuttig zou kunnen zijn als het in één of ander document formeel werd gemaakt. Ons [126]Social Contract zegt toe dat Debian altijd 100% vrije software zal blijven. Wanneer je een package vanaf de Debian hoofddistributie download, kun je er zeker van zijn dat het tegemoet komt aan onze Free Software Guidelines. Alhoewel Debian in vrije software gelooft, zijn er situaties waar mensen gepatenteerde software op hun machine willen of nodig hebben. Wanneer dit mogelijk is, ondersteunt Debian dit; alhoewel gepatenteerde software niet in de hoofddistributie is opgenomen, is het soms beschikbaar op de ftp-site in de non-free directory, en er is een groeiend aantal packages wiens enkele taak het is, gepatenteerde software te installeren, die we zelf niet mogen distribueren. Het is belangrijk onderscheid te maken in commerciële software en gepatenteerde software. Gepatenteerde software is niet-vrije software, terwijl commerciële software, software is die voor geld wordt verkocht. Debian staat het toe dat commerciële software onderdeel mag uitmaken van de hoofddistributie, maar dit geldt niet voor gepatenteerde software. Denk er aan dat de bewoording "vrije software" niet naar de prijs refereert; het is heel goed mogelijk vrije software te verkopen. Zie [127]http://www.opensource.org of [128]http://www.fsf.org/philosophy/categories.html voor meer verduidelijking over de terminologie. _________________________________________________________________ Hoe Dit Boek te Lezen De beste manier om alles over bijna ieder computerprogramma te leren is achter je computer. De meeste mensen vinden dat het lezen van een boek zonder het programma te gebruiken niet nuttig is. De beste manier om Unix en GNU/Linux te leren, is door het te gebruiken. Gebruik GNU/Linux voor alles wat je kunt. Experimenteer. Wees niet bang --- het is mogelijk de boel te verknoeien, maar je kunt het altijd opnieuw installeren. Maak backups en heb plezier! Debian is niet zo intuïtief vanzelfsprekend als een aantal andere besturingssystemen. Dus het zal er waarschijnlijk op neerkomen dat je op z'n minst de eerste paar hoofdstukken doorneemt. GNU/Linux is als een race-auto, een meesterchef in de keuken, of een klassieke roman; zijn kracht en complexiteit maken het in eerste instantie moeilijk te benaderen, maar op de lange termijn veel meer de moeite waard. De aanbevolen manier om te leren is een beetje te lezen, en vervolgens een beetje te spelen. Blijf spelen totdat je je op je gemak voelt met de concepten, en begin dan het boek door te nemen. Je zal diverse behandelde onderwerpen aantreffen, waarvan je een aantal interessant kunt vinden en waarvan een aantal je zullen vervelen. Na een tijdje, zou je je voldoende zeker moeten voelen om opdrachten te gaan gebruiken zonder exact bekend te zijn met wat ze doen. Dit is prima. Handig om te weten: als je een opdracht ooit onjuist intikt, of niet weet hoe je een programma kunt beëindigen, C-c (de Ctrl toets en de kleine letter c tegelijkertijd ingedrukt houdend) zal het programma vaak stoppen. _________________________________________________________________ Het Linux Documentatie Project Bij het samenstellen van dit handboek is veel geleend uit de Linux User's Guide als onderdeel van het Linux Documentatie Project, geschreven door Larry Greenfield. Bedankt Larry! Dat project heeft een aantal uitstekende andere handleidingen, veel daarvan is bedoeld voor de meer ervaren gebruikers en systeembeheerders. De LDP beheert ook de Linux HOWTO's, een onschatbare bron waar je je bekend mee zou moeten maken. Je kunt de LDP vinden op hun [129]homepage. _________________________________________________________________ Hoofdstuk 3. Van start gaan Dus je bent net klaar met het installeren van Debian! Gefeliciteerd. Neem een duik in het diepe en begin het te leren gebruiken. Als onderdeel van het installatie-proces, zou je er achter moeten zijn gekomen hoe je het Debian-systeem boot (met een speciale diskette, door het eenvoudig aanzetten van je computer of door het indrukken van de Alt toets achter de LILO prompt en Linux te selecteren). _________________________________________________________________ Een multi-user, multitasking besturingssysteem Zoals we al eerder aangaven ([130]paragraaf Wat is Debian? in Hoofdstuk 2), is het ontwerp van Debian GNU/Linux afkomstig van het Unix besturingssysteem. In tegenstelling tot algemene desktop OS'sen zoals DOS, Windows, en MacOS, is Unix meestal te vinden op grote servers en multi-user systemen. Dit betekent dat Debian speciale mogelijkheden heeft die bij die andere OS'sen ontbreken. Het staat een groot aantal mensen toe de computer tegelijkertijd te gebruiken, zolang iedere gebruiker maar zijn eigen terminal heeft. [131][1] Om veel gebruikers toe te staan tegelijkertijd te werken, moet Debian het mogelijk maken dat veel programma's en applicaties gelijktijdig draaien. Deze feature wordt multitasking genoemd. Veel van de complexiteit (en kracht) van op Unix lijkende systemen vindt zijn oorsprong in deze twee kenmerken. Het systeem moet bijvoorbeeld een manier hebben om gebruikers te weerhouden dat ze per ongeluk elkaars bestanden verwijderen, en het moet de vele programma's coördineren die tegelijkertijd draaien, b.v. om te verzekeren dat ze de harddisk niet allemaal tegelijkertijd gebruiken. Als je in gedachten houdt waar Debian oorspronkelijk voor werd ontworpen, zullen veel van de aspecten heel wat meer betekenis krijgen. Je zal leren voordeel te hebben van de kracht van deze kenmerken. _________________________________________________________________ Inloggen Om Debian te kunnen gebruiken, moet je jezelf op het systeem identificeren. Dit is om te weten wie je bent, welke permissies je hebt en wat je voorkeuren zijn. Tot op deze hoogte, heb je een gebruikersnaam of login --- als je Debian zelf installeerde, zou je tijdens de installatie naar een dergelijke naam moeten zijn gevraagd. Als je op een systeem inlogt, die door iemand anders wordt beheerd, zal je hem moeten vragen naar een account en een corresponderende gebruikersnaam op het systeem. Je hebt ook een wachtwoord, zodat niemand anders zich als jou voor kan doen. Als je geen wachtwoord hebt, kan iedereen vanaf het Internet op je computer inloggen, en slechte dingen doen. Als je je zorgen maakt over beveiliging, zou je een wachtwoord moeten hebben. Veel mensen geven er de voorkeur aan anderen te vertrouwen dat ze niets opzettelijks met hun account uithalen; hopelijk moedigt je werkomgeving geen paranoia aan. Dit is een volkomen redelijke houding; het hangt af van je persoonlijke prioriteiten, en je omgeving. Uiteraard hoeft een systeem thuis niet zo veilig te zijn als een militaire installatie. Debian kan zo veilig of onveilig zijn als je wilt. Wanneer je Debian opstart, zal je een prompt zien; een verzoek van de computer om wat informatie. In dit geval, is de prompt login:. Je zou je gebruikersnaam op moeten geven en als daar om wordt verzocht, je wachtwoord. Het wachtwoord verschijnt op moment dat je het intikt, niet op het scherm --- hierdoor kan niemand over je schouder meekijken om te zien wat het is. Druk op Enter na zowel de gebruikersnaam als het wachtwoord te hebben ingetikt. Als je je gebruikersnaam of wachtwoord onjuist intikt, zal je opnieuw moeten beginnen. Als je het goed doet, zal je een kort bericht en vervolgens een $ prompt te zien krijgen. De $ wordt door een speciaal programma, genaamd de shell afgedrukt, en wordt dus een shell prompt genoemd: hier geef je je opdrachten aan het systeem. Probeer nu de opdracht whoami te geven. Rechts van de shell-prompt is een cursor. Je cursor is een klein laag liggend streepje of rechthoekje dat aangeeft waar je aan het typen bent; het zou bij het typen moeten verplaatsen. Druk altijd de RET in (de Enter of Return toets) als je klaar bent met het typen van een shell-opdracht. whoami vertelt je je gebruikersnaam. Daarna krijg je een nieuwe shell-prompt. Voor de rest van het handboek geldt dat wanneer er wordt aangegeven dat je een opdracht in moet tikken, je het achter de shell-prompt in moet typen en op de RET-toets moet drukken. Op een aantal toetsenborden is deze toets gelabeld als Enter en op anderen als Return. Zelfde toets, andere naam. Wanneer je klaar bent met werken, wil je misschien op het systeem uitloggen. Om de shell te beëindigen, voer je het exit opdracht in. Houd in gedachten dat als je ingelogd blijft, iemand anders langs zou kunnen komen en je account zal kunnen gebruiken. Hopelijk kun je erop vertrouwen dat degenen op je kantoor of thuis dit niet doen; maar als je je omgeving niet vertrouwt, zou je er zeker van moeten zijn dat je uitlogt wanneer je weggaat. _________________________________________________________________ Toetsen Voor we verder gaan, is het belangrijk dat je bekend bent met de conventies voor het beschrijven van toetsopdrachten die in deze handleiding worden gebruikt. Wanneer je gelijktijdig meerdere toetsen ingedrukt houdt, zal een notatie als C-a worden gebruikt. Dit betekent "houd de control-toets ingedrukt en tik de kleine letter a in." Andere afkortingen zijn de A voor de Alt-toets en de M voor de Meta-toets. Op een aantal toetsenborden bevinden zich zowel de Alt als de Meta; op de meeste home-computers heb je alleen de beschikking over een Alt-toets, maar de Alt-toets functioneert hetzelfde als een Meta-toets. Dus als je geen Meta-toets hebt, probeer in plaats daarvan dan de Alt-toets. Toetsen zoals Alt en Meta worden modifier-toetsen genoemd omdat ze de betekenis van de standaardtoetsen, zoals de letter A, wijzigen. Soms moet je meer dan één modifier ingedrukt houden, M-C-a betekent bijvoorbeeld dat gelijktijdig de Meta, Ctrl en kleine letter a ingedrukt moeten worden. Een aantal toetsen hebben een speciale notatie; bijvoorbeeld, RET (Return/Enter), DEL (Delete of soms Backspace), ESC (Escape). Deze zouden tamelijk zelfuitleggend moeten zijn. Spaties in plaats van koppeltekens betekenen dat de toetsen in aangegeven volgorde ingedrukt moeten worden. Dus C-a x RET betekent bijvoorbeeld dat de Control en kleine letter a gelijktijdig ingedrukt moeten worden en gevolgd moeten worden door de letter x, gevolgd door het indrukken van de Return. _________________________________________________________________ Opdrachthistorie en het wijzigen van de opdrachtregel Wat je na de shell-prompt intikt, voordat je op de RET drukt, wordt een opdrachtregel genoemd --- het is een regel tekst die de computer opdracht geeft iets te doen. De standaardshell van Debian biedt verscheidene speciale mogelijkheden om ervoor te zorgen dat het invoeren van opdrachtregels eenvoudig is. Je kunt voorgaande opdrachten terughalen om ze opnieuw uit te laten voeren, of ze wat aanpassen en dan opnieuw uitvoeren. Probeer het volgende: voer een opdracht in, zoals whoami; druk dan op de pijltjes-toets naar boven. De whoami opdracht zal opnieuw achter de prompt verschijnen. Je kunt de RET-toets dan indrukken om whoami een tweede keer op te starten. Als je verscheidene opdrachten hebt ingevoerd, kun je op de cursorpijl naar boven blijven drukken om deze opdrachten terug te halen. Deze mogelijkheid is handig als je hetzelfde verscheidene keren wilt doen, of als je een opdracht niet juist intikt en het terug wilt halen om het te herstellen. Je kunt de cursorpijl naar beneden indrukken om je in de andere richting te verplaatsen, richting de meer recente opdrachten. Als er geen opdrachten meer zijn om door te manoeuvreren, zal de computer een beep genereren. Je kunt je ook op de opdrachtregel manoeuvreren om aanpassingen te maken. De eenvoudigste manier is met de linker- en rechtercursortoets --- probeer --- whoasmi te typen in plaats van whoami, gebruik vervolgens de linker cursortoets om naar de s terug te gaan. Je kunt met de Backspace of de Delete-toets de s verwijderen. Er zijn echter ook meer gevorderde kenmerken (het is echter niet nodig ze nu allemaal te onthouden). Probeer C-a te typen. Hiermee ga je naar het begin van de regel. C-k (de k staat voor "kill") verwijdert tot aan het einde van de regel --- probeer het vanaf het midden van de opdrachtregel. Door het gebruik van C-a gevolgd door C-k, kun je de gehele opdrachtregel verwijderen. C-y plakt het laatste wat je met k verwijderde, waarbij het op de huidige cursorpositie wordt ingevoegd. (y staat voor "yank," (kopieer) als in "kopieer het terug"). Met C-e zal de cursor naar het einde van de opdrachtregel worden verplaatst. Ga je gang en speel wat met het wijzigen van de opdrachtregel om het in de vingers te krijgen. Experimenteer ermee. _________________________________________________________________ Als root inloggen Aangezien Debian een multi-user systeem is, is het ontworpen iedere gebruiker of ieder programma te weerhouden het gehele systeem te breken. De kernel zal gewone gebruikers niet toestaan belangrijke systeembestanden te laten wijzigen. Dit betekent dat alles blijft zoals verondersteld mag worden, beveiligd tegen ongelukken, virussen en zelfs kwaadwillige streken. In tegenstelling tot andere besturingssystemen, is Debian tegen deze bedreigingen beveiligd. Je zal geen antivirus-programma nodig hebben. Soms moet je echter belangrijke systeembestanden wijzigen -- het kan zijn dat je bijvoorbeeld nieuwe software wilt installeren, of je netwerkverbinding wilt configureren. Om dit te doen, heb je meer bevoegdheden nodig dan een gewone gebruiker; je moet root-user worden (wordt ook wel de superuser genoemd). Als je het root-wachtwoord hebt, log dan gewoon in als gebruiker root en het root-wachtwoord om root te worden. Hopelijk zal je je het wachtwoord herinneren van toen je het systeem installeerde --- zo niet, dan heb je een probleem.[132][2] Op veel sites, heeft alleen de systeembeheerder het root-wachtwoord, en kan alleen de systeembeheerder die dingen doen waarbij men root moet zijn om het te kunnen doen. Als je van je eigen PC gebruik maakt, dan ben jij natuurlijk de systeembeheerder. Als je geen root-privileges hebt, dan zal je aan moeten kunnen op je systeembeheerder voor het uitvoeren van de taken die root-privileges vereisen. Soms heb je het root-wachtwoord zelfs op een gedeelde gezamenlijke server bestemd voor onderwijs, omdat de sysadmin er op vertrouwt dat je het juist gebruikt. In dat geval zal je kunnen helpen bij het beheren van het systeem en het naar eigen behoeften aan kunnen passen. Maar je zal het verantwoord moeten gebruiken, en altijd met respect voor andere gebruikers. Als je het wachtwoord hebt, probeer dan nu als root in te loggen. Tik de opdracht whoami in om je identiteit te verifiëren. Log vervolgens onmiddelijk uit. Wanneer je root bent, biedt de kernel je geen bescherming voor jezelf, omdat root permissie heeft alles met het systeem te doen. Je kunt bijvoorbeeld door het intikken van rm -rf / je gehele systeem in een paar toetsaanslagen verwijderen. (Onnodig te zeggen dat je dit NIET in moet typen). Experimenteer niet als je root bent. In feite is het beter niets als root te doen, tenzij het absoluut noodzakelijk is. Dit is geen kwestie van beveiliging, maar eerder één van stabiliteit. Je systeem draait veel beter als het je voor domme fouten kan behouden. Misschien dat je de opdracht su comfortabeler vindt dan als root in te loggen. su geeft je de mogelijkheid de identiteit van een ander gebruiker aan te nemen, gewoonlijk als root, tenzij je iemand anders opgeeft. (Je kunt het onthouden door er aan te denken dat su staat voor Super User, alhoewel anderen zeggen dat het voor Set UserID staat). Probeer het volgende: Log in als jezelf, d.w.z. niet als root. whoami Bevestiging van je gebruikersnaam. su Geef de opdracht su. Het zal je vragen om een wachtwoord; vul het root-wachtwoord in. Als je het juiste wachtwoord geeft, zou je een nieuwe shell-prompt te zien moeten krijgen. Standaard bevat de shell-prompt van de root-gebruiker een # in plaats van een $. whoami Dit zou als je nieuwe gebruikersnaam "root" moeten geven. exit Beëindig de root-shell. Je prompt zal de $ weer terugkrijgen. exit Beëindig je eigen shell. Wanneer je systeembeheertaken verricht, zou je zoveel mogelijk als jezelf moeten doen. Gebruik vervolgens de opdracht su om datgene te doen waarvoor root-privileges zijn vereist en typ exit om die privileges uit te zetten, zodat er niet langer de mogelijkheid bestaat dat je iets kunt beschadigen. Je kunt su gebruiken om de identiteit van iedere gebruiker op het systeem aan te nemen, niet slechts als root. Hiervoor tik je in su user waar user de gebruiker is die je worden wilt. Je zal natuurlijk wel hun wachtwoord moeten kennen, tenzij je op dit moment root bent of ze geen wachtwoord hebben. _________________________________________________________________ Virtuele consoles De Linux-kernel ondersteunt virtuele consoles. Dit is een manier om je enkele scherm en toetsenbord te laten lijken alsof het meerdere terminals zijn, die allemaal zijn aangesloten op hetzelfde systeem. Gelukkig is het gebruik van virtuele consoles één van de eenvoudigste dingen onder Debian: er zijn "sneltoetsen" voor het snel schakelen tussen de consoles. Om dit uit te proberen log je in op je systeem en typ je A-F2 (gelijktijdig indrukken van de Alt-toets, en F2, dat wil zeggen, functietoets nummer 2). Je bevindt je nu achter een andere loginprompt. Geen paniek: je bevindt je nu op de virtuele console (VC) nummer 2! Log hier in en doe wat -- meer whoami's of wat dan ook -- ter bevestiging dat dit een echte login-shell is. Nu kun je met A-F1 naar de virtuele console nummer 1 terugkeren. Of je kunt naar een derde virtuele console gaan, uiteraard via (A-F3). Debian wordt standaard met zes virtuele consoles geactiveerd geleverd, die worden benaderd met de Alt-toets en functietoetsen F1-F6 (technisch gesproken zijn er meer virtuele consoles geactiveerd, maar op slechts 6 daarvan kan worden ingelogd. De anderen worden gebruikt voor het X Window Systeem of andere speciale doelen). Als je gebruik maakt van het X Window Systeem, zal het gewoonlijk vanaf de eerste ongebruikte virtuele console opstarten -- waarschijnlijk VC 7. Je zal ook Ctrl aan de toetsenreeks toe moeten voegen om van de X virtuele console naar één van de eerste zes virtuele consoles over te schakelen. Dus dat is C-A-F1 om op VC 1 te komen. Maar je kunt van een tekst VC naar de X virtuele console gaan door alleen gebruik te maken van Alt. Als je nooit uit X gaat, hoef je je hier niet om te bekommeren; X schakelt automatisch bij het opstarten naar zijn virtuele console. Zodra je er aan gewend raakt, zullen virtuele consoles waarschijnlijk een onmisbaar stuk gereedschap worden om veel tegelijkertijd te kunnen doen. (Het X Window Systeem dient vrijwel hetzelfde doel, door te voorzien in meerdere vensters in plaats van meerdere consoles). Je kunt op iedere VC een ander programma uitvoeren of op één VC als root inloggen en op een ander als jezelf. Of iedereen in het gezin kan zijn eigen VC gebruiken --- dit is vooral handig als je X gebruikt, in welk geval je verscheidene X-sessies op verschillende virtuele consoles tegelijkertijd kunt draaien. _________________________________________________________________ Afsluiten van het Systeem Zet de computer niet zomaar uit! Je riskeert daarmee het verlies van waardevolle gegevens! Als je de enige gebruiker op je computer bent, wil je de computer misschien uitzetten als je er klaar mee bent. [133][3] In tegenstelling tot de meeste DOS-versies, is het een slechte gewoonte gewoon de aan-/uitknop van de computer te gebruiken wanneer je klaar bent op je computer. Het is ook slecht om de computer (met de reset-knop) te rebooten, zonder eerst de juiste voorzorgsmaatregelen te treffen. De Linux-kernel heeft voor het verbeteren van de performance een disk cache. Dit betekent dat het tijdelijk informatie bewaart, bedoeld als permanente opslag in RAM: aangezien geheugen duizendmaal sneller is dan een disk, zorgt dit ervoor dat veel bestandsbewerkingen sneller worden uitgevoerd. De informatie die Linux in het geheugen heeft, wordt periodiek echt naar disk geschreven. Dit wordt syncing genoemd. Om je computer uit te zetten of opnieuw op te starten, moet je je computer vertellen dat het alles uit het geheugen op moet schonen en het permanent op moet slaan. Typ reboot om opnieuw op te starten, of druk op C-A-DEL (dat wil zeggen Control, Alt, en Delete). Om het systeem af te sluiten, moet je root zijn. Typ als root gewoon de opdracht shutdown -h now. Hiermee zal de gehele afsluitprocedure worden doorlopen, waaronder de opdracht sync dat er voor zorgt dat de diskcache, zoals hierboven werd beschreven, wordt opgeschoond. Wanneer je de melding System halted ziet, is het veilig de computer uit te zetten. Wellicht dat de computer zichzelf afsluit en je dit bespaart, als je Advanced Power Management (APM) ondersteuning in je kernel en BIOS hebt. In laptops is APM heel algemeen en het wordt ook in bepaalde desktop moederborden ondersteund. Een aantal mensen vindt het 't eenvoudigst om af te sluiten door het indrukken van C-A-DEL om te rebooten, en vervolgens de computer uit te zetten voordat de Linux-kernel weer opnieuw wordt geladen. Als de kernel weer opnieuw wordt geladen, moet je echter weer wachten, tot het daarmee klaar is en dan nogmaals juist rebooten om weer af te sluiten. _________________________________________________________________ Hoofdstuk 4. De Basis De opdrachtregel en man pages We hebben de opdrachtregel reeds besproken, dat wil zeggen de opdrachten die je achter de shell-prompt intikt. Deze sectie beschrijft de structuur van de wat gecompliceerdere opdrachtregels. Een minimale opdrachtregel bestaat uit slechts de naam van de opdracht, zoals whoami. Maar er zijn andere mogelijkheden. Je zou bijvoorbeeld in kunnen tikken: man whoami Met deze opdracht wordt verzocht om het online handboek voor het whoami programma (wellicht dat je de spatiebalk in moet drukken om door de documentatie te scrollen, of tik de q in om te stoppen). Een wat gecompliceerder voorbeeld: man -k Postscript Deze opdrachtregel bestaat uit drie delen. Het begint met de naam van de opdracht, man. Dan heeft het een optie of switch, -k, gevolgd door een argument, Postscript. Sommige mensen refereren naar alles behalve de naam van de opdracht als de parameters van de opdracht. Dus zowel opties als argumenten zijn parameters. Opties wijzigen de werking van een opdracht, waarbij bepaalde mogelijkheden of functionaliteit worden ingeschakeld. Gewoonlijk worden ze voorafgegaan door een -. De GNU-utility's hebben voor deze opties ook een "lange variant"; de lange variant van -k is --apropos. Tik man -h of man --help in om een volledige lijst met opties voor de man-opdracht te verkrijgen. Iedere opdracht heeft een eigen set opties, alhoewel de meeste opdrachten de --help en --version opties ondersteunen. Een aantal opdrachten is excentriek: tar vereist bijvoorbeeld om historische redenen voor de opties geen -. Alles wat geen optie en niet de naam van een opdracht is, is een argument. In dit geval, Postscript. Argumenten kunnen vele doelen dienen; in het algemeen zijn het bestandsnamen waarop de opdracht werkt. In dit geval is Postscript het woord waarvan je wilt dat man het opzoekt. In het geval van man whoami, was het argument de opdracht waarover je informatie wilde. Uitpluizen van de opdrachtregel man -k Postscript: * man, de naam van de opdracht vertelt de computer de manual pages op te zoeken. Deze voorzien in documentatie voor opdrachten. Als voorbeeld, man whoami zal je documentatie geven over de opdracht whoami. * -k, de optie, wijzigt de werking van man. Normaal gesproken verwacht man als argument een naam van een opdracht, zoals whoami, en zoekt de documentatie over die opdracht op. Maar met de optie -k of --apropos verwacht het dat het argument een sleutelwoord is. Vervolgens geeft het dan een lijst met al die manual pages waarin dat sleutelwoord in de beschrijving voorkomt. * Postscript is het argument; aangezien we de optie -k gebruikte, is het 't sleutelwoord om naar te zoeken. * -k en Postscript zijn beiden parameters. Ga je gang en typ man -k Postscript, en je zal een lijst te zien krijgen van alle manual pages op je systeem die iets te maken hebben met Postscript. Als je niet zoveel software hebt geïnstalleerd, krijg je in plaats daarvan mogelijk te zien Postscript: nothing appropriate. _________________________________________________________________ Beschrijven van de opdrachtregel Noot: Dit is een sectie die je over kunt slaan, voor het geval je verder wilt gaan. Er is volgens traditie een beknopte wijze voor het beschrijven van de opdrachten-syntax [134][4] die je zou moeten kennen. Als voorbeeld, als je man man intikt om de manual page over man te krijgen, zal je verscheidene syntax-beschrijvingen te zien krijgen die beginnen met de opdrachtnaam man. Één daarvan ziet er ongeveer zo uit: man -k [-M path] keyword ... Alles tussen blokhaken ([]) is een optionele eenheid. Dus je hoeft de optie -M niet te gebruiken, maar als je het doet, moet je een path argument gebruiken. Je moet de optie -k en het keyword argument gebruiken. De ... betekent dat je meer kunt hebben van hetgeen ervoor kwam, dus je zou verscheidene sleutelwoorden op kunnen zoeken. Laten we eens kijken naar één van de complexere beschrijvingen van de manual page van man: man [-c|-w|-tZT device] [-adhu7V] [-m system[,...]] [-L locale] [-para string] [-M path] [-P pager] [-r prompt] [-S list] [-e extension] [[section] page ...] ... Het is niet nodig om dit allemaal door te nemen (en maak je er geen zorgen om wat het allemaal betekent), maar let wel op de organisatie van de beschrijving. Ten eerste, betekenen clusters met opties gewoonlijk dat je één of meer ervan in verschillende combinaties kunt gebruiken, dus -adhu7V betekent dat je ook -h kunt gebruiken. Je kunt echter niet altijd alle combinaties gebruiken; deze beschrijving maakt dat niet duidelijk. -h is bijvoorbeeld incompatibel met andere opties, maar je zou man -du kunnen gebruiken. Helaas maakt het formaat van de beschrijving dit niet duidelijk. Ten tweede betekent het symbool | "of". Dus je kunt óf de -c, de -w, óf de -tZT opties, gevolgd door een device-argument gebruiken. Ten derde, kun je blokhaken nesten, aangezien ze een optionele eenheid aangeven. Dus als je een section hebt, moet je ook een page hebben, aangezien page niet optioneel is binnen de [[section] page] eenheid. Het is niet nodig dit allemaal te onthouden, refereer gewoon naar deze sectie als je documentatie leest. _________________________________________________________________ Introductie in bestanden Bestanden zijn een faciliteit voor het opslaan en het organiseren van informatie, analoog aan papieren documenten. Ze zijn in directory's georganiseerd, wat op een aantal andere systemen folders wordt genoemd. Laten we eens kijken naar de organisatie van bestanden op een Debian-systeem: / Een simpele / stelt de root-directory voor. Alle andere bestanden en directory's bevinden zich in de root-directory. Als je uit de DOS/Windows wereld komt, is / zeer vergelijkbaar met wat C: voor DOS is, dat is de root van het bestandssysteem. Een opmerkelijk verschil tussen DOS en Linux is echter, dat DOS verscheidene bestandssystemen bijhoudt: C: (de eerste harddisk), A: (het eerste diskettestation), D: (óf de CD-ROM, óf de tweede harddisk) terwijl Linux alle bestanden onder dezelfde / root heeft georganiseerd. Zie de [135]paragraaf mount en /etc/fstab in Hoofdstuk 13 voor meer details. /home/janeq Dit is de home-directory van gebruiker "janeq". Lezend van links naar rechts, begin je om bij deze directory te komen in de root-directory, ga je van daaruit naar home, en dan naar janeq. /etc/X11/XF86Config Dit is het configuratiebestand voor het X Window Systeem. Het komt voor in de X11 subdirectory van de /etc directory. /etc is op zijn beurt een subdirectory van de root-directory /. Wat opmerkingen: * Bestandsnamen zijn hoofdlettergevoelig. Dat wil zeggen dat MYFILE en MyFile verschillende bestanden zijn. * De root-directory verwijst eenvoudig naar /. Verwar deze "root" niet met de root-gebruiker, de gebruiker op je systeem met "super bevoegdheden". * Iedere directory heeft een naam welke kan bestaan uit alle letters of symbolen, behalve de /. De root-directory vormt daarop een uitzondering; zijn naam is / (uitgesproken als "slash" of "de root-directory") en het kan niet worden hernoemd. [136][5] * Ieder bestand of iedere directory wordt aangeduid met een volledig gekwalificeerde bestandsnaam (FQN), absolute bestandsnaam, of pad, waarin de reeks directory's wordt aangegeven die moet worden doorlopen om het te bereiken. De drie termen zijn synoniem. Alle absolute bestandsnamen beginnen met de / directory, en er staat een / tussen iedere directory of bestand in de bestandsnaam. De eerste / is de naam van een directory, maar de anderen zijn eenvoudigweg scheidingstekens om de delen van de bestandsnaam van elkaar te onderscheiden. De hier gebruikte woorden kunnen verwarrend zijn. Neem het volgende voorbeeld: /usr/share/keytables/us.map.gz Dit is een volledig gekwalificeerde bestandsnaam; een aantal mensen noemt het een path. Mensen zullen echter naar alleen us.map.gz ook als een bestandsnaam refereren. [137][6] * Directories zijn in een boomstructuur gearrangeerd. Alle absolute bestandsnamen beginnen bij de root-directory. De root-directory heeft een aantal onderverdelingen, zoals /etc en /usr. Deze subdirectory's zijn op hun beurt in nog meer subdirectory's onderverdeeld, zoals /etc/init.d en /usr/local. Het geheel wordt de "directory-structuur" genoemd. Je kunt aan een absolute bestandsnaam denken als een route van de basis van een boom (/) naar het einde van een tak (een bestand). Je zal mensen er ook over horen praten alsof de directory-structuur een familie-stamboom is: dus subdirectory's hebben "ouders" en een pad toont de complete afstamming van een bestand. Er zijn ook relatieve paden die ergens anders beginnen dan vanuit de root-directory. Hierover later meer. * Er is geen directory die met een fysiek device, zoals je harddisk correspondeert. Dit verschilt van DOS en Windows, waar alle paden met de naam van een apparaat, zoals C:\ beginnen. De directory-structuur is bedoeld als een afgeleide van de fysieke hardware, dus je kunt het systeem gebruiken zonder te weten wat de hardware is. Al je bestanden zouden zich op één disk kunnen bevinden -- of je zou 20 disks kunnen hebben, waarvan een aantal met een andere computer elders op het netwerk zijn verbonden. Dit is niet uit de directory-structuur op te maken, en bijna alle opdrachten werken op dezelfde manier ongeacht de fysieke apparaten waarop je bestanden zich in feite bevinden. Maak je er geen zorgen om als het je nog niet helemaal duidelijk is. Er komen nog heel veel voorbeelden. _________________________________________________________________ Bestanden gebruiken: een tutorial Om je systeem te gebruiken, moet je weten hoe je bestanden en directory's aanmaakt, verplaatst, hernoemt en verwijdert. In deze sectie wordt beschreven hoe je dit met de standaard Debian opdrachten doet. De beste manier om te leren is door het uit te proberen. Zolang als je de root niet bent (en nog geen belangrijke persoonlijke bestanden hebt aangemaakt), is er niets dat je al te serieus kunt verprutsen -- Begin meteen --- typ ieder van de volgende opdrachten in achter de prompt en druk op enter: pwd Één directory wordt altijd aangemerkt als de huidige werkdirectory voor de in gebruik zijnde shell. Je kunt deze directory bekijken met het pwd opdracht, wat staat voor Print Working Directory. pwd drukt de naam van de directory af waar je in aan het werken bent --- waarschijnlijk /home/jenaam. ls ls staat voor "lijst", als in "lijst met bestanden". Als je ls intikt, toont het systeem een lijst met alle bestanden in je huidige werkdirectory. Als je Debian net hebt geïnstalleerd, kan het heel goed zijn dat je home-directory leeg is. Als je werkdirectory leeg is, produceert ls geen uitvoer, aangezien er geen bestanden zijn om weer te geven. cd / cd betekent Change Directory (Verander van directory). In dit geval vroeg je naar de root-directory te gaan. pwd Verifieer dat je in de root-directory aan het werken bent. ls Kijk wat er zich in / bevindt. cd Het typen van cd zonder argumenten selecteert je home-directory als je huidige werkdirectory --- /home/yourname. Probeer dit met pwd te verifiëren. Voor we verder gaan, zou je moeten weten dat er in feite twee verschillende soorten bestandsnamen zijn. Een aantal daarvan begint met /, de root-directory, zoals /etc/profile. Dit worden absolute bestandsnamen genoemd omdat ze naar hetzelfde bestand refereren ongeacht wat je huidige directory is. De andere soort bestandsnaam is relatief. Twee directorynamen worden alleen in relatieve bestandsnamen gebruikt: . en ... De directory . verwijst naar de huidige directory en .. is de ouder-directory. Dit zijn "shortcut" directory's. Ze komen in iedere directory voor. Zelfs de root-directory heeft een ouder-directory --- het is zijn eigen ouder! Dus bestandnamen met een . of .. zijn relatief, omdat hun betekenis afhankelijk is van de huidige directory. Als ik in /usr/bin ben en ../etc intik, dan refereer ik naar /usr/etc. Als ik in /var ben en ../etc intik, dan refereer ik naar /etc. Merk op dat een bestandsnaam zonder dat het begint met de root-directory impliciet begint met ./. Dus je kunt local/bin of ./local/bin typen en het betekent hetzelfde. Een laatste handige tip: de tilde ~ is equivalent aan je home-directory. Dus het typen van cd ~ is hetzelfde als het typen van cd zonder argumenten. Je kunt ook zoiets typen als cd ~/practice/mynsubdirectory om naar de directory /home/jenaam/practice/mynsubdirectory te gaan. Op vergelijkbare wijze, is ~vincent equivalent aan de home-directory van de gebruiker "vincent", welke waarschijnlijk iets is als /home/vincent; dus ~vincent/docs/debian.ps is equivalent aan /home/vincent/doc/debian.ps. Nu dat je bekend bent met relatieve bestandsnamen, zijn hier nog wat meer bestandsopdrachten om uit te proberen. cd naar je home-directory voor je begint. mkdir practice Maak in je home-directory een directory met de naam practice aan. Je zal deze directory gaan gebruiken om nog wat andere opdrachten uit te proberen. Je kunt ls typen om te verifiëren dat je nieuwe directory bestaat. cd practice Ga naar de directory practice. mkdir mysubdirectory Maak een subdirectory van practice. cp /etc/profile . cp is een afkorting voor "copy." /etc/profile is gewoon een willekeurig bestand op je systeem, maak je er nu niet druk om wat het is. We hebben het naar . gekopieerd --- herinner je dat . gewoon betekent "de directory waarin ik me nu bevind" oftewel de huidige werkdirectory. Dus we hebben een kopie van /etc/profile aangemaakt, en het in onze practice directory geplaatst. Probeer ls in te typen om te verifiëren dat er in je werkdirectory met de nieuwe mysubdirectory inderdaad een bestand is met de naam profile. more profile Bekijk de inhoud van het bestand profile. more wordt gebruikt om de inhoud van tekstbestanden te bekijken. Het wordt more genoemd, omdat het tegelijkertijd een scherm vol van het bestand laat zien, en je op de spatiebalk moet drukken om meer te zien te krijgen. more wordt beëindigd als je aan het einde van het bestand bent gekomen of als je q (quit) intikt. more /etc/profile Verifieer dat het origineel er net zo uitziet als de kopie die je hebt aangemaakt. mv profile mysubdirectory mv staat voor "move". We hebben het bestand profile vanuit de huidige directory naar de eerder aangemaakte subdirectory verplaatst. ls Verifieer dat profile zich niet langer in de huidige directory bevindt. ls mysubdirectory Verifieer dat profile naar mysubdirectory is verplaatst. cd mysubdirectory Verander van subdirectory. mv profile myprofile Merk op dat in tegenstelling tot een aantal andere besturingssystemen, er geen verschil is tussen het verplaatsen en hernoemen van een bestand. Dus er is geen aparte rename opdracht. Merk op dat het tweede opgegeven argument aan mv een directory om het bestand of een directory naar te verplaatsen, of een nieuwe bestandsnaam kan zijn. cp werkt op dezelfde manier. Zoals gebruikelijk kun je ls intikken om het resultaat van mv te zien. mv myprofile .. Net als . betekent "de directory waar ik me nu in bevind", betekent .. "ouder van de huidige directory", in dit geval de eerder aangemaakte directory practice. Gebruik ls om te verifiëren dat myprofile daar nu is. cd .. Wijzig van directory naar de ouder-directory --- in dit geval practice, waar je net myprofile in hebt geplaatst. rm myprofile rm betekent "remove" --- hiermee wordt myprofile verwijderd. Wees voorzichtig! Het verwijderen van een bestand op een GNU/Linux systeem is permanent --- er is geen undelete. Als je de opdracht rm toepast, is het verdwenen, voor altijd. Wees voorzichtig! Het verwijderen van een bestand op een GNU/Linux systeem is permanent --- er is geen undelete. Als je de opdracht rm toepast, is het verdwenen, voor altijd. rmdir mysubdirectory rmdir is net als rm, het geldt echter voor directory's. Merk op dat rmdir alleen op lege directory's werkt --- als de directory bestanden bevat, moet je die bestanden eerst verwijderen, of als alternatief rm -r gebruiken in plaats van rmdir. cd .. Verlaat de huidige directory en ga naar zijn ouder-directory. Nu kun je typen: rmdir practice Hiermee zullen de laatste overblijfselen van je oefensessie worden verwijderd. Zo, dus nu weet je hoe je bestanden en directory's kunt aanmaken, kopiëren, verplaatsen, hernoemen en verwijderen. Je leerde ook wat shortcuts, zoals het eenvoudigweg intikken van cd om naar je home-directory te springen en . en .. om respectievelijk naar de huidige directory en zijn ouder te refereren. Vergeet ook het concept van de root directory, of /, en de alias ~ voor je home-directory niet. _________________________________________________________________ Processen Eerder vermeldden we dat GNU/Linux een multitasking systeem is. Het kan vele taken tegelijkertijd verrichten. Iedere taak wordt een proces genoemd. De beste manier om hier gevoel voor te krijgen is achter de shell-prompt top te typen. Je zal een lijst krijgen met processen, die zijn gesorteerd naar gelang hoeveel verwerkingstijd van de computer ze gebruiken. De volgorde zal voor je ogen continue wijzigen. Bovenaan het display staat wat informatie over het systeem: hoeveel gebruikers zijn ingelogd, hoeveel processen er zijn, hoeveel geheugen je hebt en hoeveel je gebruikt. In de meest linkse kolom, zie je de naam van de gebruiker als eigenaar van ieder proces. De meest rechtse kolom toont met welke opdracht het proces werd aangeroepen. Het zal je waarschijnlijk opvallen dat top zelf, door jou aangeroepen, vrijwel bovenaan de lijst staat (aangezien top voortdurend controleert op CPU-gebruik, zal het actief zijn en voor de controle CPU gebruiken). Let op alle opdrachten die eindigen op d --- zoals kflushd en inetd --- de d staat voor daemon [138][7]. Een daemon is een niet-interactief proces, dat wil zeggen dat het door het systeem wordt gedraaid en gebruikers zich er nooit om hoeven te bekommeren. Daemons leveren services zoals een internet-verbinding, het afdrukken, of email. Tik nu de u in en geef top je gebruikersnaam wanneer het daarom vraagt. De opdracht u vraagt alleen die processen te tonen die aan jou toebehoren; het staat je toe alle daemons en wat andere mensen dan ook aan het doen zijn, te negeren. Wellicht dat de naam van je shell, bash, je opvalt. Je zal vrijwel altijd bash aan het draaien zijn. Merk op dat kolom twee van het top display je het PID, of Proces IDentificatie nummer toont. Aan ieder proces is een uniek PID toegekend. Je kunt het PID gebruiken om individuele processen te besturen --- hierover later meer. Een andere handige truc: typ "?" om een lijst met top opdrachten te krijgen. Misschien dat je je afvraagt wat het verschil is tussen een "proces" en een "programma" --- in de praktijk gebruiken mensen de termen door elkaar. Technisch gezien is het programma een set instructies door een programmeur geschreven, en wordt het bewaard op disk. Het proces is de werkende instantie van het programma dat door Linux in het geheugen wordt bewaard. Maar zo belangrijk is het niet de termen strict gescheiden te houden. Veel van je interactie met een computer heeft te maken met het besturen van processen. Je zal ze willen starten, stoppen en zien in welke staat ze zich bevinden. Je primaire hulpmiddel hiervoor is de shell. _________________________________________________________________ De shell De shell is een programma dat een wisselwerking met je computer mogelijk maakt. Het wordt een shell genoemd omdat het in een omgeving voor je voorziet om in te werken --- een soort klein elektronisch thuis voor als je computert. De eenvoudigste functie van de shell is andere programma's op te starten. Je typt de naam van het programma dat je uit wilt voeren, gevolgd door de gewenste argumenten, en de shell vraagt het systeem vervolgens het programma voor je uit te voeren. Natuurlijk voorzien ook grafische window systemen in deze behoeften. Technisch gezien voorziet Windows 95 in een grafische shell, en het X Window Systeem is een andere soort grafische shell --- maar "shell" wordt in 't algemeen met als betekenis "opdrachregel-shell" gebruikt. Onnodig te zeggen dat hackers die onder shells werken, niet tevreden zijn met een simpelweg opstarten van opdrachten. Je shell heeft een verbijsterend aantal comfortabele speciale mogelijkheden als je daar gebruik van wilt maken. Er zijn ontelbare verschillende shells beschikbaar; de meeste daarvan zijn gebaseerd op de Bourne shell of de C shell, twee van de oudste shells. De programmanaam van de originele Bourne shell is sh en die van de C-shell is csh. Bourne shell varianten zijn onder andere de Bourne Again Shell van het GNU-project (bash, de standaardshell van Debian), de Korn shell (ksh), en de Z shell (zsh). Ook is er ash, een implementatie van oudsher van de Bourne shell. De meest algemene C-shell variant is tcsh (de t is een eerbewijs aan de TENEX en TOPS-20 besturingssystemen, die wat van de inspiratie opleverde van tcsh's verbeteringen aan csh). Bash is voor nieuwe gebruikers waarschijnlijk de beste keuze. Het is de standaard, en heeft alle speciale mogelijkheden die je waarschijnlijk nodig zal hebben. Maar alle shells hebben loyale opvolgers; als je wilt experimenteren, installeer dan verschillende shell-packages en wijzig je shell met de opdracht chsh. Tik slechts chsh in, vul een wachtwoord in als daarom wordt gevraagd, en kies een shell. Wanneer je de volgende keer inlogt, zal je je nieuwe shell gebruiken. _________________________________________________________________ Beheren van processen met Bash Debian is een multitasking systeem, dus je hebt een manier nodig om meer dan één ding tegelijkertijd te doen. Grafische omgevingen zoals X voorzien hierin op natuurlijke wijze; ze staan tegelijkertijd meerdere vensters op het scherm toe. Natuurlijk voorziet Bash (of iedere andere shell) in vergelijkbare mogelijkheden. Eerder maakte je gebruik van top om de verschillende processen op het systeem te bekijken. Je shell voorziet in een aantal comfortabele wijzen om alleen de processen die je vanaf de opdrachtregel hebt opgestart bij te houden. Iedere opdrachtregel start een job (ook een process group genoemd) om door de shell te worden uitgevoerd. Een job kan bestaan uit een enkel proces of een set processen in een pipeline --- meer over pipelines later. Door het invoeren van een opdracht zal een job worden gestart. Probeer eens het intikken van man cp en de man page van cp zal op het scherm verschijnen. De shell gaat naar de achtergrond en keert terug wanneer je klaar bent met het lezen van de manual page (of q intikt om het te stoppen in plaats van er geheel doorheen te scrollen). Maar stel dat je de manual page aan het lezen bent, en even iets anders wilt doen. Geen probleem. Typ terwijl je aan het lezen bent C-z om de huidige voorgrondtaak uit te stellen, en de shell in de voorgrond te plaatsen. Wanneer je een taak uitstelt, zal Bash je er eerst wat informatie over geven, en vervolgens geeft het je een shell-prompt. Je zal op het scherm iets te zien krijgen als: NAME cp - copy files SYNOPSIS cp [options] source dest cp [options] source... directory Options: [-abdfilprsuvxPR] [-S backup-suffix] [-V {numbered,exist­ ing,simple}] [--backup] [--no-dereference] [--force] [--interactive] [--one-file-system] [--preserve] [--recur­ sive] [--update] [--verbose] [--suffix=backup-suffix] [--version-control={numbered,existing,simple}] [--archive] [--parents] [--link] [--symbolic-link] [--help] [--ver­ sion] DESCRIPTION --More-- [1]+ Stopped man cp $ Merk de laatste twee regels op. De voorlaatste is de job informatie, en vervolgens krijg je een shell-prompt. Bash wijst aan iedere opdrachtregel die je vanuit de shell draait een job nummer toe. Dit geeft je de mogelijkheid eenvoudig naar het proces te refereren. In dit geval is man cp job nummer 1, wat wordt weergegeven als [1]. De + betekent dat dit de laatste job was die je in de voorgrond had. Bash vertelt je ook de huidige status --- Stopped --- en de opdrachtregel van de job. Er is heel veel dat je met jobs kunt doen. Probeer met man cp nog steeds uitgesteld, dit: man ls Start een nieuwe job. C-z Stel de job man ls uit door het indrukken van de Control-toets en kleine letter z; je zou de job informatie te zien moeten krijgen. man mv Start nog een andere job. C-z Stel het uit. jobs Vraag Bash om een weergave van de huidige taken: $ jobs [1] Stopped man cp [2]- Stopped man ls [3]+ Stopped man mv $ Bemerk de - en +, die respectievelijk de voorlaatste en laatste in de voorgrond geplaatste jobs aanduiden. fg Plaats de laatste in de achtergrond geplaatste taak (man mv, degene met de +) weer in de voorgrond. Als je op de spatiebalk drukt, zal de man page verdergaan met scrollen. C-z Stel man mv opnieuw uit. fg %1 Je kunt naar iedere job refereren door voor het nummer een % te plaatsen. Als je fg gebruikt zonder een job aan te geven, dan wordt uitgegaan van de laatste actieve job. C-z Stel man cp nogmaals uit. kill %1 Kill job 1. Bash zal de job informatie rapporteren: $ kill %1 [1]- Terminated man cp $ Bash vraagt slechts de job te stoppen, en soms zal een job dit niet willen doen. Als de job niet wordt beëindigd, kun je de optie -9 aan kill toevoegen om het verzoek te stoppen en het op te dragen te stoppen. Als voorbeeld: $ kill -9 %1 [1]- Killed man mv $ De optie -9 killt geforceerd en onvoorwaardelijk de job. [139][8] top Breng het top display weer tevoorschijn. Geef de opdracht u in top om alleen je eigen processen te zien. Zoek in de rechterkolom naar de man ls en man mv opdrachten. man cp zal er niet staan aangezien je de opdracht kill er op toepaste. top toont je de systeemprocessen overeenkomstig je jobs; merk op dat het PID links op het scherm niet correspondeert met het job nummer. Wellicht dat je je processen niet kunt vinden omdat ze zich onderaan het scherm bevinden; als je X gebruikt, kun je de xterm van grootte wijzigen om dit probleem op te lossen. Zelfs deze simpele taken bestaan in feite uit meerdere processen, waaronder het man proces en de pager more welke het tegelijkertijd scrollen van een pagina afhandelt. Wellicht merk je dat ook de more processen in top zichtbaar zijn. Je kunt er waarschijnlijk zelf wel achter komen hoe de resterende jobs kunnen worden opgeruimd. Je kunt ze zowel killen (met de kill opdracht) of ieder in de voorgrond plaatsen (met fg) en ze beëindigen. Onthoud dat de opdracht jobs je de lijst met bestaande jobs en de status van deze jobs geeft. Een laatste opmerking: de documentatie van Bash is tamelijk goed, maar het is in het Info helpsysteem te vinden in plaats van in de man pages. Typ info bash om het te lezen. Zie [140]Hoofdstuk 5 voor instructies over het gebruik van het info programma. Bash bevat ook een zeer goede samenvatting van de opdrachten, die toegankelijk zijn via de opdracht help. help toont een lijst met beschikbare onderwerpen; meer informatie over ieder onderwerp is toegankelijk via de opdracht help naam van onderwerp; Probeer bijvoorbeeld het intikken van help cd . Hiermee krijg je de details van de -P en -L argumenten die door cd worden herkend. _________________________________________________________________ Een paar Bash kenmerken In deze sectie worden slechts een paar van de in het algemeen meest gebruikte Bash kenmerken behandeld; zie [141]Hoofdstuk 6 voor een meer complete bespreking. _________________________________________________________________ Tab Voltooiïng De Bash-shell is in staat de bestandsnaam of de opdracht wat je in probeert te typen, te raden, en kan het nog niet volledig getypte opdracht automatisch voor je aanvullen. Typ gewoon het begin van een opdracht of een bestandsnaam en druk op TAB. Als Bash een enkele unieke aanvulling vindt, zal het 't woord afmaken en er een spatie achter plaatsen. Als het meerdere mogelijke aanvullingen vindt, zal het dat deel aanvullen dat alle aanvullingen gemeen hebben en een beep genereren. Je kunt dan zoveel tekens van het woord invullen dat het 't weer uniek maakt, en nogmaals op TAB drukken. Als het geen aanvullingen vindt, zal het slechts een beep genereren. _________________________________________________________________ Je identiteit beheren Op Unix lijkende systemen zijn multi-user, en dus heb je je eigen elektronische identiteit als een gebruiker op het systeem. Typ finger je-gebruikersnaam om de informatie te bekijken die voor het publiek toegankelijk is. Om de naam en de shell die hier worden weergegeven, te wijzigen, kun je de opdrachten chfn en chsh gebruiken. Alleen de superuser kan je login (gebruikersnaam) en directory wijzigen. Je bemerkt dat het aangeeft "No plan" -- een "plan" is gewoon wat informatie welke je voor anderen beschikbaar kunt stellen. Om een plan aan te maken, plaats je de informatie waarvan je wilt dat andere mensen die kunnen zien in een bestand met de naam .plan --- hiervoor gebruik je een teksteditor (zie [142]Hoofdstuk 8). Vervolgens pas je op jezelf de opdracht finger toe om je plan te bekijken. Anderen kunnen de opdracht finger toepassen om je plan te zien en om te controleren of je nieuwe mail hebt ontvangen of je mail leest. Merk op dat deze finger informatie standaard voor het gehele Internet beschikbaar is. Lees over het configureren van inetd en het bestand /etc/services als je dit niet wilt --- eventueel kan een beschrijving worden aangetroffen in het installatie-handboek, voor 't moment zou je de man pages kunnen proberen, of gewoon wat onzin als finger informatie in het bestand kunnen plaatsen. _________________________________________________________________ Hoofdstuk 5. Lezen van documentatie en hulp verkrijgen Soorten documentatie Helaas is de documentatie op Unix lijkende systemen een beetje ongeorganiseerd. Onder Debian, kun je documentatie in ieder geval op de volgende plaatsen aantreffen: * man pages, te lezen met de opdracht man. * info pages, te lezen met de opdracht info. * De /usr/doc/package directory's, waar package de naam is van het Debian package. * /usr/doc/HOWTO/ bevat de Linux Documentatie Project's HOWTO documenten, als je de Debian packages hebt geïnstalleerd waarin ze zich bevinden. * Veel opdrachten accepteren een -h of --help optie. Typ de naam van de opdracht gevolgd door één van deze opties om het uit te proberen. * Het Debian Documentatie Project heeft een aantal handleidingen geschreven, waaronder deze handleiding. Controleer het op [143]hun homepage. * Op de [144]Debian support page staat een FAQ en andere bronnen. Je kunt ook de [145]Linux web site proberen. * Je kunt veel commerciële boeken met behulpzame informatie kopen. De meeste mensen prijzen de merknaam O'Reilly hoog aan. Neem echter ondersteunde vrij te wijzigen en herdistribueerbare handboeken, zoals dit handboek, in overweging als dat mogelijk is. Als je een papieren versie wilt, dan ondersteunt de aanschaffing van vrije handboeken van het Free Software Foundation (beschikbaar bij vele boekwinkels, zoals Borders, en direct via de FSF) de aanmaak van meer vrije software. De verwarrende variëteit aan documentatie-bronnen bestaat om vele redenen. Van info wordt bijvoorbeeld verondersteld dat het man vervangt, maar man is nog niet verdwenen. Het is echter prettig te weten dat er zoveel documentatie bestaat! Dus waar voor hulp te zoeken? Hier zijn wat suggesties: * Gebruik de man pages en de --help of -h optie om snel een samenvatting van de syntax en opties van een opdracht te verkrijgen. Gebruik ook man als een programma nog geen info page heeft. * Gebruik info als een programma info documentatie heeft. * Als niets hiervan werkt, kijk dan in de directory /usr/doc/packagename. * /usr/doc/packagename heeft vaak voor Debian specifieke informatie, zelfs als er een man page of info page is. * Gebruik de HOWTO's voor instructies over hoe iets bepaalds in te stellen, of informatie over je specifieke hardware. In de Ethernet HOWTO staat bijvoorbeeld een schat aan informatie over ethernet-kaarten, en in de PPP HOWTO wordt in detail uitgelegd hoe PPP in te stellen. * Gebruik de handboeken van het Debian Documentatie Project voor uitleg over begrippen en Debian-specifieke informatie. * Als dit allemaal niet lukt, vraag iemand er dan om. Zie de [146]paragraaf Van iemand hulp verkrijgen. Het gebruik van man pages is hierboven besproken in de [147]paragraaf De opdrachtregel en man pages in Hoofdstuk 4. (Het is zeer eenvoudig: druk op de spatiebalk om naar de volgende pagina te gaan, en tik de q in om te stoppen met lezen). info, het bekijken van bestanden in /usr/doc, en het vragen om hulp van iemand worden in dit hoofdstuk besproken. _________________________________________________________________ HOWTO's In aanvulling op hun boeken, heeft het Linux Documentatie Project een serie beknopte documenten gemaakt die beschrijven hoe een bepaald aspect van GNU/Linux kan worden ingesteld. De SCSI-HOWTO beschrijft bijvoorbeeld wat van de complicaties over het gebruik van SCSI --- een standaardwijze waarop met devices wordt gecommuniceerd --- met GNU/Linux. In het algemeen staat in de HOWTO's wat specifiekere informatie over bepaalde hardware configuraties, en ze zullen beter bijgewerkt zijn dat dit handboek. Er zijn Debian packages voor de HOWTO's. doc-linux-text bevat de diverse HOWTO's in tekstvorm; terwijl het doc-linux-html package de HOWTO's in (surprise!) browsable HTML-formaat bevat. Tevens valt op te merken dat Debian packages heeft met vertalingen van de HOWTO's in diverse talen waar je misschien de voorkeur aangeeft als Engels je moedertaal niet is. [148][9] Als je dit hebt geïnstalleerd, zouden ze in /usr/doc/HOWTO moeten staan. Mogelijk kun je echter op het net recentere versies aantreffen, zie [149]http://sunsite.unc.edu/LDP/. _________________________________________________________________ Van iemand hulp verkrijgen De juiste plaats voor het vragen om hulp met Debian is de debian-user mailing list <[150]debian-user@lists.debian.org>. Als je IRC (Internet Relay Chat) weet te gebruiken, dan is er een #debian kanaal op irc.debian.org. Je kunt algemene GNU/Linux hulp aantreffen in de comp.os.linux.* Usenet hiërarchie. Je kunt Usenet vragen en antwoorden terugzoeken met de [151]DejaNews service. Het is ook mogelijke betaalde adviseurs in te huren voor de levering van gegarandeerde ondersteuningsdiensten. [152]De Debian web site heeft meer informatie over veel van deze bronnen. Nogmaals, vraag de auteurs van deze tutorial alsjeblieft niet om hulp. We weten waarschijnlijk toch het antwoord niet op je specifieke probleem; als je een mail stuurt naar debian-user, zal je sneller reacties krijgen en reacties die van meer kwaliteit zijn. Blijf altijd beleefd en onderneeem zelf een poging door het lezen van de documentatie. Denk er aan dat Debian een inspanning is van vrijwilligers en mensen je een gunst bewijzen door hun tijd te geven je te helpen. Velen van hen brengen voor dezelfde diensten per dag honderden dollars in rekening. _________________________________________________________________ Wel of niet stellen van een vraag * Lees wel eerst de vanzelfsprekende documentatie. Zaken zoals opdrachtopties en wat een opdracht doet zullen daar te vinden zijn. * Kijk in de HOWTO-documenten als je vraag gaat over het instellen van zoiets als PPP of Ethernet. * Probeer je ervan te verzekeren dat het antwoord niet in deze tutorial staat (alhoewel we ons realiseren dat een index hierbij behulpzaam zou kunnen zijn---we werken eraan!). * Wees niet bang te vragen, nadat je een poging hebt ondernomen het op te zoeken. * Wees niet bang te vragen naar uitleg om begrippen, adviezen en andere zaken die vaak niet in de documentatie zijn te vinden. * Sluit informatie in welke relevant lijkt. Bijna altijd zal je de Debian-versie die je gebruikt, willen vermelden. Wellicht dat je ook de versie van alle van toepassing zijnde packages wilt vermelden: de opdracht dpkg --status naam van package geeft je deze informatie. Het is ook handig wat te zeggen over wat je tot dusverre hebt geprobeerd en wat het resultaat daarvan was. Neem alsjeblieft de exacte foutmeldingen er in op, als die er zijn. * Verontschuldig je niet voor je onwetendheid, of maak geen excuus voor dat je een newbie bent. Er is geen reden voor dat iedereen een GNU/Linux expert zou moeten zijn om het te gebruiken, net zo min als dat iedereen een monteur zou moeten zijn om een auto te gebruiken. * Post geen mail in HTML. Een aantal versies van Netscape en de Internet Explorer zullen in HTML posten in plaats van in gewone tekst. De meeste mensen zullen deze post zelfs niet lezen, omdat ze in de meeste mail-programma's moeilijk te lezen is. Er zou ergens een instelling voor moeten komen in de voorkeuren om HTML te deactiveren. * Wees beleefd. Denk er aan dat Debian een inspanning is van allemaal vrijwilligers, en iedereen die je helpt doet dit alleen maar omdat het een aardig persoon is. * Mail je vraag nogmaals naar de lijst als je na verscheidene dagen nog geen reactie hebt ontvangen. Misschien dat er heel veel berichten waren en dat er overheen werd gekeken. Of misschien dat niemand het antwoord weet --- als niemand het de tweede keer beantwoord, dan is die kans groot. Mogelijk wil je bij de tweede keer wat meer informatie invoegen. * Beantwoord zelf vragen, als je het antwoord weet. Debian is ervan afhankelijk dat iedereen zijn aandeel levert --- als je een vraag stelt, en iemand anders stelt later dezelfde vraag, dan weet je wat te antwoorden. Doe het dan ook! _________________________________________________________________ Hoofdstuk 6. Gebruiken van de shell Omgevingsvariabelen Ieder proces heeft een omgeving waarmee het verbonden is. Een omgeving bestaat uit een verzameling omgevingsvariabelen. Een variabele is een veranderlijke waarde met een vaste naam. Als voorbeeld, zou de naam EMAIL naar de waarde joe@nowhere.com kunnen verwijzen. De waarde kan variëren --- EMAIL zou ook kunnen verwijzen naar jane@somewhere.com. Aangezien je shell net als ieder ander proces een proces is, heeft het een omgeving. Je kunt de omgeving van je shell bekijken door het intikken van de opdracht printenv. Bij deze wat voorbeelduitvoer: PAGER=less HOSTNAME=icon MAILCHECK=60 MOZILLA_HOME=/usr/local/lib/netscape PS1=$ USER=hp MACHTYPE=i486-pc-linux-gnu EDITOR=jed DISPLAY=:0.0 LOGNAME=hp EMAIL=hp@pobox.com SHELL=/bin/bash HOSTTYPE=i486 OSTYPE=linux-gnu HISTSIZE=150 HOME=/home/hp TERM=xterm-debian TEXEDIT=jed PATH=/home/hp/local/bin:/usr/sbin:/home/hp/.bin:/home/hp/local/bin:/usr/sbin:/u sr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:. _=/usr/bin/printenv Op je systeem zal de uitvoer anders zijn, maar wel vergelijkbaar. Met omgevingsvariabelen heb je een manier om het systeem te configureren. De variabele EDITOR laat je bijvoorbeeld je voorkeurseditor voor het posten van nieuws, schrijven van email, enzovoort selecteren. De variabele HISTSIZE vertelt Bash hoeveel opdrachtregels in de historie bij te houden; je kunt dan met de pijltjestoets naar boven zoveel opdrachtregels terug. Het instellen van omgevingsvariabelen is simpel. Zodra je hebt geleerd hoe, zal je ze waarschijnlijk automatisch in willen stellen, als je inlogt; zie [153]Hoofdstuk 9 voor instructies. Probeer als oefening je shell-prompt en je viewer voor je tekstbestand met omgevingsvariabelen in te stellen: man less Bekijk het online handboek voor de opdracht less. Om je de tekst per scherm tegelijkertijd te laten bekijken, roept man een pager aan die je iedere keer dat je op de spatiebalk drukt, een nieuwe pagina met tekst toont. Standaard maakt het gebruik van een pager genaamd more. Ga je gang en werp een vluchtige blik op de man page van less, een uitgebreide pager. Scroll naar een nieuwe pagina door de spatiebalk in te drukken; druk op q om te stoppen. more zal ook automatisch stoppen als je het einde van de man page bereikt. export PAGER=less Na het lezen over de voordelen van less, wil je het wellicht gebruiken om man pages te lezen. Stel hiervoor de omgevingsvariabele PAGER in. De opdracht om een omgevingsvariabele onder bash in te stellen, heeft altijd dit formaat: export NAME=value. Mocht je ooit tcsh of een andere afgeleide van de C-Shell draaien, dan is de equivalente opdracht setenv NAME value. export betekent het verplaatsen van de variabele van de shell naar de omgeving. Dit betekent dat ook andere programma's dan de shell ze kunnen benaderen. echo $PAGER Dit is de makkelijkste manier om de waarde van een variabele te bekijken. $PAGER vertelt de shell de waarde van de variabele PAGER in te voegen voordat de opdracht wordt aangeroepen. echo kaatst zijn argument terug: in dit geval, echoot het de huidige waarde van PAGER, namelijk less. man more Lees de handleiding van more. Deze keer zou man de pager less moeten hebben aangeroepen. less heeft veel mogelijkheden die in more ontbreken. Je kunt bijvoorbeeld met de b-toets terugscrollen. Je kunt je met de cursorpijlen ook naar beneden en boven verplaatsen (zelfs zijwaarts). less eindigt niet wanneer het 't einde van de man page bereikt; het wacht totdat je de q intikt. PAGER=more man more Als je tijdelijk een andere instelling wilt, kun je een nieuwe waarde plaatsen die alleen effect heeft voor de huidige opdrachtregel. Plaats de NAME=value aan het begin van de opdrachtregel gevolgd door de uit te voeren opdracht. Laat export achterwege. Je kunt wat less-specifieke opdrachten, zoals b uitproberen, om te verifiëren dat ze met more werken en je inderdaad gebruik maakt van more. echo $PAGER De waarde van PAGER zou nog steeds less moeten zijn; de instelling van hierboven was slechts tijdelijk. unset PAGER Als je geen pager meer in wilt stellen, kun je de opdracht unset op de variabele toepassen. man zal dan standaard gebruik maken van more, net als dat 't deed voor je de variabele instelde. echo $PAGER Aangezien PAGER is verwijderd, zal echo niets afdrukken. PS1=hello: Wijzig gewoon voor de lol je shell-prompt. $ wordt hello:. export is niet nodig, omdat we de werking van de shell zelf wijzigen. Er is geen reden de variabele naar de omgeving te exporteren zodat andere programma's het kunnen zien. Technisch gesproken is PS1 een shell variabele in plaats van een omgevingsvariabele. Als je dat zou willen, zou je de shell-variabele kunnen exporteren waarbij je het naar een omgevingsvariabele transformeert. Vervolgens zouden andere programma's het dan kunnen zien: Met name de kinderen van het huidige shell-proces. De volgende sectie legt dit uit. _________________________________________________________________ Ouder- en kindprocessen Alle processen zijn afkomstig van een eerder proces, wat hun ouder proces wordt genoemd. [154][10] De opdracht ps is een handig hulpmiddel voor het verkennen van processen, en het kan worden gebruikt om de verhoudingen tussen ouder-kind te bestuderen. * ps f Deze opdracht vraagt een lijst te tonen van processen die aan jou toebehoren, in een formaat waarmee wordt getoond hoe processen met elkaar in verband staan. ps f zou de volgende uitvoer kunnen tonen: $ ps f PID TT STAT TIME 7270 p5 S 0:00 bash 15980 p5 R 0:00 \_ ps f 19682 p4 S 0:00 bash 15973 p4 S 0:00 \_ man ps 15976 p4 S 0:00 \_ sh -c /bin/gzip -dc '/var/catman/cat1/ps.1.gz' | { export MAN_PN LESS; MAN_PN='ps(1)'; LESS="$LESS\$-Pm\:\$i 15977 p4 S 0:00 \_ /bin/gzip -dc /var/catman/cat1/ps.1.gz 15978 p4 S 0:00 \_ sh -c /bin/gzip -dc '/var/catman/cat1/ps.1.gz ' | { export MAN_PN LESS; MAN_PN='ps(1)'; LESS="$LESS\$-Pm\ 15979 p4 S 0:00 \_ less $ Hier kun je zien dat ik een aantal processen, waaronder twee shells, heb draaien. De shells hebben kindprocessen: shellproces 7270 heeft kindproces 15980 (ps f) en shell 19682 heeft kindproces 15973 (man ps). man ps heeft op zijn beurt een complexe set subprocessen aangeroepen om een manpage te kunnen tonen. Maak je er nu niet druk om wat deze subprocessen doen. Ouders en kinderen hebben een complexe verhouding. Meestal is het zo dat als een ouder afsterft, het kind ook af zal sterven. Zo kun je een hele set processen killen -- --- je kunt bijvoorbeeld door het killen van het ouderproces, 15973 in het voorbeeld hiervoor, alle kinderen van man ps killen. Kinderen erven de omgevingsvariabelen, en een aantal kenmerken zoals de huidige werkdirectory van hun ouders. Als een shell een opdracht uitvoert, brengt het de opdracht voort als een kindproces. Dus de opdracht man erft de omgeving van de shell; als je de variabele PAGER hebt ingesteld, zal man het kunnen zien. Als het je niet is gelukt een variabele te exporteren zal alleen de shell zelf het zien, en zal het niet aan de kinderen, zoals man worden doorgegeven. _________________________________________________________________ Waar opdrachten te vinden zijn: de variabele PATH Als je een opdracht in de shell intikt, zal het deze opdracht op je harddisk op moeten zoeken voordat het dit uit kan voeren. Als de shell de hele disk door had moeten zoeken, zou het erg langzaam zijn; Het zoekt in plaats daarvan in een lijst met bestanden die in de omgevingsvariabele PATH staan. Deze lijst met directory's leggen het zoekpad van de shell aan; als je een opdracht invoert, doorzoekt het iedere directory naar het door jou verzochte programma dat moet worden uitgevoerd. Wellicht dat je de variabele PATH moet wijzigen als je zelf programma's in een niet-standaard lokatie installeert. De waarde van PATH is een door dubbele punten gescheiden lijst met directory's. De standaardwaarde ervan op Debian-systemen is: /usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games Deze waarde is gedefinieerd in het bestand /etc/profile en geldt voor alle gebruikers. Je kunt deze waarde eenvoudig wijzigen, net als je iedere andere omgevingsvariabele wijzigt. Als je de opdracht ls typt, zal de shell eerst in /usr/local/bin zoeken; ls is daar niet, dus zal het /usr/bin proberen; als dat mislukt, zal het /bin controleren. Daar zal het /bin/ls ontdekken, het zoeken stoppen en het programma /bin/ls uitvoeren. Als /usr/bin/X11/ls bestond (het is niet zo, maar doe even alsof), zou het worden genegeerd. Je kunt met de opdracht type zien welke ls de shell zal gaan gebruiken. type ls zal als antwoord /bin/ls opleveren --- probeer het zelf. Probeer te vragen waar type zelf voorkomt: $ type type type is a shell builtin type is eigenlijk geen programma; het is een functie waarin door de shell is voorzien. Je gebruikt het echter net als een extern programma. [155][11] Er zijn zo een aantal opdrachten; typ man builtins om de beschrijving in de manpage ervan te lezen. In het algemeen, hoef je niet te weten of een opdracht een ingebouwde opdracht of een echt programma is; ingebouwde opdrachten zullen echter niet in de uitvoer van ps of top verschijnen, aangezien het geen aparte processen zijn. Ze maken slechts onderdeel uit van de shell. _________________________________________________________________ Aliassen en shell-functies Als je vaak eenzelfde opdracht gebruikt, wordt je er wellicht moe van het in te tikken. bash laat je kortere aliassen voor je opdrachten schrijven. Je kunt ook shell-functies schrijven, wat aangepaste opdrachten samengesteld uit verscheidene andere opdrachten zijn. Stel dat je altijd de --almost-all en --color=auto opties met ls gebruikt. Je raakt al gauw moe van het typen van ls --almost-all --color=auto. Dus maak je een alias: alias myls='ls --almost-all --color=auto' Nu kun je myls typen in plaats van de volledige opdracht. Om te zien wat myls werkelijk is, start je de opdracht type myls op. Je kunt met alias een lijst met de gedefinieerde aliassen per regel te zien krijgen. Shell-functies zijn iets flexibeler dan aliassen. Een alias substitueert gewoon een langere opdracht als je een kortere opdracht intikt. Functies laten je gebruik maken van een serie opdrachten om een actie uit te voeren. Laten we allereerst eens bekijken hoe hier een shell-functie in plaats van een alias voor kan worden gebruikt: myls() { ls --almost-all --color=auto $* } Dit wordt een functiedefinitie genoemd, omdat het de functie een naam (myls) geeft, en vervolgens de betekenis van de naam definieert (een aantal uit te voeren opdrachten). Om een functie te definiëren, schrijf je zijn naam, gevolgd door (). Sluit dan de uit te voeren opdrachten in binnen de accolades ({}). Het deel omsloten door de accolades staat bekend als de body van de functie. Naar de argumenten van de functie kan worden gerefereerd als $*. Dus als je typt: myls /usr /etc zal $* bestaan uit de twee argumenten /usr /etc. Als er geen argumenten zijn, dan zal $* leeg zijn. Je kunt ook met behulp van nummers naar de argumenten refereren. Dus $1 zou in de body van de functie worden vervangen door /usr, en $2 zou worden vervangen door /etc. Typ deze functie (je kunt het achter de shell-prompt intypen; druk na iedere regel op de return): print_arguments() { echo "Eerste argument: $1" echo "Tweede argument: $2" echo "Alle argumenten: $*" } Je kunt met de opdracht type verifiëren dat je de functiedefinitie correct hebt ingevoerd; type print_arguments zal retourneren: print_arguments is a function print_arguments () { echo "Eerste argument: $1"; echo "Tweede argument: $2"; echo "Alle argumenten: $*" } Probeer de functie uit. Als je print_arguments een twee opgeeft, zal het weergeven: Eerste argument: een Tweede argument: twee Alle argumenten: een twee Er zijn heel wat complexere dingen die je met een shell-functie kunt doen; je bent slechts beperkt tot je verbeelding. _________________________________________________________________ Invoer en uitvoer besturen Stdin, stdout, pipelines, en redirectie Ieder proces heeft op z'n minst drie verbindingen met de buitenwereld. De standaard input is één bron van de data van het proces; de standaard output is een plaats waarnaar het proces gegevens stuurt; en de standaard error is een plaats waarnaar het proces zijn foutmeldingen kan sturen. (Deze worden vaak afgekort tot stdin, stdout, en stderr.) De woorden `bron' en `plaats' zijn doelbewust vaag. Deze standaard input en -output locaties kunnen door de gebruiker worden gewijzigd; dit kan het scherm zijn, het toetsenbord, een bestand, en zelfs een netwerkverbinding. De gebruiker kan aangeven welke locaties moeten worden gebruikt. Als je een programma vanuit de shell draait, komt de standaard input gewoonlijk vanaf je toetsenbord en standaard output en error gaan beiden naar je scherm. Je kunt de shell echter vragen deze standaardwaarden te wijzigen. Als voorbeeld zendt de opdracht echo zijn uitvoer naar standaard output, normaal gesproken is dit het scherm. Maar je kunt het in plaats daarvan met het output redirectie teken, '>' naar een bestand sturen. Om bijvoorbeeld het woord "Hello" in het bestand mijn-bestand te plaatsen: echo Hello > mijn-bestand Gebruik cat of je tekstbestandpager (more of less) om de inhoud van mijn-bestand te bekijken. Je kunt de standaard input van een opdracht wijzigen met het input redirectie teken, '<'. more < mijn-bestand bijvoorbeeld, zal de inhoud van mijn-bestand tonen. In de praktijk is dit niet nuttig; voor het gemak accepteert de opdracht more een bestandsnaam als argument. Dus je kunt heel eenvoudig aangeven more mijn-bestand en het effect zal hetzelfde zijn. Onder de motorkap betekent more < mijn-bestand dat de shell mijn-bestand opent, en het vervolgens de inhoud doorgeeft aan de standaard input van more. more mijn-bestand, zonder het redirectie-teken, betekent dat de opdracht more een argument ontvangt, mijn-bestand, zelf het bestand opent en het vervolgens het bestand weergeeft. Er is echter een reden voor de dubbele functionaliteit. Je kunt bijvoorbeeld de standaarduitvoer van de ene opdracht verbinden met de standaardinvoer van de andere opdracht. Dit wordt een pipeline genoemd, en het maakt gebruik van het pipe symbool, '|'. Misschien dat je de GNU General License in spiegelbeeld wilt zien.. Hiervoor gebruik je de opdracht tac (het is cat, maar dan omgekeerd). Probeer het uit: tac /usr/doc/copyright/GPL Helaas gaat het te snel voorbij om het te kunnen lezen. Dus krijg je slechts een paar paragrafen te zien. De oplossing is een pipeline: tac /usr/doc/copyright/GPL | more Hierbij wordt de standaard output van tac genomen, wat de GPL in spiegelbeeld is, en wordt het naar de standaard input van more gezonden. Je kunt zoveel opdrachten als je wilt aanelkaar koppelen. Stel dat je een onverklaarbare wens hebt iedere G te vervangen door een Q; hiervoor gebruik je als volgt de opdracht tr G Q: tac /usr/doc/copyright/GPL | tr G Q | more Je zou hetzelfde effect kunnen verkrijgen als je gebruik maakt van tijdelijke bestanden en redirectie. Als voorbeeld: tac /usr/doc/copyright/GPL > tmpfile tr G Q < tmpfile > tmpfile2 more < tmpfile2 rm tmpfile tmpfile2 Een pipeline is overduidelijk comfortabeler. _________________________________________________________________ Bestandsnaam uitbreiding ("Wildcards") Vaak wil je dat een opdracht op een groep bestanden werkt. "Wildcards" worden gebruikt om een bestandsnaam-uitbreidingspatroon aan te maken: een serie tekens en wildcards wat tot een lijst met bestandsnamen wordt uitgewerkt. Het patroon /etc/* wordt bijvoorbeeld uitgebreid tot een lijst met alle bestanden in /etc [156][12]* is een wildcard die voor iedere serie tekens kan staan, dus het patroon /etc/* zal worden uitgewerkt tot een lijst met alle bestandsnamen die met /etc/ beginnen. Deze lijst met bestanden is vooral handig als een set argumenten voor een opdracht. Als voorbeeld, de /etc directory bevat een serie subdirectory's genaamd rc0.d, rc1.d, enz. Om hiervan de inhoud te bekijken, zou je normaal gesproken typen: ls /etc/rc0.d /etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d /etc/rcS.d Dit is langdradig. In plaats daarvan kun je de ? wildcard gebruiken: ls /etc/rc?.d /etc/rc?.d wordt uitgewerkt tot een lijst met bestandsnamen die beginnen met rc, gevolgd door elk enkel teken, gevolgd door .d. Beschikbare wildcards zijn: * Komt overeen met iedere groep bestaande uit 0 of meer tekens. ? Komt overeen met exact één teken. [...] Als je een aantal tekens in blokhaken omsluit, is het resultaat een wildcard welke overeenkomt met die tekens. [abc] komt bijvoorbeeld overeen met zowel a, als b, als c. Als je na de eerste blokhaak een ^ toevoegt, wordt de betekenis omgedraaid; dus [^abc] komt overeen met elk teken dat geen a, b, of c is. Je kunt een bereik opnemen, zoals [a-j], welke overeenkomt met alles tussen een a en een j. De overeenkomst is hoofdlettergevoelig, dus je moet [a-zA-Z] opgeven om alle tekens toe te staan. Uitbreidingspatronen zijn simpel, zodra je wat concrete voorbeelden hebt gezien: *.txt Hiermee krijg je een lijst met bestandsnamen die eindigen op .txt, aangezien de * met werkelijk alles overeenkomt. *.[hc] Dit geeft je een lijst met bestandsnamen die eindigen op .h of .c. a?? Dit geeft je alle bestandsnamen bestaande uit drie letters die met een a beginnen. [^a]?? Dit geeft je alle bestandsnamen bestaande uit drie letters die niet beginnen met een a. a* Dit geeft je iedere bestandsnaam die begint met een a, ongeacht uit hoeveel tekens de bestandsnaam bestaat. _________________________________________________________________ Interactief/niet-interactief Bash heeft twee verschillende modi: interactief en niet-interactief. Interactief betekent dat je er in kunt typen, en het dingen voor je kunt laten doen. Niet-interactieve shells interpreteren shell-scripts, vergelijkbaar met DOS batch-bestanden. Je geeft een lijst uit te voeren opdrachten en het voert ze uit, maar dan zonder je tussenkomst. Je ziet alle ingetypte opdrachten niet. Natuurlijk zal alle uitvoer ergens worden geregistreerd (de standaarduitvoer, of stdout, normaal gesproken het scherm of een logbestand). We zullen later wat meer ingaan op de niet-interactieve shell. _________________________________________________________________ Interactieve shells Het zal wat langer duren eer men interactieve shells machtig is, juist omdat ze zo krachtig zijn -- je zal waarschijnlijk nooit alles leren! Er is gewoon zoveel dat een shell kan doen, en natuurlijk is het altijd aan verandering onderhevig. We zullen het hier over bash hebben en over wat basisopdrachten welke je leven met een shell er eenvoudiger op zullen maken. Onder bash kan men verscheidene verschillende dingen aan de gang hebben, en dit kan verwarring opleveren. Een shell is een Regel Georiënteerde- of opdrachregel omgeving. De shell wacht altijd op je met een prompt wanneer het wacht op wanneer je iets doet. De standaard debian-prompt is een $. Achter de $-prompt kun je opdrachten intikkken om linux te vertellen dat het iets moet doen, het kan de naam van een programma zijn, of het kan een "interne" opdracht zijn waarin de shell voor je gemak voorziet. _________________________________________________________________ Hoofdstuk 7. Meer over bestanden In de [157]paragraaf Bestanden gebruiken: een tutorial in Hoofdstuk 4 behandelden we het verplaatsen/ hernoemen van bestanden met mv, het kopiëren met cp, verwijderen met rm, het verwijderen van directory's met rmdir, en het aanmaken van directory's met mkdir. In dit hoofdstuk zullen wat meer aspecten over bestanden worden behandeld. _________________________________________________________________ Permissies GNU en Unix systemen zijn zo ingesteld dat ze het toestaan dat meerdere mensen van dezelfde computer gebruik maken, waarbij bepaalde bestanden privé behouden blijven of bepaalde mensen worden behoed voor het aanpassen van bepaalde bestanden. Je kunt dit voor jezelf verifiëren: Log in als jezelf, d.w.z. NIET als root. whoami Verifieert dat je geen root bent. rm /etc/resolv.conf Je zou de melding "Permission denied" moeten krijgen. /etc/resolv.conf is een essentieel systeemconfiguratiebestand --- je hebt geen toestemming het te wijzigen of te verwijderen, tenzij je root bent. Hiermee wordt voorkomen dat je het systeem per ongeluk verprutst, en als het een publiek toegankelijke computer is, zoals één op kantoor of school, voorkomt het dat gebruikers het systeem expres verprutsen. Typ nu ls -l /etc/resolv.conf. Hiermee krijg je uitvoer die er ongeveer zo uitziet: -rw-r--r-- 1 root root 119 Feb 23 1997 /etc/resolv.conf De -l optie aan ls verzoekt om al die aanvullende informatie. De info aan de rechterkant is makkelijk - de grootte van het bestand is 119 bytes, de datum van de laatste keer dat het bestand werd gewijzigd is Feb 23 1997, de naam van het bestand is /etc/resolv.conf. Aan de linkerkant van het scherm wordt het wat gecompliceerder. Als eerste een korte technische uitleg: de -rw-r--r-- is de mode van het bestand, de 1 is het aantal hardlinks naar dit bestand (of het aantal bestanden in een directory), en de twee keer root zijn de gebruiker en de groep welke eigenaar zijn van het bestand. Zo dat was cryptisch. Laten we dit eens langzaam doornemen (behalve het deel over de hardlinks --- zie daarvoor de [158]paragraaf De werkelijke aard van bestanden: hardlinks en inodes in Hoofdstuk 16). _________________________________________________________________ Bestandseigenaarschap Ieder bestand heeft twee eigenaren --- een gebruiker en een groep. Het voorbeeld hiervoor is wat verwarrend, aangezien er zowel een groep met de naam root als ook een gebruiker root is. Groepen zijn gewoon verzamelingen gebruikers aan wie collectief permissie is verleend om een gedeelte van het systeem te benaderen. Een goed voorbeeld is een groep spellen. Je zou bijvoorbeeld je systeem zo kunnen hebben ingesteld dat alleen de mensen in een groep games permissie hebben om spellen te kunnen spelen. Een wat praktischer voorbeeld: stel dat je een computer voor een school aan het instellen bent. Wellicht wil je dat bepaalde bestanden alleen voor leraren toegankelijk zijn, niet voor studenten, dus plaats je alle leraren in een enkele groep. Dan kun je het systeem vertellen dat bepaalde bestanden aan de leden van de groep leraren toebehoren, en dat niemand anders die bestanden kan benaderen. Hiermee kun je groepen op je systeem verkennen: groups Als je dit achter de shell-prompt intikt, zal worden aangegeven van welke groepen je lid bent. Het is zeer waarschijnlijk dat je slechts lid bent van één groep, welke identiek is aan je gebruikersnaam. more /etc/group Dit bestand geeft een opsomming van de groepen die op je systeem voorkomen. Merk de groep root op (de enige deelnemer van deze groep is de root-gebruiker), en de groep die correspondeert met je gebruikersnaam. Er zijn ook groepen als dialout (gebruikers die permissie hebben om via de modem te bellen), en floppy (gebruikers die het diskettestation mogen gebruiken). Je systeem is waarschijnlijk niet zodanig geconfigureerd dat het gebruik maakt van deze groepen --- vermoedelijk kan alleen root op dit moment gebruik maken van het diskettestation en de modem. Probeer man group te lezen voor details over dit bestand. ls -l /home Observeer hoe iedere directory van de gebruiker in eigendom is van die gebruiker en de persoonlijke groep van die gebruiker. (Als je Debian net hebt geïnstalleerd, kan het zijn dat je de enige gebruiker bent). _________________________________________________________________ Mode Naast dat ieder bestand en iedere directory als eigenaar een gebruiker en groep heeft, hebben beiden ook een mode, waarmee wordt vastgesteld wie toestemming heeft om het bestand te lezen, beschrijven en uit te voeren. Er zijn nog wat andere dingen die door de mode worden vastgesteld, maar dat zijn geavanceerde onderwerpen en die zullen we voor nu overslaan. De mode ziet er in de uitvoer van ls als volgt uit: -rw-r--r--. Er zijn hier tien "elementen", en de mode bestaat eigenlijk uit twaalf bits (denk aan bits als schakelingen die aan of uit kunnen zijn). Maar nu zullen we slechts negen van deze bits in aanmerking nemen: degenen die de permissies read, write, en execute regelen voor de gebruiker die eigenaar is van het bestand, de groep die eigenaar is van het bestand, en anderen (iedereen op het systeem, soms genoemd world). Merk op dat drie soorten permissies (read, write, execute) maal drie sets mensen die permissies kunnen hebben (gebruiker, groep, anderen) een totaal geeft van negen elementen. In de mode regel, geeft het eerste "element" het type van het bestand. De - betekent in dit geval dat het een regulier bestand is. Als het een d was, zouden we naar een directory aan het kijken zijn. Er zijn nog andere mogelijkheden maar die zijn te gecompliceerd om hier nu op in te gaan (zie de [159]paragraaf Geavanceerde aspecten van bestandspermissies in Hoofdstuk 16). De resterende negen "elementen" worden gebruikt om de 12 bits waaruit de mode van het bestand bestaat, weer te geven. De basis 9 bits (read, write, en execute voor gebruiker, groep, en anderen) worden weergegeven als drie blokken met rwx. Dus als alle permissies aan staan en dit een regulier bestand is, zal de mode er als volgt uitzien: -rwxrwxrwx. Als het een directory zou zijn met alle permissies uit voor anderen en volledige permissies voor gebruiker en groep, zou het er uitzien als drwxrwx---. (De resterende drie bits worden weergegeven door het wijzigen van de x in s, t, S, of T, maar dit is een gecompliceerd onderwerp dat we bewaren voor de [160]paragraaf Geavanceerde aspecten van bestandspermissies in Hoofdstuk 16.) Voor reguliere bestanden, hebben de "read", "write" en "execute" permissies de volgende betekenissen: * Read permissie, aangegeven door r, geeft permissie de inhoud van een bestand te bestuderen. Voor directory's geeft het permissie de inhoud van een directory weer te geven. * Write permissie, aangegeven door w, geeft permissie wijzigingen aan het bestand aan te brengen. Voor directory's, geeft het permissie om bestanden in de directory aan te maken en ze te verwijderen. * Execute permission, aangegeven door x, geeft permissie het bestand als een opdracht uit te voeren. Het heeft overduidelijk alleen zin de execute permissie in te stellen als het bestand in feite een opdracht is. Aangezien directory's nooit kunnen worden uitgevoerd, heeft de execute bit een andere betekenis. Voor directory's betekent de execute permissie dat bestanden in de directory kunnen worden benaderd. Merk op dat hier sprake is van een wisselwerking met write-permissies: execute permissies moeten worden ingesteld om bestanden in een directory ook maar enigszins te kunnen benaderen, dus zonder execute permissie op een directory, is write-permissie zinloos. Execute permissie voor directory's wordt vaak "zoek" permissie genoemd, aangezien het eigenlijk niets te maken heeft met het uitvoeren. "Bestandstoegangs" permissie zou waarschijnlijk nog een betere naam zijn. Directory modes zijn een beetje verwarrend, dus hier zijn wat voorbeelden van de effecten bij diverse combinaties: r-- De gebruiker, groep, of anderen met deze permissies mogen de inhoud van de directory weergeven, maar verder niets. De bestanden in de directory kunnen niet worden gelezen, veranderd, verwijderd of op enige wijze worden gemanipuleerd. De enige toegestane actie is het lezen van de directory zelf, dat wil zeggen, zien welke bestanden het bevat. rw- Write permissie heeft geen effect bij de afwezigheid van execute permissie, dus deze mode gedraagt zich net als de mode van hiervoor. r-x Deze mode staat toe dat de bestanden in een directory kunnen worden weergegegeven, en geeft permissie die bestanden te benaderen. Bestanden kunnen echter niet worden aangemaakt of verwijderd. Benaderen betekent dat je bestanden kunt bekijken, wijzigen of uitvoeren zoals de permissies voor de bestanden zijn ingesteld. --x Bestanden in deze directory kunnen worden benaderd, maar de inhoud van de directory kan niet worden weergegeven, dus je zal van te voren moeten weten naar welk bestand je zoekt (tenzij je goed kunt gokken). Bestanden kunnen niet worden aangemaakt of verwijderd. rwx Je kunt met de bestanden in deze directory alles doen wat je wilt, zolang als het is toegestaan door de permissies van de bestanden zelf. Write permissie voor directory's geeft aan of je bestanden in een directory kunt verwijderen --- een read-only bestand kan worden verwijderd, als je permissie hebt de directory te beschrijven waarin het bestand zich bevindt. Je kunt een bestand uit een read-only directory niet verwijderen, zelfs niet als je wijzigingen aan het bestand mag aanbrengen. Bestandspermissies hebben niets te maken met het verwijderen van bestanden. Dit betekent ook dat als je de eigenaar bent van een directory, je er tevens bestanden uit kunt verwijderen, zelfs als die bestanden aan root toebehoren. Execute permissie op directory's stelt vast of je toegang hebt tot bestanden --- en of de bestandspermissies erbij worden betrokken. Als je execute permissies hebt voor een directory worden de bestandspermissies voor die directory relevant. Anders doen bestandspermissies er niet toe; je kunt de bestanden toch niet benaderen. Als je execute permissie hebt voor een directory, bepalen de bestandspermissies of je de inhoud van het bestand kunt lezen, het bestand kunt wijzigen, en/of het bestand als een opdracht uit kunt voeren. Tot besluit, permissie om permissies van een bestand of directory te wijzigen heeft geen invloed op de permissies van dat bestand of die directory. Je kunt juist altijd de permissies van de bestanden of directory's waarvan je de eigenaar bent, wijzigen, zolang het je is toegestaan het bestand te benaderen, maar niet van de bestanden waarvan iemand anders de eigenaar is. Dus als je een bestand ook maar enigszins kunt benaderen (dat wil zeggen dat je execute permissie hebt voor de directory waarin het bestand zich bevindt) dan kun je de permissies ervan veranderen. Dit betekent dat je permissies van jezelf niet permanent kunt verwijderen omdat je ze altijd terug kunt geven. Stel dat je de write permissie voor de gebruiker verwijderd van een bestand, waarvan je de eigenaar bent, probeer het bestand dan eens te wijzigen. Het zal niet worden toegestaan, maar je kunt jezelf de write-permissie altijd teruggeven en het bestand dan wijzigen. De enige manier om de mogelijkheid kwijt te raken om de permissies terug te zetten is als je de toegang tot het bestand geheel kwijtraakt. _________________________________________________________________ Permissies in praktijk In deze sectie demonstreren we via een korte schermsessie hoe permissies worden gebruikt. Om permissies te wijzigen, zullen we gebruik maken van de opdracht chmod. cd; touch mijn-bestand Er zijn hier een paar nieuwe trucs. Als eerste kun je ; gebruiken om twee opdrachten op één regel te plaatsen. Je kunt het bovenstaande typen als: $ cd $ touch mijn-bestand of als: $ cd; touch mijn-bestand en uiteindelijk gebeurt er hetzelfde. Ter herinnering cd op zichzelf brengt je terug naar je home-directory. touch wordt normaal gesproken gebruikt om de wijzigingsdatum aan te passen van het bestand naar de huidige tijd, maar het heeft nog een andere interessante mogelijkheid: als het bestand niet bestaat maakt touch het bestand aan. Dus gaan we het gebruiken om een bestand aan te maken waar we mee kunnen oefenen. Gebruik ls -l als bevestiging dat het bestand werd aangemaakt, en om naar de permissies te kijken: $ ls -l -rw-r--r-- 1 havoc havoc 0 Nov 18 22:04 mijn-bestand Uiteraard zullen de tijd en gebruiker/groepsnaam anders zijn als je het uitprobeert. De grootte van het bestand is 0, aangezien touch een leeg bestand aanmaakt. -rw-r--r-- is de standaardwaarde van de permissie mode onder Debian. chmod u+x mijn-bestand Deze opdracht betekent het toevoegen van de (+) execute (x) permissies voor de gebruiker (u) die de eigenaar is van het bestand. Gebruik ls -l om het effect te bekijken. chmod go-r mijn-bestand Hier hebben we met (-) de read permissie (r) voor de groep (g) en voor alle anderen die eigenaar zijn van het bestand (others/alle anderen, o) weggehaald. Gebruik wederom ls -l om de effecten te verifiëren. chmod ugo=rx mijn-bestand Hier hebben we de permissies met (=) voor de gebruiker, groep en anderen op read en execute ingesteld. Hiermee worden de permissies exact zo ingesteld als wat je hebt opgegeven en worden alle andere permissies verwijderd. Dus allen zouden nu moeten zijn ingesteld op rx en van allen zou de permissie w nu moeten zijn verwijderd. Nu kan niemand meer naar het bestand schrijven. chmod a-x mijn-bestand a is een sneltoets voor ugo, of "allen". Dus alle x permissies zouden nu uit moeten zijn gezet. rm mijn-bestand We verwijderen het bestand, maar zonder write-permissies. rm zal vragen of je het zeker weet: rm: remove `mijn-bestand', overriding mode 0444? Je zou moeten reageren door het typen van y en het indrukken van de enter-toets. Dit is een kenmerk van rm en geen feit van permissies - permissies om een bestand te verwijderen komt van de directory-permissies, en je hebt write-permissie in de directory. rm probeert echter behulpzaam te zijn, uitmakend dat als je het bestand niet wilt wijzigen, (en write-permissie dus verwijderde), je het ook niet wilt verwijderen, dus vraagt het 't je. Wat was dat gedoe met 0444 in de vraag van rm? De permissie-mode is een twaalf-cijferig binair nummer, zoals 000100100100. 0444 is dit binaire nummer voorgesteld als een octaal (grondtal 8) nummer, wat de conventionele manier is om een mode te schrijven. Dus je kunt chmod 444 mijn-bestand typen in plaats van chmod ugo=r mijn-bestand. Dit wordt volledig uitgelegd in de [161]paragraaf Geavanceerde aspecten van bestandspermissies in Hoofdstuk 16. _________________________________________________________________ Welke bestanden bevinden zich op mijn systeem? Waar kan ik mijn eigen bestanden plaatsen? Laten we nu als leidraad de bestanden en directory's nemen die je hebt aangemaakt toen je Debian installeerde, nu je door de directory-structuur kunt navigeren. cd naar iedere directory en typ ls om te inhoud te bekijken, als je nieuwsgierig bent. Probeer ls | more als de listing niet op het scherm past, | is het "pipe" teken, wat gewoonlijk op dezelfde toets is te vinden als de backslash. / Zoals reeds vermeld, is dit de root-directory, waarin zich alle andere directory's bevinden. /root Maar verwar / niet met /root! /root is de home-directory van de root-gebruiker, of superuser. Het is een directory genaamd /root, maar het is niet de root-directory /. /home Dit is waar alle normale gebruikers --- dat wil zeggen, alle gebruikers behalve root --- hun home-directory's hebben. Home-directory's worden genoemd naar de gebruiker van wie ze zijn, zoals bijvoorbeeld /home/jane. Als je gebruik maakt van een groot systeem zoals op een school of in een bedrijf, kan het zijn dat de systeembeheerder aanvullende directory's met home-directory's heeft aangemaakt: zoals bijvoorbeeld /home1 en /home2. Op een aantal andere systemen, zal je een aanvullend niveau met subdirectory's zien: /home/students/username, /home/staff/username, enz... Je home-directory is waar je al je persoonlijke werk, email en andere documenten, en persoonlijke configuratie-voorkeuren plaatst. Het is je thuis op het systeem. /bin Deze directory bevat "binaire bestanden", uitvoerbare bestanden die essentieel zijn voor de werking van het systeem. Voorbeelden zijn de shell (bash), en bestandsopdrachten zoals cp. /sbin Deze directory bevat "systeem binaries", utility's die de root-gebruiker of systeembeheerder wellicht wil gebruiken, maar die je vermoedelijk niet bij de dagelijkse activiteiten gebruikt. /usr /usr bevat de meeste bestanden waar je in zal zijn geïnteresseerd. Het heeft veel subdirectory's: /usr/bin en /usr/sbin lijken veel op /bin en /sbin, behalve dat de directory's in /usr niet worden aangemerkt als "essentieel voor de werking van het systeem". Ondanks dat /usr niet essentieel is voor de werking van de computer, bevat deze directory de applicaties die je gebruikt om het echte werk te doen. In /usr zijn ook de /usr/man, /usr/info, en /usr/doc directory's te vinden --- hierin staan respectievelijk de manual pages, info pages, en andere documentatie. En vergeet /usr/games niet! /usr/local Het Debian-systeem installeert niets in deze directory. Je zou het moeten gebruiken als je software installeert die je zelf gaat compileren of enige software die geen deel uitmaakt van een Debian package. Je kunt software ook in je home-directory installeren, als je de enige zal zijn die het gaat gebruiken. /etc /etc bevat alle systeemomvattende configuratiebestanden. Wanneer je iets wilt wijzigen dat gevolgen heeft voor alle gebruikers op je computer --- zoals hoe je een verbinding tot stand brengt met het internet, of wat voor soort videokaart je hebt -- zal je waarschijnlijk als root in moeten loggen en een bestand in /etc moeten wijzigen. /tmp Hier zijn tijdelijke bestanden te vinden, de meeste daarvan zijn door het systeem aangemaakt. Deze directory wordt gewoonlijk op reguliere basis verwijderd, of iedere keer dat je het systeem reboot. Je kunt hier bestanden in aanmaken als je dat wilt, maar wees je er bewust van dat ze mogelijk automatisch worden verwijderd. /var /var bevat "variabele" bestanden, die het systeem automatisch wijzigt. Inkomende mail wordt bijvoorbeeld hier opgeslagen. Het systeem houdt een log bij van zijn eigen acties. Er bevinden zich hier bovendien een aantal andere automatisch gegenereerde bestanden. Wellicht dat je vooral bent geïnteresseerd in de inhoud van /var/log, waarin je foutmeldingen aan zal treffen en waardoor je kunt proberen uit te zoeken wat er met je systeem aan de hand is als er iets verkeerd gaat. Klaarblijkelijk bevinden er zich veel meer directory's op het systeem, te veel om ze allemaal te beschrijven. Voor wijzigende dingen, zal je jezelf gewoonlijk beperken tot je home-directory en /etc. Op een Debian-systeem, is er zeldzaam een aanleiding om iets anders te wijzigen, omdat al het andere automatisch voor je is geïnstalleerd. /etc wordt gebruik om het systeem als geheel te configureren. Je zal je eigen home-directory, een subdirectory van /home gebruiken, voor het configureren van je eigen voorkeuren en het opslaan van je persoonlijke gegevens. De gedachte hierachter is dat je jezelf op dagelijkse basis beperkt tot /home/je-naam, zodat er geen kans is dat je iets kunt breken. Bij gelegenheid kun je als root inloggen om iets in een systeemomvattende directory te wijzigen, maar alleen dan wanneer absoluut noodzakelijk. Je zal natuurlijk geen root-toegang hebben als je Debian op een school of organisatie wordt gebruikt en iemand anders de systeembeheerder is, en je zal dan slechts je home-directory kunnen wijzigen. Dit legt een beperking op wat je met het systeem kunt doen. _________________________________________________________________ Een bestandsbeheerder gebruiken In plaats van het handmatig verplaatsen van bestanden, kun je een bestandsbeheerder gebruiken. Als je veel bestanden verplaatst, kan een bestandsbeheerder je werk efficiënter maken. Er zijn bestandsbeheerders gebaseerd op tekst, zoals de GNU Midnight Commander (typ mc), en een aantal bestandsbeheerders voor het X Window Systeem (bijvoorbeeld gmc voor de X Window versie van de GNU Midnight Commander). Het beschrijven hiervan valt buiten het kader van dit handboek; maar misschien dat je ze wilt uitproberen als de opdrachtregel niet voldoet aan wat je nodig hebt. _________________________________________________________________ Hoofdstuk 8. Aanmaken en wijzigen van tekstbestanden Wat is een tekstbestand? Een tekstbestand is gewoon een normaal bestand dat voor mensen leesbare tekst bevat. Er is op geen enkele manier verder iets speciaals aan. Het andere soort bestand, een binair bestand, is bedoeld om door de computer te worden geïnterpreteerd. Je kunt elk van beiden soorten bestanden met de bestandspager less bekijken, tenminste als je het installeerde (installeer het als je het niet hebt, het is heel handig). Typ less /etc/profile om een voorbeeldtekstbestand te bekijken --- merk op dat je de tekens kunt lezen, zelfs als de betekenis ervan onduidelijk is. Typ less /bin/ls om een binair bestand te bekijken; zoals je kunt zien, is het programma ls niet bedoeld om door mensen gelezen te worden. Het verschil tussen de twee soorten bestanden is zuiver een kwestie van wat er in staat, in tegenstelling tot op een aantal andere systemen (zoals DOS of MacOS) die de bestanden in feite anders behandelen. Tekstbestanden kunnen shell-scripts, documentatie, copyright vermeldingen, of enige andere door mensen te lezen tekst bevatten. Als bijkomstige omstandigheid illustreert dit het verschil tussen broncode en binaire uitvoerbare bestanden. /bin/ls is een binair uitvoerbaar bestand dat je bij Debian kunt downloaden, maar je kunt ook een tekstbestand downloaden waarin wordt aangegeven hoe /bin/ls aan te maken. Dit tekstbestand is de broncode. /bin/ls vergeleken met /etc/profile illustreert hoe belangrijk broncode is als iemand wil begrijpen hoe een stuk software aan te passen. Vrije software voorziet jou en je adviseurs in al deze belangrijke broncode. _________________________________________________________________ Teksteditors Een teksteditor is een programma welke wordt gebruikt voor het aanmaken en wijzigen van de inhoud van tekstbestanden. De meeste besturingssystemen hebben een teksteditor; DOS heeft edit, Windows heeft Notepad, MacOS heeft SimpleText. Debian voorziet in een verbijsterende variëteit aan teksteditors. vi en emacs zijn de twee klassiekers, vermoedelijk het meest indrukwekkend en de meest gebruikten. Zowel vi als emacs zijn heel complex en vereisen wat oefening, maar ze kunnen het wijzigen van tekst uiterst efficiënt maken. emacs draait zowel in een terminal als onder het X Window Systeem; vi draait normaal gesproken in een terminal, maar de variant vim heeft een -g optie waarmee het mogelijk is er onder X mee te werken. Eenvoudige editors zijn onder andere nedit, ae, jed, en xcoral. nedit en xcoral voorzien in makkelijk-te-gebruiken grafische interfaces voor het X Window Systeem. Er zijn tevens verscheidene vi varianten, en een Emacs variant genaamd XEmacs. Deze tutorial zal het gebruik van enig speciale editor niet in detail behandelen, alhoewel we in het kort vi introduceren, aangezien het klein en snel is en het bijna altijd beschikbaar is, en mogelijk moet je het ongeacht je voorkeurseditor ooit gebruiken. Emacs voorziet zelf in een uitstekende interactieve tutorial; laad Emacs met de opdracht emacs en typ F1 t om het te lezen. Emacs is een uitstekende keuze voor nieuwe gebruikers die geïnteresseerd zijn in een editor voor algemeen gebruik of programmeren. _________________________________________________________________ Aanmaken en wijzigen van een tekstbestand met vi vi (uitgesproken als "vee eye") is echt de enige editor die met bijna ieder op Unix lijkend besturingssysteem wordt geleverd, en Debian vormt daarop geen uitzondering. vi werd oorspronkelijk geschreven op de Universiteit van California in Berkeley. De naam van de editor is een afkorting van "visual", waarbij wordt gerefereerd naar het feit dat vi voorziet in een visueel display van het tekstbestand; dit werd ooit als een unieke mogelijkheid aangemerkt, wat je een idee geeft van hoe oud het programma is. Het is wat moeilijk aan vi gewend te raken, maar het heeft krachtige mogelijkheiden. In het algemeen raden we een nieuwe gebruiker aan Emacs voor de dagelijkse taken zoals voor programmeren te gebruiken. vi is echter soms wat comfortabeler of het is de enige beschikbare editor; het is ook een veel kleiner bestand om te downloaden. De volgende bespreking over vi zou ook voor vi varianten zoals elvis en vim moeten gelden. _________________________________________________________________ Aanmaken van een bestand vi testfile Roep vi aan vanuit je home-directory door het intikken van vi gevolgd door de naam van het bestand dat je aan wilt maken. Je zal een scherm te zien krijgen met aan de linkerkant een kolom tildes (~). vi bevindt zich nu in de opdrachtmodus. Alles dat je zal typen wordt als een opdracht opgevat, niet als inhoud om aan het bestand toe te voegen. Je moet een opdracht typen om tekst in te kunnen voegen. i De twee basisopdrachten om in te voeren zijn i, wat betekent "voeg de tekst rechts van de cursor in die ik van plan ben in te gaan tikken", en a, wat betekent "voeg tekst toe aan de rechterkant van de cursor die ik van plan ben in te gaan tikken". Aangezien je je aan het begin van het bestand bevindt, zouden beiden werken. We kozen naar willekeur i. Typ wat tekst in; hier is een diepzinnige stelling van de filosoof Charles Sanders Peirce, als je zelf niets kunt bedenken: And what, then, is belief? It is the demi-cadence which closes a musical phrase in the symphony of our intellectual life. We have seen that it has just three properties: First, it is something that we are aware of; second, it appeases the irritation of doubt; and, third, it involves the establishment in our nature of a rule of action, or, say for short, a habit. Druk na iedere regel op RET, aangezien vi