mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-11-27 20:21:56 +01:00
354 lines
12 KiB
TeX
354 lines
12 KiB
TeX
\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<62>rzungsverzeichnis erstellen
|
||
toc, %Eintr<74>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<74>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??????????<3F>?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??????????<3F>?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 c - Nachprüfung
|
||
\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 & 4.5 & \\
|
||
3b & 5 & \\
|
||
|
||
|
||
& & \\
|
||
Total & 22.5 & \\
|
||
|
||
\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 root | cut -d ':' -f 1
|
||
\end{minted}
|
||
Erklären sie, was dieses Kommando genau macht:\\\\
|
||
Antwort: \texttt{\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\
|
||
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\\\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_}\\\\
|
||
\noindent{\bf{Aufgabe - 1b (1 Punkt, 1/2 Punkt pro Pfadangabe)}} - Verzeichnisse wechseln \\
|
||
Angenommen, sie befinden sich auf Ihre Linuxsystem unter \verb|/usr/bin/|, geben sie die {\bf{relative}} und die {\bf{absolute}} Pfadangabe an, um in das Verzeichnis \verb|/home/user1/| 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}
|
||
30 4 * * 5
|
||
\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 auf einer Datei gesetzt werden, damit in diese geschrieben 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 {backuped{1,2},restored{1,2}}.zip
|
||
\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|zaehler| kleiner als 8 ist (Zeile 3) und der \verb|zaehler| zum Schluss jedes Schleifendurchlaufs um 2 erhöht wird (Zeile 5).
|
||
\begin{minted}[linenos=true,frame=none,mathescape]{bash}
|
||
#!/bin/bash
|
||
zaehler=2
|
||
while [ $zaehler _________ ]; do
|
||
echo der zaehler ist $zaehler
|
||
____________
|
||
done
|
||
\end{minted}
|
||
\newpage
|
||
|
||
\noindent {\Large{\bf{Teil 3 - Programmieraufgaben}}}\\
|
||
|
||
|
||
\noindent{\bf{Aufgabe - 3a (4.5 Punkte, 0.75 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))
|
||
___________
|
||
___________
|
||
________________
|
||
fi
|
||
\end{minted}
|
||
Der Code der Operationen Subtraktion und Multiplikation fehlt. Ergänzen sie den Code an den hervorgehobenen Stellen so, dass auch die Subtraktion und Multiplikation funktionieren.\\\\
|
||
|
||
\noindent{\bf{Aufgabe - 3b (5 Punkte)}} - resolv.conf\\\\
|
||
In der Datei \verb|/etc/resolv.conf| kommen Domänennamen der lokalen Domains vor, zB.:
|
||
\begin{verbatim}
|
||
search example.com
|
||
nameserver 10.0.1.6
|
||
nameserver 10.0.1.7
|
||
\end{verbatim}
|
||
Schreiben sie ein kleines Skript, welches alle Domänennamen findet und ausgibt. Mit dem obigen Inhalt sollte Ihr Skript also folgende Ausgabe erzeugen:
|
||
\begin{verbatim}
|
||
example.com
|
||
\end{verbatim}
|
||
Verwenden sie dazu \verb|cat|, \verb|grep| und \verb|cut|.
|
||
|
||
\end{document}
|
||
|
||
|
||
|
||
|
||
|