Linux - Die Alternative

Linux - Die Alternative Markus Demmel, Jonas Osswald, Dennis Stampfer 3. Dezember 2003 Inhaltsverzeichnis 1 Historisches 1.1 Entwicklung von UNIX . . ...
2 downloads 0 Views 361KB Size
Linux - Die Alternative Markus Demmel, Jonas Osswald, Dennis Stampfer 3. Dezember 2003 Inhaltsverzeichnis 1 Historisches 1.1 Entwicklung von UNIX . . . . . . . . . . . 1.1.1 Multics . . . . . . . . . . . . . . . 1.1.2 Erste Anf¨ange . . . . . . . . . . . . 1.1.3 Entwicklung von C . . . . . . . . . 1.1.4 Die Kommerzialisierung von UNIX 1.2 UNIX Philosophy . . . . . . . . . . . . . . 1.3 Entstehung von Linux . . . . . . . . . . . 1.3.1 Vorlauf . . . . . . . . . . . . . . . . 1.3.2 Linux f¨ ur Hacker . . . . . . . . . . 1.3.3 Linux f¨ ur Experten . . . . . . . . . 1.3.4 Linux f¨ ur normale Benutzer . . . . 1.4 “Linux“ = Linux Kernel u. GNU-System . 1.4.1 Was ist eigentlich Linux? . . . . . . 1.4.2 Was macht das Betriebssystem aus? 1.5 Open Source . . . . . . . . . . . . . . . . . 1.5.1 Definition . . . . . . . . . . . . . . 1.5.2 Praxis . . . . . . . . . . . . . . . . 1.6 Freie Software - GPL . . . . . . . . . . . . 1.6.1 Definition . . . . . . . . . . . . . . 1.6.2 GPL . . . . . . . . . . . . . . . . . 1.6.3 Praxis . . . . . . . . . . . . . . . . 1.7 Distributionen . . . . . . . . . . . . . . . . 1.7.1 Was ist eine Distribution? . . . . . 2 Anwendungsgebiete 2.1 Anwendungsbereiche . . . . . . . . . . 2.2 Programmbeispiele . . . . . . . . . . . 2.3 Grenzen, Vor und Nachteile von Linux 2.3.1 Grenzen . . . . . . . . . . . . . 2.3.2 Nachteile von Linux . . . . . . . 2.3.3 Vorteile von Linux . . . . . . . 2.4 Linux im Netzwerk . . . . . . . . . . .

1

. . . . . . .

. . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 6 6 6 6 6 7 7

. . . . . . .

7 7 8 8 8 8 9 9

Linux: Die Alternative 3 Technische Aspekte 3.1 Der Kernel . . . . . . . . . . . . . 3.2 Compilieren . . . . . . . . . . . . 3.3 Das Schalenmodell . . . . . . . . 3.4 X-Window . . . . . . . . . . . . . 3.4.1 Aufbau . . . . . . . . . . . 3.4.2 Start eines Programmes . 3.5 Die Shell . . . . . . . . . . . . . . 3.5.1 Shell Familien . . . . . . . 3.6 Prozessmanagement . . . . . . . . 3.6.1 Prozessbaum . . . . . . . 3.7 Signale . . . . . . . . . . . . . . . 3.7.1 Was sind Signale? . . . . . 3.7.2 Liste wichtiger Signale . . 3.8 Systemkonfiguration . . . . . . . 3.9 Runlevels . . . . . . . . . . . . . 3.10 Hardware unter Linux . . . . . . 3.11 Anmelden an einem Linux System 3.12 Benutzermanagement . . . . . . . 3.13 Rechte im Dateisystem . . . . . . 3.14 Verzeichnisaufbau unter Linux . .

. . . . . . . . . . . . . . . . . . . .

4 Benutzung 4.1 nothing . . . . . . . . . . . . . . . 4.2 VI . . . . . . . . . . . . . . . . . . 4.2.1 Allgemeines . . . . . . . . . 4.2.2 Bedienung . . . . . . . . . . 4.2.3 Start von VIM . . . . . . . 4.2.4 Eine erste Datei . . . . . . . 4.2.5 Kleine Zusammenfasung und 4.3 Environment . . . . . . . . . . . . . 4.4 Kommandozeile . . . . . . . . . . . 4.4.1 Optionen . . . . . . . . . . 4.4.2 Parameter . . . . . . . . . . 4.4.3 Ausgaben umleiten . . . . . 4.5 Programmieren mit der Shell . . . . 4.5.1 Was ist ein Shell-Script? . . 4.5.2 Aufruf . . . . . . . . . . . . 4.5.3 Aufbau und Kommentare . 4.5.4 Variablen . . . . . . . . . . 4.5.5 Kontrollstrukturen: if . . . . 4.5.6 Schleifen: while, for . . . . . 4.5.7 Skript-Beispiel . . . . . . . 4.6 Fazit . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erg¨anzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Markus Demmel, Jonas Osswald, Dennis Stampfer

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

9 9 10 10 10 10 11 11 11 11 12 13 13 14 14 14 15 16 16 16 17

. . . . . . . . . . . . . . . . . . . . .

17 17 17 17 18 18 18 19 19 19 20 21 21 22 22 23 23 23 25 25 25 27

2/27

Linux: Die Alternative

1 Historisches 1.1 Entwicklung von UNIX 1.1.1 Multics Anno 1963 versuchte sich ein Zusammenschluss vieler Hightech-Firmen wie Bell Labs, IBM und sogar das MIT an der Entwicklung eines Multiuser Betriebssystems, das sie Multics nennen wollten. Multics war jedoch zum Scheitern verurteilt, da die Erwartungen, die an es gestellt wurden, einfach u ¨berzogen waren und die Hardware damals noch nicht schnell genug war, um diese Erwartungen vollst¨andig erf¨ ullen zu k¨onnen. “... the problem was the increasing obviousness of the failure of Multics to deliver promptly any sort of usable system, ...“ (...das Problem war die zunehmende Gewissheit, dass Multics auf absehbare Zeit nicht brauchbar sein w¨ urde...) sagte Dennis Ritchie, Multics Mitentwickler und UNIX Hauptentwickler. Als die Firma von Dennis Ritchie, Bell Labs bemerkte, dass das Projekt nur Geld kostete und keinen Erfolg brachte, zog sie sich 1969 aus dem Projekt zur¨ uck. 1.1.2 Erste Anf¨ ange Die Leute, die von den Bell Labs mit Multics betraut worden waren, darunter Dennis Ritchie und Ken Thompson, wollten aber nicht aufgeben. Sie wollten ein echtes Multiuser Betriebssystem, so das etwa jeder Benutzer an einer Datei arbeiten kann, ohne dass man sich in die Quere kommt. Etwas derartiges gab es damals noch nicht, aber sie beschlossen selbst so in System zu entwickeln. Sie wussten zwar noch nicht, ob sie das neue Projekt und die zugeh¨orige Hardware bewilligt bekommen w¨ urden, aber sie begannen schon mit den Vorbereitungen auf Servietten - Notitzzetteln und Tafeln entwarfen sie ein Dateisystem! Einige Wochen sp¨ater bekam Thompson von Bell Labs eine ausrangierte PDP7, einen riesigen Grossrechner. Zun¨achst wollte Ritchie das Spiel “Space Travel“ portieren, also das Spiel auf der PDP7 zum Laufen bekommen. Dieses Unterfangen stellte sich als sehr kompliziert dar, vorallem weil auf dem PDP7 keine Entwicklungsumgebung zur Verf¨ ugung stand. Thompson und Ritchie entwickelten in Assembler eine Entwicklungsumgebung, inklusive Prozessmanagement und Kommadointerpreter, sie implementierten auch ihr zuvor entwickeltes Dateisystem. Das erste UNIX war fertig! 1.1.3 Entwicklung von C Das Team bekam sp¨ater eine PDP 11. Um aber ihr Betriebssystem auf diese zu portieren, h¨atten sie alles neu schreiben m¨ ussen. Um Portierbarkeit, also quasi Hardwareunabh¨angigkeit zu schaffen, wollten sie UNIX in FORTRAN neu schreiben, aber Ritchi war von dieser Sprache

Markus Demmel, Jonas Osswald, Dennis Stampfer

3/27

