mirror of
https://gitlab.com/harald.mueller/aktuelle.kurse.git
synced 2024-11-24 02:31:58 +01:00
muh
This commit is contained in:
parent
f301d86e60
commit
8b87452ef5
@ -17,9 +17,18 @@
|
||||
|
||||
|
||||
## Unterlagen:
|
||||
|
||||
- https://de.wikipedia.org/wiki/Bash_(Shell)
|
||||
- https://www.selflinux.org/selflinux/html/shellprogrammierung.html
|
||||
|
||||
|
||||
**Mit Erklärungen und Übungen** (empfohlen):
|
||||
- [https://gitlab.com/ch-tbz-it/Stud/m122](https://gitlab.com/ch-tbz-it/Stud/m122)
|
||||
|
||||
und da beginnen Sie bitte hiermit:
|
||||
- https://gitlab.com/ch-tbz-it/Stud/m122/-/blob/main/01_Linux_Einf/README.md#linux-unter-windows
|
||||
- https://gitlab.com/ch-tbz-it/Stud/m122/-/blob/main/01_Linux_Einf/README.md#unix-unter-macos
|
||||
- https://gitlab.com/ch-tbz-it/Stud/m122/-/blob/main/01_Linux_Einf/README.md#eine-vm-installieren
|
||||
|
||||
**weitere** (ist in Etwa dasselbe, aber in Kurzform)
|
||||
- [bash 1](./bash-kursunterlagen/bash1)
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
34
m122/bashPruefung/LBV.rtf
Normal file
34
m122/bashPruefung/LBV.rtf
Normal file
@ -0,0 +1,34 @@
|
||||
{\rtf1\ansi\ansicpg1252\cocoartf1348\cocoasubrtf170
|
||||
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0
|
||||
\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
|
||||
|
||||
\f0\fs24 \cf0 Die Leistungsbeurteilung soll Grundlagenwissen von zwei unterschiedlichen Skriptsprachen (Vorzugsweise eine Windows- und eine Linuxorientierte Sprache) \'fcberpr\'fcfen (Element 1 und 2, schriftliche Pr\'fcfung). Im dritten Element wird die Pr\'e4sentation und Dokumentation einer praktische Projektarbeit (Entwicklung eigenes Skript) bewertet, dabei d\'fcrfen sie Sch\'fcler aus einer der zwei unterrichteten Skriptsprachen ihre bevorzugte Wahl treffen.\
|
||||
\
|
||||
Die Pr\'fcfung ist ein 2 Teile gegliedert: 1. Teil (ohne Hilfstmittel) Grunds\'e4tzliche Verst\'e4ndnisfragen (Freitextantworten und Multiplechoice), Beurteilung von Ablaufsgrafiken. 2.Teil: Gegebene Szenarios analysieren und einfache Skriptanwendungen selbst erarbeite (open book). Es werden die Grundlagen der Skriptsprache gepr\'fcft (erste Skriptsprache zB. Windows PowerShell). Der Sch\'fcler soll in der Lage sein, Grundbefehle, welche von der Shellumgebung zur Verf\'fcgung gestellt werden, zu kennen und diese sinnvoll anwenden zu k\'f6nnen. Des Weiteren werden die Grundlegenden Skriptstrukturen (Schleifen, Verzweigungen, Variablen, usw.) gepr\'fcft. Der Sch\'fcler soll in der Lage sein, Aufgaben zu gegebenen Skripts beantworten zu k\'f6nnen und selbst simple Befehlskonstrukte, welche eine bestimme Aufgabe l\'f6sen, erarbeiten zu k\'f6nnen. \
|
||||
\
|
||||
1. Teil (ohne Hilfsmittel)\
|
||||
2. Teil (open book, alle schriftl. Hilfsmittel erlaubt, auch Dokumente auf PC-Arbeitsstation, dazu muss aber Netzwerkkabel ausgesteckt werden, Skriptumgebung selbst darf verwendet werden (zum Entwickeln / Testen der Skriptaufgaben))\
|
||||
\
|
||||
Bei Multiplechoiceaufgaben gibt es pro korrekte Antwort Punkte. Falsche Antworten ergeben Abzug. Total f\'e4llt nicht unter 0. Max. Punkte werden bei jeder Aufgabe angegeben\
|
||||
Korrektheit Coding-Aufgaben (ist der Code korrekt geschrieben?), Punkteverteilung und max. Punkte werden bei jeder Aufgabe angegeben\
|
||||
Funktionalit\'e4t Coding-Aufgaben (macht der Code, was verlangt wird?), Punkteverteilung und max. Punkte werden bei jeder Aufgabe angegeben\
|
||||
\
|
||||
Ablaufstruktur einer gegebenen sinnvollen automat. Praxis-Funktion soll vom Pr\'fcfling analysiert werden\
|
||||
Befehlskonstrukte, welche einen sinnvolle praktische Funktion erf\'fcllen, sollen vom Pr\'fcfling analysiert, bewertet, angepasst werden\
|
||||
Praxisorientierte Aufgabenstellung(-en) sollen vom Pr\'fcfling eigenst\'e4ndig durch die Skriptumgebung umgesetzt werden.\
|
||||
\
|
||||
\
|
||||
In einer Partnerarbeit wird eine selbst\'e4ndige Projektarbeit realisiert. Es wird ein eigenes Skript, welches einen sinnvolle praktische Funktion f\'fcr das Zielsystem erf\'fcllt, geplant, umgesetzt, dokumentiert und pr\'e4sentiert. Die Idee wird vorab in Form einer Beschreibung der Projektidee ausformuliert, mit der Lehrperson besprochen und gutgeheissen oder zur Verbesserung zur\'fcckgewiesen. Das Team darf unter den in den Leistungsbeurteilungselementen 1 & 2 Skriptsprachen die bevorzugte Skriptsprache ausw\'e4hlen. Mit der Pr\'e4sentation der praktischen Skriptarbeiten wird das Modul abgeschlossen.\
|
||||
\
|
||||
Beschreibung Projektidee angenommen (Testatbedingung)\
|
||||
Umfang des Skripts (besitzt die Skriptarbeit den gew\'fcnschten Umfang?)\
|
||||
Inhaltliche Korrektheit des Skriptcodes (Wurde korrekter Code geschrieben? ist der Code elegant oder sehr umst\'e4ndlich geschrieben?)\
|
||||
Funktionale Korrektheit des Skriptcodes (Mach das Skript, was es sollte?)\
|
||||
Pr\'e4sentation (Wie wurde die Arbeit pr\'e4sentiert? Welche Mittel wurden verwendet? Ansprechend, umfangreich, korrekt, usw. ...)\
|
||||
Dokumentation (Wie wurde die Arbeit dokumentiert? Inhaltlich korrekt, sauber, verst\'e4ndlich, usw. ...)\
|
||||
\
|
||||
Von den Pr\'fcflingen wird eine eigens ausgearbeitete Idee mit praktischem Nutzen geplant. Der Umfang und Praxisbezug der Idee wird von der LP in einem Abnahme-Gespr\'e4ch gutgeheissen.\
|
||||
Die Skriptarbeit wird selbst\'e4ndig (Mit Unterst\'fctzung der LP bei fachlichen Fragen) umgesetzt, getestet, dokumentiert und pr\'e4sentiert.\
|
||||
Die Skriptarbeit erlaubt die praktische Verbindung zum Betriebssystem der Wahl (dasjenige, welches der Pr\'fcfling im Lehrbetrieb am h\'e4ufigsten nutzt oder das Gegenteilige, falls er sich weiterentwickeln m\'f6chte und die gr\'f6ssere Herausforderung sucht)}
|
BIN
m122/bashPruefung/Pruefung2a.pdf
Normal file
BIN
m122/bashPruefung/Pruefung2a.pdf
Normal file
Binary file not shown.
348
m122/bashPruefung/Pruefung2a.tex
Normal file
348
m122/bashPruefung/Pruefung2a.tex
Normal file
@ -0,0 +1,348 @@
|
||||
\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<EFBFBD>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 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}
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
m122/bashPruefung/Pruefung2b.pdf
Normal file
BIN
m122/bashPruefung/Pruefung2b.pdf
Normal file
Binary file not shown.
354
m122/bashPruefung/Pruefung2b.tex
Normal file
354
m122/bashPruefung/Pruefung2b.tex
Normal file
@ -0,0 +1,354 @@
|
||||
\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<EFBFBD>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 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}
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
m122/bashPruefung/Pruefung2c.pdf
Normal file
BIN
m122/bashPruefung/Pruefung2c.pdf
Normal file
Binary file not shown.
353
m122/bashPruefung/Pruefung2c.tex
Normal file
353
m122/bashPruefung/Pruefung2c.tex
Normal file
@ -0,0 +1,353 @@
|
||||
\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<EFBFBD>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}
|
||||
|
||||
|
||||
|
||||
|
||||
|
233
m122/bashPruefung/bash-pruefung-a.md
Normal file
233
m122/bashPruefung/bash-pruefung-a.md
Normal file
@ -0,0 +1,233 @@
|
||||
# M122 - Bash - Prüfung 2 Serie a
|
||||
|
||||
**PAPIER-PRUEFUNG**
|
||||
|
||||
**Generell nicht erlaubt ist:**
|
||||
|
||||
- Abschreiben von der Nachbarprüfung oder Weitergeben von
|
||||
Prüfungen/Prüfungsresultaten innerhalb der Klasse. Kommunikation
|
||||
über Handy oder Computernetzwerk.
|
||||
|
||||
Jeglicher Verstoss gegen diese Regeln führt umgehend zum
|
||||
<br/>Ausschluss aus der Prüfung und der Note 1.
|
||||
|
||||
|
||||
Name: `__________________________` Klasse: `_____________` Datum:`_____________`
|
||||
|
||||
|
||||
|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 |
|
||||
|3b | 4 |
|
||||
|---- |---- |----
|
||||
|Total | 21 |
|
||||
|
||||
|
||||
**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:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
0 4 * * 1
|
||||
```
|
||||
Wann wird das Skript jeweils ausgeführt?
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1b (1 Punkt)** - Wildcards
|
||||
|
||||
Sie führen folgendes Kommando aus:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
touch {a..c}file
|
||||
```
|
||||
|
||||
Erklären sie, was das Kommando genau macht:
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1c (1 Punkt)** - grep
|
||||
|
||||
Gegeben sei folgendes Kommando:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
cat /etc/passwd | grep -v root
|
||||
```
|
||||
|
||||
Erklären sie, was dieses Kommando genau macht (berücksichtigen sie auch
|
||||
die Option `-v`):
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1d (1 Punkt)** - Verzeichnisse wechseln
|
||||
|
||||
|
||||
Angenommen, sie befinden sich auf Ihre Linuxsystem unter `/root/`, geben
|
||||
sie die **realtive** und die **absolute** Pfadangabe an, um in das
|
||||
Verzeichnis `/tmp` zu wechseln:
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1e (+1 Punkt pro richtige, -1 Punkt pro fehlende/falsche Antwort)** - Dateirechte
|
||||
|
||||
Welches Dateirecht muss zusätzlich auf einer Skriptdatei gesetzt
|
||||
werden, damit diese *ausgeführt* werden kann? (einkreisen)
|
||||
|
||||
- `0`
|
||||
- `x`
|
||||
- `w`
|
||||
- `t`
|
||||
- `s`
|
||||
|
||||
|
||||
|
||||
## Teil 2 - Codestücke
|
||||
|
||||
**Aufgabe - 2a (2 Punkte)** - 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 `passw0rd` hat, den Text *Passwort korrekt, Zutritt erlaubt*
|
||||
ausgibt und falls nicht den Text *Zutritt verweigert!*.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
if [ $1 = "passw0rd" ]; then
|
||||
_____________________
|
||||
else
|
||||
_____________________
|
||||
fi
|
||||
```
|
||||
|
||||
|
||||
**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 `/etc/` ausgibt und
|
||||
zwar unter der Verwendung der abgebildeten `for in` Schleife.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
for i in ______________ ; do
|
||||
echo $i
|
||||
done
|
||||
```
|
||||
|
||||
|
||||
**Aufgabe - 2c (2 Punkte)** - while
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
|
||||
so ergänzen, dass die Schleife solange läuft, wie `zahler` grösser als
|
||||
10 ist (Zeile 3) und der `zaehler` zum Schluss jedes Schleifendurchlaufs
|
||||
um 1 reduziert wird (Zeile 5).
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
zaehler=20
|
||||
while [ $zaehler _________ ]; do
|
||||
echo der zaehler ist $zaehler
|
||||
____________
|
||||
done
|
||||
```
|
||||
|
||||
**Aufgabe - 2d (2 Punkte)** - Backup Skript
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten
|
||||
Informationen, um mit `tar` ein Backup durchzuführen, werden in den
|
||||
Variablen `source`, `target` und `outputFile` zwischengespeichert.
|
||||
Vervollständigen sie das Skript so, dass ein Backup vom Ordner `home`
|
||||
gemacht wird und zB. in der Datei `/var/backups/home-20151214.tgz`
|
||||
abgelegt wird. Benutzen sie dazu die bereits definierten Variablen.
|
||||
|
||||
``` {.powershell frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
source="/home/"
|
||||
target="/var/backups/"
|
||||
outputFile=home-$(date +%Y%m%d).tgz
|
||||
tar -cZf ________________ __________
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Teil 3 - Programmieraufgaben
|
||||
|
||||
**Aufgabe - 3a (4 Punkte)** - IP-Adressen von Nameservern\
|
||||
\
|
||||
In der Datei `/etc/resolv.conf` sind die IPs der von Ihrem Linuxsystem
|
||||
verwendeten Nameserver eingetragen. Der Inhalt dieser Datei kann zB. so
|
||||
aussehen:
|
||||
|
||||
```
|
||||
search example.com
|
||||
nameserver 10.0.3.4
|
||||
nameserver 10.0.3.5
|
||||
```
|
||||
|
||||
Schreiben sie ein kleines Skript, welches alle IP's der Nameserver
|
||||
ausgibt. Mit dem obigen Beispiel sollte Ihr Skript also folgende Ausgabe
|
||||
erzeugen:
|
||||
|
||||
```
|
||||
10.0.3.4
|
||||
10.0.3.5
|
||||
```
|
||||
Verwenden sie dazu `cat`, `grep` und `cut`.\
|
||||
|
||||
|
||||
**Aufgabe - 3b (4 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:
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
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
|
||||
```
|
||||
|
||||
Der Code einer Operation fehlt (Subtraktion). Ergänzen sie den Code an
|
||||
der hervorgehobenen Stelle so, dass auch die Subtraktion funktioniert.
|
224
m122/bashPruefung/bash-pruefung-b.md
Normal file
224
m122/bashPruefung/bash-pruefung-b.md
Normal file
@ -0,0 +1,224 @@
|
||||
# M122 - Bash - Prüfung 2 Serie b
|
||||
|
||||
|
||||
**PAPIER-PRUEFUNG**
|
||||
|
||||
**Generell nicht erlaubt ist:**
|
||||
|
||||
- Abschreiben von der Nachbarprüfung oder Weitergeben von<br/>
|
||||
Prüfungen/Prüfungsresultaten innerhalb der Klasse. Kommunikation<br/>
|
||||
über Handy oder Computernetzwerk.
|
||||
|
||||
Jeglicher Verstoss gegen diese Regeln führt umgehend zum Ausschluss aus<br/>
|
||||
der Prüfung und der Note 1.
|
||||
|
||||
|
||||
Name: `__________________________` Klasse: `_____________` Datum:`_____________`
|
||||
|
||||
|
||||
|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 |
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1a (1 Punkt)** - grep - Gegeben ist folgendes Kommando:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
cat /etc/passwd | grep -v ssh
|
||||
```
|
||||
|
||||
Erklären sie, was dieses Kommando genau macht (berücksichtigen sie auch
|
||||
die Option `-v`):
|
||||
|
||||
Antwort:
|
||||
`__________________________________________________________________________________ ___________________________________________________________________________________ ___________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1b (1 Punkt)** - Verzeichnisse wechseln
|
||||
Angenommen, sie befinden sich auf Ihre Linuxsystem unter `/home/user1/`,
|
||||
geben sie die **realtive** und die **absolute** Pfadangabe an, um in das
|
||||
Verzeichnis `/tmp` zu wechseln:
|
||||
|
||||
Antwort:
|
||||
`________________________________________________________________________________ _________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
|
||||
**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:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
0 2 * * 3
|
||||
```
|
||||
|
||||
Wann wird das Skript jeweils ausgeführt?
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1d (+1 Punkt pro richtige, -1 Punkt pro fehlende/falsche Antwort)** - Welches Dateirecht muss zusätzlich auf einer Skriptdatei gesetzt
|
||||
werden, damit diese ausgeführt werden kann? (einkreisen)
|
||||
|
||||
- `0`
|
||||
- `x`
|
||||
- `w`
|
||||
- `t`
|
||||
- `s`
|
||||
|
||||
**Aufgabe - 1e (1 Punkt)** - Wildcards - Sie führen folgendes Kommando
|
||||
aus:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
touch {d..f}file
|
||||
```
|
||||
|
||||
Erklären sie, was das Kommando genau macht:
|
||||
|
||||
Antwort:
|
||||
`___________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________`\
|
||||
|
||||
|
||||
## Teil 2 - Codestücke
|
||||
|
||||
**Aufgabe - 2a (2 Punkte)** - Backup Skript
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten
|
||||
Informationen, um mit `tar` ein Backup durchzuführen, werden in den
|
||||
Variablen `quelle`, `ziel` und `outputFile` zwischengespeichert.
|
||||
Vervollständigen sie das Skript so, dass ein Backup vom Ordner `home`
|
||||
gemacht wird und zB. in der Datei `/var/backups/home-20151214.tgz`
|
||||
abgelegt wird. Benutzen sie dazu die bereits definierten Variablen.
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
outputFile=home-$(date +%Y%m%d).tgz
|
||||
quelle="/home/"
|
||||
ziel="/var/backups/"
|
||||
tar -cZf ________________ __________
|
||||
```
|
||||
|
||||
- for in
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollten das Skript
|
||||
so ergänzen, dass es den Inhalt des Verzeichnisses `/home/` ausgibt und
|
||||
zwar unter der Verwendung der abgebildeten `for in` Schleife.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
for i in ______________ ; do
|
||||
echo $i
|
||||
done
|
||||
```
|
||||
|
||||
- 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 `keyw0rd` hat, den Text *sie dürfen passieren* ausgibt und falls
|
||||
nicht den Text *nicht erlaubt!*.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
if [ $1 = "keyw0rd" ]; then
|
||||
_____________________
|
||||
else
|
||||
_____________________
|
||||
fi
|
||||
```
|
||||
|
||||
- while
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
|
||||
so ergänzen, dass die Schleife solange läuft, wie `zahler` kleiner als
|
||||
10 ist (Zeile 3) und der `zaehler` zum Schluss jedes Schleifendurchlaufs
|
||||
um 1 erhöht wird (Zeile 5).
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
zaehler=0
|
||||
while [ $zaehler _________ ]; do
|
||||
echo der zaehler ist $zaehler
|
||||
____________
|
||||
done
|
||||
```
|
||||
|
||||
|
||||
- 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:
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
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
|
||||
```
|
||||
|
||||
Der Code einer Operation fehlt (Subtraktion). Ergänzen sie den Code an
|
||||
der hervorgehobenen Stelle so, dass auch die Subtraktion funktioniert.\
|
||||
|
||||
|
||||
- IP-Adressen von Nameservern
|
||||
|
||||
In der Datei `/etc/resolv.conf` sind die IPs der von Ihrem Linuxsystem
|
||||
verwendeten Nameserver eingetragen. Der Inhalt dieser Datei kann zB. so
|
||||
aussehen:
|
||||
|
||||
search example.com
|
||||
nameserver 10.0.1.6
|
||||
nameserver 10.0.1.7
|
||||
|
||||
-- Schreiben sie ein kleines Skript, welches alle IP's der Nameserver
|
||||
ausgibt. Mit dem obigen Beispiel sollte Ihr Skript also folgende Ausgabe
|
||||
erzeugen:
|
||||
|
||||
|
||||
10.0.1.6
|
||||
10.0.1.7
|
||||
|
||||
Verwenden sie dazu `cat`, `grep` und `cut`.
|
||||
|
220
m122/bashPruefung/bash-pruefung-c.md
Normal file
220
m122/bashPruefung/bash-pruefung-c.md
Normal file
@ -0,0 +1,220 @@
|
||||
# M122 - Bash - Prüfung 2 Serie c - Nachprüfung
|
||||
|
||||
**PAPIER-PRUEFUNG**
|
||||
|
||||
**Generell nicht erlaubt ist:**
|
||||
|
||||
- Abschreiben von der Nachbarprüfung oder Weitergeben von<br/>
|
||||
Prüfungen/Prüfungsresultaten innerhalb der Klasse. Kommunikation<br/>
|
||||
über Handy oder Computernetzwerk.
|
||||
|
||||
Jeglicher Verstoss gegen diese Regeln führt umgehend zum Ausschluss aus<br/>
|
||||
der Prüfung und der Note 1.
|
||||
|
||||
|
||||
Name: `___________________________` Klasse: `__________` Datum: `______________`
|
||||
|
||||
|
||||
|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 |
|
||||
|
||||
|
||||
## Teil 1 - Kurzaufgaben
|
||||
|
||||
|
||||
**Aufgabe - 1a (1 Punkt)** - grep - Gegeben ist folgendes Kommando:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
cat /etc/passwd | grep root | cut -d ':' -f 1
|
||||
```
|
||||
|
||||
Erklären sie, was dieses Kommando genau macht:
|
||||
|
||||
Antwort:
|
||||
`_________________________________________________________________________________ __________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1b (1 Punkt)** - Verzeichnisse wechseln
|
||||
Angenommen, sie befinden sich auf Ihre Linuxsystem unter `/usr/bin/`,
|
||||
geben sie die **relative** und die **absolute** Pfadangabe an, um in das
|
||||
Verzeichnis `/home/user1/` zu wechseln:
|
||||
|
||||
Antwort:
|
||||
`________________________________________________________________________________ _________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**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:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
30 4 * * 5
|
||||
```
|
||||
|
||||
Wann wird das Skript jeweils ausgeführt?\
|
||||
\
|
||||
Antwort:
|
||||
`________________________________________________________________________________ _________________________________________________________________________________ __________________________________________________________________________________`
|
||||
|
||||
|
||||
|
||||
**Aufgabe - 1d (+1 Punkt pro richtige, -1 Punkt pro fehlende/falsche Antwort)** - Welches Dateirecht muss auf einer Datei gesetzt werden, damit in diese
|
||||
geschrieben werden kann? (einkreisen)
|
||||
|
||||
- `0`
|
||||
- `x`
|
||||
- `w`
|
||||
- `t`
|
||||
- `s`
|
||||
|
||||
**Aufgabe - 1e (1 Punkt)** - Wildcards - Sie führen folgendes Kommando
|
||||
aus:
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
touch {backuped{1,2},restored{1,2}}.zip
|
||||
```
|
||||
|
||||
Erklären sie, was das Kommando genau macht:
|
||||
|
||||
Antwort:
|
||||
`___________________________________________________________________________________ ____________________________________________________________________________________ ____________________________________________________________________________________`\
|
||||
|
||||
|
||||
|
||||
## Teil 2 - Codestücke
|
||||
|
||||
**Aufgabe - 2a (2 Punkte)** - Backup Skript
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Backupskript. Die wichtigsten
|
||||
Informationen, um mit `tar` ein Backup durchzuführen, werden in den
|
||||
Variablen `quelle`, `ziel` und `outputFile` zwischengespeichert.
|
||||
Vervollständigen sie das Skript so, dass ein Backup vom Ordner `home`
|
||||
gemacht wird und zB. in der Datei `/var/backups/home-20151214.tgz`
|
||||
abgelegt wird. Benutzen sie dazu die bereits definierten Variablen.
|
||||
|
||||
``` {.bash frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
outputFile=home-$(date +%Y%m%d).tgz
|
||||
quelle="/home/"
|
||||
ziel="/var/backups/"
|
||||
tar -cZf ________________ __________
|
||||
```
|
||||
|
||||
**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 `/home/` ausgibt und
|
||||
zwar unter der Verwendung der abgebildeten `for in` Schleife.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
for i in ______________ ; do
|
||||
echo $i
|
||||
done
|
||||
```
|
||||
|
||||
**Aufgabe - 2c (2 Punkte)** - 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 `keyw0rd` hat, den Text *sie dürfen passieren* ausgibt und falls
|
||||
nicht den Text *nicht erlaubt!*.
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
if [ $1 = "keyw0rd" ]; then
|
||||
_____________________
|
||||
else
|
||||
_____________________
|
||||
fi
|
||||
```
|
||||
|
||||
**Aufgabe - 2d (2 Punkte)** - while
|
||||
|
||||
Nachfolgend sehen sie ein unvollständiges Skript. Sie sollen das Skript
|
||||
so ergänzen, dass die Schleife solange läuft, wie `zaehler` kleiner als
|
||||
8 ist (Zeile 3) und der `zaehler` zum Schluss jedes Schleifendurchlaufs
|
||||
um 2 erhöht wird (Zeile 5).
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
#!/bin/bash
|
||||
zaehler=2
|
||||
while [ $zaehler _________ ]; do
|
||||
echo der zaehler ist $zaehler
|
||||
____________
|
||||
done
|
||||
```
|
||||
|
||||
## Teil 3 - Programmieraufgaben
|
||||
|
||||
**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:
|
||||
|
||||
``` {.bash .numberLines linenos="true" frame="none" mathescape=""}
|
||||
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
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
|
||||
**Aufgabe - 3b (5 Punkte)** - resolv.conf
|
||||
|
||||
In einer Datei `/etc/resolv.conf` kommen Domänennamen der lokalen Domains
|
||||
vor, zB.:
|
||||
|
||||
```
|
||||
search example.com
|
||||
nameserver 10.0.1.6
|
||||
nameserver 10.0.1.7
|
||||
```
|
||||
|
||||
Schreiben sie ein kleines Skript, welches alle Domänennamen findet und
|
||||
ausgibt. Mit dem obigen Inhalt sollte Ihr Skript also folgende Ausgabe
|
||||
erzeugen:
|
||||
|
||||
``` example.com
|
||||
```
|
||||
Verwenden sie dazu `cat`, `grep` und `cut`.
|
Loading…
Reference in New Issue
Block a user