Fachhochschule Frankfurt am Main Fachbereich 2: Informatik WS 2008/2009 Grundkurs Unix Teil 1: Die Essenz von UNIX Dr. Erwin Hoffmann E-Mail: unix@fehcom.de https://www.fehcom.net/unix/ Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 1
Aufbau des Kurses Der Kurs ist in folgende Abschnitte gegliedert: Teil 1: Entwicklung, Komponenten von UNIX; LINUX Distributionen Teil 2: Aufbau des Dateisystems; Dateien Teil 3: Benutzer-Schnittstelle; Shell, RegEx, UNIX Kommandos Teil 4: UNIX (GNU) Werkzeuge; awk, sed, grep... Teil 5: Anwenderprogrammierung und Skripte Teil 6: UNIX Prozesse; Kernel, Pipes, Daemons Teil 7: System-Administration; tracing, debugging Der Kurs wird von umfangreichen Übungen begleitet sein. URL des Kurses: https://www.fehcom.net/unix/ Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 2
Ursprung von UNIX Der Auftrag Ken Tompson von den Bell Laboratories erhielt 1969 den Auftrag, ein neues Betriebssystem zu schaffen, das ein interaktives und Terminal-basiertes Arbeiten ermöglicht. Die damaligen Betriebssysteme wie OSVS1 oder MVS unter IBM/360 erforderten statt dessen Lochkarten oder Lochstreifen und besassen damit lediglich eine Batch-Verarbeitung. Programmiersprache B Um von der bis-dato vorherrschenden Assembler-Sprache bzw. OS-spezifischen Prozeduralsprache (vgl. IBM JCL) weg zu kommen, entwickelte er zunächst die hardware-nahe Programmiersprache B für die DEC PDP-7 und erzielte somit eine gewisse Maschinen-Unabhängigkeit. Programmiersprache C Dennis Ritchie entwickelte B zu C weiter und portierte den ganzen Code auf eine DEC PDP-11, was als Start von UNIX gelten kann. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 3
Komponenten von UNIX Das Betriebssystem UNIX gliedert sich prinzipiell nur in wenige Komponenten: UNIX Kernel Mit ursprünglich etwas 20.000 Zeilen Code ist er der zentrale Bestandteil des Betriebssystems, initiiert den Ursprungsprozess (init) und beinhaltet die wichtigsten Device Treiber die als Block-Devices, zur Ansteuerung der Datenträger und als als Character-Devices zur Kommunikation mit den Schnittstellen (Terminal/Tastatur) vorliegen sowie dem prinzipiellen Layout des Dateisystems mit seinen vorgegebenen Pfaden und seiner hierarchischen Architektur sowie den notwendigen System-Dateien (Libraries) zur Programmausführung und den (Header-) Dateien zur Programm-Entwicklung. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 4
Geschichte von UNIX UNIX hat eine verschlungene Geschichte hinter sich, die durch unterschiedliche Implementierungen auf unterschiedlichster Hardware gekennzeichnet ist. Zudem haben auch immer für die Vermarktung kommerzielle und intellectual property Interessen eine grosse Rolle gespielt. Erst nach Klärung dieser Fragen und der Freigabe der Quellen durch die Berkeley University (BSD UNIX) erhielt UNIX ab 1985 die notwendige Verbreitung, speziell in der (US-) amerikanischen akademischen Welt. Den Nimbus eines Entwicklersystems statt (wie bei Windows oder OS/2 oder MVS bzw. VMS) eines Anwendungssystems ist UNIX jedoch nie los geworden. Erst mit dem Entstehen von Linux (durch Linus Torvalds als Weiterentwicklung von Tannenbaum s Minix) 1992, Bereitstellungen von UNIX Core-Funktionen im Rahmen des GNU-Projekt durch Richard Stallmann sowie der Akzeptanz des Internet-Protokoll (IP) als prinzipielle Kommunikationsprotokoll findet eine rasante Weiterentwicklung von UNIX statt, Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 5
Entwicklung von UNIX BSD Linie System V Linie Quelle: Wikipedia Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 6
Historische Errungenschafen der Unixe Version 7 System III BSD 4.2 System V Multiprozessing virtual memory virtual memory signals, pipes named pipes IPC Multi User NLS hierarch. FS langefilenamen file locking file links symb. links UNIX Shell csh, vi-editor Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 7
Hauptmerkmale Zwei Paradigmen haben UNIX hauptsächlich (bis heute) beeinflusst: Unix wurde auf einer 32-Bit Rechnern in C entwickelt. Unix erhielt als erstes Betriebssystem einen TCP/IP-Kommunikations-Stack und stellt eine Referenzimplementierung bereit. Die Einheitlichkeit der Unixe wird vor allem durch gleichartige Benutzerprogramme gewährleistet, dem POSIX (Portable Operation System Interface) [POSIX.1/IEEE 1003.1-2001] genügen. POSIX Programme gibt es auch für andere Betriebssysteme (wie Windows) einheitlicher Libraries (z.b. OpenSSL) und den GNU-Tools. Unterschiede ergeben sich durch den eingesetzten C-Compiler (gcc, z.b. 4.2) Layout des Dateisystems, administrative und systemnahe Tools. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 8
Aktuelle Unix Entwicklungen Die kommerziellen Unix-Systeme befinden sich heute im Abwehrkampf vor allem gegen Linux: Sun Solaris 10 (Skalierbare Hardware, SUN Risk Processoren) HP-UX 7 (PPC Architektur oder Intel) IBM AIX 5 (PPC, Hochverfügbarkeit HACMP) Vorteile bieten diese Hersteller im Bereich grosser, skalierbarer Cluster-Systeme mit spezifischer Hardware-Unterstützung. Die Entwicklung von Linux ist vielfältig und reicht von der Unterstützung (Devices!) von Net- und Notebooks (WLAN, Bluetooth) über leistungsfähige Desktop-Systeme (X-Windows, OpenGL) bis zu Servern mit RAID und iscsi Systemen. BSD Unixe werden häufig für Server-Systeme eingesetzt, wobei die Vielfalt über FreeBSD, NetBSD, OpenBSD, PC-BSD bis zu Darwin (MacOS X) reicht. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 9
Elemente des Unix-Betriebssystems UNIX Anwendungen UNIX shell UNIX Dienstprogramme (in C implementiert) portabel ~ 95% UNIX Kernel (in C programmiert, portabel) ~ 2% Hardware-Interfaces (teils C, teils Assembler) Geräte-Treiber (z.t. in C geschrieben, teilweise portabel) ~ 1% ~ 2% Hardware (Prozessor, Bussystem, Festplatten...) in % des Quellcodes des Gesamtsystems Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 10
Unix Kernel und Peripherie UNIX Anwender Programm Libraries System Call Interface File Subsystem Buffer Cache Character- / Block- Device ipc Scheduler Memory Managm. UNIX System Kernel Device Driver Device Driver Hardware Control Hardware (Prozessor, Bussystem, Festplatten...) Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 11
Aufgaben des Unix Kernels Der Kernel ist der Zentralbaustein eines UNIX Systems, er verwaltet die Systemressourcen. Der Kernel besteht aus zwei Subsystemen Prozeß Kontrollsystem File Subsystem Die Kommunikation zwischen Programmen und Kernel erfolgt über ein call-interface. Die Kommunikation zwischen Kernel und Hardware wird über eingebettete Gerätetreiber und Hardware-abhängige Schnittstellen abgewickelt. Kaum ein aktuelles Unix verfügt über einen monolithischen Kernel, vielmehr werden geeignete Kernelmodule nach der letzen Boot-Phase angezogen, die eine Device-Probe durchführt. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 12
Transparenz des Unix-Kernels Die Aktivitäten des Unix-Kernels können nur mittels privilegierter Kommandos beobachtet bzw. gesteuert werden. Bereits bei der Ansteuerung neuer Hardware (Devices) ergab sich jedoch die Notwendigkeit, diese Information persistent im Dateisystem zu hinterlegen. Hieraus entstand das spezielle /dev Dateisystem. Bei System V Unixen (besonders Linux) werden auch die Unix-Prozesse (mit ihren Eigenschaften) ins Dateisystem abgebildet. Hierzu dient das /proc Dateisystem. Von Dan Bernstein angeregt (http://cr.yp.to), geht man immer mehr dazu über auch Unix-Dienste in einem speziellen Dateisystem /service bzw. /svc (SunOS) abzubilden. Dr. Erwin Hoffmann: UNIX Grundkurs - Teil 1: Die Essenz von UNIX 13