Linux: Die Alternative sehr schnell genervt, und er begann eine eigenen Programmiersprache zu schreiben, die er C nannte. Das Team schrieb UNIX komplett in C, und sie nannten es UNIX V4. Mit diesem UNIX h¨atte man eine Menge Geld machen k¨onnen, da solch ein System begehrt war, aber Bell war durch Vertr¨age verboten mit Software Geld zu verdienen. Also verteilte Bell den Quellcode von UNIX zum Selbstkostenpreis an verschiedene Universit¨aten, die dann eigenst¨andig anfigen an UNIX herumzuprogrammieren. Die Universit¨at Berkeley brachte sp¨ater sogar ein eignenes UNIX heraus, BSD(Berkeley Source Distribution) 1.1.4 Die Kommerzialisierung von UNIX UNIX entwickelte sich schnell zu Standartbetriebssystem f¨ ur Groß()rechner, etliche Firmen verkauften ein angepasstes UNIX V4, so kam es schnell dazu, dass die Systeme nicht mehr kompatibel waren. Um diesen Misstand zu beheben, wurde 1984 POSIX geschaffen, ein Standart der zumindest ein wenig Kompatibilit¨at gew¨ahrleistete.

1.2 UNIX Philosophy Die UNIX Philosophy ist eine Philosophie, wie man seine Programme schreiben sollte, so dass sie flexibel und universell einsetzbar sind. “This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.“ Doug McIlroy, einer der ersten UNIX Entwickler im Hackers Jargon File. UNIX Programme sollten also keine “eierlegenden Wolfsmilchss¨aue“ sein, sondenr nur eine Aufgabe erledigen, diese jedoch m¨oglichst sauber. Es sollte zu keinen u ¨berschneidungen kommen, so dass 2 verschiedene Prorgamme zuf¨allig das gleiche k¨onnen, die Programme sollten eine scharf abgegrenzte Aufgabe haben. Durch die Shell lassen sich mit diesen kleinen Programmen oftmals verbl¨ uffende Effekte erziehlen.

1.3 Entstehung von Linux 1.3.1 Vorlauf Linus Thorvalds, ein Informatikstudent an der Universit¨at von Helsinki benutzte 1991 auf seinem 386’er ein UNIX Namens MINIX; ein UNIX das f¨ ur Lernzwecke gedacht war und daher eingeschr¨ankt war. Linus war vor allem mit der Terminalemulation unzufrieden, die es ihm erlaubt h¨atte, sich an der UNI einzuw¨ahlen und dort seine e-Mails zu schrieben etc. Da man MINIX nicht weiterentwickeln durfte, schrieb Linus diese Emulation in Assembler selbst, so dass sie quasi ein eigenes Betriebssystem darstellte und von Diskette gebootet werden konnte. Leider konnte er dann keine Dateien auf seiner Festplatte abspeichern, und so schrieb er sich noch einen Festplattentreiber, der dies erm¨oglichte Irgendwie war Linus auf den Geschmack gekommen, so das er immer mehr Features implementierte. Als er einmal aus versehen sein Minix komplett l¨oschte, entschloss er sich, ein eigenes Betriebsystem zu schreiben. Nach etwa einem halben Jahr Entwicklungszeit ver¨offentlichte Linus die Version 0.01 im Internet, damals noch unter dem Namen FreaX. Die Version 0.01 war zwar noch nicht f¨ ur die t¨agliche Arbeit benutzbar, stellte aber eine sehr gute Basis f¨ ur die Weiterentwicklung dar. Was Linus entwickelt hatte, war nur der Systemkern, f¨ ur den Rest benutzte er die GNU Umgebung.

Markus Demmel, Jonas Osswald, Dennis Stampfer

4/27

Linux: Die Alternative 1.3.2 Linux f¨ ur Hacker Dieses 1991 ver¨offentlichte Freax stieß() im Internet auf riesige Resonanz; innerhalb k¨ urzester Zeit waren u ¨ber 100 Menschen an der Entwicklung beteiligt, sehr schnell folgte die Version 0.1, FreaX wurde Linux genannt, da Linux durchaus auch seri¨os werden sollte. Linux unterst¨ utzte immer mehr Ger¨ate, wurde immer stabiler und Slackware 1.0 kam heraus. Slackware war ein komplettes Betriebssystem mit Linux Kern und GNU Umgebung, das sogar Laien von etlichen Disketten herunter installieren konnten. 1.3.3 Linux f¨ ur Experten Das Jahr 1994 war sehr bedeutend f¨ ur die weitere Entwicklung von Linux, in diesem Jahr wurde die kommerziell bedeutungsvolle Version 1.0 herausgebracht, und auf Linux konnte erstmals die Grafische Oberfl¨ache X Windows betrieben werden. Damit war es endg¨ ultig: Linux war kein Hacker Betriebssystem mehr, sondern begann durchaus auch f¨ ur weniger ambitionierte Anwender interesannt zu werden. Zwei Jahre sp¨ater kam dann Linux 2.0 heraus. 1.3.4 Linux f¨ ur normale Benutzer 1998 kam die Grafische Oberfl¨ache KDE heraus, mit etlichen Distributionen war Linux schon relativ leicht bedienbar, da auch immer mehr “mainstream“ Programme wie Netscape und Star Office f¨ ur Linux herauskamen.

1.4 “Linux“ = Linux Kernel u. GNU-System 1.4.1 Was ist eigentlich Linux? Unter “Linux“ sehen die meisten Menschen das gesamte Betriebssystem mit allen seinen Funktionen und Programmen. In Wirklichkeit aber ist “Linux“ nur der minimale Kern des Betriebssystems, der sog. Kernel, der alle Komponenten miteinander vereint - Software wie Hardware. Die Idee stammt - wie so vieles bei Betriebssystemen - aus der Grundidee von UNIX, die unter anderem lautet: “...eine Ansammlung von vielen Programmen, das jeweils nur f¨ ur einen Zweck gedacht ist, diesen aber optimal erf¨ ullt“

1.4.2 Was macht das Betriebssystem aus? An dieser Stelle kommt GNU ins Spiel. “GNU“ wurde 1984 von Richard M. Stallman gegr¨ undet. “GNU“ bedeutet “GNU is not Unix“. Dieses Wortspiel soll klar machen, dass das GNU-System eine Unix-Kompatible und ¨ahnliche Umgebung schaffen sollte, nicht jedoch UNIX ersetzen sollte. Allerdings fehlte noch ein wichtiger Teil: Der Kern. Das Projekt von Linus Torvalds kam GNU also wie gerufen. Erst das GNU-System mit unz¨ahligen kleineren Projekten und der Linux-Kernel ergeben das GNU/Linux System und dienen als Grundlage f¨ ur Distributionen.

1.5 Open Source 1.5.1 Definition Open Source Programme sind Programme, bei denen der Quelltext einsehbar ist, und den man selbst ver¨andern darf, etwa um Verbesserungen einzubringen, oder sie auf die einenen

Markus Demmel, Jonas Osswald, Dennis Stampfer

5/27

Linux: Die Alternative Bed¨ urfnisse zuzuschneiden. Der Autor eines Open Source Programmes gibt zwar die Source weiter und auch das Recht, den Quellcode weiterbenutzen zu d¨ urfen, beh¨alt aber das alleinige Urheberrecht. Open Source Programme sollten f¨ ur alle kostenlos erh¨altlich sein und es sollte keine Einschr¨ankung geben wer dieses Programm benutzen darf und wer nicht. Im Gegensatz dazu exportieren etliche Firmen grunds¨atzlich nicht in sogenannte “Schurkenstaaten“, so dass die Menschen dort nicht in den Genuss der Software kommen. Bei Open Source w¨are diese Einschr¨ankung nicht erlaubt. Bei Open Source-Projekten arbeiten in der Regel ausschließ()lich Freiwillige mit. Es gibt allerdings einige Firmen, die bei ihren eigenen Projekten den Quellcode ver¨offentlicht haben und auch einige Mitarbeiter besch¨aftigen, um diesen zu Pflegen. 1.5.2 Praxis Open Source w¨are ohne Internet beinahe unvorstellbar, da die Menschen die an einem Projekt beteiligt sind, u ¨ber Newsgroups, Chats, Mailinglists und Foren kommunizieren. In der Regel gibt es keine feste Hirarchie, es wird meist abgestimmt, was als n¨achstes passieren soll, wel¨ che Anderungen in die neue Version u ¨bernommen werden sollen etc pp. Wenn sich doch eine Hierarchie gebildet hat, und ein Mitwirkender sich u uhlt, so kann er selbstverst¨and¨bergangen f¨ lich den bestehenden Quellcode kopieren, und unter einem neuem Namen weiterentwickeln. F¨ ur Open Source - Entwicklung wird in der Regel CVS benutzt. CVS ist ein System, das es vielen Menschen erm¨oglicht, zusammen an einem Programm zu arbeiten. So kann CVS etwa die ¨ ¨ Anderungen die ein Programmierer gemacht hat kennzeichnen, jede Anderung dokumentieren, und jeden Stand der Entwicklung wiederherstellen.

