\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}