246 lines
12 KiB
HTML
246 lines
12 KiB
HTML
<!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>
|
|
<style type="text/css">
|
|
.reveal img{ max-height: 60vh}
|
|
li { padding-top: .5em !important; }
|
|
</style>
|
|
</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>Übungen
|
|
<p> <small>Deutsche Angestellten Akademie</small> </p>
|
|
<aside class="notes">
|
|
Frage: Fragen zur letzten Stunde?
|
|
</aside>
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<span style="color: orange">Übungen:</span>
|
|
|
|
<ul>
|
|
<li>Finden Sie alle Dateien in Ihrem System, die größer als 1 MiB sind, und lassen Sie deren Namen ausgeben.</li>
|
|
<li>Wie können Sie find benutzen, um eine Datei zu löschen, die einen merkwürdigen Namen hat (etwa mit unsichtbaren Kontrollzeichen oder mit Umlauten, die von älteren Shells nicht verstanden werden)?</li>
|
|
<li>Wie würden Sie beim Abmelden dafür sorgen, dass etwaige Dateien in /tmp, die Ihnen gehören, automatisch gelöscht werden?</li>
|
|
</ul>
|
|
<aside class="notes">
|
|
<pre><code>find / -size +1024k -print</code></pre>
|
|
<pre><code># -inum Inodenname ( ls -i )
|
|
find . -maxdepth 1 -inum 4711 -exec rm -f '{}' \;</code></pre>
|
|
<pre><code>find /tmp -user $LOGNAME -type f -print0 \
|
|
| xargs -0 -r rm -</code></pre>
|
|
</aside>
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<ul>
|
|
<li>README ist ein sehr populärer Dateiname. Geben Sie die absoluten
|
|
Pfadnamen aller Dateien auf Ihrem System an, die README heißen.</li>
|
|
<li>Legen Sie eine neue Datei in Ihrem Heimatverzeichnis an und überzeugen Sie sich durch einen locate-Aufruf, dass diese Datei nicht gefunden
|
|
wird (wählen Sie gegebenenfalls einen hinreichend ausgefallenen Dateinamen). Rufen Sie dann (mit Administratorrechten) das Programm updatedb
|
|
auf. Wird Ihre neue Datei danach mit locate gefunden? Löschen Sie die Datei wieder und wiederholen Sie die vorigen Schritte</li>
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<ul>
|
|
<li>Überzeugen Sie sich, dass slocate funktioniert, indem Sie als gewöhnlicher Benutzer nach Dateien wie /etc/shadow suchen.</li>
|
|
<li>Welche Dateien stehen im Verzeichnis /boot? Hat das Verzeichnis Unterverzeichnisse und, wenn ja, welche?
|
|
<li style="padding-top: .5em">Erklären Sie den Unterschied zwischen <code>ls</code> mit einem Dateinamen als
|
|
Argument und <code>ls</code> mit einem Verzeichnisnamen als Argument. <br>
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<ul>
|
|
<li>Wie können Sie <code>ls</code> dazu bringen, bei einem Verzeichnisnamen als
|
|
Argument Informationen über das benannte Verzeichnis selbst anstatt über
|
|
die darin enthaltenen Dateien zu liefern?
|
|
<li>Warum hat <code>mv</code> keine -R-Option wie <code>cp</code>?
|
|
<li>Angenommen, in einem Ihrer Verzeichnisse steht eine Datei namens »- file« (mit einem Minuszeichen am Anfang des Namens). Wie würden Sie diese Datei entfernen?
|
|
<li>Wenn Sie ein Verzeichnis haben, in dem Sie nicht versehentlich einem »rm *« zum Opfer fallen wollen, können Sie dort eine Datei namens
|
|
»- i« anlegen, etwa mit <pre><code>$ > -i</code></pre> Was passiert, wenn Sie jetzt das Kommando »rm *« ausführen, und warum?</li>
|
|
<li>Wie löscht man diese Datei ( -i ) ?
|
|
</ul>
|
|
</section>
|
|
|
|
|
|
<section style="font-size: .6em">
|
|
<p><span style="color: orange">Experimente mit versch. Kompressionsprogrammen ( gzip, bzip2, xz ):</span>
|
|
<ul>
|
|
<li>Besorgen Sie sich eine geeignete Datei (etwa ein größeres tar -Archiv zB den Linux Kernel) und komprimieren Sie sie jeweils mit gzip , bzip2 und xz . Messen Sie dabei die Ausführungszeit durch ein vorgesetztes time . Wie verhalten die Laufzeiten und die Komprimierungsraten sich zueinander?</li>
|
|
<li>Experimentieren Sie mit der Datei aus der vorigen Aufgabe und vergleichen Sie die Laufzeit und die Größe des Resultats für xz mit verschiedenen Effizienz-Optionen. Was ist der Unterschied zwischen -1 und -6 und zwischen -6 und -9 ?</li>
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<section style="font-size: .65em">
|
|
<h4>Übungen mit grep / reguläre Ausdrücke</h4>
|
|
<ul>
|
|
<li>
|
|
Sind die Operatoren ? und + in regulären Ausdrücken wirklich nötig?
|
|
</li>
|
|
<li>
|
|
Finden Sie in <a href="/beispiele/17/frosch.txt">frosch.txt</a> alle Zeilen, in denen das Wort »Tochter« oder »Königstochter« vorkommt.
|
|
</li>
|
|
<li>
|
|
In der Datei /etc/passwd stehen die Benutzer des Rechners (meistens jedenfalls). Jede Zeile der Datei besteht aus einer Reihe von durch Doppelpunkten getrennten Feldern. Das letzte Feld jeder Zeile gibt die Login-Shell eines Benutzers an. Geben Sie eine grep-Kommandozeile an, mit der Sie alle Benutzer finden können, die die Bash als Login-Shell verwenden.
|
|
</li>
|
|
<li>
|
|
Suchen Sie in /usr/share/dict/words nach allen Wörtern, die die genau die fünf Vokale »a«, »e«, »i«, »o« und »u« in dieser Reihenfolge enthalten (möglicherweise mit Konsonanten davor, dazwischen und dahinter).
|
|
</li>
|
|
|
|
<li>
|
|
Geben Sie ein Kommando an, das im »Froschkönig« alle Zeilen sucht und ausgibt, in denen irgendein mindestens vierbuchstabiges Wort zweimal auftritt.
|
|
</li>
|
|
</ul>
|
|
<p>Quelle: <a href="/pdf/Linux-Kurs/lxes-de-manual.pdf">lxes-de-manual.pdf</a>
|
|
|
|
<aside class="notes">
|
|
<pre><code>egrep '\<(Königst|T)ochter\>' frosch.txt</code></pre>
|
|
<pre><code>grep :/bin/bash$ /etc/passwd</code></pre>
|
|
<pre><code>$ k='[^aeiou]*'
|
|
$ grep -i ^${k}a${k}e${k}i${k}o${k}u${k}$ /usr/share/dict/words</code></pre>
|
|
<pre><code>egrep '(\<[[:alpha:]]{4,}\>).*\<\1\>' frosch.txt</code></pre>
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<ul>
|
|
<li>Wie können Sie prüfen, ob in einem Verzeichnis Dateien mit »merkwürdigen« Namen enthalten sind, etwa solche mit Leerzeichen am Schluss
|
|
oder mit unsichtbaren Steuerzeichen in der Mitte?
|
|
|
|
<li>Vergleichen Sie die Ausgabe der Kommandos »ls /tmp« und »ls /tmp
|
|
>ls-tmp.txt« (wobei wir mit »Ausgabe« im zweiten Fall den Inhalt der Datei
|
|
ls- tmp.txt meinen). Fällt Ihnen etwas auf? Falls ja, wie könnte man das Phänomen erklären? ( u.U. kein Effekt, hängt von der Version ab ) </li>
|
|
|
|
<li>Ersetzten Sie in den Dateinamen der jpg aus bilder.zip alle Gross- durch Kleinbuchstaben
|
|
<pre><code class="bash">~$ tr '[:upper:]' '[:lower:]' ...</code></pre></li>
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<section style="font-size: .6em">
|
|
<ul>
|
|
|
|
<li>Sortieren Sie die Teilnehmerliste in <a href="/linuxkurs/beispiele/17/teilnehmer0.dat">teilnehmer0.dat</a> nach den Vereinsnamen und innerhalb der
|
|
Vereine nach den Nach- und Vornamen der Spieler (in dieser Reihenfolge)
|
|
|
|
<p><pre><code class="bash">~$ man sort</code></pre></p>
|
|
|
|
<li>Generieren Sie eine neue Version der Datei teilnehmer0.dat, in der die Startnummer und die Vereinszugehörigkeit nicht auftauchen.
|
|
<p><pre><code class="bash">~$ man cut
|
|
~$ man paste</code></pre></p>
|
|
|
|
<li>Erzeugen Sie eine Version der Datei teilnehmer0.dat, bei der die Felder nicht durch Doppelpunkte, sondern durch die Zeichenkette »,␣« (Komma gefolgt von einem Leerzeichen) getrennt sind.
|
|
<li>Wie viele verschiedene Gruppen werden von Benutzern auf Ihrem System als primäre Gruppen benutzt? (Die primäre Gruppe eines Benutzers ist das vierte Feld in der Datei /etc/passwd.)
|
|
|
|
</ul>
|
|
</section>
|
|
|
|
<section style="font-size: .55em">
|
|
<p>
|
|
Erstellt ein Backup-Installations-Script welches
|
|
<ol>
|
|
<li>einmal per Dialog einen Backup-Dateinamen ohne Endung abfrägt mit <a href="https://en.wikibooks.org/wiki/Bash_Shell_Scripting/Whiptail#Input_box">Whiptail</a></li>
|
|
<li>einmal per Dialog das Backup-Ziel abfrägt ( zB lk.schubertdaniel.de / oder localhost ) </li>
|
|
<li>einen systemd Timer ( <a href="https://wiki.archlinux.de/title/Systemd/Timers">https://wiki.archlinux.de/title/Systemd/Timers </a> ) installiert, der täglich
|
|
<ul>
|
|
<li>die Ordner „wp-content/themes“ und „wp-content/uploads“ eurer Wordpress Installation </li>
|
|
<li>Die Datenbank eurer Wordpress Installation ( Befehl mysqldump ) <pre><code class="sql" contenteditable="">mysqldump --add-drop-table -h mysql_hostserver -u mysql_username -p mysql_databasename
|
|
</code></pre></li>
|
|
</ul>
|
|
zusammen in ein <strong>xz-komprimiertes</strong> File mit dem oben abgefragten Namen + Datum im Format <br> „24-02-2019“ packt</li>
|
|
<li>das Backup auf Backup-Ziel per „scp“ oder „rsync“ kopiert.</li>
|
|
|
|
<li>Strukturiert das Script mit functions; ggf. kann es sinnvoll sein, die Aufgabe in mehrere Dateien aufzuteilen.
|
|
|
|
</ol>
|
|
</p>
|
|
|
|
</section>
|
|
<section>
|
|
<p>zusätzliche Überlegungen:
|
|
<ul>
|
|
<li>gibt es bereits einen service der so heisst?</li>
|
|
<li>existiert die datenbank?</li>
|
|
<li>existieren die ordner?</li>
|
|
<li>existiert das backupziel?</li>
|
|
<li>was soll passieren wenn etwas nicht existiert?</li>
|
|
<li>was soll passieren wenn der upload scheitert?</li>
|
|
</ul>
|
|
</section>
|
|
|
|
</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>
|
|
|
|
|