1.6 Freie Software - GPL 1.6.1 Definition Bei freier Software versteht man unter “frei“ nicht “frei“ im Sinne von Freibier, sondern “frei“ im Sinne von “Freiheit“. Wenn eine Software frei ist, so muss man sie f¨ ur jeden Zweck einsetzen ¨ k¨onnen. Man darf untersuchen, wie sie funktioniert und eigene Anderungen einbauen, sowie ¨ diese Anderungen dem Rest der Welt zukommen lassen, sie also teilen. Man darf unbegrenzt viele Kopien machen, und diese einfach so verteilen. 1.6.2 GPL Die GPL, die GNU Program Licence ist ein Lizensierungsmodell f¨ ur Software, die genau diesen Anforderungen entspricht. Mittels der GPL ist es m¨oglich, die selbst entworfene Software der Welt zukommen zu lassen, ohne sein Urheberrecht zu verlieren. Durch die GNU GPL darf jeder 1:1 Kopien eines Programmes machen. Man darf diese Programme auch verkaufen, muss allerdings den Quelltext entweder mitliefern oder gew¨ahrleisten, dass dieser mindestens drei Jahre allgemein zug¨anglich ist, also z.B. im Internet zum Download steht. Man darf Programme ¨ ver¨andern, wenn man die Anderungen auch unter die GPL stellt und deutlich kennzeichnet von ¨ wem diese Anderungen sind. 1.6.3 Praxis Wenn jemand einen Fehler in einem GPL Programm gefunden hat kann er diesen sofort verbessern, so wird eine hohe Qualit¨at der Programme gew¨ahrleistet. Um sicherzustellen, dass

Markus Demmel, Jonas Osswald, Dennis Stampfer

6/27

Linux: Die Alternative m¨oglichste viele Leute ihre Software verwenden, was eine hohe Reputation bedeutet, m¨ ussen die Entwickler versuchen, die User des Programms m¨oglichst zufriedenzustellen, also etwa alle gew¨ unschten Features zu integrieren. Denn wenn die User unzufrieden werden, besteht die “Gefahr“, dass jemand den Quellcode kopiert und beginnt unter einem anderen Namen ein Programm mit eben den gew¨ unschten Features zur Verf¨ ugung stellt.

1.7 Distributionen 1.7.1 Was ist eine Distribution? Da unser Linux ja nur aus dem Kern besteht, ben¨otigt der Anwender zus¨atzliche Programme. Dabei sei angefangen bei wichtigen Programmen wie Eingabesteuerung, Druckerspooler bis hin zu Anwendungen wie Textverarbeitung, Email, etc. All diese Programme sind in einer Distribution enthalten. Eventuell halten sich einzelne Programme nicht an (aktuelle) Standards (z.B. werden Konfigurationen an unterschiedlichen Orten gespeichert). All diese Dinge k¨onnen nur mit sehr hohem Aufwand und Wissen von Hand erledigt werden; die Distributionen nehmen dem AnwenAbbildung 1: Informationsfluss der diese Arbeit ab. Ebenso muss Linux erst einmal auf den Rechner kommen - Eine Installationsroutine wird ebenfalls von einer Distribution bereitgestellt. Gleichzeitig liefert eine Distribution auch Handb¨ ucher f¨ ur ihr System. Firmen, die Linux einsetzen bekommen vom Distributor professionellen Support. Beispielsweise bekommt auch ein privater SuSe-K¨aufer 60 Tage Installationssupport per Telefon. Die drei bekanntesten Distributionen: Debian GNU/Linux - http://www.debian.org Suse Linux - http://www.suse.de RedHat - http://www.redhat.com

2 Anwendungsgebiete 2.1 Anwendungsbereiche Linux wird haupts¨achlich in Netzwerken verwendet. Zum Beispiel als Router, Firewall, Mailserver, Webserver im Internet oder Intranet. 64% der Webserver im Internet benutzen den Webserver Apache, u ¨ber 30 Deutschlands gr¨oß()ter Webhoster betreibt LinuxServer, ebenso wie IBM, der Dt. Bundestag, die Stadt M¨ unchen, Spanien und AmericanExpress um nur einige wenige Beispiele zu nennen. Fast ausschliesslich wird Linux in Universit¨aten Abbildung 2: Informationsfluss Markus Demmel, Jonas Osswald, Dennis Stampfer

7/27

Linux: Die Alternative und in der Forschung als Server verwendet. Im Privatbereich als Desktoprechner und in der Wirtschaft als Workstation ist Linux stark am kommen. Der drittschnellste Rechner der Welt l¨auft unter Linux (die ersten zwei unter eigenem Betriebssystem).

2.2 Programmbeispiele “F¨ ur Linux gibt es ja gar nicht die Programme, die ich ben¨otige“, war fr¨ uher ein beliebtes Argument gegen Linux. Heute aber gibt es unz¨ahlige Programme, angefangen von einfachen Dingen wie Email (z.B. Mutt, Evolution), Textverarbeitung (z.B. AbiWord, OpenOffice) u ¨ber Bildbearbeitung (z.B. Gimp) bis hin zu wissenschaftlichen oder medizinischen Zwecken, etwa Software zur Manipulation/Simulation von DNA. Im Haupteinsatzgebiet von Linux - n¨amlich im Netz/Serverbereich - ist selbstverst¨andlich jeder Anspruch gedeckt: Datenbank-Server (z.B. MySQL), Webserver (z.B. Apache), SSL, Firewall, Router/Gateway, Mailserver, DNS, ...

2.3 Grenzen, Vor und Nachteile von Linux Durch die GPL beziehungsweise das Konzept der Open Source ist Linux beinahe ins Unermessliche erweiterbar. Wenn jemandem ein bestimmtes Feature fehlt, so kann er es, sofern er von seinen Kenntnissen her dazu in der Lage ist, selbst Programmieren. Auch der Kernel ist sehr anpassungsf¨ahig, So gibt es Handys, die mit Linux betrieben werden auf der einen, sozusagen kleinen Seite, und auf der anderen Seite ist der drittschnellste Computer der Welt ein Linux Computer, wobei man beachten muss, dass die beiden Schnellsten ein speziell angepasstes Betriebssystem haben, welches nur auf diesen Rechnern l¨auft. 2.3.1 Grenzen Linux ist im Enduser- Desktopbereich noch nicht vollt¨andig ausgereift, blutige Computer-Laien tun sich, wenn sie zum Beispiel neue Hardware kaufen, mit Windows vielmals leichter, schon allein weil die Anleitung zum Anschließ()en auf Windowas angepasst ist. Viele Spiele, besonders solche mit DirectX sind unter Linux problematisch, da DirectX properit¨ar, das heisst das der Quellcode sowie die Standards, sofern es welche gibt, nicht bekannt gegeben werden, entwickelt wird. Deshalb ist es sehr problematisch, ein DirectX f¨ ur Linux zu entwickeln, auch wenn sich das Wine Team, das es m¨oglich machen will das man Windows unter Linux betreiben kann, der Aufgabe angenommen hat, und etliche Spiele, wie Counter Strike und CC3 funktionieren unter Linux mit Wine problemlos, auch wenn die Performance etwas leidet. Hingegen laufen Spiele die unter Open GL entwickelt worden sind unter Linux sogar oft besser als unter Windows, wie etwa Quake 3 Arena. 2.3.2 Nachteile von Linux Einsteiger tun sich oft noch etwas schwer, wenn sie eine L¨osung abseits der Standartwege suchen, also wenn sie zum Beispiel ein Programm selbst kompilieren “m¨ ussen“. Gerade hier setzen aber die kommerziellen Distributionen an, und versuchen den Ein- und Umsteigern das Leben leicht zu machen. Der Benutzerkreis von Linux ist relativ klein, in den meisten Firmen und Privathaushalten l¨auft

Markus Demmel, Jonas Osswald, Dennis Stampfer

8/27

