E-Book, Deutsch, 481 Seiten
Reihe: Rheinwerk Computing
Wendzel / Plötner Linux
2. Auflage 2024
ISBN: 978-3-367-10266-2
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Der Grundkurs
E-Book, Deutsch, 481 Seiten
Reihe: Rheinwerk Computing
ISBN: 978-3-367-10266-2
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection
Was haben alle Supercomputer der Welt, mehr als 75 % der Internet-Server und ein Großteil der Systeme in Microsofts Azure-Cloud gemeinsam? Sie alle nutzen Linux! Das offene Betriebssystem hält die IT-Welt zusammen und ist eine wichtige Grundlage in jedem IT-Beruf oder im Informatikstudium. Wie Linux genau funktioniert und wie Sie sich sicher im Linux-System bewegen, das erfahren Sie in diesem kompakten Grundkurs. Er zeigt Ihnen, wie Sie Linux-Tools richtig nutzen, effizient auf der Shell arbeiten, Rechner via SSH administrieren und sich in einem Linux-Netzwerk zurechtfinden.
Aus dem Inhalt:
- Linux als Workstation: Installation und erste Schritte
- Der Kernel: So funktioniert Linux
- Mit der Shell arbeiten
- Werkzeuge für die Konsole
- Shell-Programmierung und Vim
- Netzwerke: Grundlagen und Tools
- Softwareentwicklung mit Linux
- Linux auf dem Raspberry Pi
Steffen Wendzel ist Professor an der Universität Ulm und dort Leiter des Instituts für Organisation und Management von Informationssystemen (OMI) und des Kommunikations- und Informationszentrums (kiz). Er promovierte und habilitierte sich an der FernUniversität in Hagen. Steffen Wendzel veröffentlichte über 180 Werke und beschäftigt sich seit seinem vierzehnten Lebensjahr mit Linux. Webseite: https://www.wendzel.de
Autoren/Hrsg.
Weitere Infos & Material
Vorwort ... 19 1. Einleitung ... 21 1.1 ... Warum Linux? ... 24 1.2 ... Grundbegriffe: Kernel, Distribution, Derivat ... 25 1.3 ... Die Entstehungsgeschichte von Linux ... 28 1.4 ... Zusammenfassung ... 41 1.5 ... Aufgaben ... 42 2. So funktioniert Linux ... 43 2.1 ... Grundlagen ... 44 2.2 ... Aufgaben eines Betriebssystems ... 61 2.3 ... Prozesse, Tasks und Threads ... 66 2.4 ... Speichermanagement ... 85 2.5 ... Eingabe und Ausgabe ... 102 2.6 ... Zusammenfassung ... 111 2.7 ... Aufgaben ... 112 3. Erste Schritte ... 113 3.1 ... Die Unix-Philosophie ... 113 3.2 ... Der erste Kontakt mit dem System ... 120 3.3 ... Bewegen in der Shell ... 133 3.4 ... Arbeiten mit Dateien ... 137 3.5 ... Der Systemstatus ... 140 3.6 ... Hilfe ... 142 3.7 ... Zusammenfassung ... 145 3.8 ... Aufgaben ... 146 4. Grundlagen der Shell ... 147 4.1 ... Einführung und Überblick ... 147 4.2 ... Konsolen ... 155 4.3 ... screen ... 156 4.4 ... Besseres Arbeiten mit Verzeichnissen ... 158 4.5 ... Die elementaren Programme ... 161 4.6 ... Programme für das Dateisystem ... 164 4.7 ... Ein- und Ausgabeumlenkung ... 168 4.8 ... Pipes ... 171 4.9 ... xargs ... 174 4.10 ... Zusammenfassung ... 175 4.11 ... Aufgaben ... 175 5. Prozesse in der Shell ... 177 5.1 ... Sessions und Prozessgruppen ... 177 5.2 ... Vorder- und Hintergrundprozesse ... 179 5.3 ... Das kill-Kommando und Signale ... 186 5.4 ... Prozessadministration ... 190 5.5 ... Zusammenfassung ... 199 5.6 ... Aufgaben ... 199 6. Reguläre Ausdrücke ... 201 6.1 ... Grundlagen und Aufbau regulärer Ausdrücke ... 201 6.2 ... grep ... 203 6.3 ... awk ... 207 6.4 ... sed ... 228 6.5 ... Zusammenfassung ... 238 6.6 ... Aufgaben ... 238 7. Werkzeuge für die Konsole ... 239 7.1 ... touch -- Zeitstempel von Dateien setzen ... 239 7.2 ... cut -- Dateiinhalte abschneiden ... 240 7.3 ... paste -- Dateien zusammenfügen ... 241 7.4 ... tac -- Dateiinhalt umdrehen ... 242 7.5 ... column -- Ausgaben tabellenartig formatieren ... 242 7.6 ... colrm -- Spalten entfernen ... 243 7.7 ... nl -- Zeilennummern für Dateien ... 245 7.8 ... wc -- Zählen von Zeichen, Zeilen und Wörtern ... 245 7.9 ... od -- Dateien zur Zahlenbasis x ausgeben ... 246 7.10 ... split -- Dateien aufspalten ... 247 7.11 ... script -- Terminal-Sessions aufzeichnen ... 248 7.12 ... bc -- der Rechner für die Konsole ... 249 7.13 ... Der Midnight Commander ... 251 7.14 ... Zusammenfassung ... 254 7.15 ... Aufgaben ... 255 8. Eigene Shellskripte entwickeln ... 257 8.1 ... Grundlagen der Shellskript-Programmierung ... 257 8.2 ... Variablen ... 260 8.3 ... Arrays ... 265 8.4 ... Kommandosubstitution und Schreibweisen ... 265 8.5 ... Argumentübergabe ... 267 8.6 ... Funktionen ... 268 8.7 ... Bedingte Anweisungen ... 273 8.8 ... Schleifen ... 278 8.9 ... Menüs bilden mit select ... 282 8.10 ... Temporäre Dateien ... 284 8.11 ... Syslog-Meldungen via Shell ... 286 8.12 ... Pausen in Shellskripte einbauen ... 286 8.13 ... Startskripte ... 287 8.14 ... Das Auge isst mit: der Schreibstil ... 288 8.15 ... Ein paar Tipps zum Schluss ... 289 8.16 ... Weitere Fähigkeiten der Shell ... 290 8.17 ... Zusammenfassung ... 291 8.18 ... Aufgaben ... 291 9. Der vi(m)-Editor ... 293 9.1 ... vi, vim, gvim und neovim ... 294 9.2 ... Erste Schritte ... 295 9.3 ... Kommando- und Eingabemodus ... 296 9.4 ... Dateien speichern ... 296 9.5 ... Arbeiten mit dem Eingabemodus ... 297 9.6 ... Navigation ... 298 9.7 ... Löschen von Textstellen ... 299 9.8 ... Textbereiche ersetzen ... 300 9.9 ... Kopieren von Textbereichen ... 301 9.10 ... Shiften ... 301 9.11 ... Die Suchfunktion ... 301 9.12 ... Konfiguration ... 302 9.13 ... Distributionen für Vim ... 303 9.14 ... Zusammenfassung ... 304 9.15 ... Aufgaben ... 304
10. Grundlegende Administration ... 305 10.1 ... Benutzerverwaltung ... 305 10.2 ... Installation neuer Software ... 311 10.3 ... Backups erstellen ... 327 10.4 ... Logdateien und dmesg ... 334 10.5 ... Weitere nützliche Programme ... 339 10.6 ... Grundlegende Systemdienste ... 344 10.7 ... Manpages ... 347 10.8 ... Dateien finden mit find ... 349 10.9 ... Zusammenfassung ... 354 10.10 ... Aufgaben ... 354
11. Netzwerke unter Linux ... 355 11.1 ... Etwas Theorie ... 355 11.2 ... Konfiguration einer Netzwerkschnittstelle ... 361 11.3 ... Routing ... 369 11.4 ... Netzwerke benutzerfreundlich -- DNS ... 372 11.5 ... Firewalls unter Linux ... 378 11.6 ... Secure Shell ... 383 11.7 ... Das World Wide Web ... 390 11.8 ... Windows-Netzwerkfreigaben ... 397 11.9 ... Weitere nützliche Netzwerktools ... 404 11.10 ... Zusammenfassung ... 410 11.11 ... Aufgaben ... 411
12. Softwareentwicklung ... 413 12.1 ... Interpreter und Compiler ... 413 12.2 ... Softwarebibliotheken (Shared Libraries) ... 421 12.3 ... Make ... 422 12.4 ... Die GNU-Autotools ... 430 12.5 ... Unix-Software veröffentlichen ... 434 12.6 ... Eigene Manpages erstellen ... 436 12.7 ... Versionsmanagement mit Git ... 440 12.8 ... Docker-Container erstellen ... 444 12.9 ... Zusammenfassung ... 451 12.10 ... Aufgaben ... 452 A. Die Installation planen und durchführen ... 455 A.1 ... Hardwareunterstützung ... 456 A.2 ... Festplatten und Partitionen ... 459 A.3 ... Die Installation durchführen ... 465 A.4 ... Eine typische Linux-Installation durchführen ... 469 A.5 ... Zusammenfassung ... 472 Index ... 473
1.3 Die Entstehungsgeschichte von Linux
Linux übernahm diverse Konzepte und Eigenschaften des Betriebssystems Unix. Daher beschäftigen wir uns an dieser Stelle zunächst einmal mit der Entstehungsgeschichte von Unix. Wir beginnen dazu mit einem Rückblick auf die graue Frühzeit der Informatik.
1.3.1 Die Entstehung von Unix
In den 1960er Jahren wurden die ersten großen Softwaresysteme gebaut.[ 2 ] Zu dieser Zeit, nämlich im Jahr 1965, begannen BELL, General Electric und das MIT, an einem System namens MULTICS (Multiplexed Information and Computing System) zu arbeiten. Als allerdings feststand, dass dieses Vorhaben scheitern würde, stieg BELL aus.
Die Raumfahrt
Als 1969 das Apollo-Raumfahrtprogramm der USA im Mittelpunkt der Aufmerksamkeit stand, begann Ken Thompson (BELL) mit der Entwicklung einer MULTICS-Variante für zwei Benutzer. Dieses System entwickelte er für den Computer PDP-7 des Herstellers DEC. Sein Ziel war es, raumfahrtbezogene Programme zu entwickeln, um Orbit-Berechnungen für Satelliten, Mondkalender und Ähnliches zu realisieren. Das Grundprinzip von MULTICS wurde dabei übernommen und so bekam das daraus resultierende Betriebssystem beispielsweise ein hierarchisches Dateisystem.
Brian Kernighan nannte dieses System spöttisch UNICS (von uniplexed). Erst später benannte man es aufgrund der Begrenzung für die Länge von Dateinamen auf der Entwicklungsplattform GECOS in UNIX bzw. Unix um.[ 3 ]
Ursprünglich waren alle Unix-Programme in der Programmiersprache Assembler geschrieben. Ken Thompson entschied sich später, eine Unterstützung für die Sprache FORTRAN zu entwickeln (ein sogenannter FORTRAN-Compiler), da Unix seiner Meinung nach ohne eine solche wertlos wäre. FORTRAN ist (wie C) eine Programmiersprache der dritten Generation und erlaubt, verglichen mit Assembler, das Programmieren auf einer höheren Abstraktionsebene. Nach kurzer Zeit entschied er sich allerdings, eine neue Programmiersprache namens B zu entwickeln, die stark von der Sprache BCPL (Basic Combined Programming Language) beeinflusst wurde.
Aus B wird C
Da das Team 1971 ein PDP11-System bekam, das byteadressiert arbeitete, entschloss sich der amerikanische Programmierer Dennis Ritchie, aus der wortorientierten Sprache B eine byteorientierte Sprache mit dem schlichten Namen »C« zu entwickeln, indem er unter anderem Typen hinzufügte. Tatsächlich gab es zwischen B und C noch einen Zwischenschritt in Form der Sprache New B (NB).[ 4 ]
1973 wurde der Unix-Kernel komplett neu in C geschrieben. Dieses neue Unix (mittlerweile in der Version 4) wurde damit auf andere Systeme portierbar. Noch im selben Jahr wurde Unix zu einem Mehrbenutzer-Mehrprozess-Betriebssystem (Multiuser-Multitasking) weiterentwickelt und der Öffentlichkeit vorgestellt. Auf diesem System konnten nun mehrere Benutzer gleichzeitig unterschiedliche Programme laufen lassen. Da C gleichzeitig eine sehr portable, aber auch systemnahe Sprache war, konnte Unix recht gut auf neuen Plattformen implementiert werden, um dann auch dort performant zu laufen. Die Vorteile einer Hochsprache wurden hier deutlich: Man braucht nur einen Übersetzer auf einer neuen Hardwareplattform, und schon kann der Code mit nur wenigen Änderungen übernommen werden.
Ein Jahr später, also 1974, erschien ein gemeinsamer Artikel mit dem Titel The UNIX Time-Sharing System von Dennis Ritchie und Ken Thompson im Fachblatt Communications of the ACM, in dem sie auf die Entstehungsgeschichte und die Wurzeln von Unix eingingen, die eben nicht völlig neu waren, sondern auf bestehenden Systemen basierten. So stammen Grundkonzepte etwa aus dem Berkeley Timesharing System (sogenanntes Forking, d. h. das Konzept zur Erzeugung neuer Prozesse), dem bereits erwähnten MULTICS (Konzepte der Systemaufrufe und der Shell) und TENEX oder wurden zumindest durch diese beeinflusst:
»Der Erfolg von Unix liegt nicht so sehr in [...] Innovationen als vielmehr darin, dass sorgfältig ausgewählte Ideen zur vollen Blüte gebracht wurden.« (eigene Übersetzung aus The UNIX Time-Sharing System)
Ken Thompson und Dennis Ritchie erhielten 1998 von Bill Clinton die National Medal of Technology der USA für die Entwicklung von Unix und C. 1983 erhielten Thompson und Ritchie den Turing Award – die bedeutendste Auszeichnung der Informatik und für Informatiker prinzipiell so wertig wie der Nobelpreis. Weitere wichtige Bücher mit Beteiligung dieser Autoren sind beispielsweise The Unix Programming Environment von Rob Pike und Brian Kernighan sowie The Unix time-sharing system von Dennis Ritchie. Zudem haben Ritchie und Kernighan mit ihrem Buch The C Programming Language eines der bedeutendsten Werke der Informatik verfasst.
Die Entstehung der Unix-Derivate
1977 nahm man dann auch die erste Implementierung auf einem NichtPDP-System vor, nämlich auf einem Interdate 8/32. Dies regte weitere Unix-Portierungen durch Firmen wie HP und IBM an, und die Unix-Entwicklung begann, sich auf viele Abkömmlinge, sogenannte Derivate, auszuweiten.
Die Unix-Variante von AT&T wurde 1981 mit derjenigen von BELL zu einem einheitlichen »Unix-System III« kombiniert. 1983 kündigte BELL das »System V« an, das primär für den Einsatz auf VAX-Systemen an Universitäten entwickelt wurde. Im Jahr darauf annoncierte AT&T die zweite Version von System V. Die Anzahl der Unix-Installationen war bis dahin auf ca. 100.000 angestiegen. 1986 erschien System V, Release 3. Schließlich wurde 1989 System V Release 4 (SVR4) freigegeben, das noch heute als Unix-Standard gilt.
1.3.2 BSD wird ins Leben gerufen
Neben SVR4-Unix gab es eine Entwicklung von BSD-Unix, auf deren Darstellung wir hier natürlich keineswegs verzichten möchten. Schließlich haben wir der BSD-Implementierung der sogenannten TCP/IP-Protokolle (so bezeichnet man die Kommunikationsprotokolle für das Internet) mehr oder weniger das heutige Internet zu verdanken.
Bereits 1974 verteilte AT&T Quellcodelizenzen an einige Forschungsinstitute. Auch das Computing Sciences Research Center (CSRC) der Bell Labs bekam solch eine Lizenz.
In Berkeley entwickelte ein Kreis von Programmierern der dortigen Universität in den folgenden Jahren einen neuen Code und nahm Verbesserungen gegenüber AT&T-Unix vor, wonach 1977 1BSD, die erste Berkeley Software Distribution, von Bill Joy zusammengestellt wurde. Im darauffolgenden Jahr wurde 2BSD veröffentlicht, das über neue Software und Verbesserungen verfügte.
1979 beauftragte die Defense Advanced Research Projects Agency (DARPA) der amerikanischen Regierung die Computer Systems Research Group (CSRG) der University of California, Berkeley, die Unix-Referenzimplementierung der Protokolle für das ARPANET, den Vorläufer des Internets, zu entwickeln. Die CSRG veröffentlichte schließlich das erste allgemein verfügbare Unix namens 4.2BSD, das unter anderem eine Integration der Kommunikationsprotokolle für das Internet (der oben erwähnten TCP/IP-Protokolle) aufwies: Damit konnte bereits sehr ähnlich über ein Netzwerk kommuniziert werden, wie es heutige Rechner nach wie vor tun.[ 5 ] Außerdem wurde ein neues Dateisystem eingeführt, nämlich das Berkeley Fast Filesystem (FFS).
Somit kann dieses BSD-Derivat als Urvater des Internets angesehen werden. Durch die Integration von TCP/IP und der Berkeley-Socket-API (das ist eine Programmierschnittstelle für die Netzwerkkommunikation) wurden Standards geschaffen bzw. geschaffene Standards umgesetzt, die für das spätere Internet essenziell sein sollten. Wenn man bedenkt, dass selbst heute noch ebendiese Berkeley-Socket-API als Standard in allen netzwerkfähigen Betriebssystemen implementiert ist, wird erst das volle Ausmaß der Bedeutung dieser Entwicklungen deutlich.
1989 entschloss man sich dazu, den TCP/IP-Code in einer von AT&T unabhängigen Lizenz als Networking Release 1 (Net/1) zu vertreiben. Net/1 war die erste öffentlich verfügbare Version. Viele Hersteller benutzten den Net/1-Code, um TCP/IP in ihre Systeme zu integrieren. In 4.3BSD Reno wurden 1990 noch einmal einige Änderungen am Kernel und an den Socket-APIs vorgenommen, um OSI-Protokolle zu integrieren.
Im Juni 1991 wurde Net/2 herausgegeben, das komplett neu und unabhängig vom AT&T-Code entwickelt wurde. Die wichtigsten Neuerungen von Net/2 waren eine komplette Neuimplementierung der C-Bibliothek und vieler Systemprogramme sowie die Ersetzung des AT&T-Kernels bis auf sechs Dateien. Nach einiger Zeit hatte William Frederick Jolitz auch die letzten sechs Dateien neu entwickelt. Er stellte ein vollständiges, bootbares Betriebssystem zum freien FTP-Download zur Verfügung. Es...