![](https://cyber4edu.org//pads/uploads/358d38b0-059b-4504-9a0f-7fd7712a3f9c.png) # Linux für Einsteiger\*innen sylvia@cyber4edu.org micu@cyber4edu.org --- # Es war einmal... ---- ... **Linus Torvalds**, der 1991 den Linux-Kernel erschaffen hat. ---- Nun hatte er zwar einen **Kernel** (also eine Schnittstelle zwischen Hardware und Software), aber er hatte keine Programme, die Standardfunktionen bereitstellten, wie z.B. Dateiverwaltung. ---- Wie gut für Linus, dass das **GNU-Projekt** (daraus entstand die **Free Software Foundation**) zur gleichen Zeit die sog. GNU Utilities entwickelt haben. ---- So enstand **GNU/Linux**. ---- Leseempfehlung! ![](https://cyber4edu.org//pads/uploads/18ad3b77-7dec-45cd-9f28-6ad45c04afaf.jpg) --- # Warum beschäftigen wir uns damit? ---- ## Wer hier hat einen PC/Notebook mit... * Windows: - Windows 11 - Windows 10 - Ältere Versionen * MacOS * Linux * Was Anderes ---- ## Verbreitung * Microsoft Windows dominiert weiterhin die Endbenutzer-Desktops [71% MS Windows, 16% Apple macOS, 4% Linux, 2% Google ChromeOS, Rest unbekannt], * aber **Linux läuft auf der Mehrzahl aller Server** (sogar in Microsofts eigener Cloud!) [Server OS 63% Linux vor Windows, Unix und anderen], * auf vielen "Embedded Devices", * auf der Mehrzahl Eurer Smartphones [Android (Linux-Kernel) 72%, Apple iOS 28%] und Tablets, * Top500-Supercomputer (100% Linux seit 2017)... <https://en.wikipedia.org/wiki/Usage_share_of_operating_systems> **Alleine deshalb sollten alle darüber Bescheid wissen!** ---- ## Microsoft und Windows * Microsoft stellte im **Oktober 2025** den weltweiten Support für **Windows 10** ein (in Europa 1 Jahr Verlängerung unter bestimmten Umständen) * **keine Sicherheitsupdates mehr!** * Mit so einem Rechner sollte man nicht ins Netz! * **Windows 11**? * **Microsoft unterstützt keine alte Hardware**, obwohl vielleicht noch gut/schnell genug * **nicht nachhaltig!** * kostet Geld ---- ## Microsoft und Datenschutz Microsoft versucht immer wieder * An Eure **Daten** zu kommen * Euer **Verhalten** zu analysieren * Möglichst viel auf die eigenen **Cloud-Dienste** zu bekommen: * One-Drive * Microsoft 365 * Copilot * MS Teams ---- ## Clouddienste * erzeugen digitale **Abhängigkeit** * **"verlieren"** immer mal wieder Daten * locken mit vermeintlich kostengünstigen Angeboten, kosten aber über die Zeit oft viel Geld * Hersteller können bei Abhängigkeit Preise fast beliebig anheben (und tun das auch regelmäßig, 2026: MS365 um 9-25%) <https://www.heise.de/news/Microsoft-erhoeht-Preise-fuer-Microsoft-365-ab-Juli-2026-deutlich-11103864.html> --- # Freie Open Source Software * Was ist Open Source? * Wann ist Software frei? ---- ## (F)OSS * **Open Source** ist Software, bei welcher der **Code öffentlich verfügbar** ist * Jede\*r kann den Code einsehen, nutzen und weiterentwickeln. * Die Nutzung ist oft kostenfrei, manchmal bezahlt man für Hilfe/Support * **Frei** ist Software, wenn sie die **4 Freiheiten** der FSF erfüllt ---- ## Die 4 Freiheiten der FSF * Die Freiheit, das Programm **auszuführen**, wie man möchte, für jeden Zweck * Die Freiheit, die Funktionsweise des Programms zu **untersuchen** und eigenen Bedürfnissen der Datenverarbeitung anzupassen * Die Freiheit, das Programm **weiterzuverbreiten** und damit seinen Mitmenschen zu helfen * Die Freiheit, das Programm zu **verbessern** und diese Verbesserungen der Öffentlichkeit **freizugeben**, damit die gesamte Gemeinschaft davon profitiert ---- ## Vorteile von OSS * **Kostenaspekte** * **Offene Standards** und Dateiformate, bessere **Kompatibilität** mit anderen Systemen * **Unabhängigkeit** von bestimmten Anbietern, kein „Vendor-Lock-in“, digitale Daten-Souveränität * **Mehr Kontrolle** über Eure eigenen Daten * besserer **Datenschutz** möglich * Quellcode kann an **eigene Bedürfnisse** angepasst werden * Quellcode wird von der Community laufend angepasst und überprüft, v.a. auf Schwachstellen → **hohe Sicherheit** und schnelle Fehlerbehebung! * Community bietet **Hilfe und Support** --- # Lizensierung ---- ## Offen -- aber zu welchen Bedingungen? OSS hat die Eigenschaft, dass die Quellen frei verfügbar sind. Dennoch sind viele OSS-Programme geschützt durch die "GNU General Public License (GPL)". Hinter der GPL steht die "Free Software Foundation (FSF"). Diese Lizenz erfüllt die 4 Freiheiten. Demnach darf jede\*r OSS Code nutzen, ansehen, verändern, weitergeben/verkaufen. **So ist jede Weitereintwicklung ein Gewinn für alle Anwender\*innen.** ---- Mehr über GNU-Lizenzen: https://www.gnu.org/licenses/licenses.html Es gibt auch andere Open-Source-Lizenzen. Einen kleinen Überblick findet Ihr z.B. hier: https://snyk.io/de/articles/open-source-licenses/ --- # Linux ---- ## Was ist Linux und was macht es besonders? * Linux stellt eine Basis für ein kostenloses Open-Source-Betriebssystem dar * Linux bezeichnet eigentlich nur den Kern dieser Systeme * Wir bezeichnen mit Linux aber meist das gesamte System * Es gibt viele Versionen, welche „Distributionen“ genannt werden * Linux hat alle Vorteile, welche OSS hat und du kannst mit Linux viel darüber lernen, wie ein Computer funktioniert ---- # Wichtige Komponenten und Begriffe ---- ## Kernel * Das zentrale Kernstück des Betriebssystems * Bildet eine Trennschicht zwischen Hardware und Anwenderprogrammen * Verwaltet Speicher, Scheduling, Interprozess-Kommunikation und Treiber * Wird ständig weiterentwickelt ---- ## Shell * Dient als Schnittstelle zwischen Benutzer und Kernel * Gibt es als Text-Shell (Befehlszeile) und als grafische Shell ---- ## Desktop-Umgebungen * Bilden die grafische Benutzeroberfläche * Beispiele sind GNOME, KDE, XFCE * Können meist frei mit verschiedenen Distributionen kombiniert werden ---- ## Distributionen * Bündeln Kernel, Shell, Root-Filesystem und zusätzliche Software * Core Linux Distributionen sind beispielsweise Slackware, RedHat Enterprise (kommerziell!), Gentoo, openSUSE, Debian * Und dann gibt es viele verschiedene spezialisierte Distributionen wie Ubuntu, Fedora, Mint, Puppy, Kali, Tails, etc. * Abstammungsbaum mit Zeitleiste: <https://github.com/ FabioLolix/LinuxTimeline> ![](https://cyber4edu.org//pads/uploads/7c0ffe6a-a112-452a-98e5-849d7089c56c.png) ---- ## Benutzerschnittstellen * GUI * TUI * CLI ---- ## Das GUI **Graphical User Interface** ---- ## Das GUI Das **Graphical User Interface** ist die grafische Bedienoberfläche eines Systems. ![](https://cyber4edu.org//pads/uploads/a550a228-c047-4eab-ad43-ed780112421e.png) --- # Der Schulstick ---- ## Was ist der Schulstick? * Linux-Live-System („Arbeitsumgebung-to-go“) * Keine Installation (startet vom USB-Stick) * Startet auf (fast) jedem PC/Notebook * Sofort nutzbar * Software auf PC/Notebook unbeeinflusst * Projekt der [FSFW-Dresden](https://fsfw-dresden.github.io/schulstick-page/) * Eigene Anpassungen möglich (z.B. für den 39C3) * Freie/Open Source Software (FOSS) * basiert auf Debian * Je nach Grösse des Sticks können weitere Programme installiert werden. ---- ## Live-Demo ---- ## Der Schulstick -- Live-Demo * Grafische Oberfäche * Apps: klickt auf "Womit mach ich was" * Probiert alles aus, was ihr möchtet! * Stellt gerne Fragen! ![](https://cyber4edu.org//pads/uploads/9a74d845-2ac8-427b-bb15-d79ae9648686.png) --- # CLI **Command Line Interface** ```bash user@hostname:~$ ``` ---- ## Warum beschäftigen wir uns damit? * Das CLI ist **wie ein Zauberwerkzeugkasten** für deinen Computer. * Wer erstmal gelernt hat, ein wenig damit umzugehen, kann den Computer **sehr schnell und effektiv** bedienen! * Oder gar **automatisieren** * Es gibt unendlich viel zu **entdecken** -- los geht's! ---- # CLI via Linux Console Terminal Als es noch keine graphischen Interfaces gab, sah man nach dem Boot einfach nur einen **Login-Prompt**, und das ist heute auch noch so bei Systemen, die ohne GUI installiert werden (z.B. viele Server-Systeme). Hier wird dann direkt auf diesem Console Terminal gearbeitet. ---- ## Terminal-Anwendungen * Es gibt aber auch "virtuelle" Terminal-Anwendungen, auf die über die GUI zugegriffen werden kann. * Das **Terminal** ist das Programm, welches über eine sog. Shell Befehle entgegen nimmt. * Jeder Linux-"Flavour" bringt seine eigene Version eines Terminal-Programms mit, oft direkt verbunden mit der Desktop-Applikation: GNOME hat den GNOME-Terminal, Ubuntu MATE hate den MATE Terminal, welche manchmal aber auch universal installierbar sind. Die Unterschiede sind oft im Design und manchmal in den Funktionen, wobei grundsätzliche Befehle und Funktionen sehr ähnlich sind. ---- ## Shell - Eine Shell nimmt Befehle, welche über das Terminal eingegeben wurden, entgegen, verarbeitet diese, und interpretiert. - Beispiele sind "bash", "zsh", "csh", "ksh", "fish" - Die **bash** ist weit verbreitet und auf den meisten Linux-Systemen verfügbar ---- ## Basics - Das Linux Terminal ist eine **textbasierte Schnittstelle**, die es dir ermöglicht, Befehle an das Betriebssystem zu übermitteln oder dort Ausgaben zu lesen. - Linux und vor allem alle Terminal-Anwendungen sind "Case-sensitive", d.h. es ist bei allen Befehlen sehr wichtig, sie richtig zu schreiben -- inklusive **Groß- und Kleinschreibung!** - Verwende zur Vervollständigung von existierenden Dateinamen oder Ordnernamen **`[TAB]`**. - Das funktioniert auch bei vielen Befehlen und/oder ihren Optionen. - Mit dem **`[Pfeil nach oben]`** bekommt ihr wieder den letzten eingegebenen Befehl. ---- ## Erste Schritte Öffne ein Terminal! ![](https://cyber4edu.org//pads/uploads/d7125c22-ead8-4e09-a292-1477564c615c.png) ---- ## Terminal-Fenster ... und drücke irgendeine Taste, aber nicht r, t oder s ![](https://cyber4edu.org//pads/uploads/8bd84c73-81ef-4be8-9f1a-7a374d3fe98c.png) ---- ## In der Shell... - Du siehst, dass da etwas steht wie: ```bash user@hostname:~$ ``` - Was da steht, nennt man **Prompt** und der sieht je nach Shell und Konfiguration anders aus. - Je nach Shell funktionieren manche Dinge auch etwas anders -- aber prinzipiell ähnlich. - Dieser Prompt hier zeigt den aktuell angemeldeten User `user`, am Rechner mit dem Namen `hostname` und im persönlichen Verzeichnis dieses Benutzers (`~`). - Hier kann der/die jeweilige Benutzer\*in Dateien abspeichern. - Auch Programme legen hier Benutzer\*innen-Spezifisches ab. ---- ## Das Command ls ```bash user@hostname:~$ ls -la ``` - "ls" ist ein Kürzel für "list". Der Befehl listet Dateien auf in dem Verzeichnis, wo ich mich gerade befinde. - "ls" wird hier mit den *Optionen* "la" aufgerufen - hinter dem Minus - die Reihenfolge dieser beiden Optionen ist egal (`al` oder `la`) und es ginge auch `-a -l` oder `-l -a` - Das "a" bedeutet, dass ALLE Dateien angezeigt werden sollen, auch sog. *versteckte Dateien*. Das sind die Dateien mit einem Punkt vor dem Namen. - Das "l" bedeutet, dass einige Zusatzinformationen angezeigt werden sollen, nämlich die Spalten vor dem Dateinamen. ---- ## Command Struktur Du siehst am Beispiel des "ls"-Commands, dass es eine Struktur gibt: | Command | Option | und vielleicht ein Argument | |----------|-----------|-----------------------------| | ls | -la | /home/user/ | Probiere auch `ls -la /usr/bin | more`. Was macht das? --- # Hilfe ---- ## man pages Man muss sich Optionen zu Befehlen nicht merken, denn es gibt die sogenannten "man pages". Teste ```bash user@hostname:~$ man ls ``` ---- Die man pages sind gruppiert: ```bash user@hostname:~$ man man ``` ---- ## TLDR (too long, didn't read) Eine Kurzversion mit Beispielen liefert häufig ```bash user@hostname:~$ tldr man ``` man Format and display manual pages.More information: https://www.man7.org/linux/man-pages/man1/man.1.html. - Display the man page for a command: man {{command}} - Display the man page for a command from section 7: man {{7}} {{command}} - List all available sections for a command: man -f {{command}} - Display the path searched for manpages: man --path ``` ---- ## help! Bei den meisten Kommandos gibt es auch noch `--help`: ```bash user@hostname:~$ ls --help ``` Das allgemeine `help` (ein eigener Befehl) liefert die Hilfe für alle internen Shellkommandos. ```bash user@hostname:~$ help GNU bash, Version 5.1.16(1)-release (x86_64-pc-linux-gnu) Diese Shellkommandos sind intern definiert. Geben Sie »help« ein, um diese Liste zu sehen. Geben Sie »help Name« ein, um die Beschreibung der Funktion »Name« zu sehen. (...) ``` ---- ## Eh... welcher Wochentag war der 23. dieses Monats? Probiere einmal `cal` aus: ```bash cal ``` oder Weihnachten nächstes Jahr ```bash cal 12 2026 ``` Falls auf deinem Computer eine Meldung wie "command not found" kommt, musst du wahrscheinlich das Programm "cal" installieren. --- # Software-Pakete ---- ## Paket-Manager * Das Betriebssystem und die installierten Anwendungen werden in sogenannten **Repositories** bereit gestellt. * Verschiedene Distributionen haben unterschiedliche **Paketformate** und eigene Repositories. * Bei Debian-basierten Systemen wie dem Schulstick oder Ubuntu arbeiten wir mit **`apt`** und dem **deb**-Paketformat. * Andere Linux-Distributionen benutzen andere **Paketmanager**, funktionieren aber ähnlich. * Siehe z.B. https://www.stefanux.de/wiki/doku.php/linux/paketmanager ---- ## Beispiel Mit folgendem Befehl könnt ihr die Kalender-Funktion `cal` installieren: ```bash sudo apt install ncal ``` * `sudo` macht, dass du die Berechtigung hast, zu installieren, * `apt install` sagt dem Computer, dass er etwas installieren soll, * `ncal` ist der Name des Pakets, das installiert werden soll. ---- ## Aktualisiere dein Linux über die cli (1) Mit ```bash apt update ``` werden Paketlisten neu eingelesen und aktualisiert. Diese werden im Verzeichnis `/etc/apt/sources.list` hinterlegt und sind je nach Version unterschiedlich und mit verschiedenen Variablen am Ende versehen. Wenn es durch `apt update` Neuigkeiten gibt, dann können diese mit ```bash apt upgrade ``` eingespielt werden. Das heisst, das ist dann das eigentliche Update. ---- ## Aktualisiere dein Linux über die cli (2) Es gibt noch `apt dist-upgrade`. Dieser Befehl aktualisiert nicht nur die beständigen Pakete, sondern tauscht diese gegen neuere "Major"-Versionen aus. Dies ist zum Beispiel der Fall, wenn ein System vollständig auf eine neue Version aktualisiert werden soll. Hierbei müssen jedoch vorab die Paketquellen in der Datei /etc/apt/sources.list neu angegeben werden. ---- ## In welcher Version ist mein Paket installiert? Dazu gibt es verschiedene Möglichkeiten (hier am Beispiel des Programms *toilet*): ```bash which toilet toilet --version apt search toilet apt show toilet ``` * **which** sagt uns, wo das Programm liegt * **\-\-version** gibt aktuelle Versionsnummer aus * **apt search** und **apt show** geben Paket-Infos * Häufig heißen Programm und Paket gleich. * Bei `cal` heißt das dazugehörige Paket aber `ncal`. ---- ## figlet und toilet Du hast vielleicht schon einmal gesehen, wenn ASCII-Text auf einem Terminal toll dargestellt wird. Installiere figlet und toilet und spiele damit! ```bash sudo apt install figlet sudo apt install toilet figlet "39C3" toilet "39C3" ``` Schau Dir die man pages dazu an, um die Möglichkeiten zu erfahren. `showfigfonts` zeigt verschiedene verfügbare Schriftarten an. ---- ## Wer ist alles angemeldet? Unix und Linux sind **Mehrbenutzersysteme**. Das bedeutet auch, dass mehrere Personen gleichzeitig am selben Rechner angemeldet sein und arbeiten können. Oder man selber an mehreren Terminals. ```bash user@hostname:~$ who ``` --- # Dateien ---- ## touch - Mit `touch file` kann man eine neue Datei "file" anlegen - Existiert die Datei bereits, dann wird ihr Änderungsdatum aktualisiert (modification timestamp) - Es können auch mehrere Dateien angelegt werden: ```bash touch file1 file2 file3 ``` ---- ## Inhalte anzeigen ---- ## cat - mit `cat file` kann man sich den Inhalt einer Datei ansehen - mit `cat file1 file2` wird der Inhalt mehrerer Dateien hintereinander ausgegeben - `cat -n` gibt den Inhalt mit Zeilennummern aus. - `zcat` zeigt den Inhalt gezippter Dateien ---- ## less **less** ist ein sog. Pager, mit dem sich Dateien anschauen lassen (aber nicht editieren) - Mit `less file` kann man sich den Inhalt einer Datei ansehen. - Wenn der Dateiinhalt länger als eine Bildschirmseite ist, stoppt die Anzeige. - Mit `[ENTER]` geht es eine Zeile weiter. - Mit `[SPACE]` (der Leertaste) geht es eine Seite weiter. - Mit `q` (für quit) könnt Ihr die Anzeige (ggf. auch vorzeitig) wieder verlassen - Habt Ihr auf die letzte Zeile geachtet? ---- ## Cowsay... wth cowsay? ```bash sudo apt install cowsay cd /usr/games/ cowsay "39c3" ``` Falls ihr etwas anderes als eine Kuh wollt, werft doch mal einen Blick in das Verzeichnis `/usr/share/cowsay/cows/`. Testet die Option `-f`. Probiert gerne auch die grafische Variante `xcowsay`. ---- ## alias Vielleicht habt Ihr gerade gesehen, dass statt der Kuh auch ein süßer Pinguin was sagen kann. ```bash cowsay -f tux "39C3" ``` Vielleicht wollt ihr den Parameter nicht jedes Mal mitgeben. Dafür kann ein **alias** definiert werden. ```bash alias tuxsay="cowsay -f tux" ``` Probiert es aus. ---- ## alias "tuxsay" ```bash alias tuxsay="cowsay -f tux" tuxsay "39c3 mit Pinguin!" ``` ___________________ < 39c3 mit Pinguin! > ------------------- \ \ .--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/ ---- ## echo **`echo`** gibt einfach den nachfolgenden Text aus. ```bash user@hostname:~$ echo "Das ist ein Test" Das ist ein Test ``` Das kann man nutzen, um in eine Datei zu schreiben. **Aber Achtung!** * Beim Umleiten der Ausgabe in eine **vorhandene** Datei mit `>` wird ihr Inhalt **überschrieben:** * Existiert die Datei nicht, wird sie angelegt. ```bash user@hostname:~$ echo "Das ist ein Test" > file user@hostname:~$ cat file Das ist ein Test ``` ---- ## Ausgabeumleitung mit `>` **Achtung: beim Umleiten der Ausgabe in eine Datei mit `>` wird ihr Inhalt überschrieben:** ```bash user@hostname:~$ cat file Das ist ein Test user@hostname:~$ echo "Das auch" > file user@hostname:~$ cat file Das auch ``` ---- ## Ausgabeumleitung mit `>>` Wenn man Inhalte **anhängen** will, muss man **`>>` benutzen**: ```bash user@hostname:~$ echo "Das ist ein Test" > file user@hostname:~$ cat file Das ist ein Test user@hostname:~$ echo "Das auch" >> file user@hostname:~$ cat file Das ist ein Test Das auch ``` --- # Verzeichnisse ---- ## Durch die Verzeichnisse wandern Mit `cd` (Change Directory) kannst du das Verzeichnis wechseln, wobei du absolute oder relative Pfade angeben kannst. ```bash cd directory cd /home/user/Downloads/ cd .. ``` * Das Beispiel `cd /home/user/Downloads/` zeigt einen absoluten Pfad. * Ein relativer Pfad beginnt **nie** mit `/` , er gibt das Ziel aus dem Blinkwinkel des derzeitigen Ortes an. * Mit Leerstelle und den beiden Punkten gehen wir eine Ebene nach "oben" -- in Richtung Wurzelverzeichnis. * Mit `cd` kommst Du wieder zurück in dein Benutzerverzeichnis `/home/user`. ---- ## Durch die Verzeichnisse wandern (contd.) Mit ```bash cd ../Dokumente ``` gehen wir eine Ebene nach oben und dann direkt in den Ordner Dokumente. Mit `[TAB]` kannst du die Namen immer vervollständigen. ```bash cd ../Do[TAB] ``` hätte hier auch geklappt, wenn "Dokumente" hier der einzige Ordner ist, der mit "Do" anfängt (sonst werden Dir bei einem weiteren `[TAB]` alle möglichen Treffer angezeigt). ---- ## Wo bin ich? Hier sehen wir, dass wir uns im Verzeichnis `/home/user` befinden: ```bash user@hostname: /home/user $ ``` Oft sieht man nur eine Abkürzung, bei der `~` für das eigene Home-Verzeichnis steht: ```bash user@hostname: ~ $ ``` Aber nicht jeder Prompt zeigt immer an, wo man sich gerade befindet. Dann hilft `pwd` (kurz für Print Working Directory). ```bash $ pwd /home/user ``` ---- ## mkdir und copy (1) Vielleicht möchtest du Dateien im Filesystem hin und her kopieren. Du befindest dich im Verzeichnis `/home/user/`. Mit ```bash mkdir directory1 directory2 ``` erstellst du zwei neue Verzeichnisse. Mit ```bash cd directory1 ``` gehst du in das neue directory1-Verzeichnis. ---- ## mkdir und copy (2) Mit ```bash touch newfile ```` erstellst du im directory1 eine neue Datei "newfile". Dann gehst du mit ```bash cd ../directory2 ```` in das Verzeichnis "directory2". ---- ## mkdir und copy (3) Du möchtest nun die neue Datei, die sich in directory1 befindet, in das directory2 kopieren, also dahin, wo du gerade bist. Das machst du mit ```bash cp ../directory1/newfile . ``` Der Punkt am Ende gibt an, dass du die Datei in dasjenige Verzeichnis kopierst, wo du dich gerade befindest. Du hättest genauso gut auch eine absolute Pfadangabe machen können --- # Editoren ---- ## vi / vim Es gibt verschiedene Programme, mit denen Dateien editiert werden können, eines davon ist **vi**/**vim**. Es ist immer noch eines der beliebtesten Textbearbeitungsprogramme und auch wenn die Kommandos erstmal etwas obskur erscheinen -- wenn man die Basics erstmal drauf hat, lassen sich Dateien superschnell editieren! Mit diesem Kommando erzeugst du eine neue Datei namens "filename" und springst auch gleich in die Datei hinein: ```bash user@hostname: /home/user $ vim filename ``` ---- ## vi / vim -- command mode Wenn du eine Datei öffnest, bist du zunächst im "command mode" oder "normal mode", du kannst also Kommandos eingeben, wie z.B.: ```bash h -> move left j -> move down k -> move up l -> move right PageDown oder Ctrl+F -> move one page forward PageUp oder Ctrl+B -> move one page backward shift + G -> move to last line gg -> move to first line ``` Es gibt noch mehr Kommandos, die lernen wir aber später kennen! ---- ## vi / vim -- ex mode Hier lassen sich hinter einem Doppelpunkt Kontrollkommandos eingeben, wie z.B.: ```bash :q -> quit an unchanged file :q! -> quit and discard changes :w filename -> save file under different name :wq -> save file and quit ``` ---- ## vi / vim -- Insert/Append Mode ```bash i -> Füge Zeichen links von der i-Eingabe ein a -> Füge Zeichen recht von der a-Eingabe ein ``` Mit `Esc` kommen wir aus dem Insert-/Append-Mode wieder raus. Es gibt noch einige mehr Kommandos und die wollen wir nun nicht nur kennenlernen, sondern auch üben! Öffne ```bash vimtutor ``` ---- ## nano `vim` oder `vi` ist auf praktisch jedem Linux-System verfügbar, daher lohnt es sich, sich mit der Bedienung auseinander zu setzen und zumindest die Basis-Tasten zu lernen. Es gibt aber auch andere Editoren, die Viele einfacher zu bedienen finden und daher bevorzugen. Einer davon ist **`nano`**. Startet `nano` (für eine neue leere Datei) oder `nano file` zum Bearbeiten der Datei *file*. Unten seht ihr eingeblendet die Tastenkommandos für die häufig benutzten Befehle, wobei `^` für die CTRL- bzw. STRG-Taste steht und `M-` für die ALT-Taste. Probiert es aus. --- # Dinge finden ---- ## grep -- Basics Mit grep können wir Text in Dateien suchen. ```bash grep bananas foo.txt grep -i bananas foo.txt grep -v bananas foo.txt grep -r bananas /home/user grep -lr bananas /home/user ``` * Statt `grep -i` geht oft auch `igrep` für case insensitive. * `grep -v` zeigt alle Zeilen, wo der Suchbegriff *nicht* vorkommt * `grep -r` durchsucht alle Dateien in einem Verzeichnis * `grep -l` zeigt nur die Dateinamen, wo der Text vorkommt Schau dir `man grep` an! ---- ## grep -- Suche im FSFW-Material (1) Suche im mitgelieferten FSFW-Material nach **linux**: ```bash grep linux -lr ~/FSFW-Material ``` /home/user/FSFW-Material/hello-world-collection/README.md Suche nach **linux**, aber **case insensitive**: ```bash grep linux -lri ~/FSFW-Material ``` (erinnere Dich: die Reihenfolge der Optionen ist egal) /home/user/FSFW-Material/hello-world-collection/README.md /home/user/FSFW-Material/latex-vorlagen/praesentation/fsfw-beamer-vorlage.tex /home/user/FSFW-Material/Notes/Home.txt /home/user/FSFW-Material/Notes/Linux-Befehle.txt ---- ## grep -- Suche im FSFW-Material (2) Durchsuche die zim-Notebooks für Programme im FSFW-Material. ```bash ls -l ~/FSFW-Material/zim-notebooks/Notes/Programme ``` Es gibt Infos zu *ksnapshot* und *zim*. ```bash -rw-r--r-- 1 root root 510 19. Nov 09:05 ksnapshot.txt -rw-r--r-- 1 root root 4885 19. Nov 09:05 zim.txt ``` ---- ## grep -- Suche im FSFW-Material (3) Steht in einer der beiden Dateien "Windows"? ```bash grep -nir windows FSFW-Material/zim-notebooks/Notes/Programme ``` .../Programme/ksnapshot.txt:11:(Meta = Windows-Taste) (die Option `n` zeigt die Zeilennummer des Treffers) ---- ## grep -- Alles außer Windows -- geht das? Wir wollen aber alle Dateien haben, in denen *nicht* Windows vorkommt (also hier die `zim.txt`) und probieren die Option `-v`: ```bash grep -nirv windows FSFW-Material/zim-notebooks/Notes/Programme ``` Das sieht anders aus als wir erwarten. Warum? `grep` durchsucht die Dateien **zeilenweise** und liefert uns nun jede einzelne Zeile, in der nicht *Windows* vorkommt! Wir sehen, dass die Option `-v` also auch die `ksnapshot.txt` liefert und nur die Zeile 11 weglässt (das war die Zeile mit *Windows*). Auch ein `grep -nirvl windows FSFW-Material/zim-notebooks/Notes/Programme` liefert immer noch beide Dateien. Was nun? ---- ## grep -- Alles außer Windows -- na klar! Mit der Option `-L` werden alle Dateien **ohne Treffer** angezeigt! ```bash grep -irL windows FSFW-Material/zim-notebooks/Notes/Programme ``` ---- ## find Mit find kann man Dateinamen im Filesystem finden. ```bash find /home/user -name "*.txt" find /home/user -iname "foo.txt" ``` Finde im Verzeichnis /home/user den Dateinamen (case insensitive mit "i") alle Dateien mit der Endung **"txt"** bzw. **"foo.txt"** (klein oder gross geschrieben). Finde im FSFW-Material alle Markdown-Dateien (Endung **md**)! ```bash find ~/FSFW-Material/ -name "*.md" ``` ---- ## Wildcards Als wir gerade nach Dateien mit der Endung `.txt` oder `.md` gesucht haben, haben wir ein `*` als Platzhalter für beliebige Zeichen verwendet. ---- ## Weitere Wildcards | Wildcard | Bedeutung | |-----------------------|-------------------------------------------| | `*` | Zeichen, egal wie viele | | `?` | ein Zeichen (genau eins) | | `[Zeichen]` | Zeichen aus der Liste | | `[!Zeichen]` | Zeichen, nicht in der Liste ist | | `[[:Zeichenklasse:]]` | Zeichen einer bestimmten Klasse | ---- ## Wildcards -- Zeichenklassen | Zeichenklassen | Bedeutung | |-----------------------|-------------------------------------------| | `[:alnum:]` | Irgendein alphanumerisches Zeichen | | `[:alpha:]` | Irgendein alphabetisches Zeichen | | `[:digit:]` | Irgendeine Ziffer | | `[:lower:]` | Irgendein Kleinbuchstabe | | `[:upper:]` | Irgendein Großbuchstabe | ---- ## Wildcards -- Beispiele (1) | Pattern | Gilt für | |---------------------------|-----------------------------------------------------------------------------------| | `*` | Alle Dateien | | `g*` | Jede Datei, die mit **g** beginnt | | `b*.txt` | Jede Datei, die mit **b** beginnt und mit **.txt** endet | | `Data???` | Jede Datei, die mit **Data** beginnt und danach noch **genau drei Zeichen** hat | ---- ## Wildcards -- Beispiele (2) | Pattern | Gilt für | |---------------------------|-----------------------------------------------------------------------------------| | `[abc]*` | Jede Datei, die mit **a**, **b** oder **c** beginnt | | `BACKUP.[0-9]` | Jede Datei, die mit **BACKUP.** beginnt und danach noch **genau eine Ziffer** hat | | `[[:upper:]]*` | Jede Datei, die mit einem **Großbuchstaben** beginnt | ---- ## Wildcards -- Beispiele (3) | Pattern | Gilt für | |---------------------------|-----------------------------------------------------------------------------------| | `[![:digit:]]*` | Jede Datei, die **nicht** mit einer **Ziffer** beginnt | | `*[[:lower:]123]` | Jede Datei, die mit einem **Kleinbuchstaben** oder mit den Ziffern **1**, **2** oder **3** endet | | `[a-cx0-9]*` | Jede Datei, die mit den Buchstaben **a**, **b**, **c** oder **x** oder einer **Ziffer** beginnt | --- # Dateisystem und Berechtigungen ---- ## Das Linux Filesystem (1) Gib folgendes in deinen Terminal ein: ```bash user@hostname: /home/user $ ls / ``` Mit "/" landest du im "Wurzelverzeichnis". ---- ## Das Linux Filesystem (2) - /bin oder /sbin -> Binarys, ausführbare Dateien, GNU Utilities - /boot -> Boot Dateien - /dev -> Geräte-Verzeichnis - /etc -> System-Konfigurationen - /home -> Ort für Benutzerverzeichnisse - /lib -> Ort für Programm-Bibliotheken - /media -> Zugriffspunkt für "removable media", z.B. USB Sticks - /mnt -> Ort für zeitweise eingebundene Dateisysteme - /opt -> oft für Softwarepakete verwendet - /proc -> Prozess-Verzeichnis ---- ## Das Linux Filesystem (3) - /root -> Das Homeverzeichnis des mächtigsten Benutzers - /sys -> System-Verzeichnis für Kerne - /tmp -> Verzeichnis für temporäre Dateien, wird bei jedem Reboot ausgeleert - /usr -> Darin findet sich oftmals eine zweite "/-Struktur" mit commands, source code Dateien, Spielen, etc. - /var -> Verchiedenes, v.a. für Logfiles ---- ## Das Linux Filesystem (4) Probiere doch mal den Befehl ```bash tree -L 2 / ```` ---- ## Datei-Berechtigungen in Linux (1) Es gibt 3 Personenkreise, die Berechtigungen bekommen können: - Den **Eigentümer** einer Datei - Eine bestimmte **Gruppe von Benutzern** (unabh. vom Eigentümer) - **alle anderen** ---- ## Datei-Berechtigungen in Linux (2) Es gibt 3 Berechtigungsstufen für Dateien: - **Lesen** (r wie read) - **Schreiben** (w wie write) - **Ausführen** (x wie execute) ---- ## Datei-Berechtigungen in Linux (3) Fast das gleiche gilt für Verzeichnisse: - Dateien eines Verzeichnisses **auflisten** (r) - **Dateien erzeugen** (w) - **In Verzeichnisse wechseln** und Dateien aufmachen (x) ---- ## Datei-Berechtigungen in Linux (4) Wie drückt man nun aus, wer was darf? Die Berechtigungen werden von links nach rechts aufgereiht: **Eigentümer Gruppe Alle** Beispiele: | Muster | Berechtigungen | |----------------|---------------------------------------| | `rwxrwxrwx` | alle dürfen alles | | `rwxr-xr--` | Eigentümer darf alles, Gruppe darf lesen und ausführen, alle dürfen lesen | Ein Bindestrich mittendrin heisst, dass dieses Recht nicht eingeräumt wird. ---- ## Datei-Berechtigungen in Linux (5) Zurück zu ls ```bash user@hostname:~$ ls -la ``` drwx------ myuser somegroup 21359 19 Nov 2024 Downloads * Das "d" steht für "directory" * Auf dieses Verzeichnis hat nur "myuser" mit Lesen/Schreiben/Ausführen Zugriff * Alle anderen haben keinen Zugriff! * Die Zahl nach "somegroup" ist einfach die Grösse des Ordners * Danach kommt das Datum und der Verzeichnisname "Downloads". ---- ## Datei-Berechtigungen in Linux (6) ```bash $ ls -l foo.txt ``` -rwxr----- myuser somegroup 6 19 Nov 2024 foo.txt myuser ist Datei-"Eigentümer\*in", die Gruppe somegroup darf immerhin lesen. Wir könnten das leicht ändern mit: ```bash $ chown otheruser:somegroup foo.txt $ ls -l foo.txt ``` -rwxr----- otheruser somegroup 6 19 Nov 2024 foo.txt ---- ## Datei-Berechtigungen in Linux (7) Die Berechtigungen selber können auch verändert werden. Dateiberechtigungen sind Bits, z.B.: | user | group | all | | -------- | -------- | -------- | | rwx | r\-\- | r\-\- | | 111 | 100 | 100 | | 7 | 4 | 4 | 1 heisst, dass das Bit "eingeschaltet" ist, 0 schaltet das Bit aus. 111 als Binärzahl = 7 in Dezimal, denn eigentlich ist das: $$ 2^2+2^1+2^0=7 $$ ---- ## Datei-Berechtigungen in Linux (8) Ich möchte, das "all" nicht mehr lesen darf, dafür soll "group" schreiben können. Das erreiche ich mit ```bash chmod 750 filename ``` --- # Spielen **kleine Spiele** ---- ## Puh, das war vielleicht kompliziert, vielleicht eine Runde spielen? ---- ## bsdgames Es gibt eine Reihe ganz coole Spiele, die sich am Terminal spielen lassen. ```bash sudo apt install bsdgames cd /usr/games/ ls -la ./tetris-bsd ./snake ``` Probiere ein paar Spiele aus! ---- ## robotfindskitten Lasst uns "Robotfindskitten" ausprobieren. ```bash sudo apt install robotfindskitten robotfindskitten ``` ---- ## Noch eine andere Möglichkeit, Tetris zu spielen... ```bash sudo apt install bastet bastet ``` --- # Prozesse ---- ## top und htop top und htop zeigen im Live-Update Infos über die Systemauslastung und die Prozesse an. ---- ## ps und pstree ps zeigt Informationen über laufende Prozesse, jeder Prozess hat eine Prozess-ID -> "PID". `ps aux` zeigt alle Prozesse und zusätzlich den User an, unter dem der jeweilige Prozess läuft. Im process state gibt es verschiedene Zustände: * R: running * S/D: asleep * Z: Zombie pstree zeigt auch die Abhängigkeiten zwischen Prozessen an. Prozesse können mit dem `kill`-Kommando zerstört werden. Schau dir `man kill` an! ---- ## Verzeichnis /proc Jede PID hat ein eigenes Verzeichnis in /proc/, z.B. /proc/42. Darunter befindet sich jede Menge Information über den jeweiligen Prozess. Schau dir `man proc` an! ---- ## system calls Mit System Calls fragen Programme den Linux-Kernel, Dinge für sie zu tun, wie z.B. "lies etwas von der Festplatte", "mache eine Netzwerkverbindung", "erstelle einen neuen Prozess", "installiere einen Tastatur-Treiber" etc.pp. Benutzte System calls kann man sehen mit `strace`, z.B. `strace ls` --- # Pipes Manchmal ist es wünschenswert, dass ein Ergebnis eines eingegebenen Kommandos als Input für ein weiteres Kommando dient. Wir können mehrere Befehle mit sogenannten **Pipes** aneinander stecken. Das nutzen wir, um die Ausgabe eines Befehls an die Eingabe eines anderen weiterzuleiten. ```bash ls | wc -l ``` Dieses Kommando macht ein "list files" innerhalb eines Verzeichnisses und zählt dann die Zeilen. Lies `man wc` und probiere den Befehl aus! ---- ## Besonderheit bei ls ::::info `ls` verhält sich unterschiedlich, wenn es die Ergebnisse selbst im Terminal ausgibt (ohne weitere Optionen stehen mehrere Dateien in einer Zeile) oder wenn es sie in eine Pipe übergibt (dann schreibt `ls` jede Datei in eine eigene Zeile). Will man es explizit steuern, kann man auch `ls -1 | wc -l` verwenden. :::: ---- ## Eine Beispieldatei Wir wollen gleich mit ein paar Kommandos herumspielen. Dafür benutzen wir eine Bücherliste in einer Datei. Legt eine neue Datei `animals.txt` an (egal ob mit `vi`, `nano` oder `echo >>`) und schreibt folgenden Inhalt hinein (benutzt dabei genau 1 TAB zum Trennen der einzelnen Spalten): python Programming Python 2010 Lutz, Mark snail SSH, The Secure Shell 2005 Barrett, Daniel alpaca Intermediate Perl 2012 Schwartz, Randal robin MySQL High Availability 2014 Bell, Charles horse Linux in a Nutshell 2009 Siever, Ellen donkey Cisco IOS in a Nutshell 2005 Boney, James oryx Writing Word Macros 1999 Roman, Steven ---- ## wc **wc** kennt Ihr schon. Probiert es mit der `animals.txt`: ```bash wc animals.txt ``` 7 51 325 animals.txt **wc** gibt nacheinander die Anzahl der Zeilen, der Wörter und der Zeichen aus. Wenn Ihr nur eins davon wissen wollt, schaut Euch die Optionen `-l`, `-w` und `-c` an. ---- ## head Mit **head** könnt Ihr die ersten Zeilen einer Datei ausgeben. Mit der Option `-nX` könnt Ihr die Anzahl der gewünschten Zeilen angeben, wobei *X* eine Zahl ist -- für die ersten drei Zeilen also `-n3`. Probiert es mit der `animals.txt` ```bash head -n3 animals.txt ``` python Programming Python 2010 Lutz, Mark snail SSH, The Secure Shell 2005 Barrett, Daniel alpaca Intermediate Perl 2012 Schwartz, Randal **head** kann sowohl als Input als auch als Output dienen. ```bash head -n3 animals.txt | wc -w ls /bin | head -n3 ``` ---- ## cut Mit **cut** könnt Ihr eine (oder mehrere) Spalte(n) aus einer Datei ausgeben. Probiert folgende Befehle: ```bash cut -f2 animals.txt cut -f1,3 animals.txt cut -f2-4 animals.txt cut -c1-3 animals.txt ``` Was ist der Unterschied zwischen `-f` und `-c`? Mit `-d` können wir ein Trennzeichen mitgeben. Könnt Ihr die Nachnamen der Buchautoren ausgeben? ```bash cut -f4 animals.txt | cut -d, -f1 ``` ---- ## Verkettung mehrerer Pipes Da die Pipe die Ausgabe eines Befehls mit der Eingabe eines anderen Befehls verbindet, der wiederum selbst eine Ausgabe hat, kann man dies auch mehrfach hintereinander schalten. Versucht zu erklären, was folgender Befehl macht: ```bash ls -l FSFW-Material/hello* | cut -c1 | grep d | wc -l ``` Wenn es euch schwer fällt, das zu überblicken, könnt ihr ja erstmal nur Teile davon ausführen und euch die (Zwischen-)Ergebnisse ansehen. ---- ## sort Mit **sort** könnt ihr -- wer hätte das gedacht -- sortieren! ```bash sort animals.txt sort -r animals.txt ``` Mit `-r` wird einfach rückwärts (absteigend) sortiert. ```bash cut -f4 animals.txt | sort ``` Oder das früheste Erscheinungsdatum aus dieser Liste... ```bash cut -f3 animals.txt | sort -n | head -n1 ``` ---- ## uniq (1) Mit **uniq** können wir mehrfach vorkommende Werte reduzieren. Schaut euch an, mit welchen Buchstaben die Nachnamen der Autoren beginnen. ```bash cut -f4 animals.txt | cut -c1 ``` Ihr bekommt eine Liste von Buchstaben, aber einzelne kommen mehrfach vor. Probiert ```bash cut -f4 animals.txt | cut -c1 | uniq ``` Nicht ganz was wir wollten. **uniq** berücksichtigt nur direkt aufeinander folgende Zeilen. Lasst uns also erst sortieren. ---- ## uniq (2) ```bash cut -f4 animals.txt | cut -c1 | sort | uniq ``` B L R S Besser, aber wie oft kommt denn jeder dieser Buchstaben ursprünglich vor? ---- ## uniq (3) Dafür kennt `uniq` die Option `-c` (für *count*). ```bash cut -f4 animals.txt | cut -c1 | sort | uniq -c ``` 3 B 1 L 1 R 2 S ---- ## Duplikate finden mit md5sum (1) **md5sum** bildet eine Prüfsumme, die sich ändert, wenn der Inhalt sich ändert. Das können wir nutzen, um inhaltliche Duplikate zu finden. Dazu brauchen wir erstmal Beispieldateien: ```bash cp animals.txt books.txt head -n3 animals.txt > somebooks.txt ls *.txt # sollte 3 txt-Dateien zeigen ``` ```bash md5sum *.txt ``` 7041084442b115279984b8a1ca7f23a8 animals.txt 7041084442b115279984b8a1ca7f23a8 books.txt c69d56691a24876e388276f24204c106 somebooks.txt ---- ## Duplikate finden mit md5sum (2) Bei nur drei Dateien sehen wir die Duplikate sofort. Bei langen Dateilisten sortieren wir lieber und lassen uns Vielfache anzeigen. ```bash md5sum *.txt | cut -c1-32 | sort | uniq -c | sort -nr | grep -v "1 " ``` 2 7041084442b115279984b8a1ca7f23a8 ---- ## Duplikate finden mit md5sum (3) Die beiden Dateien mit demselben Inhalt finden wir nun mit ```bash md5sum *.txt | grep 7041084442b115279984b8a1ca7f23a8 | cut -c35- ``` animals.txt books.txt --- # bash Tricks ---- ## Shorts - `cd -` -> gehe in das Directory, wo du zuvor warst - Zeige deine letzten Kommandos an mit `history` - Durchsuche deine Kommando-History mit Ctrl+R - Wenn du ein Kommando eingibst, und direkt vor dem Kommando ein Space/Leerzeichen tippst, dann geht dieses Kommando nicht in die History! - Ctrl+a -> Geh zum Beginn einer Zeile - Ctrl+e -> Geh zum Ende einer Zeile - Ctrl+l -> Clear the Screen - `watch command` führt command per default alle 2 Sekunden aus ---- ## Wetterbericht benötigt? Probiere mal: ```bash curl -H "Accept-Language: de" https://wttr.in/Hamburg ``` Falls `curl` nicht geht... ```bash sudo apt install curl ``` ---- ## disk usage - `du` zeigt dir, wieviel Platz Dateien brauchen - `df -h` zeigt dir, wieviel freier Platz auf jeder Partition ist, "-h" steht für human readable - `df -i` zeigt dir an, wie viele sog. "inodes" noch zur Verfügung stehen. Inodes sind Metainformationen über angelegte Dateien. Wenn keine inodes mehr zur Verfügung stehen, können keine Dateien mehr angelegt werden! - `ncdu` zeigt an, was viel Disk Space verbraucht und es kann auch durch die Anzeige navigiert werden. ---- ## Huch, wieviel Uhr ist es? Probiert ```bash date ``` Automatisch aktualisieren? ```bash watch -n 1 date ``` ---- ## Bash brace expansion ```bash echo {1..9} # liefert 1 2 3 4 5 6 7 8 9 echo {01..10} # liefert 01 02 03 04 05 06 07 08 09 10 echo {1..10..2} # liefert 1 3 5 7 9 (in 2er-Schritten) echo {1..10..3} # liefert 1 4 7 10 (in 3er-Schritten) echo {a..z} # liefert a b c d e f g h i j k l m n o p q r s t u v w x y z echo {a..z}{a..z} # liefert aa ab ac ad ae af ag ah ai aj... aw ax ay az ba bb bc....zx zy zz touch test-{1..3}.txt # legt die Dateien test-1.txt, test-2.txt und test-3.txt an ``` --- # Netzwerk ---- ## Ein paar Kommandos das Netzwerk betreffend - `ip addr` oder kurz `ip a` -> Schau dir deine IP Kpnfiguration an - `ip route` oder kurz `ip r` -> Schau dir deine Routing Konfiguration an - `ping` -> pinge cyber4edu.org (`ping cyber4edu.org`) und 9.9.9.9 (`ping 9.9.9.9`) Was macht das? Schaue in `man ping` nach - `traceroute` -> probiere `traceroute cyber4edu.org` Was macht das? Schaue in `man traceroute` nach - netstat -> Mache `netstat -s` und `netstat -tp` Was macht das? Schaue in `man netstat` nach! - `dig` -> Mache `dig cyber4edu.org` Was macht das? Schaue in `man dig` nach! - whois und host -> Mache `whois cyber4edu.org` und `host cyber4edu.org` Was macht das? Schaue in `man whois` nach! --- # Logging ---- ## Wo finde ich Protokolle? Schaue nach, welche verschiedenen Logs du in `/var/log`finden kannst. Normalerweise finden sich in `/var/log/syslog` oder `/var/log/messages`. Diese Dateien findest du auf dem Schulstick-Linux nicht. Logdateien seitenweise mit less ausgeben: `less /var/log/boot.log` Die letzten 10 Logeinträge mit tail anzeigen: `tail -f /var/log/boot.log` Oder bestimmte Wörter mit `cat` suchen: `cat /var/log/boot.log |grep error` Nachrichten vom Kernel (bei Hardware Issues nützlich): `dmesg` --- # Und nun ein kurzer Film zum Entspannen ```bash telnet towel.blinkenlights.nl ``` (vielleicht musst du `telnet` installieren) --- # Ein bisschen Mathe ---- ## Rechnen ```bash echo $((3+5)) echo $((123*456)) ``` ---- ## Primzahlfaktorzerlegung ```bash factor 1001 ``` 1001: 7 11 13 ---- ## Pi ```bash pi ``` 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067 --- # Spielen! **Was geht abseits der Console?** ---- ## Muss ich Windows verwenden, weil ich Gamen möchte?! ---- ## "Früher" ...war es schwierig, mit Linux Gaming zu machen, weil die meisten Hersteller keine Linux-Versionen veröffentlichten. ---- ## Heute ...ist Gaming kein Grund mehr, um auf Linux als Betriebssystem zu verzichten. ---- ## Wine - Das Problem nicht laufender Software hatten nicht nur Spiele! - "Wine is not an Emulator" - Software, die Windows-Software unter Linux laufen lassen kann. - Aber: Je neuer die Programme, desto mehr Probleme gibt es. - Community-Datenbank unter https://appdb.winehq.org zeigt, ob ein Programm halbwegs gut läuft. ---- ## Valve und Steam - 2013 veröffentlich die **Firma Valve** eine Linux-Version seiner **Steam-Client**-Software und pusht damit das Gaming unter Linux enorm. - **Alle Valve-eigenen Spiele** sind via Steam für Linux verfügbar. - Es gibt den Steam-Client **für Linux, Mac und Windows**, - sowie das **"Steam Deck"**, ein eigener Handheld-Gaming-PC mit SteamOS, die Basis ist ArchLinux. ---- ## Valve und Proton - Mittlerweile kommt der Linux-Client von Steam mit **"Proton"**, einem Wine-Fork. - **Nicht alle Windows-Spiele laufen damit gut**, meist wegen \textcolor{orange}{Anti-Cheat-Mechanismen}. - Spiele, die \textcolor{red}{"EAC"} (Easy Anti-Cheat von Epic) oder \textcolor{red}{"Battleye"} verwenden, laufen oft nicht. - Ein Blick in die **Community-Datenbank** hilft: https://www.protondb.com - Kategorien \textcolor{red}{"borked" (läuft gar nicht)} bis \color{green}{"platinum" (läuft sehr gut)}. ---- ## Abseits von Steam und Proton und Wine - **holarse**:https://holarse.de/ * Community zum Spielen unter Linux - **Itch.io** * kommt mit webbasiertem Launcher für Linux. * Aber: "Grosse Spiele" auch da seltener, weil Epic Games, Ubisoft oder EA Linux nicht berücksichtigen. - Spiele von Epic Games, GOG oder Amazon Games könnten mit dem **"Heroic Games Launcher"** laufen: * https://heroicgameslauncher.com * Heroic liest Programm-Bibliothek ein, lädt ausgewählte Spiele herunter, installiert und startet sie inkl. Verwaltung der nötigen Kompatibilitätsschichten. - **Lutris**: https://lutris.net * Vielseitiges Linux-Spiele-Tool * installiert und startet Spiele von unterschiedlichen Plattformen (z.B. auch von Steam) * richtet passende Kompatibilitätsschichten ---- ## Nochmal zurück zu Valve und Proton - Defaultverhalten: Nur Spiele, die **auf Valves offizieller Kompatibilitätsliste** stehen, bietet der Steam-Client direkt zur Installation unter Linux an. - Bei allen anderen ist der „Installieren“-Button ausgegraut, **was aber geändert werden kann!** - Öffne die Steam-Einstellungen via „Steam/Settings“ > „Compatibility“ - setze ein Häkchen bei „Enable Steam Play for all other titles“ - danach Neustart des Steam-Clients. - Damit erscheint der "Installieren"-Button auch bei allen Windows-Spielen. - Installierte Spiele werden dann **via Proton gestartet**. ---- ## Und die Hardware? - **Grafik-Hardware und Treiberversionen** haben einen Rieseneinfluss darauf, ob ein Spiel unter Linux (gut) läuft oder nicht. - Grundregel: Möglichst **aktuelle Treiber** für die Grafikkarte! - bei **AMD Radeon** der freie Mesa-Treiber - bei **Nvidia** der proprietäre (also von Hersteller gelieferte) Treiber - Das Tool **`inxi`** zeigt übersichtlich, welche Hardware verbaut ist und welcher Treiber benutzt wird. - `inxi -G` sagt uns hinter "`driver: loaded:`", welchen Treiber das System verwendet. ---- ## Dateisysteme - Stolperstein ist oft das **Filesystem der Festplatte**. - Eine Linux-eigene "ext4"-Partition läuft gut, - unter "NTFS" (Windows-Format) finden Steam und Proton Dateien nicht. - **Benutzt kein NTFS für Gaming unter Linux!** ---- ## Proton-Version wechseln (1) - Auch wenn es anfangs mal hakt, weil einzelne Funktionen nicht gehen, **nicht gleich aufgeben!** - Probiere eine andere Proton-Version. - In den Steam-Einstellungen unter „Compatibility“ > „Andere Titel ausführen mit“: Festlegung einer der verfügbaren Proton-Versionen als globaler Standard - Die aktuelle stable Version ist eine gute Wahl, in Einzelfällen lohnt es sich aber, „Proton Experimental“ oder sogar eine ältere Ausgabe auszuprobieren. - Markiere links in der Leiste des Steam-Clients in der Bibliothek das betreffende Spiel. ---- ## Proton-Version wechseln (2) - Rechts oben auf Höhe des „Installieren“-Buttons findest du ein Icon mit einem „i“. Ein Klick darauf öffnet zusätzliche Informationen. - Bei einem Windows-Spiel unter Linux steht dort unter anderem „Läuft auf diesem Computer via Compatibility“ und daneben die bisher verwendete Proton-Version (zum Beispiel „Proton 5.0-10“). - Klicke nun auf das Zahnradsymbol („Verwalten“) neben dem „i“ und wähle „Eigenschaften“. - In diesem Dialog kannst du bei „Kompatibilität“ die Option „Die Verwendung eines bestimmten Kompatibilitätswerkzeugs für Steam Play erzwingen“ anschalten, aus der Auswahlliste darunter eine der verfügbaren Versionen auswählen und das Fenster einfach schließen. ---- ## Proton Startoptionen (1) - Manchmal helfen auch Startoptionen, die beim Start des Spiels ausgeführt werden: https://github.com/ValveSoftware/Proton - Startparameter mitgeben: Klicke in der Steam-Bibliothek mit der rechten Maustaste auf das Spiel und wähle „Eigenschaften“. - Im Bereich „Allgemein“ trägst du in das Feld unter „Startoptionen“ die gewünschten Parameter ein und startest dann das Spiel. - Der Eintrag muss außer den zusätzlichen Optionen stets %command% enthalten. ---- ## Proton Startoptionen (2) - Zur Fehlersuche immer den Startparameter `PROTON_LOG=1 %command` mitgeben, um beim Spielstart eine Protokolldatei anzulegen. - Das Log findest duim Home-Verzeichnis; der Name setzt sich aus „steam-“ und der App-ID des Spiels zusammen. - Die numerische App-ID eines Spiels siehst du in der URL auf der Store-Seite direkt vor dem Spielenamen. ---- ## Nun genug der Theorie, wir probieren nun mal was aus! --- # Fragen? ![](https://cyber4edu.org//pads/uploads/2346a85c-383b-426c-8425-a0fb9aa4ccbf.png) [micu@cyber4edu.org](mailto:micu@cyber4edu.org) [sylvia@cyber4edu.org](mailto:sylvia@cyber4edu.org) --- # Links - **cyber4EDU** <https://www.cyber4EDU.org/> - **Chaos macht Schule** <https://www.ccc.de/schule> - **Schulstick FSFW Dresden** <https://schulstick.org> - **Download** <https://fsfw-dresden.github.io/schulstick-page/#download-und-bespielen-eines-usb-sticks> - **Quellen** <https://github.com/fsfw-dresden/usb-live-linux>
{"tags":"39c3, Congress, Workshop, Linux, Einsteiger\\:innen, presentation, slides","title":"Linux für Einsteiger:innen","type":"slide","slideOptions":{"theme":"solarized","transition":"slide","width":1600,"height":900,"center":true,"margin":0.04,"minScale":0.6,"maxScale":2.5,"controls":true,"controlsTutorial":false,"controlsLayout":"bottom-right","controlsBackArrows":"faded","history":false,"progress":true,"slideNumber":true,"showSlideNumber":"all"}}