\documentclass[a4paper,11pt]{report}
%\usepackage{isolatin1}
%\usepackage{german}
\usepackage{float}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage{soul}

\usepackage{lmodern} % Latin Modern

\usepackage[ngerman]{babel, translator}
\usepackage[utf8]{inputenc}
\usepackage{amssymb}


%\usepackage[ngerman]{babel, translator}


%\usepackage[utf8x]{inputenc}
\usepackage[left=2.5cm,top=2cm,right=2cm,bottom=4cm]{geometry}

%Code listings
\usepackage{listings}
\usepackage{minted}
\usepackage{etoolbox}
\patchcmd{\chapter}{\thispagestyle{plain}}{\thispagestyle{fancy}}{}{}


\usepackage[]{hyperref}
\hypersetup{
	linkcolor=blue, 
	pagecolor= blue,
	urlcolor= blue,
	colorlinks=true,
	pdfborder=0 0 0
}
\usepackage[
nonumberlist, %keine Seitenzahlen anzeigen
acronym,      %ein Abk�rzungsverzeichnis erstellen
toc,          %Eintr�ge im Inhaltsverzeichnis
section]      %im Inhaltsverzeichnis auf section-Ebene erscheinen
{glossaries}


\usepackage{hyperref}

%Ein eigenes Symbolverzeichnis erstellen
\newglossary[slg]{symbolslist}{syi}{syg}{Symbolverzeichnis}

%Den Punkt am Ende jeder Beschreibung deaktivieren
\renewcommand*{\glspostdescription}{}



%Glossar-Befehle anschalten
\makeglossaries

%Diese Befehle sortieren die Eintr�ge in den
%einzelnen Listen:
%makeindex -s datei.ist -t datei.alg -o datei.acr datei.acn
%makeindex -s datei.ist -t datei.glg -o datei.gls datei.glo
%makeindex -s datei.ist -t datei.slg -o datei.syi datei.syg



% define acronyms here
\newacronym{PDF}{PDF}{Portable Document Format}
\newacronym{APDU}{APDU}{Application Protocol Data Unit}
\newacronym{AGPL}{AGPL}{Affero General Public License}
\newacronym{GPL}{GPL}{General Public License}
\newacronym{LGPL}{LGPL}{Lesser General Public License}


\newacronym{DCT}{DCT}{Discrete Cosine Transform}
\newacronym{TTA}{TTA}{Trusted Timestamp Authority}
\newacronym{OCSP}{OCSP}{Online Certificate Status Protocol}
\newacronym{PKI}{PKI}{Public Key Infrastructure}



%\newacronym{BDD}{BDD}{Behaviour Driven Development\protect\glsadd{glos:BDD}}

\newglossaryentry{Application Protocol Data Unit}
{
  name={Application Protocol Data Unit},
  description={blablabla}
}

\newglossaryentry{Copyleft}
{
  name={Copyleft},
  description={The copyleft ist the obligation required by the GLP (or AGPL) license to offer the source code of a work (and every derivative of it) to the public (open source). Copy{\bf{left}} can also be considered as the opposite of copy{\bf{right}}. }
}


%Befehle f�r Glossar

\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}

 \renewcommand\contentsname{Inhaltsverzeichnis}


%Einstellungen f??r code listings
\lstset{inputencoding=utf8, language=Java,tabsize=2, basicstyle=\small,breaklines=true,showstringspaces=false}
\pagestyle{fancy}
\setlength{\headheight}{38pt}
\setlength{\headwidth}{470pt}
\renewcommand{\headrule}{\hskip -\leftskip{\bf \quad \quad}\vbox to 5pt{\hbox to 455pt{\hrulefill}}}
\renewcommand{\footrule}{\hskip-\leftskip{\bf \quad \quad}{\hbox to 450 pt{\hrulefill}\newline}}
\fancyhf{}
\fancyheadoffset[L]{1cm}
\fancyfootoffset[L]{1cm}
%Kopfzeile links bzw. innen
\fancyhead[L]{\includegraphics[height=0.6in]{img/bfsulogo.jpg}}
%Kopfzeile mittig
\fancyhead[C]{}
%Kopfzeile rechts bzw. au??????????�?en
\fancyhead[R]{\hspace{10pt} \\M122 - Prüfung 2\\ M.Bischof\rightmark }
  \fancyheadoffset[L]{1cm}
  \fancyfootoffset[L]{1cm}
