Einführung in Unix
Uwe Grohnwaldt
Universität Rostock
Gliederung
- Geschichte
- Unix-Philosophie
- Verzeichnisstruktur
- Dateiberechtigungen
- Schutz
- Arbeiten mit der Shell
- Unix-Pool
- einige Programme
Geschichte
- 1965: Konsortium von MIT, General Electricsm Bell Labs und Honeywell wollen Multics entwickeln
- Entwicklungssprache PL/I von IBM
- Keine Hardware dieser Zeit war ausreichend schnell
- 1969: Packard Bell zieht sich zuruück
- aber: Team bestehend aus Dennis Ritchie, Ken Thompson, Doug McIlroy, Joseph Ossana wollen Mehrbenutzersystem
- Mehrbenutzersystem muss einige technische Spezialitäten besitzen (z.B. mehrere Nutzer arbeiten an gleichen Dateien)
Geschichte
- Versuch Bell Labs von Kauf eines Rechners zu überzeugen
- gleichzeitig Entwicklung von Dateisystemkonzepten auf Notizzetteln und Tafeln
- Thompson entwickelte ein erstes Dateisystem und primitiven Kernel für GE-645
- Portierung von "Space Travel" (von Multics) auf eine PDP7
- Implemtierung aber zu kompliziert, daher Implementierung von Prozessmanagement, einfacher Shell, Editor und Dateiverwaltungsprogramm
- 1971: Portierung auf PDP11 (Entwicklung von C 1972)
Geschichte
- 1977: erstes BSD (Berkeley Software Distribution)
- 1979: letzte freie UNIX Version (V7)
- Microsoft erwirbt Lizenz und versucht eine Portierung auf Intel und andere Prozessoren
- 1980: UNIX23V, 3BSD auf DEC VAX (32 Bit)
- 1980er durch UNIX-Kriege geprägt
durch Kommerzialisierung
- 1983: gibt AT&T SystemV (auf Unix V7 basierend) und Berkeley 4.3BSD heraus
- POSIX-Standard ins Leben gerufen
Geschichte
- 1988: POSIX 1 - Standard
Portable Operating System Interface for Unix
besagt u.a. welche Schnittstellen und Systemaufrufe ein Unix besitzen muss
- Grüdung mehrerer Allianzen (OSF, Unix International, X/Open)
- Richard Stallmann durch Kommerzialisierung verärgert, entwickelt GNU als eigenes System
- 1985: GNU-Manifest, GNU General Public License
- 1987: Andrew S. Tannebaum entwickelt Minix
ein Betriebssystem, dass er fuer seine Lehrzwecke braucht, Unix-aehnliches Betriebssystem
- 1990: 4.3BSD Reno
Geschichte
- 1991: durch Inspiration von Minix entwicklet Linus Torvalds den ersten Linux-Kernel 0.02, Sun bringt Solaris 1
- 1992: 386BSD für den 386 Intel
- 1993: 4.4BSD, Entwicklung von FreeBSD und NetBSD (basierend auf 386BSD), Novell kauft Unix System Laboratories von AT&T
- 1994: Streit über Urheberrechte, Teile des USL-Codes aus BSDs entfernt, daher nun 4.4BSD lite
- 1995: SCO kauft UNIX von Novell
Geschichte
- 1996: Zusammenschluss von OSF und X/Open zur OpenGroup
- 2001: SCO wird inkl. der UNIX-Rechte von Caldera gekauft
- 2002: Umbennnung von Caldera in SCO
Marketing-Gruende
- 2003: Klage gegen IBM wegen angeblicher Urheberrechtschutz-Verstösse bei Linux
Geschichte
- Bekannte Derivate:
- 386BSD aus Berkeley
- AIX von IBM
- BSD-Derivate: Free-, Open-, Net-, Dragonfly BSD
- Darwin / MacOS X von Apple
- HP-UX von Hewlett Packard
- IRIX von SGI
- SCO Unix
- Solaris (Sun OS) von SUN
- True644 von DEC (später Compaq)
- Ultrix von DEC
- UnixWare von Novell
Geschichte
- UNIX-ähnliche Systeme:
- AmigaOS
- AMIX von Commodore
- A/UX von Apple
- BeOS
- GNU/Hurd
- GNU/Linux
- Minix
- UNIX als Warenzeichen ist teuer, aber UNIX-ähnliche Systeme versuchen sich an POSIX zu halten
UNIX-Philosophie
- hierarchische Verzeichnisstruktur:
- Wurzel des Baumes: root ("/")
- gesamter Festplattenplatz wird dort eingehängt
- physikalische Festplatte (bzw. Partition) ist nicht Teil des Pfades für den Speicherort
- Dateien haben zentrale Bedeutung
- "Alles ist eine Datei"
- Befehle sind ausführbare Dateien im Verzeichnisbaum
- Systemprivilegien meist durch Zugriffsrechte auf Dateien
- Zusammenspiel der Besitz- und Zugriffsrechte mit Benutzer- und Gruppenkonten
- Interprozesskommunikation auch durch Dateien möglich
UNIX-Philosophie
- Verzeichnisstruktur (kurz)
/ (root)
- /bin (grundlegende ausfürbare Befehle)
- /etc (Vielzahl von Konfigurationsdateien)
- /home (Arbeitsverzeichnis der Nutzer)
- /opt (zusätzliche Software)
- /sbin (wichtige Systembefehle)
- /tmp (Platz für temporäre Dateien)
- /usr (lokale Programme, Befehle für User und root, Teile des Betriebssystems)
- /var Spooldateien, Logdateien
- ...
- mehr mit: man hier
UNIX-Philosophie
- Dateibesitzrechte
- jede Datei hat einen Besitzer
- Besitzer ist in der Regel der Ersteller
- aber: Gruppenbesitz an einer Datei ist vom Besitzer unabhängig
- Datei kann also z.B. für eigene Gruppe des Besitzers readonly sein
- Anzeige der Dateibesitzrechte
- Befehl ls -l
zeigt Dateien und deren Zugriffsrechte, Benutzer, Gruppenzugehörigkeit, Grösse, Name und Uhrzeit der letzten Bearbeitung an
- weitere Optionen: siehe Manpage
UNIX-Philosophie
- Dateibesitzrechte
- Beispiel: live
- der Superuser ist "root", er darf alles
- Unix kennt drei Formen für Dateizugriff: Lesen(r), Schreiben(w), Ausführen(x)
- Ausserdem 3 verschiedene Zugriffsklassen:
- Zugriff durch Besitzer
- Zugriff durch Benutzergruppe
- Zugriff durch Rest der Welt (ohne root)
- gute Zugriffsverwaltung und Schutz vor unberechtigten Zugriffen
UNIX-Philosophie
- Zugriffsrechte von Verzeichnissen
- ---
- keine Rechte, keine Aktivität im Verzeichnis und Unterverzeichnis
- r--
- Leserecht
Dateinamen können aufgelistet werden, aber nicht die Attribute
im Verzeichnis liegende Programme können ausgeführt werden unter vollständiger Angabe des Pfades,
alle anderen Dateien sind aber nicht zugänglich und verborgen
Programme können ausgeführt werden, Dateien aufgelistet, aber keine Dateien bearbeitet werden
Nutzer kann Dateien in dem Verzeichnis ausführen und erstellen, kann aber nicht den Inhalt auflisten
werden
- --x
- Ausführrechte
- r-x
- Ausführrechte, Leserechte.
Programme können ausgeführt werden, Dateien aufgelistet, keine Dateien bearbeitet werden.
- -wx
- Nutzer kann Dateien ausühren und erstellen, aber Inhalt des Verzeichnisses nicht auflisten
- rwx
- Nutzer darf Lesen, Schreiben, Ausführen
UNIX-Philosophie
- Zugriffsrechte von Verzeichnissen
- Die Rechte gelten immer nur für genau dieses Verzeichnis
- Unterverzeichnisse können eigene Rechte haben
- Möglichkeit z.B. Unterverzeichnisse zu listen, obwohl darüberliegendes gesperrt ist
UNIX-Philosophie
- Ändern der Zugriffsrechte
- chmod (Optionen) Zugriffsrechte Datei(en)
- Zwei Möglichkeiten um Zugriffsrechte zu definieren:
- String-Angabe: Zugriffsklasse [u|g|o|a] + Operation [+|-|=] +Zugriffstyp [r|w|x|---]
Zugriffsklasse: u (user), g (group), o (other), a (all); Operation: + (hinzfuegen), - (entfernen), = (exakt setzen); Zugriffstypen siehe oben.
- Beispiel: chmod a+w Unix erweitert Dateirechte von Unix auf rw-rw-rw-, ist für alle les- und schreibbar
- numerische Angabe
- Verwendung des oktalen Zahlensystems
- jedes Recht ist entweder 0 oder 1
- Beispiel 1: rw-rw-rw entspricht 666 (chmod 666 Unix)
- Beispiel 2: rwxr-xr-- entspricht 754 (chmod 754 Unix)
- mit -R werden Rechte rekursiv gesetzt
UNIX-Philosophie
- Prozesse
- vereinfacht: ein Prozess ist ein einzelnes ausfürbares Programm mit eigenem Adressraum
- ein Job oder ein Befehl besteht aus mehreren Prozessen, die zusammengenommen eine Aufgabe bewältigen
- CPU-Ressourcen werden auf Prozesse verteilt und geregelt
- interaktive Prozesse
- werden vom Terminal gestartet, können im Vorder- oder Hintergrund laufen
- Batch-Prozesse
- sind nicht an ein Terminal gebunden, arbeiten sequenziell eine Queue ab
UNIX-Philosophie
- Daemons
- Serverprozesse - in der Regel beim booten gestartet
- warten im Hintergrund bis Prozesse ihre Dienste in Anspruch nehmen
- wichtige Unix-Daemons
- init (immer PID 1): initialisiert das System
- syslogd: Systemstatus und Fehlermeldungen werden gesammelt
- crond: Periodisches Ausführen von Prozessen
- getty (o. ä.): Terminalkontrolle
- inetd: startet gewünschte Netzwerkdaemons (ftpd, fingerd, telnetd)
- weitere: named (DNS), routed (Routing), dhcpd, httpd, ntpd, cups
UNIX-Philosophie
- Lebenszyklus eines Prozesses
- neuer Prozess indem eine exakte Kopie eines momentan ablaufenden Prozesses angefertigt wird (Forking)
- Childprocess erbt dabei Umgebung vom Parent, bekommt andere ProzessID (PID)
- Child bekommt mit exec einen eigenen Adressraum
- neues Programm (Befehl) ersetzt vollständig das Duplikat des Parent
- aber Umgebung bleibt erhalten: mit Umgebungsvariablen Zuordnungen für Standardein- und ausgaben, Standardfehlerausgabe und Priorität
UNIX-Philosophie
- Beispiel an Hand des Befehls grep
- Nutzer startet grep
- Shell erzeugt eine Kopie ihrer selbst (Forking) mit neuer PID
- neue Shell wird im RAM durch grep überlagert (exec)
- sobald grep abgearbeitet ist, stirbt der Prozess
- Urahn aller Prozesse ist init mit PID 1
Arbeiten mit der Shell
- Verschiedene Shells: sh, ksh, csh, ...
- bash (bourne again shell) ist eine der gebräuchlichsten Shells
Autovervollständigung zeigen, erwaehnen; Keine Nachricht ist eine gute NAchricht
- schon bekannte Befehle:
- ls (auflisten des Verzeichnisinhaltes)
- chmod (ändern der Dateirechte)
Arbeiten mit der Shell
- man
- Einsehen der Manual pages
- man -f BEFEHL listet mögliche manpages auf
- Beispiel: man -f grep
Beispiel live zeigen
- Verlassen der manpage mit q
- grep [OPTIONS] PATTERN [FILE]
- Zeilenweises durchsuchen einer Datei (oder Eingabe) nach gegebenem Suchwort
- Ausgabe der gefundenen Zeilen
Arbeiten mit der Shell
- cd [DIRECTORY]
- mkdir [OPTION] DIRECTORY
- erstellt ein Verzeichnis
- Beispiel: mkdir -m 666 ~/stuff/uni - (Rechte werden gleich mitgesetzt)
Arbeiten mit der Shell
- ln [OPTION] TARGET [LINK NAME]
- Beispiel: ln unix.pdf mUh.pdf
- erzeugt Eintrag mUh.pdf als harten Link auf unix.pdf, mUh.pdf zeigt auf den selben Eintrag auf der Festplatte
- Beispiel: ln -s unix.pdf muh.pdf
- erzeugt symbolischen Link auf die Verzeichnisstruktur, Datei ist durch ein "l" beim Verzeichnislisting als solcher zu erkennen
- touch [OPTIONS] FILE
- verändert die Zugriffs- und Modifikationszeit bei vorhandenen Dateien
- falls Datei noch nicht vorhanden, wird sie angelegt (mit Zeitstempel)
Arbeiten mit der Shell
- less FILE
- anzeigen des Inhaltes von Dateien
- more FILE
- anzeigen des Inhaltes von Dateien (seitenweise)
- cp [OPTION] SOURCE DESTINATION
- Kopieren von Dateien
- mit Option -r rekursives Kopieren von Verzeichnissen
- cmp [OPTION] FILE1 FILE2
Arbeiten mit der Shell
- which [OPTION] FILE
- Zeigt den kompletten Pfad zu einem Befehl/Programm
- Beispiel: which bash
- find [PFAD] [SUCHKRITERIEN]
- w
- zeigt aktuell am System angemeldete Nutzer an und zeigt was sie gerade tun
Arbeiten mit der Shell
- head [OPTION] [FILE]
- gibt die ersten 10 Zeilen einer Datei aus
- tail [OPTION] [FILE]
- gibt die letzten 10 Zeilen einer Datei aus
- rm [OPTION] [FILE]
- löschen von Dateien oder Verzeichnissen
- Beispiel: rm -r / löscht das Verzeichnis "/" inklusive aller darunterliegenden. (Keine gute Idee / zu löschen :) )
- mv [OPTION] [FILE]
- verschieben (umbennenen) von Dateien
Arbeiten mit der Shell
- chown [OPTION] OWNER[:[GROUP]] [FILE|DIRECTORY]
- Besitzer der Datei ändern
- cat [OPTION] [FILE]
- zusammenfassen von Dateien und ihrer Ausgabe
- finger [USER
- gibt Informationen über den Nutzer aus
- Beispiel: finger lando
- ps [OPTION]
- gibt eine Liste mit aktuellen Prozessen aus
- Beispiel: ps -A (gibt alle Prozesse aus)
Arbeiten mit der Shell
- df [OPTION] [FILE]
- gibt den freien Speicherplatz aus (-h formatiert die Ausgabe in "human-readable")
- quota [-v] [USERNAME]
- nicht auf jedem System
- Ausgabe der Quota und deren Ausnutzung
- normalerweise nur für root
- User können sich am FB mit -v ihre eigene Quota ansehen
- Quota kann kurzzeitig bis hin zum Limit überzogen werden (Softlimit/Hardlimit)
- tar
- Archivierungsprogramm mit vielen Optionen
Arbeiten mit der Shell
- gzip
- Komprimierungsprogramm
- Beispiel: gzip Unix.pdf komprimiert Unix.pdf zu Unix.pdf.gz
- Beispiel: gzip -d Unix.pdf.gz entpackt das Archiv wieder
- tar und gzip
- Beispiel: Unix.tar.gz soll entpackt werden: tar xfvz Unix.tar.gz
- Beispiel: ~/ soll archiviert werden: tar cfvz Datei.tar.gz ~/studium
Arbeiten mit der Shell
- SSH
- Programm zum Anmelden auf entfernten Rechnern (z.B. von zu Hause in den FB)
- Beispiel: ssh ug003@ekas.informatik.uni-rostock.de
- Option -X leitet die grafische Ausgabe weiter
- scp dient zum Kopieren von Dateien über ssh
- Beispiel: scp datei.txt ug003@ekas.informatik.uni-rostock.de:~/studium/
- Option -r ermöglicht rekursives Kopieren ganzer Verzeichnisse
- empfohlene (sichere) Methode um Dateien zu kopieren!
Arbeiten mit der Shell
- passwd
- Befehl um das Passwort zu ändern
- wc
- Zeigt die Anzahl der Zeilen, Wörter und Byte einer Datei an (wordcount)
- kill [SIGNAL] PID
- einem Prozess wird ein Signal zum Beenden geschickt
- Beispiel: kill -9 5432
- killall [OPTION] NAME
- beendet alle Prozesse mit diesem Namen
Arbeiten mit der Shell
- Pipen (Pipelines)
- Befehle können mit "|" hintereinandergehängt werden
- Ausgabe des linken Befehls wird in die Eingabe des rechten Befehls umgeleitet
- Beispiel: ls -lha |grep pdf
- Beispiel: ls -lha |grep pdf|wc -l
- Umleiten
- Anhängen von "< Datei " bewirkt, dass Datei als Eingabe für den Befehl genommen wird
- Anhängen von "> Datei " leitet die Ausgabe nicht auf den Bildschirm sondern in eine Datei um
- Anhängen von ">> Datei " hängt Ausgabe an Datei an
Arbeiten mit der Shell
- Einfügen von Befehlen in Befehle
- mit Backquotes eingeschlossen (nicht Hochkomma)
- Beispiel: mehrere Dateien beim Programmieren in einem Verzeichnis, an entsprechenden Stellen steht ein "todo"
- more `ls` | grep todo | wc -l > todo.txt
- Speichert Anzahl der ToDos in todo.txt
- Prozesse steuern
- mousepad & - startet den Prozess im Hintergrund
- jobs - zeigt die Prozesse im Hintergrund an
- fg %1 - holt Prozess 1 in den Vordergrund
- STRG+Z - stoppt den Vordergrundprozess
- bg %1 - startet einen gestoppten Hintergrundprozess wieder
SunPool
- Raum 310 in der Informatik
- SunRay-Terminals
- alle über das Netzwerk mit dem Server ekas verbunden
- Anmeldung erfolgt durch Nutzerkürzel und Unix-Passwort
- Auswählen des Fenstermanagers
SunPool
- Tastatur: amerikanisches Layout (Composetaste, ", a ergibt ä)
- mehrere Terminal-Emulatoren (z.B. xterm)
- abmelden aus den verschiedenen Fenstermanagern immer unterschiedlich
- durch graphische Bedienoberfläche ist Benutzung einigermassen intuitiv
- falls es Probleme mit dem X-Server gibt, dann Neustart über "STRG+ALT+BackSpace"
nützliche Programme
- vi - kleiner, schneller, aber gewöhnungsbedürftiger Edtior
- emacs - eierlegende Wollmilchsau unter den Editoren, gutes Highlighting, leicht erweiterbar, Tastenkürzel ebenfalls nicht ganz einfach
- xfig - kleines Vektorzeichenprogramm
- OpenOffice - freie Office-Suite
- FreePascal - Pascal Compiler
- mc - Midnight Commander, guter Dateimanager im NortonCommander-Stil
nützliche Programme
- mutt - textbasierter E-Mail-Client
- Blender3D - Raytracing mit Oberflä
- PovRay - DER Raytracer
- irssi - Kommandozeilen IRC-Client
- xchat - Grafischer IRC-Client
- Gimp - grosses Grafikbearbeitungsprogramm
- gv - GhostView für PostScript- und PDF-Dateien
- lynx, elinks, w3m - Kommandozeilenbrowser
- Kontact - Informationsmanagement unter KDE
Danke!
Danke für eure Aufmerksamkeit! Fragen?
Uwe Grohnwaldt
Uwe@Grohnwaldt.de
http://www.lando.cc/