Skip to content
Snippets Groups Projects
Select Git revision
  • 2025ss default
  • 2024ss
  • 2023ss
  • 2022ss
  • 2021ss
  • 2020ss
  • 2019ss
  • 2018ss
8 results

ad-slides-2025ss.pdf

Blame
  • unix-20220314.tex 18.90 KiB
    % unix-20220314.pdf - Lecture Slides on Unix Fundamentals
    % Copyright (C) 2013, 2015, 2016, 2017, 2018, 2021, 2022  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{14.\ März 2022}
    
    \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
    
          Anwendungsbeispiel: Snapshot-Backup
    
          \smallskip
    
          Bei Verzeichnissen: \newterm{hard links\/} halten die Verzeichnisstruktur zusammen
          \begin{itemize}
            \item eigentlicher Name
            \item \lstinline{.} von sich selbst aus
            \item \lstinline{..} von Unterverzeichnissen aus
          \end{itemize}
    
      \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}