%Linie oben
\renewcommand{\headrulewidth}{0.7pt}
%Fu??????????�?zeile mittig
\cfoot{\vspace*{6mm}page:\ \thepage\ of \pageref{LastPage}}
\fancyfoot[R]{}
% footnote in footer
\newcommand{\fancyfootnotetext}[2]{%
  \fancypagestyle{dingens}{%
    \fancyfoot[LO,RE]{\parbox{12cm}{\footnotemark[#1]\footnotesize #2}}%
  }%
  \thispagestyle{dingens}%
}
%Linie unten
\renewcommand{\footrulewidth}{0.5pt}

\vspace*{15mm}
\textwidth 450pt



\begin{document}

\setcounter{tocdepth}{5}



%\thispagestyle{empty}

\begin{center}

\vspace{48pt}


\vspace{15pt}
\begin{huge}
M122 - Bash - Prüfung 2 Serie b
\end{huge}
\vspace{10pt}\\
\begin{quote}
\end{quote}

\vspace{20pt}
{\bf{Erlaubte Hilfsmittel :}}
\begin{itemize}
\item Alle Hilfsmittel ausser Netzwerkkommunikation ({\bf{LAN-Kabel entfernen!}})
\end{itemize}
{\bf{Generell nicht erlaubt ist:}}
\begin{itemize}
\item Abschreiben von der Nachbarprüfung oder Weitergeben von Prüfungen/Prüfungsresultaten innerhalb der Klasse. Kommunikation über Handy oder Computernetzwerk.
\end{itemize}
Jeglicher Verstoss gegen diese Regeln führt umgehend zum Ausschluss aus der Prüfung  und der Note 1.
\vspace{30pt}
\\
Name: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}
\hspace{30pt}
Klasse: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_}
\vspace{50pt}
Datum: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_}\\
\begin{tabular}{||p{3 cm}@{}|c|r||}
 &  &  \\
Aufgabe & max. Punkte & erreichte Punkte \\
 &  &  \\

1a & 1 &  \\
1b & 1 &  \\
1c & 1 &  \\
1d & 1 &  \\
1e & 1 &  \\

2a & 2 &  \\
2b & 2 &  \\
2c & 2 &  \\
2d & 2 &  \\

3a & 3 &  \\
3b & 5 &  \\


 &  &  \\
 Total & 21 &  \\

\end{tabular}
\end{center}

\newpage

\noindent {\Large{\bf{Teil 1 - Kurzaufgaben}}}\\

\noindent{\bf{Aufgabe  - 1a (1 Punkt)}} grep -
Gegeben ist folgendes Kommando:
\begin{minted}[frame=none,mathescape]{bash}
cat /etc/passwd | grep -v ssh
\end{minted}
Erklären sie, was dieses Kommando genau macht (berücksichtigen sie auch die Option \verb|-v|):\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\noindent{\bf{Aufgabe  - 1b (1 Punkt, 1/2 Punkt pro Pfadangabe)}} - Verzeichnisse wechseln \\
Angenommen, sie befinden sich auf Ihre Linuxsystem unter \verb|/home/user1/|, geben sie die {\bf{realtive}} und die {\bf{absolute}} Pfadangabe an, um in das Verzeichnis \verb|/tmp| zu wechseln:
\\\\Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\

\noindent{\bf{Aufgabe  - 1c (1 Punkt)}} Cronjob -
Sie wollen eines Ihre Bashskripte mit crontab automatisieren, dazu haben sie einen cronjob eingerichtet welcher nach nachfolgendem Muster ausgelöst wird: 
\begin{minted}[frame=none,mathescape]{bash}
0 2 * * 3
\end{minted}
Wann wird das Skript jeweils ausgeführt?\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\noindent{\bf{Aufgabe  - 1d (1 Punkt pro richtige, 1 Punkt pro falsche oder fehlende richtige Antwort)}} - Welches Dateirecht muss zusätzlich auf einer Skriptdatei gesetzt werden, damit diese ausgeführt werden kann?

\begin{itemize}
\item \verb|0| \makebox[4pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$ $}
\item \verb|x| \makebox[4pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$ $}
\item \verb|w| \makebox[4pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$ $}
\item \verb|t| \makebox[4pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$ $}
\item \verb|s| \makebox[4pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$ $}
\end{itemize}
{\bf{Aufgabe  - 1e (1 Punkt)}} Wildcards -
Sie führen folgendes Kommando aus:
\begin{minted}[frame=none,mathescape]{bash}
touch {d..f}file
\end{minted}
Erklären sie, was das Kommando genau macht:\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\




