Skip to content

Latest commit

 

History

History
525 lines (366 loc) · 26 KB

File metadata and controls

525 lines (366 loc) · 26 KB

Eine kurze Einführung in Linux

@asciinema2(speed: 2, autoPlay:true, rows: 10)

Diese kurze Einführung zum Thema Linux kann unabhängig vom Rest des Kurses bearbeitet werden. Für den Überblick über den gesamten Kurs kommen Sie @lialink(hier zurück zur Kursübersicht).

Was ist ein Betriebssystem?

"Operator" bei der NASA

Was ist die Aufgabe der Personen auf diesem Bild?

Hardwaretechniker?
Programmierer?
Wissenschaftler?\

Tatsächlich ist nichts davon richtig. Die Personen auf diesem Bild sind sogenannte Operator, die die Computer bedienen. Ihre Rolle besteht darin, Programme zu laden, deren Ausführung zu überwachen und sicherzustellen, dass die Computer effizient arbeiten. In den Anfangstagen der Computertechnologie mussten Programme direkt in die Hardware geladen werden, was bedeutete, dass alle Programme direkt eine bestimmte Hardware ansprachen.

Programme laden im Jahr 1970


Der Operator erhält einen Stapel mit Lochkarten vom Programmierer. Jede Lochkarte enthält eine Zeile des Programmcodes. Der Operator legt die Lochkarten in den Kartenleser, der die Lochkarten einliest und in den Arbeitsspeicher des Computers lädt. Anschließend startet der Operator das Programm und überwacht dessen Ausführung. Wenn das Programm beendet ist, meldet der Operator die Ergebnisse an den Programmierer zurück.


Was kann schief gehen?

  • Der Kartenleser liest eine Lochkarte falsch ein oder beschädigt sie.
  • Das Programm enthält einen Fehler und der Computer "stürzt ab".
  • Der Stapel Karten fällt herunter und die Reihenfolge der Lochkarten wird durcheinander gebracht.

Kartenleser Eine Lochkarte Beschädigte Lochkarte Lochkarten

Vom Operator zum Operating System

Moderne Computer führen viele verschiedene Programme gleichzeitig aus, kein Operator könnte all diese Programme gleichzeitig überwachen. So verwenden wir heute ein Operating System, auf deutsch Betriebssystem, um die Aufgaben des Operators zu übernehmen. Betriebssysteme sind spezielle Programme die den Zugriff auf die Hardware steuern und es ermöglichen, dass Programme ausgeführt werden, ohne dass der Programmierer sich mit den technischen Details der jeweiligen Maschine befassen muss.

```ascii +-----------------+ | | | Hardware | | | +-----------------+ | +-----------------+ | | | Betriebssystem | | | +-----------------+ | +-----------------+ | | | Software | | | +-----------------+ ```
Betriebssysteme vermitteln also zwischen der Hardware und der Software. Sie abstrahieren[^1] die Hardware und stellen eine Schnittstelle für die Software bereit. Die wichtigsten Aufgaben eines Betriebssystems sind:
  • Prozess- und Speicherverwaltung: Das Betriebssystem verwaltet die Ausführung von Programmen und den ihnen zugewiesenen Arbeitsspeicher.
  • Dateiverwaltung: Das Betriebssystem verwaltet Dateien und Ordner und stellt sie für Programme und Anwender in einer Baumstruktur dar.
  • Geräteverwaltung: Das Betriebssystem erlaubt Programmen, auf Geräte wie Drucker, Tastatur oder Maus zuzugreifen ohne dass technische Details bekannt sein müssen.
  • Benutzerverwaltung: Fast alle modernen Benutzersysteme sind Mehrbenutzersysteme: Das Betriebssystem trennt die Prozesse und Dateien verschiedener Benutzer voneinander und stellt sicher, dass Benutzer nur auf ihre eigenen Dateien zugreifen können.

Kurze Geschichte der Betriebssysteme

