[html
[head [title Linux für Anwendungsentwicklung]]
[body
[footer Paul Hänsch | Linux für Anwendungsentwicklung | damago GmbH]
[slide
[h1 Linux für Anwendungsentwicklung]
]
[slide [h2 Dozent]
[ul
[li Paul Hänsch]
[li Seit 2012 freiberuflicher Programmierer]
[li Arbeit an und mit Freier Software (Open Source)]
[li Kunden: Jugendclub, Kinderzirkus, Kulturserver, ...]
[li in der Vergangenheit: Free Software Foundation Europe]
[li Videopodcast: GNUfunzt! http://gnufunzt.de]
[li Kontakt: Paul.Haensch@damago.eu]
]
]
[slide [h2 Organisatorisches zum Kurs]
[ul
[li 9 Termine]
[li 8:00 bis 15:15 Uhr]
[li Letzter Termin 3.5.]
[li Pausenzeiten?]
[li Themenübersicht - Nach der Einführung]
]
]
[slide [h2 Vorstellungsrunde]
[ul
[li Wie seid ihr zu der Umschulung gekommen?]
[li Wie habt ihr bisher programmiert?]
[li Welches kleine Programm wolltet ihr immer schonmal schreiben?]
]
]
[slide [h1 Was ist ein Betriebssystem?] ]
[slide [h2 Was ist ein Betriebssystem?]
[ul .uncover
[li Unterscheidung: Anwendungsprogramm, "App"]
[li idR. nicht selbst als "Programm" bezeichnet]
[li Läuft vom Start bis zum Halt des Computers]
[li Für Benutzer mehr oder weniger unsichtbar]
[li Stellt Funktionen für Programme Bereit]
]
]
[slide [h2 Funktionen eines Betriebssystems]
[ul .uncover
[li Einheitlicher Zugriff auf Hardware (Treiber)]
[li Organisation von Dateien]
[li Zugriff auf Netzwerk]
[li Zuteilung von Rechenzeit (Task-Switching, Multitasking)]
[li Trennung von Applikationen (Virtualisierung)]
[li Trennung von Benutzern, Zugriffsrechte]
[li [b Kontrolle dieser Funktionen über Dienstprogramme]]
]
]
[slide [h2 Begriffe]
[p style="text-align: center; font-size: 3em; line-height: 1.25em;"
[sup [b GNU]] [sub Desktop] [sup [i Unix]] [br]
[sub [u Ubuntu]] [sup [b Linux]] [sub Distribution]
[sub Gnome] [sup Knoppix]
]
]
[slide [h2 Was ist Unix?]
[ul .uncover
[li 1969 von an den Bell Labs für PDP-7 konzipiert]
[li Von "C"-Erfinder Dennis Ritchie und Ken Thompson]
[li Entworfen um "Space Travel"-Spiel als Anwendung]
[li Schafft grundlegenden Aufbau für Beriebssysteme]
[li Von Bell an kommerzielle Computerhersteller lizensiert]
]
]
[slide [h2 Was ist GNU?]
[ul
[p [b G]NU is]
[p [b N]ot]
[p [b U]nix]
]
]
[slide [h2 Was ist GNU?]
[ul .uncover
[li 1983 am durch Richard M. Stallman am MIT begonnen]
[li Auslöser war u.A. Missmut über Kopierschutzpraktiken]
[li Grundlage der Free Software Bewegung]
[li Unix-Kompatibles Betriebssystem]
[li Umfasst Unix-Dienstprogramme]
]
]
[slide [h2 Was ist Freie Software?]
[ul .uncover
Die Vier Freiheiten:
[li [b Verwenden:] das Programm für jeglichen Zweck ausführen]
[li [b Verstehen:] die Funktionsweise des Programms untersuchen und eigenen Bedürfnissen anpassen]
[li [b Verbreiten:] das Programm weitergeben]
[li [b Verbessern:] das Programm verbessern und diese Verbesserungen der Öffentlichkeit freigeben]
]
]
[slide [h2 Was ist Linux?]
[ul .uncover
[li 1991 durch Linus Torvalds an der Uni Helsinki begonnen]
[li Unix-Kompatibler Betriebssystem-[em Kernel]]
[li Lauffähig mit GNU-Dienstprogrammen]
[p style="text-align: center; font-size: 2em; line-height: 1.25em;" GNU + Linux]
]
]
[slide [h2 Was ist eine Distribution?]
[ul .uncover
[li Linux-Kernel ist ein eigenes Softwareprojekt]
[li GNU ist ein eigenes Softwareprojekt]
[li Grafische Bedienoerflächen sind unabhängig davon]
[li Anwendungsprogramme sind eigenständige Projekte]
[li "Distributor" stellt Softwarepakete zusammen]
[li Softwarekomponenten werden angepasst um miteinander kompatibel zu sein]
[li Software wird für Computerarchitekturen "kompiliert"]
]
]
[slide [h2 Beispiele für Distributionen]
[ul
[li Ubuntu - Kommerzielle Distribution basierend auf Debian]
[li Debian - Frühe Distribution mit Online-Paketsystem]
[li Gentoo - Zusammenstellung von Quellcode zum selbst anpassen]
[li Arch - Verbreitete Distribution mit eigenem Paketsystem]
[li Knoppix - Debian basiertes Live-System]
[li Fedora, RedHat, Suse, Parabola, Puppy, Rebecca Black, ...]
[li Tausende weitere]
]
]
[slide [h2 Desktopumgebungen]
Grafische Bedienoberflächen können sehr unterschiedlich aussehen
[ul
[li Gnome]
[li KDE]
[li LXDE]
[li Xfce]
[li Maté, i3, Awesome, WindowMaker, LXQT, Enlightenment, usw...]
[li Unterscheidung: Window Manager, Toolkit, Softwaresuite]
]
]
[slide [h2 Weitere Begriffe]
[ul
[li [b Android:] anderes Betriebssystem mit Linux-Kernel]
[li [b BSD:] Berkeley Software Distribution, anderes Freies Unix]
[li [b Busybox:] andere Suite von Unix-Dienstprogrammen]
]
]
[slide [h1 Themenübersicht]]
[slide [h2 Themen Tag 1]
[ul .uncover
[li Arbeit mit Dateien]
[li Etwas Kommandozeile]
[li Zugriffsrechte]
[li Benutzer, Gruppen]
[li Ordnerstrukturen]
]
]
[slide [h2 Weitere Themen]
[ul .uncover
[li Prozessmanagement]
[li Vertiefung Kommandozeile, Shellscripting]
[li Datenträger, Dateisysteme, Partitionen]
[li Systemstart]
[li Paketsysteme, Softwareinstallation, Systeminstallation]
[li Netzwerk, SSH]
[li [strike nach Wunsch Android, X11, Verschlüsselung, Internetdienste, Versionskontrolle, Gameserver,] ..., Scripting, Programmierunmgebungen, Webentwicklung]
[li [strike Installparty?] Ihr könnt eure eigenen Notebooks mitbringen.]
]
]
[slide [h1 Arbeit mit Dateien]
[pre ~$ _]
]
[slide [h2 Arbeit mit Dateien]
[pre ~$ touch datei1]
]
[slide [h2 Arbeit mit Dateien]
[pre ~$ ls]
]
[slide [h2 Arbeit mit Dateien]
[pre
~$ ls -l datei1
-rw-r--r-- 1 live live 0 Apr 10 02:13 datei1]
]
[slide [h2 Arbeit mit Dateien]
[pre ~$ echo "Hallo Welt!" \> datei1]
]
[slide [h2 Arbeit mit Dateien]
[pre
~$ ls -l datei1
-rw-r--r-- 1 live live 12 Apr 10 02:13 datei1]
]
[slide [h2 Arbeit mit Dateien]
[pre ~$ cat datei1]
]
[slide [h2 Arbeit mit Dateien]
[pre style="font-size: .75em; line-height: 1.5em;"
~$ touch datei1
~$ ls
datei1
~$ ls -l datei1
-rw-r--r-- 1 live live 0 Apr 10 02:13 datei1
~$ echo "Hallo Welt!" > datei1
~$ ls -l datei1
-rw-r--r-- 1 live live 12 Apr 10 02:13 datei1
~$ cat datei1
Hallo Welt!
~$ _
]
]
[slide [h2 Arbeit mit Dateien]
[pre
~$ ls -l /bin/bash
-rwxr-xr-x 1 root root 1168776 Apr 18 06:12 /bin/bash]
]
[slide [h2 Arbeit mit Dateien]
[pre ~$ ls -l -h /bin/bash]
]
[slide [h2 Arbeit mit Dateien]
[pre -rwxr-xr-x 1 root root 1.2M Apr 18 06:12 /bin/bash]
]
[slide [h2 Zusammenfassung]
[ul
[li [pre touch] legt eine Datei an]
[li [pre ls] zeigt Informationen über eine Datei]
]
]
[slide [h2 Zusammenfassung]
[ul
[li Kommandos lassen sich parametrisieren, z.B. [pre ls -l] und [pre ls -h]]
]
]
[slide [h2 Zusammenfassung]
[ul
[li mit [pre echo] können wir text [strike in eine Datei schreiben] [ul .uncover
[li [strong Eigentlich nur ausgeben!]]
]]
]
]
[slide [h2 Zusammenfassung]
[ul
[li [pre cat] zeigt den Inhalt von Dateien an]
]
]
[slide [h2 Zusammenfassung]
[pre touch]
[pre ls]
[pre ls -l -h]
[pre echo]
[pre cat]
]
[slide [h1 Zugriffsrechte]]
[slide [h2 Zugriffsrechte]
[pre ~$ ls -l datei1]
[pre -rw-r--r-- 1 live live 12 Apr 10 02:13 datei1]
[table style="width: 85%;"
[tr [th Typ] [th Eigentümer] [th Gruppe] [th Andere]]
[tr [td [pre -]] [td [pre rw-]] [td [pre r--]] [td [pre r--]]]
]
]
[slide [h2 Zugriffsrechte]
[pre ~$ ls -l /bin/cat]
[pre -rwxr-xr-x 1 root root 34676 Feb 22 2017 /bin/cat]
[table style="width: 85%;"
[tr [th Typ] [th Eigentümer (root)] [th Gruppe (root)] [th Andere]]
[tr [td [pre -]] [td [pre rwx]] [td [pre r-x]] [td [pre r-x]]]
]
]
[slide [h2 Zugriffsrechte]
[pre
~$ chmod u-r datei1
~$ ls -l datei1]
[pre --w-r--r-- 1 live live 12 Apr 10 02:13 datei1]
[table style="width: 85%;"
[tr [th Typ] [th Eigentümer] [th Gruppe] [th Andere]]
[tr [td [pre -]] [td [pre -w-]] [td [pre r--]] [td [pre r--]]]
]
]
[slide [h2 Zugriffsrechte]
[pre
~$ cat datei1
cat: datei1: Keine Berechtigung]
]
[slide [h2 Zugriffsrechte]
[pre
~$ chmod u+r datei1
~$ cat datei1
Hallo Welt!]
]
[slide [h2 Zugriffsrechte - Gruppen]
[pre
~$ groups
live sudo video input]
]
[slide [h2 Zugriffsrechte - Gruppen]
[pre
~$ chgrp video datei1
~$ ls -l datei1
-rw-r--r-- 1 live video 12 Apr 10 02:13 datei1]
]
[slide [h1 Navigation im Dateisystem]]
[slide [h2 Navigation im Dateisystem]
[pre
~$ pwd
/home/live]
]
[slide [h2 Navigation im Dateisystem]
[pre
~$ cd .
~$ pwd
/home/live]
]
[slide [h2 Navigation im Dateisystem]
[pre
~$ cd ..
~$ pwd
/home]
]
[slide [h2 Navigation im Dateisystem]
[pre
~$ cd ..
~$ pwd
/
~$ ls
bin etc media proc sys var boot home mnt
root tmp dev lib opt sbin usr]
]
[slide [h2 Navigation im Dateisystem]
[div
[pre ~$ ls bin]
[pre ~$ ls etc]
[pre ~$ ls dev]
]
]
[slide [h2 Navigation im Dateisystem]
[ul .uncover
[li Dateipfade können [em absolut] oder [em relativ] sein]
[li Absolute Pfade beginnen immer mit einem Slash (Schrägstrich)]
[li [pre /bin/bash]
[pre /home/live/datei1]]
[li Relative Pfade beginnen niemals mit einem Schrägstrich]
[li [pre bash]
[pre live/datei1]]
[li Relative Pfade bezeichenen einen Ort Abhängig vom Arbeitsverzeichnis (pwd)]
]
]
[slide [h2 Navigation im Dateisystem]
[ul .uncover
Weitere Pfade:
[li [pre /home/live/../live/../live]]
[li [pre /./bin/./]]
]
]
[slide [h2 Systemordner in Unix]
[ul
[li [strong /bin] enthält ausführbare Programme]
[li [strong /boot] enthält den Systemkernel und Dateien, die damit unmittelbar in Zusammenhang stehen]
[li [strong /etc] enthält systemweite Konfigurationsdateien]
[li [strong /home] enthält Heimverzeichnisse der Benutzer]
[li [strong /lib] enthält sogenannte Softwarebibliotheken]
[li [strong /media] wird benutzt um temporäre Medien wie CDs und USB-Sticks abzubilden]
[li [strong /var] enthält Dateien, die sich ohne Handlung des Benutzers im regulären Betrieb verändern (z.B. Logbücher)]
[li [strong /usr] enthält weitere /bin und /lib Verzeichnisse für weniger grundlegende Programme]
]
]
[slide [h2 Systemordner in Unix]
[ul .uncover
[li [strong /dev] enthält Geräte]
[li [strong /proc] enthält Prozesse]
[li [strong /sys] enthält Treiberschnittstellen]
[p style="text-align: center; margin: .5em; font-size: 1.5em" Everything is a File!]
]
]
[slide [h2 Zusammenfassung]
[ul .uncover
[li Einführung, Historie]
[li Dateien: touch, ls, cat]
[li Berechtigungen: chmod, groups, chgrp]
[li Navigation: cd, pwd]
[li Absolute Pfade, Relative Pfade]
[li Ordnerstrukturen]
]
]
[slide [h1 Syntax der Kommandozeile]]
[slide [h2 Syntax der Kommandozeile]
[pre ~$ echo Hallo Welt]
]
[slide [h2 Syntax der Kommandozeile]
[ul .uncover
[li [pre ~$ echo Hallo Welt]]
[li [pre Hallo Welt]]
[li [pre ~$ echo Hallo Welt]]
[li [pre Hallo Welt]]
[li [pre ~$ echo "Hallo Welt"]]
[li [pre Hallo Welt]]
]
]
[slide [h2 Syntax der Kommandozeile]
[ul .uncover
[li [pre ~$ echo Hallo Welt]
[pre ~$ echo Hallo Welt]
[table width="85%"
[tr
[th Shellprompt] [th Befehl / Programm] [th Parameter 1] [th Parameter 2]
][tr
[th ~$] [td [pre echo]] [td [pre Hallo]] [td [pre Welt]]
]
]]
[li [pre ~$ echo "Hallo Welt"]
[table width="85%"
[tr
[th Shellprompt] [th Befehl / Programm] [th Parameter 1]
][tr
[th ~$] [td [pre echo]] [td [pre Hallo Welt]]
]
]]
]
]
[slide [h2 Syntax der Kommandozeile]
[h3 [u Ein] Parameter:]
[pre ~$ echo "Hallo Welt"]
[pre ~$ echo Hallo" "Welt]
[table width="85%"
[tr
[th Shellprompt] [th Befehl] [th Parameter 1]
][tr
[th ~$] [td [pre echo]] [td [pre Hallo Welt]]
]
]
]
[slide [h2 Syntax der Kommandozeile]
[h3 [u Drei] Parameter]
[pre ~$ echo Hallo " " Welt]
[pre ~$ echo "Hallo" " " "Welt"]
[table width="85%"
[tr
[th Shellprompt] [th Befehl] [th Parameter 1] [th Parameter 2] [th Parameter 3]
][tr
[th ~$] [td [pre echo]] [td [pre Hallo]] [td [pre ]] [td [pre Welt]]
]
]
]
[slide [h2 Syntax der Kommandozeile]
[h3 Folie vom ersten Kurstag:]
[pre ~$ echo "Hallo Welt!" \> datei1]
]
[slide [h2 Syntax der Kommandozeile]
[ul
[h3 Folie vom ersten Kurstag:]
[li mit [pre echo] können wir text [strike in eine Datei schreiben] [ul
[li [strong Eigentlich nur ausgeben!]]
]]
]
]
[slide [h2 Syntax der Kommandozeile]
[table width="85%"
[tr
[th Shellprompt] [th Befehl] [th Parameter 1] [th Umleitung] [th Ziel der Umleitung]
][tr
[th ~$] [td [pre echo]] [td [pre Hallo Welt!]] [td \>] [td datei1]
]
]
]
[slide [h2 Syntax der Kommandozeile]
[ul .uncover
[li style="margin-top: 1em;" [pre ~$ echo "Hallo Welt!" > datei1]]
[li style="margin-top: 1em;" [pre ~$ ls -l > datei1]]
[li style="margin-top: 1em;" [pre ~$ cat datei1 > datei2]]
[li style="margin-top: 1em;" [strong Shellkommandos sind eine Sprache!]]
]
]
[slide [h1 Arbeit mit Dateien und Pfaden]]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul .uncover
[li [pre ~$ touch datei1 datei2 datei3]]
[li [pre ~$ mkdir ordner1 ordner2]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul .uncover
[li [pre ~$ mv datei1 ordner1]]
[li [pre ~$ mv datei2 datei3 ordner2]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[table width="85%"
[tr
[th Shellprompt] [th Befehl] [th Parameter 1] [th Parameter 2]
][tr
[th ~$] [td [pre mv]] [td [pre datei1]] [td [pre ordner1]]
]
]
[table width="85%"
[tr
[th Shellprompt] [th Befehl] [th Parameter 1] [th Parameter 2] [th Parameter 3]
][tr
[th ~$] [td [pre mv]] [td [pre datei2]] [td [pre datei3]] [td [pre ordner2]]
]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul .uncover
[li [pre ~$ ls ordner1]]
[li [pre ~$ cd ordner1]]
[li [pre ~/ordner1$ ls]]
[li [pre ~/ordner1$ ls ordner1 ]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul
[li [pre ~$ ls ordner1]]
[li [pre ~$ cd ordner1]]
[li [pre ~/ordner1$ ls]]
[li [pre ~/ordner1$ ls ordner1]]
[li Wir sind [strong in] [em ordner1], dieser Ordner enthält nicht seinerseits einen [em ordner1]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre ~/ordner1$ ls /home/live/ordner1]
funktioniert immer =\> absoluter Pfad
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul
[li Relativer Pfad: [pre ~/ordner1$ ls ../ordner2]]
[li Absoluter Pfad: [pre ~/ordner1$ ls /home/live/ordner2]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre ~/ordner1$ cp datei1 "Name mit Leerzeichen"]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[ul .uncover
[li [pre ~/ordner1$ mv "Name mit Leerzeichen" Name_ohne_Leerzeichen]]
[li auch möglich:
[pre ~/ordner1$ mv Name\\ mit\\ Leerzeichen Name_ohne_Leerzeichen]]
]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~/ordner1$ mv Name_ohne_Leerzeichen ..
~/ordner1$ mv ../Name_ohne_Leerzeichen .]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~/ordner1$ mv ../ordner2/datei2 .
~/ordner1$ mv /home/live/ordner2/datei3 .]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~/ordner1$ cd /home/live
~$ rmdir ordner2]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~$ rmdir ordner1]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~$ rm ordner1]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~$ rm ordner1/datei2]
]
[slide [h2 Arbeit mit Dateien und Pfaden]
[pre
~$ rm -r ordner1/]
]
[slide [h2 Zusammenfassung]
[ul .uncover
[h3 Shellsyntax]
[li Die Shell erlaubt es Instruktionen zu beschreiben]
[li mit \> kann jede Programmausgabe in eine Datei geleitet werden]
[li Die Fähigkeiten von Programmen sind so erweiterbar]
]
]
[slide [h2 Zusammenfassung]
[ul .uncover
[h3 Pfade]
[li Einige Programme nehmen Pfade als Parameter an]
[li Pfade können nach Belieben absolut oder relativ sein]
[li Pfade mit Leerzeichen werden in Anführungszeichen gefasst, damit sie als einzelne Parameter gelten]
[li [strong Kommandos:] mkdir, cp, mv, rmdir, rm, rm -r]
]
]
[slide [h2 Daran denken:]
[ul
[li Anwesenheitsliste?]
]
]
]]