Linux: Die Alternative auf den Desktops Windows, daraus resultiert dann auch, dass einige Hardware Hersteller keine Treiber f¨ ur Linux herausbringen oder zu dem Ger¨at mit ausliefern, und einzelne Hersteller sich sogar weigern, die Standards f¨ ur ihre Ger¨ate herauszugeben. Das Schreiben der Treiber f¨ ur Linux wird dadurch sehr erschwert muss und mittels “Reverse-Engeering“ realisiert werden. Einige Windows - und Apple Programme kann man mit Linux garnicht benutzen, nicht einmal emulieren. Linux geht andere Wege, wenn es daran geht, etwas am Betriebssystem zu verstellen. Nahezu jeder weiß(), dass man unter Windows, um die Aufl¨osung zu ¨andern, lediglich rechts klicken muss, aber ein Laie weiß() nat¨ urlich nicht, welches Konfigurationsprogramm unter Linux daf¨ ur zust¨andig ist.

2.3.3 Vorteile von Linux Linus ist kostenlos beziehungsweise sehr g¨ unstig, man kann sich die CD’s aus dem Internat herunterladen oder sie sich bestellen. F¨ ur SusE 8.0 mit s¨amtlichen 10 CD’s und 8000 Programmen zahlt man bei der Buchhandlung Lehmanns gerademal 20 Euro, f¨ ur 30 Euro mehr bekommt man noch ein sehr umfangreiches Handbuch dazu, in dem sogar auf Programmierung eingegangen wird. Wenn man Linux verwendet, kann mal selbst an der Entwicklung teilhaben. Was viel schwerer wiegt, ist, dass man die volle Kontrolle u ¨ber seinen Computer hat. Da Linux Open Source ist, ist es unm¨oglich, Backdoors einzubauen. Man hat auch ansonsten die Kontrolle, man kann sich zum Beispiel entscheiden, Linux ohne Grafische Oberfl¨ache zu betreiben, man kann sich entscheiden welche man verwenden m¨ochte. Linux unterst¨ utzt auch heute noch alte Hardware, es ist ohne weiteres m¨oglich, Linux auch heute noch auf einem 386’er zu betreiben.

2.4 Linux im Netzwerk Die Vorteile, die Linux f¨ ur den Nutzer im Netzwerk bietet, sind f¨ ur viele der erste Einblick. Dadurch, dass Linux eine stabile und vor allem sichere Grundlage bietet, liegt es nahe, darauf anspruchsvollere Dienste zu starten bei denen 24/7 Uptime erforderlich ist. OpenSourceProgramme liefern nahezu unendliche M¨oglichkeiten vom einfachen Webserver bis hin zu einer hochkomplexen Firewall vor einem Firmennetz mit vielen internen Diensten. M¨oglichkeiten die sonst nur teure Softwarepakete bieten, sind unter Linux zum Nulltarif verf¨ ugbar. Linux unterst¨ utzt mehr Protokolle als jedes andere Betriebssystem und kann auch ohne weiteres als Server jeglicher Art eingesetzt werden, auch wenn er nur Windows-Freigaben zur Verf¨ ugung stellt oder als DNS-Server auf einer LAN-Party steht. In jedem Fall ist Linux die erste Wahl, wenn es um leistungsf¨ahige Netzdienste geht und selbst auf einem alten Rechner wie einem 386/486 kann man einen DSL-Router aufsetzen und ohne Geschwindigkeitseinbuß()en nutzen.

3 Technische Aspekte 3.1 Der Kernel In einem Linux-Kernel befinden sich die wichtigsten Grundfunktionen f¨ ur die Programme, die f¨ ur die n¨otige Kommunikation der Komponenten sorgen. Die Vielzahl der Optionen bietet einem die M¨oglichkeit, sein System vom Multimedia-PC bis zum Server mit einer Netzwerkkarte und Diskette individuell zu konfigurieren ohne unn¨otigen Platz zu verbrauchen. S¨amtliche Treiber liegen im Quelltext vor und k¨onnnen nach Belieben modifiziert werden. Man kann die jeweiligen St¨ ucke des Kernels fest in eine Datei packen lassen oder nachtr¨aglich als Modul laden. Auch

Markus Demmel, Jonas Osswald, Dennis Stampfer

9/27

Linux: Die Alternative w¨ahrend des laufenden Betriebs. Somit wird ein Neustarten des PCs nur notwendig, wenn man das komprimierte Kernel-Image ersetzen will oder falls man neue Hardware einbaut. Der Kernel wird st¨andig weiterentwickelt und ist vollst¨andig in C / Assembler geschrieben. Aktuell sind die Versionen 2.4.23 der stable-Reihe und in der Testphase 2.6.0. Es ist m¨oglich, zwischen verschiedenen Kernel auszuw¨ahlen beim Starten des Rechners. Unterst¨ utze Plattformen sind alle, auf denen der GNU C Compiler l¨auft. Dadurch, dass nur von Privatpersonen der Kernel weiterentwickelt wird und Ger¨atetreiber vom Hersteller nur vereinzelt f¨ ur Linux entwickelt werden, ist die Unterst¨ utzung von neuen Standards nat¨ urlich immer verz¨ogert.

3.2 Compilieren Beim Compilieren, von dem wir schon in der 11. und 12. Klasse in Computertechnik geh¨ort haben, wird der Quelltext, der f¨ ur Menschen verst¨andlicher ist, in Assembler-Operation-Codes u uhrt werden k¨onnen. Dabei unterscheidet sich Linux ¨bersetzt, die dann vom Prozessor ausgef¨ nicht von jedem anderen System, ist aber durch die frei verf¨ ugbaren Quelltexte einfach auf vielen Plattformen einsetzbar. Eine der groß()en St¨arken von Linux ist die M¨oglichkeit, auf jedem System, das den GNU C Compiler verwenden kann, alle Applikationen zu benutzen, da s¨amtliche Programme und Bibliotheken im Quelltext vorliegen, die das System ben¨otigt. Auch besteht nat¨ urlich die M¨oglichkeit, f¨ ur andere Architekturen Programme auf dem eigenen Rechner u ¨bersetzen zu lassen (Crosscompiling) um somit langsameren Rechnern tagelanges Arbeiten zu ersparen. Jedes OpenSource-Programm liegt im Quelltext vor und kann somit auch auf jedem Rechner, der Linux bzw. die erforderlichen Bibliotheken benutzt, compiliert und gestartet werden.

3.3 Das Schalenmodell Man kann den Systemaufbau von UNIX als Schalenmodell betrachten. Das Schalenmodell ist angelehnt an das ISO/OSI Netzwerk Schalenmodell, und gr¨ undet sich genauso wie dieses auf Abstraktion. In UNIX k¨onnen jeweils nur die benachbarten Schichten miteinander u ¨ber genau definierte Kommunikationswege kommunizieren. Das Schalenmodell ¨ diehnt der Ubersichtlichkeit. Nur durch diesen genau Standardisierten Aufbau war es u ¨berhaupt erst m¨oglich, einen Linux Kernel und ein GNU System zu verschmelzen.

3.4 X-Window Die M¨oglichkeiten zu einer grafischen Oberfl¨ache werden unter Linux mittels dem sogenanntem X Window System, oder auch X11 beziehungsweise X realisiert. X wurde anno 1984 am MIT entwickelt und stellt die Grafische Funktion f¨ ur alle UNIX Systeme, also nicht nur f¨ ur Linux. 3.4.1 Aufbau X ist nach dem Client Server Prinzip aufgebaut, wobei man ein wenig mit der Definition aufpassen muss: Der X Server l¨auft am lokalem Computer, und stellt sicher, dass die Grafikkarte korrekt funktioniert, und dass man per Maus oder Tastatur etwas eingeben kann. Die X Clients sind die Programme, die man unter X laufen lassen kann, und diese k¨onnen entweder lokal oder auf einem anderem Computer u ¨bers Netzwerk gestartet werden.

Markus Demmel, Jonas Osswald, Dennis Stampfer

10/27