```ascii +-----------------+ | Großrechner- | | Betriebssysteme | +--------+--------+ | +------------------+--------------+ | | +-----+----+ +----+----+ | UNIX | | DOS | | (1970er) | | (1980er)| +-----+----+ +----+----+ | | +-----+-------+ +----+----+ | | | Windows | +---+---+ +---+----+ | (1985) | | BSD | | Linux | +----+----+ | (1977)| | (1991) | | +---+---+ +----+---+ +------+-----+ | | | Windows NT | +---+-----+ | | (1993) | | macOS | | +------+-----+ | (2001) | | | +----+----+ | | | +---+----+ +--------+------+ +----+---+ | Android| | Windows 10/11 | | iOS | | (2008) | | (2015) | | (2007) | +--------+ +---------------+ +--------+ ```
Die Geschichte der Betriebssysteme begann in den 1960er Jahren mit den ersten Betriebssystemen für Großrechner. In den 1970er Jahren wurde UNIX entwickelt, dessen Nutzerverwaltung, Dateisystem und Aufbau immer noch die Grundlage für heutige Betriebssysteme sind. Aus UNIX gingen in den späten 1970er Jahren BSD (Berkeley Software Distribution) und später Linux (1991) hervor. Bei beiden handelt es sich um UNIX-Varianten die aber frei und quelloffen (*open source*) waren[^1]. Linux ist bis heute weit verbreitet und bildet die Basis für Android (2008).

Parallel dazu entstand in den 1980er Jahren mit DOS ein einfaches Betriebssystem für Personal Computer, aus dem Windows (ab 1985) hervorging. Windows NT (1993) war ein wichtiger Schritt, da es eine neue, stabile Architektur einführte, die die Basis für alle modernen Windows-Versionen wie Windows 10 und Windows 11 bildet.

MacOS basiert auf der Unix-Variante BSD. Auch iOS (2007), das Betriebssystem für mobile Apple-Geräte, baut auf dieser Architektur auf. So sind sogar die zwei vebreitetsten mobilen Betriesbssysteme die Enkelkinder von Unix.

In diesem Kurs lernen wir die Grundlagen der Bedienung von Linux, da Grundkenntnisse in der Bedienung von Linux für viele andere Betriebssysteme von Android bis MacOS hilfreich sind. Selbst Windows 10 und Windows 11 bieten mittlerweile die Möglichkeit, Linux-Programme direkt auszuführen. Außerdem verwenden Server und Cloud-Dienste meistens Linux als Betriebssystem.

Wie komme ich an Linux?

Tux

Linux als Betriebssystem

Linux ist eigentlich der Name des Betriebssystemkerns (englisch Kernel), also des grundlegenden Teils des Systems, der die Hardware steuert und die Ausführung von Programmen ermöglicht. Für sich allein genommen ist der Kernel jedoch kein vollständiges Betriebssystem. Das erhält man erst durch die Kombination mit einer Vielzahl von Programmen, Tools und Benutzeroberflächen. Diese Gesamtpakete, die den Kernel und all diese zusätzlichen Komponenten enthalten, werden als Distributionen bezeichnet. Bekannte Beispiele dafür sind Ubuntu, Debian, Archlinux, oder Fedora.

Jede dieser Distributionen können Sie als vollwertiges Betriebssystem benutzen. Wenn sie weiterhin Windows benötigen können Sie Linux auch parallel zu Windows auf Ihrer Festplatte installieren. Beim Start des Computers wählen Sie dann, welches Betriebssystem Sie verwenden möchten. Dies wird als Dual Boot bezeichnet.

Tipp: Auch wenn die hier genannten Distributionen seit langer Zeit sehr beliebt und weit verbreitet sind, gibt es noch sehr viel mehr. Auch entstehen immer neuere Varianten von bekannten Distributionen, so Beispielsweise Linux Mint (als Variante von Ubuntu) oder Manjaro (als Variante von Archlinux).
Seit vielen Jahren führt DistroWatch eine umfassende Liste von Linux Distributionen.

Das Windows Subsystem for Linux

Wenn sie Window benutzen und noch nicht bereit sind, Linux auf ihrem Computer zu installieren, besteht ab Windows 10 eine einfachere Möglichkeit: Das Windows Subsystem for Linux (WSL) kann Linux direkt innerhalb von Windows ausführen.

Installation von WSL

  1. Windows-Version überprüfen:

    • Stellen Sie sicher, dass Sie mindestens Windows 10 Version 2004 oder höher oder Windows 11 verwenden. Dies können Sie in den Einstellungen unter System > Info nachsehen.
  2. Voraussetzungen für WSL aktivieren:

    • Öffnen Sie die Systemsteuerung.

    • Gehen Sie zu Programme > Programme und Features.

    • Klicken Sie auf Windows-Features aktivieren oder deaktivieren.

    • Aktivieren Sie die Kästchen für:

      • Windows-Subsystem für Linux
      • Virtuelle Maschinen-Plattform
      • Hyper-V
    • Klicken Sie auf OK und starten Sie den Computer neu1.

  3. Linux-Distribution aus dem Microsoft Store installieren:

    • Öffnen Sie den Microsoft Store.
    • Suchen Sie nach Ihrer gewünschten Linux-Distribution (z.B. Ubuntu) und klicken Sie auf Installieren.
    • Aktuell2 kann ich Ubuntu 24.04 LTS empfehlen.

