<!doctype html>
<html lang="de"> 
	<head>
		<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 3
					<p>
						<small>Deutsche Angestellten Akademie</small>
					</p>

					<aside class="notes">
						Frage: Fragen zur letzten Stunde?
					</aside>
				</section>
				<section>
					<h3>sudo</h3>
					<p class="fragment">als root: <code>adduser USER sudo</code></p>
					<p class="fragment">Datei /etc/sudoers</p>
					<p class="fragment">zu editieren mit visudo</p>
					<p class="fragment"><code>daniel ALL=(ALL) ALL</code>

				</section>
				
				<section data-transition="slide" data-background="#b5533c" data-background-transition="zoom">
					<h3>kurze Wiederholung</h3>
				</section>

				<section>
          <ul>
            <li> In Dateinamen dürfen fast alle möglichen Zeichen auftauchen. Man sollte sich auf Buchstaben, Ziffern und einige Sonderzeichen beschränken.
            <li class="fragment">Linux unterscheidet Groß- und Kleinschreibung in Dateinamen.
            <li class="fragment"> Absolute Pfade beginnen immer mit einem Schrägstrich und benennen alle Verzeichnisse vom Wurzelverzeichnis bis zum betreffenden Verzeichnis bzw. der Datei.
            <li class="fragment">Relative Pfade beziehen sich auf das »aktuelle Verzeichnis«.
          </ul>
			</section>
			<section>
          <ul>
            <li>Aboluter Pfad: <code> /home/daniel/Dokumente </code></li> 
            <li class="fragment">Relativer Pfad: <code> Domukente/rechnungen/2018 </code> </li> 
            <li class="fragment"> <code>cd</code> ändert das aktuelle Verzeichnis der Shell, <code>pwd</code> zeigt den Pfad des aktuellen.</li> 
            <li class="fragment"><code>cd .. </code> wechselt 1 Verz. höher</ li>
            <li class="fragment"><code>cd ../.. </code> wechselt 2 Verz. höher</ li>
            <li class="fragment"><code>cd ../../etc/nginx</code></li>
            <li class="fragment"><code>cd / </code> -> Wurzelverzeichnis</li>
            <li class="fragment"><code>cd </code> oder <code> cd ~ </code> -> home </li>
             <li class="fragment"><span style="color: orange">Aufgabe:</span>Erstellt die Verz. ~/hase/fuchs. Erstellt die Datei ~/hase/fuchs/test.txt. Kopiert die Datei test.txt nach ~. </li>
			</ul>
		</section>
		<section>
          <ul>
            <li><code>ls</code> gibt Informationen über Dateien und Verzeichnisse aus.</li> 
            <li class="fragment">Mit <code>mkdir</code> und <code>rmdir</code> kann man Verzeichnisse anlegen oder entfernen.
            <li class="fragment">cp, mv, rm - kopieren, verschieben, löschen 
            <li class="fragment">Mit <code>ln</code> kann man »harte« und »symbolische« Links anlegen.
            <li class="fragment"><code>more</code> und <code>less</code>  dienen zum seitenweisen Anzeigen von Dateien auf dem Terminal.
          </ul>
				</section>

        <section>
          <ul>
            <li><code>find</code> sucht nach Dateien oder Verzeichnissen, die bestimmte Kriterien erfüllen.</li>
            <li class="fragment"><code>locate</code> findet Dateien nach Name</li>
            <li class="fragment">es gibt externe und interne ( builtin )Kommandos</li>
            <li class="fragment">interne sind zb. cd und echo</li>
            <li class="fragment">externe sind zb alles in <code>/bin </code></li>
            <li class="fragment"><code>type</code> gibt Auskunft darüber </li> 
            <li class="fragment"><span style="color: orange">Aufgabe:</span> welcher Art sind <p><code>alias ,echo, rm, test?</code> </li>
          </ul> 
        </section>

        <section>
        	<div>https://www.shellbefehle.de/befehle/</div>
        </section>
            
        <section>
          <ul>
           <li>Sonderzeichen: </li> 
						<li><pre><code class="hljs" data-trim contenteditable>
