\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 a
\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 & 5 &  \\
3b & 3 &  \\


 &  &  \\
 Total & 21 &  \\

\end{tabular}
\end{center}

\newpage

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

\noindent{\bf{Aufgabe  - 1a (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 4 * * 1
\end{minted}
Wann wird das Skript jeweils ausgeführt?\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\vspace{9pt}
{\bf{Aufgabe  - 1b (1 Punkt)}} Wildcards -
Sie führen folgendes Kommando aus:
\begin{minted}[frame=none,mathescape]{bash}
touch {a..c}file
\end{minted}
Erklären sie, was das Kommando genau macht:\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\vspace{9pt}
\noindent{\bf{Aufgabe  - 1c (1 Punkt)}} grep -
Gegeben ist folgendes Kommando:
\begin{minted}[frame=none,mathescape]{bash}
cat /etc/passwd | grep -v root
\end{minted}
Erklären sie, was dieses Kommando genau macht (berücksichtigen sie auch die Option \verb|-v|):\\\\
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\noindent{\bf{Aufgabe  - 1d (1 Punkt, 1/2 Punkt pro Pfadangabe)}} - Verzeichnisse wechseln \\
Angenommen, sie befinden sich auf Ihre Linuxsystem unter \verb|/root/|, geben sie die {\bf{realtive}} und die {\bf{absolute}} Pfadangabe an, um in das Verzeichnis \verb|/tmp| zu wechseln:
\\\\Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
\noindent{\bf{Aufgabe  - 1e (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}

\newpage
\noindent {\Large{\bf{Teil 2 - Codestücke}}}\\
\noindent{\bf{Aufgabe  - 2a (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|passw0rd| hat, den Text \emph{Passwort korrekt, Zutritt erlaubt} ausgibt und falls nicht den Text \emph{Zutritt verweigert!}.
\vspace{9pt}
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
#!/bin/bash
if [ $1 = "passw0rd" ]; then
    _____________________
else
    _____________________
fi
\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|/etc/| 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)}} - while \\\\
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript so ergänzen, dass die Schleife solange läuft, wie \verb|zahler| grösser als 10 ist (Zeile 3) und der \verb|zaehler| zum Schluss jedes Schleifendurchlaufs um 1 reduziert wird (Zeile 5). 
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
#!/bin/bash 
zaehler=20
while [  $zaehler _________ ]; do
    echo der zaehler ist $zaehler
    ____________
done
\end{minted}

\noindent{\bf{Aufgabe  - 2d (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|source|, \verb|target| 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]{powershell}
#!/bin/bash          
source="/home/"
target="/var/backups/"
outputFile=home-$(date +%Y%m%d).tgz
tar -cZf ________________ __________
\end{minted}

\newpage 

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

 \noindent{\bf{Aufgabe  - 3a (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.3.4
nameserver 10.0.3.5
\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.3.4
10.0.3.5
\end{verbatim}
Verwenden sie dazu \verb|cat|, \verb|grep| und \verb|cut|.  \\\\
\noindent{\bf{Aufgabe  - 3b (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 "Geben sie die erste Nummer ein:" 
read a 
echo "Geben sie die zweite Nummer ein:" 
read b 
echo "Geben sie die gewünschte Opertaion +, - , / oder x ein" 
    read opr 
if [ $opr = "+" ] 
  then 
  op=`expr $a + $b`
  echo "$op"
_______________
  _______________
  _______________
  _______________
elif [ $opr = "/" ] 
  then 
  op=`expr $a / $b`
  echo "$op"
elif [ $opr = "x" ] 
then 
  op=`expr $a \* $b`
  echo "$op"
fi 
\end{minted}
Der Code einer Operation fehlt (Subtraktion). Ergänzen sie den Code an der hervorgehobenen Stelle so, dass auch die Subtraktion funktioniert.
 
\end{document}