\newpage
\noindent {\Large{\bf{Teil 2 - Codestücke}}}\\

\noindent{\bf{Aufgabe  - 2a (2 Punkte)}} - Backup Skript\\\\
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten Informationen, um mit \verb|tar| ein Backup durchzuführen, werden in den Variablen \verb|quelle|, \verb|ziel| und \verb|outputFile| zwischengespeichert. Vervollständigen sie das Skript so, dass ein Backup vom Ordner \verb|home| gemacht wird und zB. in der Datei \verb|/var/backups/home-20151214.tgz| abgelegt wird. Benutzen sie dazu die bereits definierten Variablen.
\begin{minted}[frame=none,mathescape]{bash}
#!/bin/bash        
outputFile=home-$(date +%Y%m%d).tgz  
quelle="/home/"
ziel="/var/backups/"
tar -cZf ________________ __________
\end{minted}


\noindent{\bf{Aufgabe  - 2b (2 Punkte)}} - for in \\\\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollten das Skript so ergänzen, dass es den Inhalt des Verzeichnisses \verb|/home/| ausgibt und zwar unter der Verwendung der abgebildeten \verb|for in| Schleife.
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
#!/bin/bash
for i in ______________ ; do
        echo $i
done
\end{minted}

\noindent{\bf{Aufgabe  - 2c (2 Punkte, 1 Punkt pro Zeile)}} - If - else\\\\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript nun so ergänzen (Zeilen 3 und 5), dass dieses, falls das 1. Argument den Wert \verb|keyw0rd| hat, den Text \emph{sie dürfen passieren} ausgibt und falls nicht den Text \emph{nicht erlaubt!}.
\vspace{9pt}
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
#!/bin/bash
if [ $1 = "keyw0rd" ]; then
    _____________________
else
    _____________________
fi
\end{minted}


\noindent{\bf{Aufgabe  - 2d (2 Punkte, 1 Punkt pro Zeile)}} - while \\\\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript so ergänzen, dass die Schleife solange läuft, wie \verb|zahler| kleiner als 10 ist (Zeile 3) und der \verb|zaehler| zum Schluss jedes Schleifendurchlaufs um 1 erhöht wird (Zeile 5). 
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
#!/bin/bash 
zaehler=0
while [  $zaehler _________ ]; do
    echo der zaehler ist $zaehler
    ____________
done
\end{minted}
\newpage 

\noindent {\Large{\bf{Teil 3 - Programmieraufgaben}}}\\

 
\noindent{\bf{Aufgabe  - 3a (3 Punkte, 1 Punkt pro Zeile)}} - Rechnerskript\\\\
Im nachfolgenden sehen sie ein Taschenrechnerskript, welches zwei Zahlen und eine Operation einliest und dann die beiden Zahlen mit dieser Operation verrechnet (zB. addiert) und ausgibt:
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
echo "bitte gebe eine Nummer ein"
read n1
echo "bitte wähle eine Operation"
echo "1. addieren"
echo "2. subtrahieren"
echo "3. dividieren"
echo "4. multiplizieren"
read opr
echo "bitte gebe eine zweite Nummer ein"
read n2

if [ $opr = "1" ]
   then
      echo $((n1+n2))
___________
    ___________
      ________________         
elif [ $opr = "3" ]
   then
      echo $((n1/n2))
elif [ $opr = "4" ]
   then
       echo $((n1*n2))
fi
\end{minted}
Der Code einer Operation fehlt (Subtraktion). Ergänzen sie den Code an der hervorgehobenen Stelle so, dass auch die Subtraktion funktioniert.\\\\
 
\noindent{\bf{Aufgabe  - 3b (5 Punkte)}} - IP-Adressen von Nameservern\\\\
In der Datei \verb|/etc/resolv.conf| sind die IPs der von Ihrem Linuxsystem verwendeten Nameserver eingetragen. Der Inhalt dieser Datei kann zB. so aussehen:
\begin{verbatim}
search example.com
nameserver 10.0.1.6
nameserver 10.0.1.7
\end{verbatim}
Schreiben sie ein kleines Skript, welches alle IP's der Nameserver ausgibt. Mit dem obigen Beispiel sollte Ihr Skript also folgende Ausgabe erzeugen:
\begin{verbatim}
10.0.1.6
10.0.1.7
\end{verbatim}
Verwenden sie dazu \verb|cat|, \verb|grep| und \verb|cut|.
 
\end{document}