$&;(){}[]*?!<>« </code> </pre> 
						</li> 
            <li class="fragment"><code>touch neue datei </code> - erzeugt 2 Dateien</li> 
            <li class="fragment"><code>touch 'neue datei'</code>  - erzeugt 1 Datei</li>
            <li class="fragment"><code> > </code> leitet Ausgabe um
          </ul> 
        </section> 
        <section>
        	<h3>bash Shortcuts</h3>

        	<table style="font-size: .4em">
        	<thead>
        	<tr>
        	<th>Shortcut</th>
        	<th>Beschreibung</th>
        	</tr>
        	</thead>
        	<tbody>
        	<tr style="color:red">
        	<td>TAB</td>
        	<td>Vervollständige das angefangene Wort</td>
        	</tr>
        	<tr style="color:red">
        	<td>TAB TAB</td>
        	<td>Zeige Liste der Vervollständigungs-möglickeiten</td>
        	</tr>

        	<tr style="color:red">
        	<td>Ctrl + c</td>
        	<td>Aktuell laufendes Kommando abbrechen</td>
        	</tr>
        	<tr style="color:red">
        	<td>Ctrl + z</td>
        	<td>Aktuelles Kommando stoppen</td>
        	</tr>

        	<tr>
        	<td>Ctrl + a</td>
        	<td>Gehe zum Anfang der Kommandozeile</td>
        	</tr>
        	<tr>
        	<td>Ctrl + e</td>
        	<td>Gehe zum Ende der Kommandozeile</td>
        	</tr>
        	
        	<tr style="color:red">
        	<td>Ctrl + w</td>
        	<td>Lösche vom Cursor zum Anfang des Wortes (das aktuelle Wort löschen)</td>
        	</tr>
        	<tr>
        	<td>Ctrl + y</td>
        	<td>Füge ein gelöschtes wort wieder ein, welches mit einem der shortcuts zum löschen gelöscht wurde</td>
        	</tr>
        	<tr>
        	<td>Ctrl + xx</td>
        	<td>Bewege dich zwischen Anfang der Kommandozeile und der aktuellen position des Cursor (hin und zurück)</td>
        	</tr>
        	<tr>
        	<td>Ctrl + f</td>
        	<td>Ein Zeichen nach vorne</td>
        	</tr>
        	<tr>
        	<td>Ctrl + b</td>
        	<td>Ein Zeichen zurück</td>
        	</tr>
        	<tr>
        	<td>Ctrl + d</td>
        	<td>Löscht das Zeichen unter dem Cursor</td>
        	</tr>
        	<tr>
        	<td>Ctrl + h</td>
        	<td>Löscht das Zeichen vor dem Cursor</td>
        	</tr>
        	<tr style="color:red">
        	<td>Ctrl + r</td>
        	<td>Durchsucht die History rückwärts</td>
        	</tr>
        	<tr>
        	<td>Ctrl + g</td>
        	<td>Den History Suchmodus wieder verlassen</td>
        	</tr>
        	
        	<tr>
        	<td>Ctrl + l</td>
        	<td>Lösche das Kommandozeilenfenster</td>
        	</tr>
        	<tr>
        	<td>Ctrl + s</td>
        	<td>Stopt den Output auf die Kommandozeile (Bei langen Kommandos mit viel Output)</td>
        	</tr>
        	<tr>
        	<td>Ctrl + q</td>
        	<td>Stellt denn Output in die Kommandozeile wieder her (welcher vorher mit „Ctl + s“ gestoppt wurde)</td>
        	</tr>
        	
        	</tbody>
        	</table>

        	<aside class="notes">
							sind emacs kommandos shortcuts
						</aside>
        	
        </section>
				
		<section data-transition="slide" data-background="#b5533c" data-background-transition="zoom">
			<h2>bash Konfiguration</h2>
		</section>

		
		<section>
			<p>aus der bash man-page:
			<pre style="font-size: .4em">
FILES
   /bin/bash
          The bash executable
   /etc/profile
          The systemwide initialization file, executed for login shells
   /etc/bash.bashrc
          The systemwide per-interactive-shell startup file
   /etc/bash.bash.logout
          The systemwide login shell cleanup file, executed when a login shell exits
   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file
   ~/.bash_logout
          The individual login shell cleanup file, executed when a login shell exits
   ~/.inputrc
              Individual readline initialization file
</pre>
		</section>
		<section>
				<h3>für den Alltag wichtige config files </h3>
				<ul>
					<li class="fragment">.bashrc - Konfiguration</li>
					<li class="fragment">.bash_aliases - Kommando Aliase</li>
					<li class="fragment">.bash_history - Kommando Historie</li>
				</ul>

				<aside class="notes">
					<ul>
						<li>kurze erklärung</li>
					</ul>
				</aside>
				</section>
				<section>
					<h3 style="text-transform: none">.bashrc</h3>
					<pre style="font-size: .4em"><code class="hljs" data-trim contenteditable>