Nun können Sie ein Linux-Terminal über das Startmenü starten.

MacOS

Apple Haben Sie keinen PC sondern einen Mac nutzen Sie bereits ein Betriebssystem, dessen Grundlage auf Unix basiert. MacOS basiert auf BSD, einer Unix-Variante. Sie können auf jedem Mac einfach ein Terminal starten und die meisten Linux-Kommandos verwenden1.Um mehr Befehle und Programme zu installieren können Sie Homebrew verwenden, ein Paketmanager für MacOS.

Erste Schritte im Terminal

Terminal

Wer bin ich und wo bin ich?

Egal ob Sie Linux auf ihrem Rechner installiert haben oder WSL bzw. MacOS nutzen: Wir beginnen damit, ein Terminal zu starten1 und werden von einer sogenannten Eingabeaufforderung begrüßt, die in etwa so aussieht2:

tilman@Linux:~$

Meistens gibt Ihnen diese Eingabeaufforderung ein paar grundlegende Informationen. Hier in der Form:

Benutzername@Hostname:Verzeichnis$
  • Benutzername der Name unter dem sie gerade im System angemeldet sind.
  • Hostname ist der Name des Computers auf dem das Terminal läuft. Zwar ist das normalerweise einfach der Name ihres Rechners, doch sie können auch Terminals auf entfernten Servern ausführen.
  • Verzeichnis Hier wird angezeigt, in welchem Verzeichnis Sie sich befinden. Das Kürzel ~ steht dabei für ihr home-Verzeichnis (Sie werden gleich lernen, was das bedeutet).

Das Terminal wartet nun darauf, dass sie Befehle eingeben und diese mit Enter bestätigen.

Manche Befehle lesen sich wie normales Englisch, andere sind Abkürzungen.

So gibt der Befehl whoami den aktuellen Benutzernamen aus

pwd steht für print working directory und gibt an, wo im Dateisystem wir uns gerade befinden.

Hier sehen Sie ein Beispiel (drücken Sie den Play-Knopf): @asciinema2(rows: 5)

Vorsicht root: In jedem Linux gibt es den Benutzer root, den sogenannten superuser. Dieser hat alle Berechtigungen im System und kann deshalb großen Schaden anrichten. Achten Sie darauf, nicht als root sondern mit ihrem Benutzernamen angemeldet zu sein.

Vorhin haben wir erwähnt, dass das Symbol ~ eine Abkürzung für das home-Verzeichnis ihres Benutzers ist.
Diese Abkürzung steht also in diesem Fall für den Pfad home/tilman, im Ordner /home gibt es also für jeden Benutzer einen gleichlautenden persönlichen Ordner3.

Verzeichnisse wechseln

Wie in den meisten Betriebssystemen benutzt auch das Dateisystem in Linux eine hierarchische Ordnerstruktur. Auf der obersten Ebene ist root, das Wurzelverzeichnis.
Ein Teil einer solchen Struktur sieht wie folgt aus:

/
|
+--home
|    |
|    +--tilman
|    |
|    +--sreekanth
|
+--bin
|
+--etc
|
+--var
|   |
|   +--log
|
+--dev

Die hier gezeigten Verzeichnisse finden Sie auf jedem Linux oder Unix-System[^1].
  • home kennen Sie bereits, hier enthält es die persönlichen Ordner zweier Nutzer.
  • bin enthält installierte Programme
  • etc enthält Konfigurationsdateien
  • var enthält zum Beispiel Protokolle (Logs) unter var/log.
  • dev enthält keine Dateien im eigentlichen Sinn, sondern erlaubt direkten Zugriff auf Geräte (devices) wie Festplatten oder auf Funktionalitäten wie einen Zufallszahlengenerator.

Um sich in dieser Verzeichnishierarchie zu bewegen, können Sie den Befehl cd für change directory verwenden.

So bewegen Sie sich mit cd var in den Ordner var. Beachten Sie, dass ein solcher Pfad relativ zum aktuellen Verzeichnis interpretiert wird. Gibt es unter dem aktuellen Verzeichnis keinen Ordner namens var schlägt der Befehl fehl.
Mit cd \var hingegen welchseln Sie direkt von überall her in das Verzeichnis /var direkt unter dem Wurzelverzeichnis. Das nennt man einen absoluten Pfad.

Auch die schon bekannte Abkürzung ~ können Sie mit dem Befehl cd verwenden. Allerdings wechselt auch der Befehl cd ohne Angabe eines Verzeichnisses immer in ihren persönlichen Ordner.

