Herkunft: von UNIX über GNU zu Linux
Linux steht in der Tradition von UNIX: 1969 entwickelten Mitarbeiter der Bell Labs ein schlankes, von Anfang an auf Multitasking und Mehrbenutzerbetrieb ausgelegtes Betriebssystem, das in den 1970ern in der eigens dafür geschaffenen Sprache C neu geschrieben wurde. Kernfunktionen wurden später unter POSIX standardisiert. 1983 startete Richard Stallman das GNU-Projekt mit dem Ziel eines freien Betriebssystems und schuf 1989 die Lizenz GPL (GNU General Public License). Es fehlte nur noch der Kern – den steuerte 1991 Linus Torvalds mit dem Linux-Kernel bei. „Frei“ meint dabei Freiheit, nicht Kostenlosigkeit: „free as in free speech, not free beer“.
Der Linux-Kernel
Der Kernel ist die Schnittstelle zwischen Hard- und Software. Er nimmt Anfragen der Anwendungen entgegen und steuert die Zuteilung der Ressourcen – Rechenzeit, Arbeitsspeicher, Geräte. Er ist überwiegend in C geschrieben, zeitkritische Teile in Assembler. Eine Grundphilosophie von Linux lautet „everything is a file“: Geräte, Prozesse und Schnittstellen erscheinen als Dateien und lassen sich so mit denselben Werkzeugen (Texteditor, cat, Umleitungen) ansprechen.
| Eigenschaft | Bedeutung |
|---|---|
| Präemptives Multitasking | Mehrere Prozesse laufen scheinbar gleichzeitig; der Kernel teilt nach Priorität Rechenzeit zu |
| Mehrprozessorfähigkeit | Auf mehreren CPU-Kernen laufen Prozesse echt parallel |
| Mehrbenutzer-/Mehrsitzungsfähigkeit | Mehrere Benutzer bzw. Sitzungen arbeiten gleichzeitig am selben System |
| Open Source | Quellcode frei einsehbar und anpassbar (GPL) |
Shells: sh, bash & Co.
Die Shell ist der Kommando-Interpreter zwischen Benutzer und System. Es gibt mehrere Varianten – die bei modernen Linux-Systemen übliche Standardshell ist die bash (Bourne-Again-Shell).
| Shell | Beschreibung |
|---|---|
sh (Bourne-Shell) | Basis der meisten heutigen Shells |
csh (C-Shell) | Bedienung mit Kommandos in C-Syntax |
ksh (Korn-Shell) | Klassische Standardshell vieler UNIX-Systeme |
bash (Bourne-Again-Shell) | Standardshell moderner Linux-Systeme |
cat /etc/shells # registrierte (gültige) Login-Shells anzeigen
echo $0 # welche Shell läuft gerade? (z. B. -bash)
/bin/dash # in eine andere Shell wechseln
exit # zurück zur vorherigen Shell (im Login-Prompt: abmelden)Der Eingabeprompt: $ und #
Der Prompt verrät, mit welchen Rechten du angemeldet bist:
| Zeichen | Bedeutung |
|---|---|
$ (Dollar) | Du bist als normaler Benutzer angemeldet |
# (Raute) | Du bist root (Systemadministrator, UID 0) |
root hat vollen Zugriff auf das gesamte System. Arbeite nur dann als root, wenn eine Aufgabe es erfordert – das Risiko, mit root versehentlich Schaden anzurichten, ist hoch. Für einzelne Befehle nutzt man besser sudo.
Interne vs. externe Kommandos
Jeder Befehl folgt dem Schema kommandoname [optionen] [argumente]. Man unterscheidet zwei Arten: interne Kommandos sind in der Shell selbst eingebaut (z. B. cd), externe sind eigenständige Programme im Dateisystem (z. B. /bin/mount). Mit type findest du heraus, um welche Art es sich handelt.
type cd # -> cd ist eine von der Shell mitgelieferte Funktion (intern)
type mount # -> mount ist /bin/mount (externes Programm)Systemstart: von init zu systemd
Früher startete der Prozess /sbin/init als erster Prozess (er erhält die PID 1) und rief alle weiteren Dienste als Kindprozesse auf. Die Startreihenfolge regelten sogenannte Runlevel. Nachteil: Jeder Dienst musste vollständig hochgefahren sein, bevor der nächste startete – das machte den Bootvorgang langsam. Heute übernimmt systemd (ebenfalls PID 1) diese Rolle und startet voneinander unabhängige Dienste parallel. Die alten Runlevel entsprechen heute den systemd-Targets.
| Runlevel | systemd-Target | Bedeutung |
|---|---|---|
| 0 | poweroff.target | System herunterfahren |
| 1 / S | rescue.target | Einzelbenutzer- / Rettungsmodus |
| 3 | multi-user.target | Mehrbenutzer mit Netzwerk, ohne grafische Oberfläche |
| 5 | graphical.target | Mehrbenutzer mit grafischer Oberfläche |
| 6 | reboot.target | System neu starten |
# Target zur Laufzeit wechseln (langer Weg)
systemctl isolate poweroff.target # herunterfahren
systemctl isolate reboot.target # neu starten
# Kurzbefehle (Links auf die systemctl-Kommandos)
shutdown -h now # sofort herunterfahren (poweroff)
shutdown -r now # sofort neu starten (reboot)
reboot # neu startensystemctl steuert, eigene Unit-Dateien schreibt und Logs mit journalctl liest, behandelt der Abschnitt systemd & Dienste.
Hilfe zur Selbsthilfe
Linux bringt eine umfangreiche, meist englischsprachige Dokumentation mit. Vier Wege führen zum Ziel:
help exit # Kurzhilfe für ein INTERNES Kommando (Shell-Builtin)
bash --help # Kurzhilfe für ein EXTERNES Programm (auch -h )
man ls # ausführliche Handbuchseite (q = beenden, / = suchen)
whatis reboot # Einzeiler + in welchen man-Kapiteln es Infos gibt
apropos netzwerk # Stichwortsuche über alle HandbuchseitenDie man-Seiten sind in Kapitel gegliedert. Mit man <Nummer> <Thema> ruft man gezielt das passende Kapitel auf:
| Kapitel | Inhalt |
|---|---|
| 1 | Kommandos / Programme |
| 2 | Systemaufrufe und Fehlercodes |
| 5 | Formate von Konfigurationsdateien |
| 8 | Kommandos zur Systemadministration |
man 1 whatis # whatis als Programm (Kapitel 1)
man 5 sshd_config # das Konfig-Datei-Format (Kapitel 5)