Linux: Die Alternative X ist durch X.org weitestgehend standardisiert, und XFree86 stellt die h¨aufigste Implementirung dar. X ist Bitmap orientiert, man kann nat¨ urlich auch Vektoren ausgeben, aber dazu ben¨otigt man spezielle Programme, die die Vektoren dann in Bitmaps umrechnen. X sorgt ausschließ()lich f¨ ur die Verwaltung und Kommunikation zwischen Grafikkarte, Maus und Tastatur. X kann nur einfache Linien und Muster zeichnen, alles was dar¨ uber hinausgeht muss von externen Programmen realisiert werden. Aussehen und Verhalten der einzelnen Fenster ist die Sache des Window Managers, dieser u ¨bernimmt auch die Dekorationen, etwa den “Schließ()en“ Button. F¨ ur eine volle Funktionalit¨at der GUI braucht man auß()er einem Window Manager noch ein sogenanntes “toolkit“, welches f¨ ur die Darstellung von Men¨ us sorgt, sowei eine drag and drop Umgebung, wie etwa Corba. 3.4.2 Start eines Programmes Wenn man ein grafisches Programm startet wird ein komplexer Vorgang in Kraft gesetzt. Zun¨achst werden die u ¨blichen Routinen abgearbeitet die zum Start eines Programmes n¨otig sind, wie etwa die Vergabe einer PID. Dann wird das verwendete Toolkit geladen und der Window Manager angesprochen. Der Window Manager k¨ ummert sich um die Fensterdekoration, etwa dass man das Fenster vergr¨ossern und verkleineren kann, das Toolkit k¨ ummert sich um das aussehen des Clients im Fenster. Wenn das Programm dann fertig initialisiert ist, wird das Programm zu einem Client, der auf dem Server geladen wird. Am Ende wird u.U. noch versucht, drag and drop zu laden. Erst dann wird das Programm dargestellt. Von all diesen komplexen Vog¨angen merkt der Anwender nat¨ urlich nichts.

3.5 Die Shell Die Shell ist die Schnittstelle zwischen Benutzer und Betriebssystem. N¨aher kommt man an den Kernel ohne zu programmieren oder einen Debugger zu benutzen nicht heran. Die Shell ist ein Kommandointerpreter. Shells arbeiten textbasiert. Shells sind sehr flexibel, aber die Handhabung ist zugegebener maß()en etwas schwierig. 3.5.1 Shell Familien Es gibt unterschiedliche Shellfamilien, im Wesentlichen die Bourne-Familie und die C beziehungsweise K-Familie. Lange Zeit gab es ausschliesslich die Bourne shell, auch sh genannt. Aber die Entwicklung wurde nie weitergef¨ uhrt. Weil ihm einige Features fehlten schrieb Kerrigan in den sp¨aten 70’ern die C Shell, die den Syntax der Sprache C befolgte. Mit GNU kam dann aber eine neue Version der Bourne Shell - Die Bourne (alternativ: Born) again shell, kurz: bash. Heutzutage ist die bash Standard auf Linux Systemen, Free und Net BSD und MAC OS X. Eine bash sieht in etwa so aus: jojoo@whizz:~$ Wie man dem Struktogramm entnehmen kann arbeitet eine Shell in einer Quasi Endlosschleife, die erst unterbrochen wird, wenn der Benutzer exit eingibt. Unter “Parsen“ versteht man in diesem Fall, dass die bash “Wildcarts“ aufl¨ost.

3.6 Prozessmanagement

Markus Demmel, Jonas Osswald, Dennis Stampfer

11/27

Linux: Die Alternative Jedes Programm wird unter Linux als eigenst¨andiger Prozess behandelt. Doch Vorsicht, ein Programm kann sich auch abspalten (z.B. mit fork()) um mehrere Dinge “gleichzeitig“ zu erledigen. Prozesse k¨onnen also Programme sein, die interaktiv vom Benutzer ausgef¨ uhrt werden, von ihm im Hintergrund gestartet werden, dauerhaft als SystemDienst/Daemon laufen oder bei bestimmten Ereignissen (z.B. USB-Manager beim Einstecken eines USB-Devices) gestartet werden. Abbildung 6: Struktogramm Jeder Prozess bekommt vom System eine einzigartige Process-ID der BASH (PID) zugewiesen, mit dieser er auf einem System eindeutig identifiziert werden kann.

3.6.1 Prozessbaum Entsprechend nach voriger Logik erh¨alt man eine groß()e Anzahl von Kind-Prozessen. Kindoder Unterprozesse k¨onnen entweder eine Abspaltung im Programm sein (Thread) oder ein neuer Prozess, der vom “Eltern-Programm“ aufgerufen wurde. Bei einem laufenden Linux-System ergibt sich folgender Prozess-Baum: init-+-apmd |-atd |-cardmgr |-cron |-cupsd |-eth0 |-6*[getty] |-gkrellm |-i2oevtd |-inetd |-kapmd |-keventd |-khubd |-klogd |-lircd |-nmbd |-pland |-smbd |-sshd |-syslogd |-timeoutd |-xconsole |-xdm-+-XFree86 | ‘-xdm---x-window-manage-+-aterm---bash | |-aterm---bash---pstree | |-aterm---bash---mutt

Markus Demmel, Jonas Osswald, Dennis Stampfer

12/27

Linux: Die Alternative | | ‘-xfs

|-ickle ‘-nedit

Man erkennt deutlich, dass alles vom “init“ ausgeht. init ist das Programm, welches vom Kernel nach dem Systemstart geladen wird und alle Systemdienste startet. Auffallend sind zun¨achst die vielen “d“ am Ende der Namen. Dieses “d“ steht f¨ ur Daemon, also f¨ ur einen Dienst, der vom System bereitgestellt und st¨andig im Hintergrund ausgef¨ uhrt wird. Betrachten wir einmal den Zweig ab xdm: xdm ist ein Display-Manager, dieser hat XFree86 gestartet (f¨ ur eine graf. Oberfl¨ache) und einen weiteren Prozess mit dem selben Namen xdm. Dieser wiederum startet einen Window-Manager (stellt den Desktop bereit). Vom Desktop aus geht es weiter zu einem “aterm“, in diesem l¨auft eine Bash (Kommandozeile), diese wiederum startet das Programm pstree, dessen Ausgabe wir gerade betrachten. Man sieht, Prozesse sind unter Linux sehr ineinander verstrickt und u ¨bersichtlich nach einer Logik gegliedert.

3.7 Signale 3.7.1 Was sind Signale? ¨ Ein Signal ist eine kurze Nachricht ohne Dateninhalt an einen Prozess. Uber Signale kann der Prozess auf Ereignisse reagieren. Das Besondere ist, dass der Programmierer im Code keine besonderen Funktionen einbauen muss, um die Signale zu empfangen.

Selbst, wenn sich das Programm “aufgeh¨angt“ hat, kann es noch Signale empfangen. Es muss keine zus¨atzliche Routine, wie z.B. eine Socket-Verbindung zum Kernel, eingebaut werden um ein Signal zu empfangen. Nehmen wir das Beispiel an, bei einem Server f¨allt der Strom aus. Die USV (Unterbrechungsfreie Stromversorgung) kann den Ausfall f¨ ur die n¨achsten 20min (realistischer Wert) u ucken. ¨berbr¨ Die USV meldet dem Linux Kernel, dass sie aktiviert wurde. Das Linux-System wartet 10 Minuten und hofft auf Strom. Wenn sich die Lage nach 10 Minuten nicht verbessert hat, schickt das System an alle Prozesse das Signal PWR f¨ ur “drohender Stromausfall“ zur Laufzeit. Das Programm bemerkt in den Logfiles eiAbbildung 7: Signale ne Meldung wie “POWERCUT: Shutting down“ und sichert alle ge¨offneten Dateien, beendet sich also ordnungsgem¨aß(). Nachdem das System Warnungs-Signale (PWR) an alle Programme gesendet hat, werden nicht reagierende Programme bzw. Programme, die keine Aktion f¨ ur PWR vorsehen, durch ein TERM-Signal (Terminate - Beenden) bzw. durch ein KILL-Signal (kill - t¨oten) gewaltsam beendet. Danach kann der Server kontrolliert und ohne Datenverlust herunterfahren. Nachdem die USV wieder Strom hat, wird der Server wieder gestartet und nimmt den Betrieb wieder auf.

Markus Demmel, Jonas Osswald, Dennis Stampfer

13/27

Linux: Die Alternative 3.7.2 Liste wichtiger Signale Ein Signal kann mit kill - gesendet und damit ein Ereignis simuliert werden. Einige interessante Signale: Signal SIGINT SIGKILL SIGSEGV SIGTERM SIGCONT SIGSTOP SIGXCPU

NR Zweck 2 Interrupt-Signal von der Tastatur (Ctrl-C) 9 Beendigungssignal (mit Gewalt) 11 Speicherzugriffsfehler 15 Beendigungssignal 18 Weiterfahren, wenn gestoppt 19 Prozessstop 24 CPU Zeitlimite ¨ uberschritten

Eine komplette Liste erh¨alt man mit man 7 signal. Wie bereits erw¨ahnt, werden bei einigen Signalen wird der Zielprozess mit Gewalt beendet, er bekommt jedoch die Chance, das Signal abzufangen und z.B. in seiner Logdatei zu bemerken, warum und an welcher Stelle (z.B. Funktions- oder Zeilenangabe in C) er beendet wurde.

