Skip to content
Snippets Groups Projects
Select Git revision
  • 13bd472f5600dedd3357c26fe160a1f972fede17
  • master default protected
  • v3-modify-mail
  • snyk-fix-207483a1e839c807f95a55077e86527d
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_ru
  • translations_6e4a5e377a3e50f17e6402264fdbfcc6_ru
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_fa_IR
  • translations_en-yml--master_fa_IR
  • snyk-fix-7d634f2eb65555f41bf06d6af930e812
  • translations_en-yml--master_ar
  • translations_3b5aa4f3c755059914cfa23d7d2edcde_el
  • jfederico-patch-1
  • v2
  • v3
  • v1
  • release-3.1.0.2
  • release-3.1.0.1
  • release-3.1.0
  • release-2.14.8.4
  • release-3.0.9.1
  • release-3.0.9
  • release-3.0.8.1
  • release-2.14.8.3
  • release-3.0.8
  • release-3.0.7.1
  • release-2.14.8.2
  • release-3.0.7
  • release-3.0.6.1
  • release-3.0.6
  • release-3.0.5.4
  • release-3.0.5.3
  • release-2.14.8.1
  • release-3.0.5.2
  • release-3.0.5.1
  • release-3.0.5
35 results

.ruby-version

Blame
  • unix-20210409.tex 18.63 KiB
    % unix-20210409.pdf - Lecture Slides on Unix Fundamentals
    % Copyright (C) 2013, 2015, 2016, 2017, 2018, 2021  Peter Gerwinski
    %
    % This document is free software: you can redistribute it and/or
    % modify it either under the terms of the Creative Commons
    % Attribution-ShareAlike 3.0 License, or under the terms of the
    % GNU General Public License as published by the Free Software
    % Foundation, either version 3 of the License, or (at your option)
    % any later version.
    %
    % This document is distributed in the hope that it will be useful,
    % but WITHOUT ANY WARRANTY; without even the implied warranty of
    % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    % GNU General Public License for more details.
    %
    % You should have received a copy of the GNU General Public License
    % along with this document.  If not, see <http://www.gnu.org/licenses/>.
    %
    % You should have received a copy of the Creative Commons
    % Attribution-ShareAlike 3.0 Unported License along with this
    % document.  If not, see <http://creativecommons.org/licenses/>.
    
    \documentclass[10pt,t]{beamer}
    
    \usepackage{pgslides}
    \usepackage{rotating}
    \usepackage{pdftricks}
    \usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
    \usepackage{eurosym}
    
    \title{Einführung in Unix}
    \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
    \date{9.\ April 2021}
    
    \begin{document}
    
    \maketitleframe
    
    \sectionnonumber{U\quad Einführung in Unix}
    
    \begin{frame}
    
      \showsectionnonumber
    
    %  \begingroup
    %    \large\color{structure}%
    %    \textbf{Angewandte Informatik: wichtiges Werkzeug}
    %    \par\smallskip
    %    \textbf{Grundlagen Rechnertechnik: Beispiel für Skriptsprache}
    %    \par\bigskip
    %  \endgroup
    
    %  \begin{itemize}
    %    \item[\textbf{U}] \textbf{Einführung in Unix}
          \begin{itemize}
            \item[U.1] \color{red}Grundkonzepte
            \item[U.2] Die Kommandozeile: Grundlagen
            \item[U.3] Dateisysteme
            \item[U.4] Ein- und Ausgabeströme
            \item[U.5] Pipes
            \item[U.6] Verzweigungen und Schleifen
    %        \item[\dots]
          \end{itemize}
    %  \end{itemize}
    
    \end{frame}
    
    \subsectionnonumber{U.1\quad Grundkonzepte}
    
    \begin{frame}
    
      \begin{minipage}[b]{6.5cm}
        \showsectionnonumber
        \vspace{-\medskipamount}
        \showsubsectionnonumber
      \end{minipage}
    
      \begin{description}
        \addtolength{\leftskip}{-1cm}
        \item[1965]
          Vorgänger: Multics (Multiplexed Information and Computing Service)\\
          "`überladen"'
        \item[1970]
          Unix: Einfachheit als Grundkonzept
        \item[1972]
          Umstellung auf neu entwickelte Programmiersprache C
        \item[1975]
          AT\&T: Unix inkl.\ Quelltext für Universitäten
        \item[1977]
          Berkeley Software Distribution (BSD)
        \item[1983]
          GNU-Projekt
        \item[1987]
          Minix
        \item[1991]
          Linux
        \item[1993]
          FreeBSD, NetBSD
        \item[1994]
          OpenBSD
        \item[2000]
          Darwin (Mac OS X, BSD-basiert)
        \item[2008]
          Android (Linux-basiert)
      \end{description}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \begin{minipage}[b]{6.5cm}
        \showsectionnonumber
        \vspace{-\medskipamount}
        \showsubsectionnonumber
    
        Unix und C: Einfachheit als Grundkonzept
    %    \vspace{-\bigskipamount}
        \begin{itemize}
          \item
            Vermeiden von Ausnahmen
          \item[\color{lightgray}$\bullet$]
            \color{lightgray}Baukastensystem
        \end{itemize}
        \medskip
      \end{minipage}\hspace*{0.5cm}%
      \begin{minipage}[b]{5cm}
        C: Hauptprogramm\\
        = "`normale"' Funktion
    
        \medskip
    
        \begin{lstlisting}[gobble=6]
          int main (int argc, char **argv)
          {
            printf ("Hello, world!\n");
            return 0;
          }
        \end{lstlisting}
        \vspace{-\bigskipamount}
      \end{minipage}
    
      \bigskip
      \bigskip
    
      Unix: übergeordnetes Verzeichnis = "`normales"' Verzeichnis
    
      \medskip
    
      \begin{lstlisting}[style=terminal]
        cassini/home/peter/foo> ¡ls -la¿
        insgesamt 24
        drwxr-xr-x   2 peter peter  4096 Okt  6 13:30 .
        drwxr-xr-x 172 peter peter 20480 Okt  6 13:30 ..
        cassini/home/peter/foo> ¡cd ..¿
        cassini/home/peter>
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \begin{minipage}[b]{6.5cm}
        \showsectionnonumber
        \vspace{-\medskipamount}
        \showsubsectionnonumber
    
        Unix und C: Einfachheit als Grundkonzept
    %    \vspace{-\bigskipamount}
        \begin{itemize}
          \item
            Vermeiden von Ausnahmen
          \item
            Baukastensystem
        \end{itemize}
      \end{minipage}\hspace*{0.3cm}%
      \begin{minipage}[b]{6cm}
        C: Bibliotheken
        \begin{itemize}
          \item
            Grundfunktionen: \file{libc}
          \item
            3d-Grafik -- Kernfunktion: \file{libGL}
          \item
            3d-Grafik -- Utilities: \file{libGLU}
          \item
            3d-Grafik -- Utility Toolkit: \file{libglut}
          \item
            \dots
        \end{itemize}
        \vspace*{-0.5cm}
      \end{minipage}
    
      \bigskip
      \bigskip
    
      Unix: Programme arbeiten zusammen
    
      \medskip
    
      \begingroup\small
    
      \begin{lstlisting}[style=terminal]
        cassini/home/peter/bo> ¡find . -name "*klausur*.tex" \
          | grep -v "fig" | less¿
        ./2013ss/net/script/slides/net-probeklausur-20120712.tex
        ./2013ss/net/20130924.0/net-klausur-20130924.tex
        ./2011ws/rarch/20120322.0/rarch-klausur-20120322.tex
        ...
        ./2012ss/hs/20130318.0/hs-klausur-20130318.tex
        ./2012ss/hs/20120715.0/hs-probeklausur-20120715.tex
        ./2012ss/hs/20120720.0/hs-klausur-20120720.tex
      \end{lstlisting}
    
      \endgroup
    
    \end{frame}
    
    \subsectionnonumber{U.2\quad Die Kommandozeile: Grundlagen}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Programm aufrufen: Namen eingeben, z.\,B.: \lstinline[style=cmd]{ls}
        \item
          Optionen: \lstinline[style=cmd]{ls -l}
        \item
          Lange Optionen (GNU-Konvention): \lstinline[style=cmd]{ls --help}
        \medskip
        \item
          Text schreiben: \lstinline[style=cmd]{echo "Hello, world!"}
        \item
          (String-)Variable setzen: \lstinline[style=cmd]{FOO=bar}
        \item
          Variable abrufen: \lstinline[style=cmd]{echo $FOO}
      \end{itemize}
    
      \pause
      \begin{lstlisting}[style=terminal]
        cassini/home/peter/bo> ¡FOO=ls¿
        cassini/home/peter/bo> ¡echo $FOO¿
        ls
        cassini/home/peter/bo> ¡$FOO¿
        2011ws  2012ws  2013ws  doc       misc  projekte
        2012ss  2013ss  briefe  material  orga
        cassini/home/peter/bo>
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Befehl zurückholen: Pfeiltasten $\uparrow$, $\downarrow$
        \item
          Befehl bearbeiten: Pfeiltasten $\leftarrow$, $\rightarrow$ usw.
        \item
          Befehl vervollständigen: TAB
        \item
          Befehl rückwärts suchen: Ctrl+R
        \item
          Bildschirm löschen: Ctrl+L
        \item
          Befehl abbrechen: Ctrl+C
        \bigskip
        \pause
        \item
          Hilfe-Option: \lstinline[style=cmd]{ls --help}
        \item
          Unix-Handbuch -- \emph{manual\/}: \lstinline[style=cmd]{man ls}\\
          (Beenden mit \lstinline[style=cmd]{q})
      \end{itemize}
    
    \end{frame}
    
    \begin{frame}
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Verzeichnisse für Programme: \lstinline[style=cmd]{echo $PATH}
        \item
          Programm in explizitem Verzeichnis aufrufen: \lstinline[style=cmd]{/bin/ls -l}
        \item
          Programm im aktuellen Verzeichnis aufrufen: \lstinline[style=cmd]{./hello}
        \bigskip
    
        \addtolength{\leftskip}{1cm}
        \item[MS-DOS:]
          Ausführbare Programme werden gefunden,\\
          wenn sie im \lstinline[style=terminal]{PATH} stehen\\
          \emph{oder\/} sich im aktuellen Verzeichnis befinden.
        \smallskip
        \item[Unix:]
          Ausführbare Programme werden gefunden,\\
          wenn sie im \lstinline[style=terminal]{PATH} stehen.
          
          \smallskip
          \textarrow\ Vermeiden von Ausnahmen
    
          \pause
          \smallskip
          Das aktuelle Verzeichnis (\lstinline[style=terminal]{.})
          \emph{kann\/} im \lstinline[style=terminal]{PATH} stehen,\\
          muß dies aber nicht\only<2>{ --\\
          und sollte es aus Sicherheitsgründen auch nicht}.
    
      \end{itemize}
    
    \end{frame}
    
    \subsectionnonumber{U.3\quad Dateisysteme}
    
    \begin{frame}
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Dateien listen: \lstinline[style=cmd]{ls}\\
          langes Listenformat: \lstinline[style=cmd]{ls -l}\\
          rückwärts nach Zeit sortiert: \lstinline[style=cmd]{ls -lrt}
        \item
          Datei ausgeben: \lstinline[style=cmd]{cat hello.c}
        \item
          Datei anzeigen: \lstinline[style=cmd]{less hello.c}
      \end{itemize}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Arbeitsverzeichnis anzeigen: \lstinline[style=cmd]{pwd}\\
        \item
          Arbeitsverzeichnis wechseln: \lstinline[style=cmd]{cd script}\\
          (\emph{kein\/} Programm, sondern Shell-Befehl)
        \item
          übergeordnetes Verzeichnis: \lstinline[style=cmd]{cd ..}
        \item
          eigenes \newterm{Home-\/}Verzeichnis: \lstinline[style=cmd]{cd}
        \item
          Wurzelverzeichnis: \lstinline[style=cmd]{cd /}
        \item
          wieder zurück: \lstinline[style=cmd]{cd -}
      \end{itemize}
    
      \pause
      \begin{lstlisting}[style=terminal]
        cassini/home/peter/bo/2013ss/net/script> ¡cd /usr/bin¿
        cassini/usr/bin> ¡cd ../lib¿
        cassini/usr/lib> ¡cd¿
        cassini/home/peter>
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Dateien kopieren (\emph{copy\/}): \lstinline[style=cmd]{cp}
        \item
          Dateien verschieben/umbenennen (\emph{move\/}): \lstinline[style=cmd]{mv}
        \item
          Dateien löschen (\emph{remove\/}): \lstinline[style=cmd]{rm}
      \end{itemize}
    
      \begin{lstlisting}[style=terminal,xleftmargin=-3pt]
        cassini/home/peter> ¡cp -p foo/test.txt¿
        cp: missing destination file operand after `foo/test.txt'
        Try `cp --help' for more information.
        cassini/home/peter> ¡cp -p foo/test.txt .¿
        cassini/home/peter> ¡mv test.txt bla.txt¿
        cassini/home/peter> ¡cat bla.txt¿
        Dies ist ein Test.
        cassini/home/peter> ¡rm bla.txt¿
        cassini/home/peter>
      \end{lstlisting}
    
      \medskip
    
      Aktuelles Verzeichnis: \lstinline[style=cmd]{.}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \lstinline[style=cmd]{grep}: Dateien durchsuchen
      \end{itemize}
      \begin{lstlisting}[style=terminal,xleftmargin=-3pt]
        cassini/.../ainf/20131031.0> ¡grep printf *.c¿
        philosophy.c:  printf ("The answer is %d.\n", answer ());
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Datenträger in Verzeichnis \newterm{einhängen\/}: \lstinline[style=cmd]{mount}
      \end{itemize}
    
      \begin{lstlisting}[style=terminal]
        cassini/home/peter> ¡ls /media/sd-card/¿
        cassini/home/peter> ¡mount /media/sd-card¿
        cassini/home/peter> ¡ls /media/sd-card/¿
        DCIM  NIKON001.DSC
        cassini/home/peter> ¡umount /media/sd-card¿
        cassini/home/peter> ¡ls /media/sd-card/¿
        cassini/home/peter>
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \newterm{Zugriffsrechte}
      \end{itemize}
    
      \begingroup
        \small
        \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
          phoenix/home/peter/bo/2013ws/ainf/20131031.0> ¡ls -l¿
          ...
          -rw-r--r-- 1 peter peter    1539 Nov 29  2012 pruzzel-1.c
        \end{lstlisting}
      \endgroup
      \begin{onlyenv}<2>
        \begin{picture}(0,1)
          \color{red}
          \put(0.3,0){\vector(0,1){1.0}}
          \put(0.3,0){\vector(2,1){2.1}}
          \put(0,-0.1){\makebox(0,0)[tl]{Benutzer (u -- \emph{user\/}) darf lesen und schreiben}}
        \end{picture}
      \end{onlyenv}
      \begin{onlyenv}<3>
        \begin{picture}(0,1)
          \color{red}
          \put(0.77,0){\vector(0,1){1.0}}
          \put(0.77,0){\vector(3,1){3.1}}
          \put(0,-0.1){\makebox(0,0)[tl]{Gruppe (g -- \emph{group\/}) darf lesen}}
        \end{picture}
      \end{onlyenv}
      \begin{onlyenv}<4>
        \begin{picture}(0,1)
          \color{red}
          \put(1.37,0){\vector(0,1){1.0}}
          \put(0,-0.1){\makebox(0,0)[tl]{alle anderen (o -- \emph{other\/}) dürfen lesen}}
        \end{picture}
      \end{onlyenv}
    
      \medskip
      \pause[5]
      \begin{itemize}
        \item
          Zugriffsrechte ändern:\\
          \lstinline[style=cmd]{chmod o-r pruzzel-1.c} -- Lesezugriff entziehen\\
          \lstinline[style=cmd]{chmod g+w pruzzel-1.c} -- Schreibzugriff gewähren\\
          \lstinline[style=cmd]{chmod 640 pruzzel-1.c} -- auf \lstinline[style=terminal]{-rw-r-----} setzen
      \end{itemize}
      \pause
      \begin{picture}(0,0)
        \color{red}
        \put(6.275,0.5){\makebox(0,0)[tl]{%
          \begin{math}%
            \underbrace{\rule{0.7em}{0pt}}_{\textstyle 6}%
            \underbrace{\rule{0.7em}{0pt}}_{\textstyle 4}%
            \underbrace{\rule{0.7em}{0pt}}_{\textstyle 0}
          \end{math}}}
      \end{picture}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \newterm{ausführbare\/} Dateien
      \end{itemize}
    
      \begingroup
        \small
        \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
          cassini/home/peter/bo/2013ws/systech/20131008.0> ¡cat test¿
          ls -l systech-20131008.*
          cassini/home/peter/bo/2013ws/systech/20131008.0> ¡chmod +x test¿
          cassini/home/peter/bo/2013ws/systech/20131008.0> ¡ls -l test¿
          -rwxr-xr-x 1 peter peter   25 Okt 6 16:45 test
          cassini/home/peter/bo/2013ws/systech/20131008.0> ¡./test¿
          -rw-r--r-- 1 peter peter 4120 Okt 6 16:44 systech-20131008.aux
          ...
        \end{lstlisting}
      \endgroup
    
      \pause
      \begin{itemize}
        \item
          ausführbare Textdateien: \newterm{Skripte}
    
          \pause
          \smallskip
          hier: ausführbare Textdatei mit Shell-Befehlen\\
          (ohne spezielle Kennung): Shell-Skript
    
          \pause
          \smallskip
          Kennung: 1.\ Zeile enthält \lstinline[style=terminal]{#!} und den Interpreter,\\
          z.\,B.\ \lstinline[style=terminal]{#!/bin/bash}\\
      \end{itemize}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \newterm{Symbolische Verknüpfungen -- symbolic links}
    
          \smallskip
    
          Verweis auf die eigentliche Datei\\
          \textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere.
    
          \smallskip
    
          Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\
          (Richtung: wie bei \lstinline[style=cmd]{cp})
    
          \smallskip
    
          Beispiel: \lstinline[style=cmd]{ln -s opengel-magic-double.c opengl-magic.c}
        \medskip
        \item
          \newterm{Harte Verknüpfungen -- hard links}
    
          \smallskip
          
          Dieselben Daten auf dem Datenträger\\
          sind unter mehreren Namen verfügbar.\\
          \textarrow\ Wenn man einen löscht, sind die Daten noch da.
    
          \smallskip
    
          (aus Anwendersicht eher selten, daher hier nicht ausführlich)
      \end{itemize}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen
      \end{itemize}
    
      \small
      \begin{lstlisting}[style=terminal,xleftmargin=-7pt]
        $ ¡find . -name "*orbit-x*"¿
        ./20131031.0/orbit-x.c
        ./20131031.0/orbit-x1.c
        ./20131031.0/orbit-x
        ./20131107.0/orbit-x.c
        ./20131107.0/orbit-x1.c
        ./20131107.0/orbit-x
        $ ¡find . -name "*orbit-x*" -perm /u+x¿
        ./20131031.0/orbit-x
        ./20131107.0/orbit-x
        $ ¡find . -name "*orbit-x*" -perm /u+x -exec ls -l {} \;¿
        -rwxr-xr-x 1 peter peter 15831 Okt 31 13:19 ./20131031.0/orbit-x
        -rwxr-xr-x 1 peter peter 15831 Okt 31 13:19 ./20131107.0/orbit-x
      \end{lstlisting}
    
    \end{frame}
    
    \subsectionnonumber{U.4\quad Ein- und Ausgabeströme}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Standard-Ausgabe in Datei umleiten
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡echo "Dies ist ein Test." > test.txt¿
        $ ¡cat test.txt¿
        Dies ist ein Test.
      \end{lstlisting}
    
      \pause
      \smallskip
    
      \begin{itemize}
        \item
          Standard-Ausgabe an Datei anhängen
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡echo "Dies ist noch ein Test." >> test.txt¿
        $ ¡cat test.txt¿
        Dies ist ein Test.
        Dies ist noch ein Test.
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Fehler-Ausgabe in Datei umleiten
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡cat gibtsnicht.txt > fehler.txt¿
        cat: gibtsnicht.txt: No such file or directory
        $ ¡cat fehler.txt¿
        $ ¡cat gibtsnicht.txt 2> fehler.txt¿
        $ ¡cat fehler.txt¿
        cat: gibtsnicht.txt: No such file or directory
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          Standard-Eingabe aus Datei lesen
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡bc¿
        bc 1.06.95
        Copyright [...] 2006 Free Software Foundation, Inc.
        This is free software with ABSOLUTELY NO WARRANTY.
        For details type `warranty'.
        ¡2 + 2¿
        4
        $ ¡echo "2 + 2" > test.bc¿
        $ ¡bc < test.bc¿
        4
      \end{lstlisting}
    
    \end{frame}
    
    \subsectionnonumber{U.5\quad Pipes}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      Standard-Ausgabe von Programm A\\
      wird zu Standard-Eingabe von Programm B
    
      \smallskip
    
      \begin{lstlisting}[style=terminal]
        $ ¡echo "2 + 2" | bc¿
        4
      \end{lstlisting}
    
      \smallskip
    
      \textarrow\ sehr mächtiger "`Baukasten"'
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \lstinline[style=cmd]{sed}: \emph{stream editor}\\
          Suchen und Ersetzen (und noch viel mehr)
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿
        Schlimmer geht immer.
      \end{lstlisting}
    
    \end{frame}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{itemize}
        \item
          \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen
      \end{itemize}
      \begin{lstlisting}[style=terminal]
        $ ¡ls | grep slides¿
        pgslides.sty
        $ ¡ls *.pdf | grep -v fig¿
        logo-hochschule-bochum-cvh-text.pdf
        logo-hochschule-bochum.pdf
        NPN_transistor_basic_operation.pdf
        rtech-20131002.pdf
        $ ¡ls -l $(ls *.pdf | grep -v fig)¿
        -rw-r--r-- 1 peter peter   14488 Sep  2 21:02 logo-hochschule-bochum-cvh-text.pdf
        -rw-r--r-- 1 peter peter   31581 Dez 26  2011 logo-hochschule-bochum.pdf
        -rw-r--r-- 1 peter peter    8538 Okt  2  2012 NPN_transistor_basic_operation.pdf
        -rw-r--r-- 1 peter peter 6753149 Okt  1 22:59 rtech-20131002.pdf
      \end{lstlisting}
    
    \end{frame}
    
    \subsectionnonumber{U.6\quad Verzweigungen und Schleifen}
    
    \begin{frame}[fragile]
    
      \showsubsectionnonumber
    
      \begin{lstlisting}[style=terminal]
        $ ¡if grep Pipes test.txt; then echo "gefunden"; \
          else echo "nicht gefunden"; fi¿
        nicht gefunden
        $ ¡for x in foo bar baz; do echo $x; done¿
        foo
        bar
        baz
      \end{lstlisting}
    
    \end{frame}
    
    \end{document}