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>
 | 
						|
 | 
						|
 |