3.8 Systemkonfiguration Alle globalen Einstellungen befinden sich in dem Verzeichnis “/etc“. Umfangreichere Einstellungen werden in einzelnen Unterverzeichnissen zusammengefasst. Bei den meisten neueren Distributionen, die auf mehr Benutzerfreundlichkeit setzen, muss man nur sehr selten etwas von Hand mit dem Editor ver¨andern, hat aber jederzeit die M¨oglichkeit dazu. Das Ab¨andern der Einstellungen ist am Anfang vielleicht ungewohnt, aber weil zu vielen Konfigurationsdateien eine eigene ’Manual Page’, also eine kurze Beschreibung aller Optionen existiert, ist man hier nicht alleine gelassen und kommt relativ schnell zum gew¨ unschten Ergebnis.

3.9 Runlevels In einem Runlevel, befinden sich verschiedene Scripts, die dann Dienste jeglicher Art auf dem PC starten lassen. Die Aufteilung in Runlevels dient also der Zusammenfassung von verschiedenen “Stufen“ in denen sich das OS befindet. Alle Scripts lassen sich selbstverst¨andlich auch einzeln starten und stoppen um z.B. Konfigurationsver¨anderungen zu u ¨bernehmen. Diese Grundidee wurde erweitert durch Abh¨angigkeiten zwischen den einzelnen Scripts, die bestimmt Dienste wie z.B. die Zuweisung von IP-Addressen an die Netzwerkkarten, die erfolgen muss bevor ein anderes Script ausgef¨ uhrt wird wie etwa ein FTP-Server. Die Scripts befinden sich bei den meisten Distributionen hier: bash-2.05b$ ls /etc/init.d/ adsl clock fam net.eth1 numlock q3ded-q3ut2 ...

hdparm serial

lm_sensors vcron

In den Verzeichnissen der einzelnen Runlevels befinden sich nur Verweise auf diese Scripts.

Markus Demmel, Jonas Osswald, Dennis Stampfer

14/27

Linux: Die Alternative /etc/rc.0 halt /etc/rc.1 checkfs clock keymap modules

3.10 Hardware unter Linux S¨amtliche Hardwarekomponenten sind zu finden im Verzeichnis /dev (Devices). Als Beispiel: die Festplatten, die am IDE-Bus angeschlossen sind, zeigen Verkn¨ upfungen auf die entsprechenden Ger¨ate. bash-2.05b$ ls -l /dev/hd? lr-xr-xr-x 1 root root lr-xr-xr-x 1 root root brw-r--r-1 root root brw-r--r-1 root root

22, 22,

32 32 0 64

2003-11-26 2003-11-26 2003-11-26 2003-11-26

15:06 15:06 15:06 15:06

/dev/hda /dev/hdb /dev/hdc /dev/hdd

Unterscheiden kann man hier Charakter/Block-Devices. Ein gutes Beispiel f¨ ur Charakter-Devices ist die Tastatur, deren Daten aus einzelnen Zeichen, also Charakters, bestehen. Bei den BlockDevices werden Daten immer in gr¨oß()eren Paketen u ¨bertragen, wie z.B. bei Speichermedien jeglicher Art. ¨ Ahnlich wie bei Dateien im Dateisystem ist hier je nach Ger¨at der lesende oder schreibende Zugriff m¨oglich, der durch Rechte der Verweise im Dateisystem bestimmt wird. Also ist es unter anderem ohne weiteres m¨oglich, bestimmten Nutzern den Zugriff auf Hardwarekomponenten zu ¨ verbieten. Eine Ubersicht der entsprechenden Links auf die Ger¨ate findet man in der Dokumentation des Kernels (...KernelVerzeichnis/Documentation/devices.txt) Laufwerke m¨ ussen, bevor man sie benutzen kann, erst ins Dateisystem eingebunden werden (gemountet). Dabei wird ein Verzeichnis zugeteilt, das dann die unterste Ebene des Laufwerks ist. Alle Daten der eingebundenen Laufwerke und auch die durch Netzwerkkarten geschickt werden, werden zur Verarbeitung vom Kernel in das “Linux Virtual Filesystem“ u ¨bersetzt.

3.11 Anmelden an einem Linux System Man muss sich an einem Linux System anmelden, um sich zu authentifizieren, also nachzuweisen wer man ist, das beispielsweise das System weiß() welche E-Mails zu der Person passen, welche Dateien sie schreiben darf, welche sie nur lesen darf, auf welche man gar keinen Zugriff hat. Das alles ist wichtig um echten Multiuser-Betrieb zu gew¨ahrleisten. In der Regel geschieht diese Authentifizierung u ¨ber eine Passwortabfrage. Es gibt aber viele verschiendene M¨oglichkeite,n sich einzuloggen. So gibt es zum Beispiel den grafischen Login, der ¨ahnlich aufgebaut ist wie der, den man unter Windows XP zu Gesicht bekommt. Auf Systemen, die keine grafische Oberfl¨ache haben, ist das selbstverst¨andlich unm¨oglich, dort gibt es einen Konsolen-Login, der sieht etwa so aus: Linux-Rechner login: username Password:

Markus Demmel, Jonas Osswald, Dennis Stampfer

15/27

Linux: Die Alternative Per ssh, also remote von einem anderem Computer aus u usselte Netzwerkver¨ber eine verschl¨ bindung. jojoo@whizz:~$ ssh -l jojoo 192.168.0.1 [email protected]’s password:

3.12 Benutzermanagement In jedem Linux-System gibt es einen Benutzer, den Administrator, der Zugriff auf alles hat und dem auch alle essentiellen Dateien ’geh¨orten’. Er startet die grundlegenden Programme, bzw l¨asst sie automatisiert starten, und erm¨oglicht so eine Umgebung f¨ ur andere Benutzer, die auch Programme sein k¨onnen. Der Apache-Webserver beispielsweiß()e l¨auft unter dem Benutzernamen ’httpd’ was soviel bedeutet wie (’Hypertext Transfer Protocol Daemon’, Daemon: siehe Prozessmanagement). F¨ ur andere Systemdienste wie etwa einen weiteren Server, den FTPServer, wird generell auch ein eigener Benutzer angelegt. Der Vorteil dieser Benutzerverwaltung liegt darin, dass der normale Benutzer standardm¨aß()ig keine M¨oglichkeit hat, Konfigurationen oder Programme, die das System bereitstellen, in dem er sich befindet, zu manipulieren. Das erkl¨art auch, warum es nahezu keine Viren f¨ ur Linux gibt. Mit den Befehlen: ’adduser’ und ’groupadd’ werden neue Benutzer/Gruppen im System erschaffen und erhalten eine User-ID / Gruppen-ID (uid/gid). Die Passw¨orter der User werden in der Datei /etc/passwd gespeichert.

3.13 Rechte im Dateisystem Jeder Eintrag im Dateisystem hat folgende Eigenschaften:

