linuxkurs/7.html

705 lines
26 KiB
HTML
Raw Normal View History

2019-01-15 17:22:12 +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>
</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>
<p>Eine Einführung - Teil 7
<p>
<small>Deutsche Angestellten Akademie</small>
</p>
<aside class="notes">
Frage: Fragen zur letzten Stunde?
</aside>
</section>
<section data-transition="slide" data-background="lightblue" data-background-transition="zoom">
2019-01-16 21:56:50 +01:00
<h2 style="text-shadow: 5px 4px 15px black;">Einstieg in die Systemverwaltung</h2>
2019-01-15 17:22:12 +01:00
</section>
<section data-transition="slide" data-background="#4d7e65" data-background-transition="convex">
<h2>Part 0 - Zugrifssrechte </h2>
</section>
<section>
<pre><code>~$ ls -l
drwxr-xr-x 2 dany dany 4096 Nov 14 09:03 backup/
-rw-r--r-- 1 dany dany 845 Jul 24 13:45 .bash_aliases
-rw------- 1 dany dany 32726 Jan 15 15:08 .bash_history
-rw-r--r-- 1 dany dany 2410 Nov 13 12:14 .bashrc
drwxr-xr-x 2 dany dany 4096 Jan 15 16:05 Bilder/
drwxr-xr-x 6 dany dany 4096 Nov 15 15:38 bin/
</code></pre>
</section>
<section>
<pre><code>drwxr-xr-x 6 dany dany 4096 Nov 15 15:38 bin/</code></pre>
<p style="font-size: .6em">erstes Zeichen: Filetype ( hier „d“ für directory )</p>
<table style="font-size: .6em" >
<caption>
</caption>
<tbody><tr>
<th colspan="2" style="text-align: left">Three permission triads
</th></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">first triad</td>
<td>what the owner can do
</td></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">second triad</td>
<td>what the group members can do
</td></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">third triad</td>
<td>what other users can do
</td></tr>
<tr>
<th colspan="2" style="text-align: left">Each triad
</th></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">first character</td>
<td><tt>r</tt>: readable
</td></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">second character</td>
<td><tt>w</tt>: writable
</td></tr>
<tr>
<td style="text-align: right; vertical-align: text-top;">third character</td>
<td><tt>x</tt>: executable<br><tt>s</tt> or <tt>t</tt>: <a href="/wiki/Setuid" title="Setuid">setuid</a>/<a href="/wiki/Setgid" class="mw-redirect" title="Setgid">setgid</a> or <a href="/wiki/Sticky_bit" title="Sticky bit">sticky</a> (also executable)<br><tt>S</tt> or <tt>T</tt>: setuid/setgid or sticky (not executable)
</td></tr></tbody></table>
</section>
<section>
<h4>Beispiele</h4>
<pre><code> drwx------ 6 archie users 4096 Jul 5 17:37 Documents </code></pre>
<p style="font-size:.5em">
Benutzer archie darf: lesen schreiben ausführen, Inhalt auflisten
</p>
<div class="fragment">
<pre><code> dr-x------ 6 archie users 4096 Jul 5 17:37 Documents </code></pre>
<p style="font-size:.5em">
Benutzer archie darf: lesen ausführen, Inhalt auflisten
</p>
</div>
<div class="fragment">
<pre><code> d-wx------ 6 archie users 4096 Jul 5 17:37 Documents </code></pre>
<p style="font-size:.5em">
Benutzer archie darf: in das Verz. Dateien schreiben, Dateien listen/öffnen deren Namen er kennt
</p>
</div>
<div class="fragment">
<pre><code> d--x------ 6 archie users 4096 Jul 5 17:37 Documents </code></pre>
<p style="font-size:.5em">
Benutzer archie darf: Dateien listen/öffnen deren Namen er kennt
</p>
</div>
<div class="fragment">
<pre><code> -rw-r--r-- 1 archie users 5120 Jun 27 08:28 foobar </code></pre>
<p style="font-size:.5em">
Benutzer archie darf: lesen/schreiben; Alle anderen dürfen lesen
</p>
</div>
<aside class="notes">
ls -l <br>
ls -n
</aside>
</section>
<section>
<h4>Spezialrechte</h4>
2019-01-16 21:56:50 +01:00
<div class="fragment">
<h5>Das das s-Bit (auch Setuid/Setgid-Bit genannt)</h5>
<pre><code>~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54224 Aug 21 2017 /usr/bin/passwd*
</code></pre>
</dir>
<div class="fragment">
<h5> das t-Bit (auch Sticky-Bit genannt )</h5>
<pre><code>~$ ls -ld /tmp/
drwxrwxrwt 18 root root 114688 Jan 16 20:29 /tmp//</code></pre>
</dir>
</section>
<section>
<h4>Rechte ändern</h4>
<p><code>chmod</code> - ändert Zugriffsrechte
<p><code>chown</code> - ändert Datei / Verz. Besitzer
<p><code>chgrp</code> - ändert die Ben. Gruppe
<p><code>umask</code> - zeigt und setzt default Rechte
</section>
2019-01-15 17:22:12 +01:00
2019-01-16 21:56:50 +01:00
<section>
<h4>chmod</h4>
<pre class="fragment"><code>chmod +x mein-script.sh</code></pre>
<pre class="fragment"><code>chmod a+x mein-script.sh</code></pre>
<pre class="fragment"><code>chmod u+x mein-script.sh</code></pre>
<pre class="fragment"><code>chmod ug+x mein-script.sh</code></pre>
<pre class="fragment"><code>chmod -x verzeichnis</code></pre>
<pre class="fragment"><code>chmod -r mein-script.sh</code></pre>
<pre class="fragment"><code>chmod ugo-r mein-script.sh</code></pre>
<pre class="fragment"><code>chmod a-r mein-script.sh</code></pre>
</section>
<section>
<h4>oktale Rechte-Notation</h4>
<pre class="fragment"><code>chmod +x mein-script.sh</code></pre>
<pre class="fragment"><code>chmod 755 mein-script.sh</code></pre>
<table class="fragment"><tbody><tr><td> Recht </td><td> Wert </td><td> </td><td> Recht </td><td> Wert </td></tr><tr><td> Lesen </td><td> 4 </td><td style="border: none"> </td><td> Set-UID </td><td> 4 </td></tr><tr><td> Schreiben </td><td> 2 </td><td style="border: none"> </td><td> Set-GID </td><td> 2 </td></tr><tr><td> Ausführen </td><td> 1 </td><td style="border: none"> </td><td> Sticky </td><td> 1 </td></tr></tbody></table>
<pre class="fragment"><code>chmod 4755 skript.sh</code></pre>
2019-01-17 10:00:51 +01:00
<pre class="fragment"><code>
7 5 5
rwx r-x r-x
user group others </code></pre>
2019-01-15 17:22:12 +01:00
</section>
2019-01-16 21:56:50 +01:00
<section>
<h4>chown</h4>
<pre class="fragment"><code>chown mhoe mein-script.sh</code></pre>
<pre class="fragment"><code>chown mhoe users mein-script.sh</code></pre>
<pre class="fragment"><code>chown mhoe. mein-script.sh</code></pre>
<pre class="fragment"><code>chown root mein-script.sh</code></pre>
</section>
2019-01-15 17:22:12 +01:00
<section>
2019-01-16 21:56:50 +01:00
<div class="fragment">
<h4>chgrp</h4>
<pre><code>chgrp users mein-script.sh</code></pre>
</div>
<div class="fragment">
<h4>umask</h4>
<pre><code>umask -S</code></pre>
<p style="font-size: .6em">Gibt an welche Rechte von den Standard-Rechten abgezogen werden.<br> 0666 für Dateien, 0777 für Verz.</p>
<p style="font-size: .6em">0666 - 0022 = 0644</p>
</div>
<aside class=notes>
nautilus öffnen - rechte ansehen
</aside>
2019-01-15 17:22:12 +01:00
</section>
2019-01-16 21:56:50 +01:00
2019-01-20 20:53:32 +01:00
<section>
<span style="color: orange">Aufgabe:</span> Erstellt ein neues Verzeichnis "test". In diesem Verzeichnis eine Datei <code>foo.bar</code>. Ändert den Besitzer des Verz. auf root. Entzieht dem Verzeichnis die Leserechte für alle ausser den Besitzer. Versucht die Datei zu löschen.
</section>
2019-01-15 17:22:12 +01:00
<section data-transition="slide" data-background="#4d7e65" data-background-transition="convex">
2019-01-16 21:56:50 +01:00
<h2>Part 1 - Benutzerverwaltung </h2>
</section>
2019-01-17 10:00:51 +01:00
2019-01-16 21:56:50 +01:00
<section>
<p>Es gibt 3 Arten von Benutzern:</p>
<ul>
<li class="fragment">normale Benuzter</li>
<li class="fragment">root</li>
<li class="fragment">System-Benutzer</li>
</ul>
<div class="fragment">Systembenutzer dienen als Besitzer von Diensten; anmelden als solche nicht möglich.<br> zB meist <code>www-data</code> für apache</div>
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
2019-01-16 21:56:50 +01:00
<section>
<h4>Befehle zur Nutzerverwaltung</h4>
<table style="font-size: .7em">
<tbody>
<tr>
<td>adduser</td>
<td>fügt einen neuen Nutzer hinzu</td>
</tr>
<tr>
<td>adduser --system</td>
<td>fügt einen neuen System-Nutzer hinzu</td>
</tr>
<tr>
<td>addgroup</td>
<td>fügt eine neue System-Grupppe hinzu</td>
</tr>
<tr>
<td>deluser</td>
<td>löscht ein Nutzerkonto - NICHT sein home-Verz.</td>
</tr>
<tr>
<td>usermod</td>
<td>ändert ein Nutzerkonto ( zb Gruppen, home-Verz., ... )</td>
</tr>
</tbody>
</table>
</section>
<section>
<h4>Wichtige Dateien</h4>
<ul>
<li class="fragment">/etc/passwd</li>
2019-01-17 10:00:51 +01:00
<li class="fragment">/etc/shadow</li>
2019-01-16 21:56:50 +01:00
<li class="fragment">/etc/group</li>
<li class="fragment">/etc/adduser.conf</li>
<li class="fragment">/etc/skel/*</li>
</ul>
</section>
2019-01-15 17:22:12 +01:00
<section>
2019-01-17 10:00:51 +01:00
<h4><code>/etc/passwd</code></h4>
<pre style="font-size: .5em"><code>
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
.....
sshd:x:111:65534::/run/sshd:/usr/sbin/nologin
lightdm:x:112:116:Light Display Manager:/var/lib/lightdm:/bin/false
pulse:x:113:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Debian-gdm:x:117:123:Gnome Display Manager:/var/lib/gdm3:/bin/false
dany:x:1000:1000:dany,,,:/home/dany:/bin/bash
</code></pre>
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
<section style="font-size: .5em">
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong>Benutzername : Passwort : UID : GID : Info : Heimatverzeichnis : Shell</strong><br>
</td>
</tr>
</tbody></table>
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong>Benutzername</strong>
</td>
<td valign="top">
Dies ist der Benutzername in druckbare Zeichen, meistens in
Kleinbuchstaben.
</td>
</tr>
<tr>
<td valign="top">
<strong>Passwort</strong>
</td>
<td valign="top">
Hier steht verschlüsselt das Passwort des Benutzers (bei
alten Systemen). Meist finden Sie dort ein <strong>x</strong>. Dies bedeutet,
dass das Passwort verschlüsselt in der Datei <font face="courier" color="#277717">/etc/shadow</font> steht.
Es ist auch möglich, den Eintrag leer zu lassen. Dann erfolgt die
Anmeldung ohne Passwortabfrage (in der Datei <font face="courier" color="#277717">/etc/shadow</font> muss
dann an Stelle des verschlüsselten Passwortes ein <font face="courier" color="#277717">*</font>
stehen).
</td>
</tr>
<tr>
<td valign="top">
<strong>UID</strong>
</td>
<td valign="top">
Die <strong>Benutzer-ID</strong> des Benutzers. Die Zahl hier sollte größer als
100 sein, weil die Zahlen unter 100 für Systembenutzer
vorgesehen sind. Weiterhin muss die Zahl aus technischen
Gründen kleiner als 64000 sein.
</td>
</tr>
<tr>
<td valign="top">
<strong>GID</strong>
</td>
<td valign="top">
Die <strong>Gruppen-ID</strong> des Benutzers. Auch hier muss die Zahl wie bei
der UID kleiner als 64000 sein.
</td>
</tr>
<tr>
<td valign="top">
<strong>Info</strong>
</td>
<td valign="top">
Hier kann weitere Information vermerkt werden, wie z.B. der
vollständige Name des Benutzers und persönliche Angaben
(Telefonnummer, Abteilung, Gruppenzugehörigkeit u.ä.).
</td>
</tr>
<tr>
<td valign="top">
<strong>Heimatverzeichnis</strong>
</td>
<td valign="top">
Das Heimatverzeichnis des Benutzers bzw. das
Startverzeichnis nach dem Login.
</td>
</tr>
<tr>
<td valign="top">
<strong>Shell</strong>
</td>
<td valign="top">
Die Shell, die nach der Anmeldung gestartet
werden soll. Bleibt dieses Feld frei, dann wird die Standardshell
<font face="courier" color="#aa5522">/bin/sh</font> gestartet.
</td>
</tr>
</tbody></table>
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
2019-01-15 17:22:12 +01:00
<section>
2019-01-17 10:00:51 +01:00
<h4><code>/etc/shadow</code></h4>
<pre style="font-size: .5em"><code>root:$6$j6bEnUnp$Vzb1mclygHlBegoYUC.DWZXvlqgokFyy7pAfFf6DqjG56hG.RzVM7BqqVl9To/2DwNqEn7Qg4SkoNliETWMIr0:17688:0:99999:7:::
daemon:*:17672:0:99999:7:::
www-data:*:17672:0:99999:7:::
backup:*:17672:0:99999:7:::
list:*:17672:0:99999:7:::
nobody:*:17672:0:99999:7:::
systemd-timesync:*:17672:0:99999:7:::
systemd-network:*:17672:0:99999:7:::
systemd-resolve:*:17672:0:99999:7:::
systemd-bus-proxy:*:17672:0:99999:7:::
Debian-gdm:*:17672:0:99999:7:::
dany:$6$.Khjr2r.$6N6IJScbUcGApBT6jiWLrtkey3Mlnu6oMiCUsnrYk.T8.WpNfMrlbHOmTHAv85UchwKZ3VIlt2G9TApaUmu7j/:17672:0:99999:7:::
</code></pre>
<p><code>/etc/gshadow</code> : analog für Gruppen
</section>
<section style="font-size: .5em">
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong>Benutzername : Passwort : DOC : MinD : MaxD : Warn : Exp : Dis : Res</strong><br>
</td>
</tr>
</tbody></table>
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong>Benutzername</strong>
</td>
<td valign="top">
Dies ist der Benutzername in druckbaren Zeichen, meistens in
Kleinbuchstaben.
</td>
</tr>
<tr>
<td valign="top">
<strong>Passwort</strong>
</td>
<td valign="top">
Hier steht verschlüsselt das Passwort des Benutzers. Wenn
hier ein <strong>*</strong> oder <strong>!</strong> steht, dann bedeutet
dies, dass kein Passwort vorhanden bzw. eingetragen ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>DOC</strong>
</td>
<td valign="top">
<strong>Day of last change</strong>: der Tag, an dem das Passwort zuletzt
geändert wurde. Besonderheit hier: Der Tag wird als Integer-Zahl in
Tagen seit dem 1.1.1970 angegeben.
</td>
</tr>
<tr>
<td valign="top">
<strong>MinD</strong>
</td>
<td valign="top">
Minimale Anzahl der Tage, die das Passwort gültig ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>MaxD</strong>
</td>
<td valign="top">
Maximale Anzahl der Tage, die das Passwort gültig ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>Warn</strong>
</td>
<td valign="top">
Die Anzahl der Tage vor Ablauf der Lebensdauer, ab der vor
dem Verfall des Passwortes zu warnen ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>Exp</strong>
</td>
<td valign="top">
Hier wird festgelegt, wieviele Tage das Passwort trotz
Ablauf der MaxD noch gültig ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>Dis</strong>
</td>
<td valign="top">
Bis zu diesem Tag (auch hier wird ab dem 1.1.1970 gezählt)
ist das Benutzerkonto gesperrt
</td>
</tr>
<tr>
<td valign="top">
<strong>Res</strong>
</td>
<td valign="top">
<strong>Reserve</strong>, dieses Feld hat momentan keine Bedeutung.
</td>
</tr>
</tbody></table>
2019-01-15 17:22:12 +01:00
</section>
<section>
2019-01-17 10:00:51 +01:00
<h4><code>/etc/group</code></h4>
<pre style="font-size: .5em"><code>cdrom:x:24:dany
floppy:x:25:dany
tape:x:26:
sudo:x:27:dany
audio:x:29:pulse,dany
dip:x:30:dany
www-data:x:33:
pulse-access:x:118:
scanner:x:119:saned,dany
avahi:x:120:
colord:x:121:
saned:x:122:
Debian-gdm:x:123:
dany:x:1000:dany
vboxusers:x:124:dany
docker:x:999:dany
</code></pre>
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
<section style="font-size: .5em">
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong> Gruppenname : Passwort : GID : Benutzernamen (Mitgliederliste)</strong><br>
</td>
</tr>
</tbody></table>
<table border="0" cellspacing="5">
<tbody><tr>
<td valign="top">
<strong>Gruppenname</strong>
</td>
<td valign="top">
Der Name der Gruppe in druckbare Zeichen, auch hier
meistens Kleinbuchstaben.
</td>
</tr>
<tr>
<td valign="top">
<strong>Passwort</strong>
</td>
<td valign="top">
Die Besonderheit hier ist folgende: Wenn das Passwort
eingerichtet ist, können auch Nichtmitglieder der
Gruppe Zugang zu den Daten der Gruppe erhalten, wenn
ihnen das Passwort bekannt ist. Ein <strong>x</strong> sagt hier aus,
das das Passwort in <font face="courier" color="#277717">/etc/gshadow</font> abgelegt ist.
Der Eintrag kann
auch entfallen, dann ist die Gruppe nicht durch ein
Passwort geschützt. In diesem Fall kann jedoch auch
kein Benutzer in die Gruppe wechseln, der nicht in diese Gruppe
eingetragen ist.
</td>
</tr>
<tr>
<td valign="top">
<strong>GID</strong>
</td>
<td valign="top">
<strong>Gruppen-ID</strong> der Gruppe
</td>
</tr>
<tr>
<td valign="top">
<strong>Benutzernamen</strong>
</td>
<td valign="top">
hier werden die Mitglieder der Gruppe
eingetragen. Diese sind durch ein einfaches Komma
getrennt.
</td>
</tr>
</tbody></table>
<p><code>dialout:x:16:root,tatiana,steuer,selflinux</code>
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
<section>
<h4><code>/etc/skel</code></h4>
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
Inhalt dieses Verzeichnises wird Inhalt neu erstellter Benutzer.
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
<section>
<span style="color: orange">Aufgabe:</span> Erstellt eine neue Gruppe "test" und einen neuen Benutzer "test-user" in der bash. Er soll Mitglied de Gruppe "test" sein. Das Home Verzeichnis soll sein in "/var/www/html/test". Der Account soll in 14 Tagen ablaufen.
</section>
2019-01-15 17:22:12 +01:00
<section data-transition="slide" data-background="#4d7e65" data-background-transition="convex">
2019-01-17 10:00:51 +01:00
<h2>Part 3 - Prozessverwaltung</h2>
2019-01-15 17:22:12 +01:00
</section>
<section>
2019-01-17 10:00:51 +01:00
<h4>Kommandos zur Prozessverwaltung</h4>
<p><code>ps</code> - zeigt laufende Prozesse an
<p><code>top</code> - Taskmanger, oder so ähnlich
<p><code>pidof</code> - ermittelt Prozess ID anhand d. Namen
<p><code>pstree</code> - zeigt Prozessbaum
<p><code>kill</code> - ....
<p><code>xkill</code> - kill per click
<p><code>nice, renice</code> - manipulation der Prozess-Priorität
2019-01-15 17:22:12 +01:00
</section>
2019-01-17 10:00:51 +01:00
<section>
<div >
<p>Wat'n dat??
<pre><code>#!/bin/bash
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
:(){ :|:& };:</code></pre>
</div>
</section>
<section><pre><code>#!/bin/bash
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
# Forkbomb ;-)
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
bombe (){
bombe | bombe&
}
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
bombe
</code></pre>
</section>
2019-01-15 17:22:12 +01:00
2019-01-17 10:00:51 +01:00
</div>
2019-01-15 17:22:12 +01:00
</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>