tilman@Linux:/var/log$ cd
tilman@Linux:~$

Ebenfalls nützlich ist die Abkürzung .. für das Verzeichnis eine Ebene über dem aktuellen. Im Verzeichnis /var/log wechselt der Befehl cd .. also in das Verzeichnis /var

tilman@Linux:/var/log$ cd ..
tilman@Linux:/var$

Hier sehen Sie wie man sich mit cd durch die Verzeichnisse bewegen kann. @asciinema2(rows: 10)

Verzeichnisse erstellen, auflisten und löschen

mkdir ist eine Abkürzung für make directory mit dem Befehl

tilman@Linux:~$ mkdir projekte

legen wir ein Verzeichnis mit dem Namen projekte an. Da wir nun das Dateisystem verändert haben1, wollen wir das Ergebnis auch sehen. Dafür ist der Befehl ls – kurz für list – nützlich. Der Inhalt des aktuellen Verzeichnisses wird angezeigt.

tilman@Linux:~$ ls
projekte notizen.txt

Hier sehen wir nun das soeben erstellte Verzeichnis projekte aber auch eine Datei notizen.txt die ebenfalls im persönlichen Ordner des Nutzers liegt.

ls kann beliebige Verzeichnisse anzeigen, so können Sie sich zum Beispiel auch das Wurzelverzeichnis anzeigen lassen:

tilman@Linux:~$ ls /
var bin dev opt home ...

Wollen wir das soeben erstellte Verzeichnis wieder löschen, geht das mit rmdir oder remove directory. Allerdings lassen sich damit nur leere Verzeichnisse löschen.

Sowohl mkdir als auch rmdir akzeptieren mehrere, durch Leerzeichen getrennte Verzeichnisnamen um gleichzeitig mehrere Verzeichnisse zu erstellen oder zu löschen.

Hier sehen Sie ein Beispiel: @asciinema2(rows: 8)

Dateien erstellen, editieren und anzeigen

Natürlich gibt es viele Arten von Dateien die mit einer Vielzahl von Anwendungsprogrammen erstellt werden können. Eine einfache Textdatei lässt sich jedoch auch ohne weiteres im Terminal erstellen.

So wie mkdir ein leeres Verzeichnis erstellt, kann mit dem Befehl touch eine leere Datei erstellt werden.

Hier erstellen wir in einem bisher leeren Verzeichnis eine Datei rezepte.txt:

tilman@Linux:~/neu$ ls
tilman@Linux:~/neu$ touch rezepte.txt
tilman@Linux:~/neu$ ls
rezepte.txt

Da eine leere Datei wenig nützt können wir sie nun mit einem Texteditor bearbeiten.

Die meisten Linux-Distributionen enthalten nano, einen minimalistischen Editor, in dem Sie interaktiv eine Datei bearbeiten können. Mit Strg+O1 speichern Sie die Datei, mit Strg+X verlassen Sie den Editor.

Mit cat von concatenate können Sie sich dann den Inhalt der Datei anzeigen lassen.

Hier sehen sie, wie man mit nano eine Textdatei bearbeiten und den Inhalt dann mit cat ausgeben kann:

@asciinema

Bewegen, Kopieren und Löschen

Mit dem Befehl mv, kurz für move können Sie Dateien und Verzeichnisse "bewegen". Das kann man auf zweierlei Weise einsetzen: Erstens können Sie etwas von einem Ort zu einem anderen verschieben, und zweitens können Sie etwas umbenennen, indem Sie den alten Namen durch einen neuen ersetzen, ohne den Speicherort zu ändern.

So benennen wir hier den falsch geschriebenen Ordner "porjekte" in "projekte" um:

tilman@Linux:~$ mkdir porjekte
tilman@Linux:~$ mv porjekte projekte

Hier verschieben wir die Datei hello_world.py aus home in den Ordner projekte

tilman@Linux:~$ touch hello_world.py
tilman@Linux:~$ mv hello_world.py projekte
tilman@Linux:~$ ls projekte
hello_world.py

Ähnlich funktioniert der Befehl cp, kurz für copy. es wird jedoch eine Kopie der Datei oder des Verzeichnisses erstellt, anstatt es zu verschieben. Das Original bleibt am ursprünglichen Ort erhalten.

So kopieren wir zum Beispiel die Datei hello_world.py in das Verzeichnis "backup", während die Originaldatei im Home-Verzeichnis bleibt:

tilman@Linux:~$ cp hello_world.py backup
tilman@Linux:~$ ls backup
hello_world.py
tilman@Linux:~$ ls
backup hello_world.py