Die Dateizugriffsrechte n¨aher ausgef¨ uhrt: Ge¨andert werden sie durch: chmod und chown . (N¨ahere Optionen in den entsprechenden Manual Pages( man chmod / man chown ) Zus¨atzlich zu diesen Eigenschaften gibt es noch weitere Attribute, die aber nicht gesetzt werden m¨ ussen (wie etwa schreibgesch¨ utzt oder ein Backup-Flag). Diese k¨onnen mit lsattr angezeigt werden.

Markus Demmel, Jonas Osswald, Dennis Stampfer

16/27

Linux: Die Alternative 3.14 Verzeichnisaufbau unter Linux Bei jedem Linux-System ist ein ’Root-Verzeichnis’ erforderlich, in dem sich dann alle weiteren befinden. / - Wurzelverzeichnis Der Verzeichnisaufbau unter Linux unterscheidet sich von dem unter Windows, da sich Linux an den Filesystem-Hirarchy-Standard, welcher den Platz von Dateien im Verzeichnisbaum bestimmt und somit auch das Finden erleichtert. Alle g¨angigen Distibutionen halten sich an diese Konventionen. /bin - h¨aufig benutzte essentielle Programme /boot - Kernel-Images /dev - Jedes Ger¨at, das im PC verf¨ ugbar ist (auch virtuelle) /etc - Globale Systemkonfiguration /home - Benutzerverzeichnisse/ -einstellungen /lib - Bibliotheken die Funktionen f¨ ur das System bereitstellen /lost+found - Dateien die nicht regul¨ar gespeichert wurden /mnt - ’ext. Volumes’ z.B. Floppy, CD-Roms, USB-Speicher /opt - andere Programme f¨ ur Linux (z.b. Opera, Quake 3) /proc - Informationen u ¨ber Systemressourcen /sbin - wichtige Programm zur Systemadministration /tmp - Tempor¨are Dateien /usr - Benutzerprogramme/-dokumentation/ bibliotheken /var - Variable Dateien wie Logs, Spoolerauftr¨age

4 Benutzung 4.1 nothing 4.2 VI 4.2.1 Allgemeines VI ist ein Editor, der Name ist eine Abk¨ urzung und bedeutet entweder: Visual oder Visual Insert, hier sind sich die Quellen nicht einig. Es steht jedoch fest, dass Vi der erste Editor war, der mehrere Zeilen auf einmal anzeigen und ¨ mehrere Zeilen bearbeiten konnte. Auch war es zum ersten Mal m¨oglich, die Anderungen die man gemacht hatte direkt am Bildschirm zu sehen. Obwohl die Bedienung f¨ ur “Uneingeweihte“ nicht gerade einfach zu lernen ist, ist VI der meistbenutzte Editor zum Programmieren. VI kann nicht mehr als Dateien editieren, aber das gut. Heutzutage wird der urspr¨ ungliche VI kaum mehr verwendet, staddessen werden “Clones“ wie VIM (VI Improved) oder elVIs verwendet, diese werden vor allem in der UNIX/Linux-Welt h¨aufig benutzt. Es wird gesch¨atzt, dass 1/3 des jemals geschriebenen Quellcodes auf dieser Welt mit VI oder Clones von VI geschrieben werden. Auf nahezu jedem UNIX-System oder verwandten Systemen ist VI installiert. VIM ist der am weitesten verbreitete Clone. Von der Bedienung her gleich wie VI, aber mit extra Features wie Syntax Highliting etc. pp. Die Beschreibung im folgenden bezieht sich auf VIM. 4.2.2 Bedienung VIM kennt grunds¨atzlich mehrer Modi: Den Befehlsmodus und den Eingabemodus. Im Befehlsmodus kann man Fehler verbesserm, Dateien abspeichern, VIM verlassen und noch viel mehr. Im Eingabemodus kann man Text eingeben.

Markus Demmel, Jonas Osswald, Dennis Stampfer

17/27

Linux: Die Alternative 4.2.3 Start von VIM VIM wird in einer Shell, wie etwa der Bash gestartet. vim started VIM vim startet vim und bearbeitet . Existiert nicht, so wird eine neue, leere Datei angelegt.

4.2.4 Eine erste Datei Ist VIM gestartet, so ist es logisch, dass man etwas schreiben will. Text schreibt man immer im Eingabemodus, diesen betritt man durch Dr¨ ucken der i-Taste. Unten links stehte jetzt --INSERT-- und man kann seinen Text eingeben. Hat man einen Rechschreibfehler entdeckt und will diesen korrigieren, so verl¨asst man den Eingabemodus mit der Esc und man¨ovriert sich mit den Cursortasten zu dem Rechtschreibfehler. Den Buchstaben unter dem Cursor l¨oscht man mit der x Taste (im Befehlsmodus oder regul¨ar mit Backspace im Eingabe-Modus). Um wieder etwas einzugeben, dr¨ uckt man wieder die i Taste, und man kann links vom Cursor den Text eingeben. Um wieder zum Ende der Datei, die man gerade editiert zu kommen, dr¨ uckt man dann wieder Esc Taste und geht mit den Cursortasten oder mit Hilfe der Pos 1, Ende, Pg-UP, Pg-DOWN wieder zur Endposition. Will man den Text unter dem Namen first-vi-file abspeichern, so dr¨ uckt man wieder Esc, um aus dem Editiermodus in den Befehlsmodus zu kommen und schreibt anschließ()end: :w first-vi-file. Man best¨atigt mit Enter. Wenn man VIM mittels vim gestartet hat, und unter speichern will, schreibt man im Befehlsmodus :w. Bitte den Doppelpunkt am beginn beachten! Um VIM zu verlassen, ohne die Datei zu sichern, schreibt man :q!.

4.2.5 Kleine Zusammenfasung und Erg¨ anzung Esc wechselt von Editier- in Befehlsmodus i wechselt von Befehls- in Editiermodus :w Speichert die Datei ab, mit der VIM gstartet wurde :w speichert unter :q! beendet vi Man kann Befehle auch kombinieren: :wq sichert die Datei und beendet VIM / sucht nach :syntax on schaltet syntax highlighting an.

4.3 Environment Wie auch in anderen Betriebssystemen, ist es festgelegt, wo ausf¨ uhrbare Dateien (=Programme) gespeichert werden. Unter Linux gibt es dazu die Umgebungsvariable $PATH im sog. Environment. Hier sind alle Umgebungsvariablen gespeichert, die Programme ben¨otigen k¨onnten. Eine ¨ Ubersicht erh¨alt man mit dem Kommando printenv:

Markus Demmel, Jonas Osswald, Dennis Stampfer

18/27

Linux: Die Alternative dennis@schleptop:/$ printenv ... USER=dennis LANG=de_DE@euro LOGNAME=dennis SHELL=/bin/bash HOME=/home/dennis TERM=rxvt PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games ...

Wie wir sehen, sucht unsere Shell, nach ausf¨ uhrbaren Programmen in den Pfaden /usr/local/bin, /usr/bin, /bin/, /usr/bin/X11 und in /usr/games (siehe dazu auch “Dateisystem“) Betrachten wir einmal die Variable $LANG. Hier wird gespeichert, welcher Zeichensatz f¨ ur die Konsole benutzt wird. de DE steht f¨ ur Deutsche Zeichen mit Umlauten, @euro bedeutet mit Euro-Unterst¨ utzung. Da das Euro-Zeichen nicht im ASCII-Code integriert ist, muss es extra vom System erzeugt werden. M¨ochte das Programm XY z.B. Einstellungen im Heimatverzeichnis des Benutzers in einem Unterverzeichnis XY-settings speichern, so kann der Pfad im Programm mit $HOME/XY-settings/configurati angesprochen werden. F¨ ur jeden Benutzer wird die Konfiguration am richtigen Ort gespeichert, n¨amlich im Beispiel /home/dennis/XY-setti...

4.4 Kommandozeile N¨aher als mit der sog. Kommandozeile kommen wir an den Kernel von Linux nicht heran. Auf dieser Konsole l¨auft eine “Shell“, welche Eingaben entgegen nimmt und ausf¨ uhrt. Einige wichtige davon sind: cd () Change Directory cp Kopiert Datei(en) ls () Listet den Inhalt eines Verzeichnisses auf cat Gibt den Inhalt einer Datei nach stdout aus less Datei-Viewer: Pfeil hoch/runter, q zum Beenden

4.4.1 Optionen Gegen¨ uber einer GUI hat die Kommandozeile den klaren Vorteil, dass das Verhalten der dort aufgerufenen Programme schon vor dem Programmstart festgelegt werden kann. Dies geschieht u ¨ber sog. Parameter bzw. Argumente. Beispielsweise m¨ochten wir nicht nur den Inhalt eines Verzeichnisses (mit ls) sehen, sondern auch gleichzeitig wissen, wem eine Datei geh¨ort, wer darauf schreiben darf und wie groß() sie ist. Da wir nicht wissen, welche Argumente wir angeben m¨ ussen, benutzen wir --help: dennis@schleptop:~$ ls --help Benutzung: ls [OPTION]... [DATEI]... Auflistung von Informationen der DATEIen (Standardvorgabe ist das momentane Verzeichnis). Alphabetisches Sortieren der Eintr¨ age, falls weder -cftuSUX noch --sort angegeben. (...) -l Verwendung eines langen Listenformates. -h, --human-readable Ausgabe von Gr¨ oßen in menschenlesbarem Format (z.B. 1K 234M 2G).

Markus Demmel, Jonas Osswald, Dennis Stampfer

19/27

Linux: Die Alternative (...) dennis@schleptop:~$ Wir sehen, -l und -h bzw. die lange Version von -h --human-readable f¨ uhrt zu unserem Ziel: dennis@schleptop:~$ ls -l -h ODER dennis@schleptop:~$ ls -lh ODER dennis@schleptop:~$ ls -l --human-readable Die u ¨bergebenen Optionen k¨onnen auch getauscht werden. Wir bekommen folgende Ausgabe, wenn wir ls auf das Verzeichnis /tmp/ anwenden wollen: dennis@schleptop:~$ ls -lh /tmp/ insgesamt 20k -rw-r--r-1 dennis dennis drwx-----2 dennis dennis -rw-r--r-1 dennis dennis -rw-r--r-1 dennis dennis dennis@schleptop:~$

5.6k 4.0k 3.3k 44

23. 23. 23. 23.

Nov Nov Nov Nov

18:41 17:05 18:35 18:09

pipe.gif ssh-XXObLiUA stdfiles.gif x

4.4.2 Parameter Es gibt aber auch Optionen, denen man einen Wert mitgeben kann, wie z.B. dem Befehl man, welcher eine sehr genaue Beschreibung eines Befehls ausgibt. Die Option -k ben¨otigt einen Wert: dennis@schleptop:~$ man --help usage: man [-c|-f|-k|-w|-tZT device] [-adlhu7V] [-Mpath] [-Ppager] [-Slist] [-msystem] [-pstring] [-Llocale] [-eextension] [section] page ... (...) -k, --apropos Gleichwertig zu einem Aufruf von apropos. dennis@schleptop:~$ Die Option -k sucht nach einem Schl¨ usselwort in der “Handbuch“-Datenbank: dennis@schleptop:~$ man -k apropos was bitte? dennis@schleptop:~$ man --apropos apropos was bitte? dennis@schleptop:~$ man -k shutdown shutdown (8) - bring the system down dennis@schleptop:~$ Unsere Suche gab die gleichnamige Manpage “shutdown“ als Ergebnis. Zum Einsehen der Manpage kann jetzt eingegeben werden: dennis@schleptop:~$ man shutdown (...)

Markus Demmel, Jonas Osswald, Dennis Stampfer

20/27

Linux: Die Alternative 4.4.3 Ausgaben umleiten Es besteht auch die M¨oglichkeit, die Ausgabe von Befehlen durch Umleitungen mit anderen Programmen zu kombinieren. Dies kann z.B. n¨ utzlich sein, wenn wir die Ausgabe eines Programmes in einem Editor bearbeiten m¨ochten, oder sie in einem “Pager“ wie less ansehen m¨ochten: dennis@schleptop:~$ ls -l | less

Mit dem Zeichen | (AltGr+ benutzt werden: dennis@schleptop:~$ ls -l insgesamt 32 drwxr-xr-x 2 root root drwxr-xr-x 8 root root drwxr-x--2 games games drwxr-xr-x 3 root root dennis@schleptop:~$ ls -l > datei.txt dennis@schleptop:~$ cat datei.txt insgesamt 32 drwxr-xr-x 2 root root drwxr-xr-x 8 root root drwxr-x--2 games games drwxr-xr-x 3 root root dennis@schleptop:~$

4096 4096 4096 4096

2003-08-30 2003-05-13 2003-09-10 2003-05-01

22:11 17:12 15:38 16:05

bin blackdown-jdk-1.4.1 epsxe netscape

4096 4096 4096 4096

2003-08-30 2003-05-13 2003-09-10 2003-05-01

22:11 17:12 15:38 16:05

bin blackdown-jdk-1.4.1 epsxe netscape

Wir k¨onnen nicht nur nach Dateien schreiben, sondern auch stdin von einer Datei lesen: Entweder u ¨ber eine Pipe mit: cat datei.txt|grep ‘‘net‘‘ oder viel besser mit 17 ]; then echo "Vollj¨ ahrig!" else echo "Minderj¨ ahrig!" fi

4.5.6 Schleifen: while, for Wie auch in anderen Programmiersprachen d¨ urfen in Shell-Scripten keine Schleifen fehlen: 1 while [ BEDINGUNG ]; do 2 ... 3 done F¨ ur die t¨agliche Arbeit ist es oft wichtig, eine Anzahl von Befehlen auf Dateien im aktuellen Verzeichnis anzuwenden. Dazu bietet sich eine for-Schleife an: 1 for SELEKTOR in LISTE; do 2 Anweisungen 3 done

Markus Demmel, Jonas Osswald, Dennis Stampfer

24/27

Linux: Die Alternative LISTE m¨ ussen nicht die Dateien in einem Verzeichnis sein, LISTE kann auch direkte Werte enthalten wie “eins zwei drei“. Dann wird Anweisung insgesamt dreimal ausgef¨ uhrt: Erster Durchlauf: $SELEKTOR=eins Zweiter Durchlauf: $SELEKTOR=zwei Dritter Durchlauf: $SELEKTOR=drei Ein Beispiel soll eine for-Schleife verdeutlichen: 1 2 3 4 5

#!/bin/bash echo "Drucke alle Textdateien in $PWD auf dem Bildschirm..." for DATEI in *.txt; do cat $DATEI done

$PWD ist eine Variable aus dem Environment und hat den Pfad des aktuellen Arbeitsverzeichnisses. Das Script gibt alle Dateien, die auf das Muster *.txt passen, auf dem Bildschirm aus.

4.5.7 Skript-Beispiel Nehmen wir dieses Beispiel zur Verdeutlichung von Shell-Skripten: ---Datei: /tmp/backup--1 #!/bin/bash 2 # Written by: niemand 3 4 if [ "$1" == "" ]; then 5 echo "Falsche Anzahl an Parametern!" 6 echo "$0 " 7 exit 1 8 fi 9 ZIEL=$1 10 11 for DATEI in *; do 12 if [ -f $DATEI ]; then 13 echo "Kopiere $DATEI nach $ZIEL" 14 cp $DATEI $ZIEL 15 else 16 echo "$DATEI ist ein Verz. Nicht kopiert." 17 fi 18 done Nehmen wir folgende Verzeichnisstruktur an: Arbeitsverzeichnis: /tmp/test Verz. des Scripts: /tmp/ Name des Scripts: backup Backup-Verzeichnis: /tmp/test/sicherung Datei: /tmp/test/a.txt Datei: /tmp/test/b.txt

Markus Demmel, Jonas Osswald, Dennis Stampfer

25/27

Linux: Die Alternative Datei: /tmp/test/d.txt Verzeichnis: /tmp/test/c Das Script liefert uns folgende Ausgabe: dennis@schleptop:/tmp/test$ ls a.txt b.txt c d.txt sicherung dennis@schleptop:/tmp/test$ ../backup sicherung/ Kopiere a.txt nach sicherung/ Kopiere b.txt nach sicherung/ c ist ein Verz. Nicht kopiert. Kopiere d.txt nach sicherung/ sicherung ist ein Verz. Nicht kopiert. dennis@schleptop:/tmp/test$ ls -lh sicherung/ insgesamt 12k -rw-r--r-1 dennis dennis 7 23. Nov 21:28 a.txt -rw-r--r-1 dennis dennis 7 23. Nov 21:28 b.txt -rw-r--r-1 dennis dennis 7 23. Nov 21:28 d.txt dennis@schleptop:/tmp/test$ Zun¨achst pr¨ ufen wir mit Hilfe einer if-Anweisung (Z. 4-8), ob KEIN Parameter $1 u ¨bergeben wurde. Wenn ja (also: wenn Programm ohne Parameter aufgerufen wurde) geben wir eine Warnmeldung und die korrekte Syntax aus(Z. 5,6) und beenden schließ()lich unser Programm(7) mit dem Fehlercode 1, denn ein “Fehler“ (kein Parameter u ¨bergeben) ist aufgetreten. Wenn ein Parameter u ¨bergeben wurde wird das Programm einfach fortgesetzt und der Variable $ZIEL der Wert von $1 (unser Parameter) zugewiesen (Z. 9). Als n¨achstes benutzen wir eine For-Schleife (Z. 11-18), die alle Objekte im aktuellen Verzeichnis durchl¨auft (Z. 11): Es wird mit if [-f $DATEI ] gepr¨ uft, ob $DATEI eine Datei ist, wenn ja, wird sie nach $ZIEL kopiert (Z. 14). Falls $DATEI keine Datei, sondern ein Verzeichnis oder ein Symlink ist, wird eine “Nicht-Kopiert.“-Meldung ausgegeben (Z. 16).

4.6 Fazit Durch die Idee von OpenSource und durch die GPL wurde Linux zu einer freien ernsthaften Alternative zu kommerziellen Betriebssystemen, das in Punkten wie Sicherheit und Stabilit¨at fast nicht zu schlagen ist. Es ist flexibel, vielseitig verwendbar und individuell anpassbar an die eigenen Bed¨ urfnisse. In nicht allzu ferner Zukunft wird Linux eine noch gr¨oß()ere Rolle spielen, als es ohnehin schon tut.

Markus Demmel, Jonas Osswald, Dennis Stampfer

26/27