# zusätzlicher pfad für die auto-vervollständigung
export CDPATH=$CDPATH:/home/dany/projekte

# maximale länge der history
HISTSIZE=1000
HISTFILESIZE=2000
HISTTIMEFORMAT="%d-%m-%Y %H:%M "

# promt formatierung
PS1='\[\033[38m\]\u@\h \[\033[94m\]\W\[\033[95m\]$(__git_ps1)\[\033[37m\]$\[\033[00m\] '
					</code></pre>
					<p><code>export</code> gibt alle gesetzten bash Variablen aus
					<p><code>export $VARIABLE</code> setzt die Bash Variable für die laufende Sitzung
				</section>

				<section>
					<h3 style="text-transform: none">.bash_aliases</h3>
					<pre style="font-size: .4em"><code class="hljs" data-trim contenteditable>
# ls Varianten
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

#df in lesbar
alias df='df -h'

# Oft gebrauchte Pfade
alias o='cd ~/ownCloud/'
alias p='cd ~/projekte'

# stopwatch
alias timer='echo "Timer started. Stop with Ctrl-D." && date && time cat && date'

# create a dir with date from today
alias mkdd='mkdir $(date +%Y%m%d)'
							</code></pre>
				</section>

				<section>
					<div><span style="color: orange">Aufgabe:</span> legt ein Alias an, das per mkdir ein Verzeichnis mit evtl. Eltern anlegt;<br> Hinweis: Datei .bash_aliases bearbeiten

					<p class="fragment"><code>alias mp='mkdir -p'</code>
					<p class="fragment"><span style="color: orange">Aufgabe: </span> Macht die Schriftfarbe des Prompt blau
					<p class="fragment"> Hilfe: 	<a href="https://wiki.archlinux.de/title/Bash-Prompt_anpassen">https://wiki.archlinux.de/title/Bash-Prompt_anpassen </a>	
					<p class="fragment"><code>PS1="\[\033[34m\]\u@\h:\w$"</code>
				</section>

				<section data-transition="slide" data-background="#b5533c" data-background-transition="zoom">
					<h3>stdin, stdout, stderr - Kanäle der Bash</h3>

					<ul>
						<li class="fragment">Standardeingabekanal <em>stdin</em>, dieser hat die Nummer 0 (null) -> Tastatur</li>
						<li class="fragment">Standardausgabekanal <em>stdout</em>, dieser hat die Nummer 1 (eins) -> Bildschirm</li>
						<li class="fragment">Standardfehlerkanal <em>stderr</em>, dieser hat die Nummer 2 (zwei). -> Bildschirm</li>
					</ul>
				</section>
				<section>
					<p>Ausgabeumleitung</p>
					<code>ls -la > inhalt.txt</code>
					<p  class="fragment highlight-red">Vorsicht! Überschreibt vorh. Datei inhalt.txt!!</p>
					<p  class="fragment">Zum anhängen: <code>ls -la >> inhalt.txt</code></p>
				</section>

				<section>
					<p>Umleitung stderr</p>
					<code>ls -la /home/user 2> fehler.txt</code>
					<p> <code class="fragment">ls -la > verzeichnis.txt 2> fehler.txt </code>
					<p> <code class="fragment">ls -la > gemeinsam.txt 2>&1 </code>
				</section>

				<section>
					<p>Umleitung stdin</p>
					<code>tr -d '0-9' < datei.txt </code>
				</section>

				<section>
					<h3>Der Pipe Operator</h3>
					<p> <code class="fragment">ps ax | sort -nr </code>
					<p> <code class="fragment">dmesg | grep -n USB  </code>
					<p> <code class="fragment">dmesg | grep -n USB | tail  </code>


				</section>
				<section>
					<p><code style="font-size: .5em">dmesg > alle-meldungen.log</code>
					<p><code style="font-size: .5em">grep usb < alle-meldungen.log | tail > usb-meldungen.log </code>
				</section>

				<section>

					<p><code style="font-size: .5em">dmesg > alle-meldungen.log</code></p>
					<p><code style="font-size: .5em">grep usb < alle-meldungen.log | tail > usb-meldungen.log </code></p>
					<p><code style="font-size: .5em">find . -type f -mtime +1 -name "*.log" <span class="fragment highlight-green">-exec zip -m {}.zip {} \; </span><span class="fragment highlight-red"> >/dev/null</span> &</code></p>

				</section>
				
				<section data-transition="slide" data-background="#b5533c" data-background-transition="zoom">
					<h3>
						Reguläre Ausdrücke	
					</h3>
				</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>