2019-01-17 10:00:51 +01:00
<!doctype html>
< html lang = "de" >
< meta charset = "utf-8" >
< title > Einführung in Linux< / title >
< meta name = "description" content = "YALC - Yet Another Linux Course " >
< meta name = "author" content = "Daniel Schubert" >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black-translucent" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" >
< link rel = "stylesheet" href = "css/reveal.css" >
< link rel = "stylesheet" href = "css/theme/league.css" id = "theme" >
< link rel = "icon" href = "img/openlogo-nd-25.png" type = "img/png" >
<!-- Theme used for syntax highlighting of code -->
< link rel = "stylesheet" href = "lib/css/zenburn.css" >
<!-- Printing and PDF exports -->
< script >
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = window.location.search.match( /print-pdf/gi ) ? 'css/print/pdf.css' : 'css/print/paper.css';
document.getElementsByTagName( 'head' )[0].appendChild( link );
< / script >
2019-01-20 20:53:32 +01:00
< style type = "text/css" >
.reveal img{ max-height: 60vh}
< / style >
2019-01-17 10:00:51 +01:00
< / head >
< body >
< div class = "reveal" >
<!-- Any section element inside of this container is displayed as a slide -->
< div class = "slides" >
< section data-transition = "slide" data-background = "#4d7e65" data-background-transition = "zoom" >
< h1 > LINUX< / h1 >
< h3 > Das universelle Betriebssystem< / h3 >
2019-01-20 20:53:32 +01:00
< p > Eine Einführung - Teil 8
2019-01-17 10:00:51 +01:00
< p >
< small > Deutsche Angestellten Akademie< / small >
< / p >
< aside class = "notes" >
Frage: Fragen zur letzten Stunde?
< / aside >
< / section >
2019-01-21 10:44:58 +01:00
< section >
https://www.schubertdaniel.de/linuxkurs
< / section >
2019-01-17 10:00:51 +01:00
< section data-transition = "slide" data-background = "lightblue" data-background-transition = "zoom" >
2019-01-20 20:53:32 +01:00
< h2 style = "text-shadow: 5px 4px 15px black;" > Systemverwaltung< / h2 >
< / section >
< section >
Begriff: daemon
< p > Ein Systemdienst der automatisch startet und ohne Eingriffe arbeitet ( meistens :-) )
< p > vgl. Dienste unter Windows
< p > Name endet oft mit „d“
< ul >
< li > systemd - ...
< li > sshd - SSH Server Daemon
< li > dockerd - docker daemon
< li > smbd - SAMBA File Server
< li > ntpd - Network Time Protocal Daemon
< li > atd - at Daemon
< / section >
< section style = "" >
< p > Begriff: Runlevel< / p >
< table class = "prettytable" style = " font-size: .4em; border:solid 2px #677089;" >
< tbody > < tr style = "" >
< th style = "line-height:2.5em;" > Runlevel< / th >
< th > Beschreibung
< / th > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 0
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Shutdown. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt (d. h. die im Verzeichnisbaum eingebundenen Datenträger werden ausgehängt).
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > S
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Single-User-Runlevel; niedrigster Systemzustand für Wartungsarbeiten, in dem ausschließlich Systemressourcen wie < a href = "/wiki/Festplatten" class = "mw-redirect" title = "Festplatten" > Festplatten< / a > oder < a href = "/wiki/Dateisystem" title = "Dateisystem" > Dateisysteme< / a > aktiv sind.
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 1
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Einzelnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. In vielen Implementierungen identisch mit 'S'.
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 2
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Lokaler Mehrnutzerbetrieb ohne Netzwerk mit ausschließlich lokalen Ressourcen. Unter einigen Linuxdistributionen (z. B. Debian) wird in Runlevel 2 auch das Netzwerk konfiguriert.
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 3
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Netzwerkbetrieb, über das Netzwerk erreichbare Ressourcen sind nutzbar, eine grafische Oberfläche steht nicht zur Verfügung. Firewalls sollten aktiviert werden.
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 4
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Ist normalerweise nicht definiert. Kann aber für diverse Dienste genutzt werden.
< / td > < / tr >
< tr style = "border-bottom:solid 2px #AAAAAA;" >
< td style = "text-align:center;font-weight:bold;" > 5
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Wie 3, zusätzlich wird die grafische Oberfläche bereitgestellt.
< / td > < / tr >
< tr >
< td style = "text-align:center;font-weight:bold;" > 6
< / td >
< td style = "padding:4px 8px;line-height:118%;" > Reboot. Alle Netzverbindungen werden geschlossen, Dateipuffer werden geschrieben, Mounts auf Partitionen werden entfernt.
< / td > < / tr > < / tbody > < / table >
2019-01-17 10:00:51 +01:00
< / section >
2019-01-20 21:49:50 +01:00
2019-01-20 20:53:32 +01:00
2019-01-17 10:00:51 +01:00
< section data-transition = "slide" data-background = "#4d7e65" data-background-transition = "convex" >
2019-01-20 20:53:32 +01:00
< h2 > Part 5 - systemd< / h2 >
2019-01-17 10:00:51 +01:00
< / section >
2019-01-20 20:53:32 +01:00
< section >
< ul >
< li class = "" > Relativ neu
< li class = "fragment" > bricht mit alter Linux Philosophie:< br > -- do one thing and do it well --
< li class = "fragment" > Sysvinit funktioniert über Shell Scripte, die nacheinander abgearbeitet werden
< li class = "fragment" > Systemd ist schneller - startet Dienste parallel
< li class = "fragment" > Kritik : übernimmt sehr viel Kontrolle - single point of failure
< li class = "fragment" > zB Gnome3 ist abhängig von systemd
< li class = "fragment" > -->Abspaltungen: Devuan - nutzt weiterhin Sysvinit
< li class = "fragment" > Standard in : Debian RedHat Suse Ubuntu
< / section >
< section >
2019-01-20 21:49:50 +01:00
< h4 > Der Boot-Ablauf mit systemd< / h4 >
< img style = "max-height: 50vh" src = "img/startup-systemd.png" >
< p > < small > Das initramfs ist ein komprimiertes Archiv, das für den Systemstart benötigte Dateien enthält.< / small >
< / section >
< section >
2019-01-17 10:00:51 +01:00
2019-01-20 20:53:32 +01:00
< p > systemd ist organisiert mit
< ul >
< li class = "fragment" > units - einzelne Dienste
< li class = "fragment" > targets - Gruppen von Diensten, Systemzustände
< ul > < li > entspr. runlevel unter Sysvinit< / li > < / ul >
< / ul >
< p >
< div class = "fragment" >
Dateien:
< p > /lib/systemd/system/ -> default
< p > /etc/systemd/system/ -> custom
< / div >
< / section >
< section >
< h3 > Informationen anzeigen< / h3 >
< ul >
< li class = "fragment " > Systemstatus anzeigen:< pre > < code > systemctl status< / code > < / pre > < / li >
< li class = "fragment " > Liste der fehlgeschlagenene Units < pre > < code > systemctl --failed< / code > < / pre > < / li >
< li class = "fragment " > Liste aller installierter Units< pre > < code > systemctl list-unit-files< / code > < / pre > < / li >
2019-01-17 10:00:51 +01:00
< / section >
2019-01-20 21:49:50 +01:00
< section >
< div > Default Target< pre > < code > systemctl get-default< / code > < / pre > < / div >
< div class = "fragment " > Alle Targets< pre > < code > systemctl list-units --type target< / code > < / pre > < / div >
< / section >
< section >
< h4 > Ensprechenungen der alten Runlevel und der neuen Targets< / h4 >
< table class = "wikitable" style = "font-size:.4em" >
< tbody > < tr >
< th > SysV Runlevel< / th >
< th > systemd Target< / th >
< th > Notes
< / th > < / tr >
< tr >
< td > 0< / td >
< td > runlevel0.target, poweroff.target< / td >
< td > Halt the system.
< / td > < / tr >
< tr >
< td > 1, s, single< / td >
< td > runlevel1.target, rescue.target< / td >
< td > Single user mode.
< / td > < / tr >
< tr >
< td > 2, 4< / td >
< td > runlevel2.target, runlevel4.target, multi-user.target< / td >
< td > User-defined/Site-specific runlevels. By default, identical to 3.
< / td > < / tr >
< tr >
< td > 3< / td >
< td > runlevel3.target, multi-user.target< / td >
< td > Multi-user, non-graphical. Users can usually login via multiple consoles or via the network.
< / td > < / tr >
< tr >
< td > 5< / td >
< td > runlevel5.target, graphical.target< / td >
< td > Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login.
< / td > < / tr >
< tr >
< td > 6< / td >
< td > runlevel6.target, reboot.target< / td >
< td > Reboot
< / td > < / tr >
< tr >
< td > emergency< / td >
< td > emergency.target< / td >
< td > Emergency shell
< / td > < / tr >
< / tbody > < / table >
< / section >
2019-01-17 10:00:51 +01:00
2019-01-20 20:53:32 +01:00
< section >
< h3 > Dienste Steuern< / h3 >
< ul >
< li class = "fragment " > Laufende Dienste anzeigen:< pre > < code > systemctl< / code > < / pre > < / li >
< li class = "fragment " > Eine Unit starten < pre > < code > systemctl start DIENST< / code > < / pre > < / li >
< li class = "fragment " > Eine Unit neu starten< pre > < code > systemctl restart DIENST< / code > < / pre > < / li >
< li class = "fragment " > Unit Status anzeigen< pre > < code > systemctl status DIENST< / code > < / pre > < / li >
< / ul >
2019-01-17 10:00:51 +01:00
< / section >
< section >
2019-01-20 20:53:32 +01:00
< ul >
< li class = "fragment " > Dienst Autostart anschalten< pre > < code > systemctl enable DIENST< / code > < / pre > < / li >
< li class = "fragment " > Dienst Autostart anschalten und sofort starten< pre > < code > systemctl enable --now DIENST< / code > < / pre > < / li >
2019-01-20 21:49:50 +01:00
< li class = "fragment " > Dienst Autostart abschalten< pre > < code > systemctl disable DIENST< / code > < / pre > < / li >
2019-01-20 20:53:32 +01:00
< / ul >
2019-01-17 10:00:51 +01:00
< / section >
2019-01-20 20:53:32 +01:00
< section >
< h3 > Eine unit< / h3 >
2019-01-20 21:49:50 +01:00
< code style = "font-size: .4em" > /lib/systemd/system/ssh.service< / code >
2019-01-20 20:53:32 +01:00
< pre style = "font-size: .4em" > < code > [Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
Alias=sshd.service
< / code > < / pre >
< / section >
< section >
2019-01-20 21:49:50 +01:00
< span style = "color: orange" > Aufgabe:< / span > Erstellt eine Unit und startet sie.< p >
2019-01-21 10:36:19 +01:00
2019-01-20 20:53:32 +01:00
< div class = "fragment" >
2019-01-21 10:36:19 +01:00
< code style = "font-size: .5em" > https://wiki.archlinux.org/index.php/Systemd#Writing_unit_files< br > /etc/systemd/system/simple-webserver.service< / code >
2019-01-20 20:53:32 +01:00
< pre > < code > [Unit]
Description=Simple Web Server
[Service]
Type=simple
ExecStart=/home/USERNAME-HIER-EINSETZEN/hello-web.sh
[Install]
WantedBy=multi-user.target
< / code > < / pre >
< code style = "font-size: .5em" > ~/hello-web.sh< / code >
< pre > < code > #!/bin/bash
cd /home/
python3 -m http.server 8082 < / code > < / pre >
< / div >
< / section >
< section >
< pre > < code > systemctl start simple-webserver.service< / code > < / pre >
< pre > < code > systemctl status simple-webserver.service< / code > < / pre >
Wenn das gescheitert sein sollte:
< pre > < code > journalctl -xe < / code > < / pre >
< pre > < code > journalctl --unit=simple-webserver.service < / code > < / pre >
< / section >
2019-01-21 10:36:19 +01:00
< section > Browser öffnen: < code > http://localhost:8082/BENUTZERNAME< / code >
< aside class = "notes" > der simple webserver ist praktisch zum dateien teilen< / aside > < / section >
2019-01-20 20:53:32 +01:00
< section > < h4 > Ändern der Standard-Units< / h4 >
< ul >
< li class = "fragment " > < pre > < code > systemctl edit unit< / code > < / pre > < / li >
< li class = "fragment " > Öffnet < code > /etc/systemd/system/unit.d/override.conf< / code > < / li >
2019-01-20 21:49:50 +01:00
< li class = "fragment " > Aktualiseren < code > systemctl daemon-reload < / code > < / li >
2019-01-20 20:53:32 +01:00
< li class = "fragment " > UnDo: < pre > < code > systemctl revert unit< / code > < / pre > < / li >
< / ul >
< / section >
2019-01-20 21:49:50 +01:00
2019-01-20 20:53:32 +01:00
< section >
2019-01-20 21:49:50 +01:00
timer als cron Ersatz
< pre > < code > systemctl list-timers --all< / code > < / pre >
< div class = "fragment" > die Timer Datei muss den selben namen haben wie das Unit-File< p > < code > toller-dienst.service< / code > < p > < code > toller-dienst.timer< / code > < / div >
< aside class = "notes" >
timer datei ansehen
< / aside >
2019-01-20 20:53:32 +01:00
< / section >
2019-01-21 10:36:19 +01:00
< section style = "font-size: .7em " >
2019-01-21 10:44:58 +01:00
< span style = "color: orange; " > Aufgabe:< / span > Erstellt einen Service, der alle 5 Minuten omikron.net pingt. Die Zeitplanung soll mit systemd timer umgesetzt werden. Die Ausgabe soll nach /var/log/omikron-ping.log geschrieben werden.< p > https://wiki.archlinux.org/index.php/Systemd/Timers
< p >
< code > /bin/ping-omikron.sh< / code >
< pre > < code > #!/bin/bash
date & >> /var/log/ping-omikron.log
2019-01-21 10:45:47 +01:00
ping -c 3 omikron.net & >> /var/log/ping-omikron.log
2019-01-21 10:44:58 +01:00
< / code > < / pre >
2019-01-20 21:49:50 +01:00
2019-01-21 10:44:58 +01:00
< / section >
< section >
< code style = "font-size: .5em" > /etc/systemd/system/ping-omikron.timer< / code >
< pre > < code > [Unit]
2019-01-21 10:36:19 +01:00
Description=Ping Omikron Timer
2019-01-20 21:49:50 +01:00
[Timer]
2019-01-21 10:36:19 +01:00
OnActiveSec=30s
OnUnitActiveSec=5m
2019-01-20 21:49:50 +01:00
Persistent=true
[Install]
2019-01-21 10:36:19 +01:00
WantedBy=basic.target
2019-01-20 21:49:50 +01:00
< / code > < / pre >
2019-01-21 10:36:19 +01:00
< code style = "font-size: .5em" > /etc/systemd/system/ping-omikron.service< / code >
2019-01-21 10:44:58 +01:00
< pre > < code > [Unit]
2019-01-21 10:36:19 +01:00
Description=Ping Omikron Unit
2019-01-20 20:53:32 +01:00
2019-01-20 21:49:50 +01:00
[Service]
Type=simple
2019-01-21 10:36:19 +01:00
ExecStart=/PFAD/ZU/ping-omikron.sh
2019-01-20 21:49:50 +01:00
< / code > < / pre >
2019-01-21 10:44:58 +01:00
2019-01-20 21:49:50 +01:00
< / section >
2019-01-21 10:36:19 +01:00
< section >
< h4 > journalctl< / h4 >
< pre > < code > journalctl< / code > < / pre >
< pre > < code > journalctl -xe< / code > < / pre >
< pre > < code > journalctl --unit=backup.service < / code > < / pre >
2019-01-20 20:53:32 +01:00
2019-01-21 10:36:19 +01:00
< aside class = "notes" > man journalctl< / aside >
2019-01-20 20:53:32 +01:00
< / section >
2019-01-21 10:36:19 +01:00
< section > < a href = "https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets" > Nützliche sytemd Targets< / a >
< p > https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sect-managing_services_with_systemd-targets< / section >
2019-01-20 21:49:50 +01:00
< section >
2019-01-21 10:36:19 +01:00
< h4 > timedatectl< / h4 >
Die Zeit mit systemd einstellen.
2019-01-20 21:49:50 +01:00
< p > https://wiki.ubuntuusers.de/Systemzeit/
2019-01-21 10:36:19 +01:00
< pre > < code > sudo timedatectl set-timezone Europe/Berlin < / code > < / pre >
< pre > < code > sudo timedatectl set-time 2019-28-02 19:01 < / code > < / pre >
< / section >
2019-01-17 10:00:51 +01:00
2019-01-21 10:36:19 +01:00
< section >
< h4 > Vorteile / Nachteile zu cron:< / h4 >
< ul >
< li class = "fragment " > Nachteil: 2 Dateien müssen angelegt werden< / li >
< li class = "fragment " > Vorteil: Besser steuerbar, Logs landen im systemd-journal< / li >
< li class = "fragment " > Das ist die Zukunft< / li >
< / ul >
2019-01-20 21:49:50 +01:00
< / section >
2019-01-17 10:00:51 +01:00
2019-01-21 10:36:19 +01:00
< section style = "font-size: .6em" >
< p > Bemerkungen:
< p > Systemd ist rückwärtskompatibel zu Sysvinit.< br > Alte init Befehle werden von systemd verstanden, sind teilweise noch in Benutzung
< p > init-scripte sind in < code > /etc/init.d/< / code > zu finden
< pre > < code > sudo /etc/init.d/apache2 start < / code > < / pre >
< p > Die logs landen weiterhin zusätzlich in /var/log/
< p > ein weiteres init-System : Upstart -> eingestellt
< aside class = "notes" >
cat /etc/init.d/apache2< br >
cat /lib/systemd/system/apache2.service
< / aside >
< / section >
2019-01-20 21:49:50 +01:00
2019-01-20 20:53:32 +01:00
< section data-transition = "slide" data-background = "#4d7e65" data-background-transition = "convex" >
2019-01-21 10:36:19 +01:00
< h2 > Part 7 - Dateisysteme< / h2 >
< / section >
< section >
< h4 > Benennung von Datenträgern< / h4 >
< p > Festplatten / USB Sticks
< ul >
< li class = "fragment " > /dev/sda - Erste Festplatte< / li >
< li class = "fragment " > /dev/sdb - zweite FP< / li >
< li class = "fragment " > /dev/sda1 - erste Partition auf erster FP< / li >
< li class = "fragment " > /dev/sdb2 - 2. P. auf 2. FP.< / li >
< / ul >
2019-01-20 20:53:32 +01:00
< / section >
2019-01-17 10:00:51 +01:00
2019-01-21 10:36:19 +01:00
< section >
< p > externe Laufwerke
< ul >
< li class = "fragment " > /dev/scd0 od. /dev/sr0 - erstes CD / DVD Laufwerk< / li >
< li class = "fragment " > /dev/scd1 od. /dev/sr1 - zweites CD / DVD Laufwerk< / li >
< / ul >
< / section >
< section > < pre > < code > lsblk< / code > < / pre >
< pre > < code > NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 489,1G 0 disk
├─sda1 8:1 0 63,1G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 407,3G 0 part /home
├─sda6 8:6 0 9,4G 0 part [SWAP]
└─sda7 8:7 0 9,2G 0 part /tmp
sdb 8:16 0 298,1G 0 disk
└─sdb1 8:17 0 298,1G 0 part /home/dany
sr0 11:0 1 1024M 0 rom
sr1 11:1 1 1024M 0 rom
< / code > < / pre > < / section >
< section > Reihenfolge kann sich beim Umstecken ändern.< br > For the rescue: UUID
< pre > < code > ls -Lr /dev/disk/< / code > < / pre > < / section >
2019-01-21 10:44:58 +01:00
2019-01-24 13:36:37 +01:00
< section > fstab, partitionieren, mounten< / section >
2019-01-21 10:44:58 +01:00
2019-01-17 10:00:51 +01:00
< / div >
< / div >
< script src = "lib/js/head.min.js" > < / script >
< script src = "js/reveal.js" > < / script >
< script >
// More info https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
transition: 'slide', // none/fade/slide/convex/concave/zoom
// More info https://github.com/hakimel/reveal.js#dependencies
dependencies: [
{ src: 'lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'plugin/search/search.js', async: true },
{ src: 'plugin/zoom-js/zoom.js', async: true },
{ src: 'plugin/notes/notes.js', async: true }
]
});
< / script >
< / body >
< / html >