Der Befehl rm, kurz für remove, wird verwendet, um Dateien und Verzeichnisse zu löschen. Wenn Sie eine Datei auf diese Weise löschen, wird sie vollständig entfernt und kann nicht wiederhergestellt werden.

So können wir so die zuvor erstellte Kopie von hello_world.py löschen:

tilman@Linux:~$ rm backup/hello_world.py
tilman@Linux:~$ ls backup

Optionen, Optionen, Optionen

Die Befehle die sie bis jetzt kennengelernt haben, decken bereits einen großen Teil der täglichen Arbeit im Terminal ab. Mit ein paar zusätzlichen Tricks können diese aber noch vielseitiger eingesetzt werden.

So haben wir gesehen, dass rmdir nur leere Verzeichnisse löschen kann. Wenn sie aber den Befehl rm mit rm -r aufrufen, können Sie auch Verzeichnisse mit Inhalt löschen. -r steht für recursive und bedeutet, und ist eine Option, die besagt, dass der Befehl rekursiv alle Dateien und Unterverzeichnisse löschen soll.

**Vorsicht!** \ `rm -r` ist einer der gefährlichsten Befehle im Linux Terminal. Ohne Nachfrage werden alle Dateien und Unterverzeichnisse unwiderruflich gelöscht. Vor allem wenn Sie als *root* angemeldet sind, können Sie so das gesamte System löschen. Überlegen Sie also immer zweimal bevor sie Enter drücken.

Der Parameter -r ist ein Beispiel für eine Option. Optionen sind zusätzliche Argumente, die das Verhalten eines Befehls ändern. Sie werden durch einen Bindestrich und einen Buchstaben oder zwei Bindestriche und ein Wort angegeben1.\

Hier ein paar Beispiele für Optionen der Ihnen bereits bekannten Befehle:

  • ls -l zeigt zusätzliche Informationen zu den Dateien an (-l steht für long)
  • rm -i fragt vor dem Löschen jeder Datei nach, ob Sie sicher sind (-i steht für interactive)
  • cp -r kopiert rekursiv alle Dateien und Unterverzeichnisse (Die Bedeutung von -r kennen Sie bereits)
  • mkdir -p erstellt das angegebene Verzeichnis, auch wenn die übergeordneten Verzeichnisse im Pfad fehlen. (-p steht für parents)
  • rm --help zeigt die Hilfe des Befehls rm an. Diese Option funktioniert mit allen Befehlen. Probieren Sie es aus!2
**Tipps und Tricks** \ Wir haben bisher nur die Grundlagen der Arbeit im Terminal kennengelernt. Hier sind ein paar hilfreiche weiterführende Tipps:
  • Tabulator-Taste TAB: Drücken Sie die Tabulator-Taste um Dateinamen und Befehle automatisch vervollständigen zu lassen.
  • Pfeiltasten und : So können Sie sich durch die zuletzt eingegebenen Befehle bewegen.
  • Platzhalter *: Mit ls *.txt können Sie sich alle Dateien mit der Endung .txt anzeigen lassen. rm test* löscht alle Dateien die mit test beginnen.
  • Strg+C: Unterbricht die Ausführung eines Befehls.

❓Fragen

Sicherungskopie

Das Verzeichnis projekte enthält 4 Unterverzeichnisse mit vielen Dateien. Sie wollen eine Sicherungskopie namens namens backup erstellen.
Welcher der folgenden Befehle ist korrekt?

  • [(X)] cp -r projekte backup
  • [( )] cp -r backup projekte
  • [( )] cp projekte backup
  • [( )] mv projekte backup

Heimatverzeichnis

Sie sind angemeldet als Nutzer erwin. Welche der folgenden Befehle bringen Sie in Ihr Heimatverzeichnis?

  • [[X]] cd
  • [[ ]] cd /
  • [[X]] cd ~
  • [[X]] cd /home/erwin
  • [[ ]] cd /home
  • [[ ]] cd /erwin

Verzeichnis löschen

In ihrem Heimatverzeichnis befindet sich das leere Verzeichnis bilder und das leere Verzeichnis musik.
Welche der folgenden Befehle löschen beide Verzeichnisse?

  • [[ ]] rm bilder musik
  • [[X]] rm -r bilder musik
  • [[X]] rmdir bilder musik
  • [[ ]] rmdir /bilder /musik
  • [[ ]] rmdir -r bilder musik
  • [[ ]] rm bilder rm musik

Footnotes

  1. Quelle: Wikimedia Commons 2 3 4 5 6

  2. Quelle: Virtuelles Lochkartenmuseum 2 3

  3. MacOS verwendet den Namen /Users statt /home.