Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 2023ws
  • 2024ws
2 results

Target

Select target project
  • pgerwinski/dbs
  • Rafiou/dbs
2 results
Select Git revision
  • 2023ws
  • 2024ws
2 results
Show changes
Showing
with 903 additions and 0 deletions
../common/Zeichen_123.pdf
\ No newline at end of file
File added
File added
Hallo, Welt!
#!/usr/bin/bc
2 + 2
#!/usr/bin/bc
2 + 2
quit
#!/usr/bin/python3
print (3.14 * 2)
File added
% dbs-20241016.pdf - Lecture Slides on Databases and Information Security
% Copyright (C) 2023, 2024 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: Unix-Kommandozeile: Dateisysteme, Ein- und Ausgabeströme, Pipes, Verzweigungen und Schleifen
\documentclass[10pt,t]{beamer}
\usepackage{pgslides}
\usepackage{tikz}
\newcommand{\vfilll}{\vspace{0pt plus 1filll}}
\newcommand{\underconstruction}{%
\begin{picture}(0,0)
\put(11,1.2){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
\put(11,0.9){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
\end{picture}}
\title{Datenbanken und Datensicherheit}
\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
\date{16.\ Oktober 2024}
\begin{document}
\maketitleframe
\nosectionnonumber{\inserttitle}
\begin{frame}
\shownosectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/dbs}}}%
\begin{itemize}
\item[1.1] Was sind Datenbanken?
\item[1.2] Was ist Datensicherheit?
\item[1.3] In dieser Lehrveranstaltung
\end{itemize}
\item[\textbf{2}] \textbf{Kurzeinführung Unix}
\begin{itemize}
\item[2.1] Grundkonzepte
\color{medgreen}
\item[2.2] Die Kommandozeile: Grundlagen
\color{orange}
\item[2.3] Dateisysteme
\color{red}
\item[2.4] Ein- und Ausgabeströme
\item[2.5] Pipes
\item[2.6] Verzweigungen und Schleifen
% \item[\dots]
\end{itemize}
\color{gray}
\item[\textbf{3}] \textbf{Kurzeinführung TCP/IP}
\vspace*{-\smallskipamount}
\item[\textbf{\dots}]
\end{itemize}
\vfilll
\underconstruction
\end{frame}
\section{Einführung}
\setcounter{subsection}{2}
\subsection{In dieser Lehrveranstaltung}
\begin{frame}
\showsection
\showsubsection
\textbf{3 Praktikumsversuche}
\begin{enumerate}\addtocounter{enumi}{-1}
\visible<1->{\item
Praxiserfahrung mit Unix und TCP/IP}
\item
Selbstbau eines einfachen DBMS
% \item
% Sicherheitsprüfung ("`Hacking"') eines Online-Shops
\item
Selbstbau einer prototypischen, sicheren Datenbankanwendung
\item
E-Mail-Verschlüsselung
% \visible<1->{\item[\boldmath$\infty\kern-1.18em\infty\kern-1.18em\infty$.]
% Selbstbau einer praxistauglichen, sicheren Datenbankanwendung}
\end{enumerate}
\visible<1->{Keine festen Abgabetermine, sondern:\\
Angebot zum betreuten Arbeiten im DV-Pool,\\
Vorzeigen (Testieren) der Ergebnisse}
\bigskip
\textbf{Prüfungsleistung:} Klausur
\vfilll
\underconstruction
\end{frame}
\section{Kurzeinführung Unix}
\setcounter{subsection}{1}
\subsection{Die Kommandozeile: Grundlagen}
\begin{frame}
\showsubsection
\begin{itemize}
\item
Verzeichnisse für Programme: \lstinline[style=cmd]{echo $PATH}
\item
Programm in explizitem Verzeichnis aufrufen: \lstinline[style=cmd]{/bin/ls -l}
\item
Programm im aktuellen Verzeichnis aufrufen: \lstinline[style=cmd]{./hello}
\bigskip
\addtolength{\leftskip}{1cm}
\item[MS-DOS:]
Ausführbare Programme werden gefunden,\\
wenn sie im \lstinline[style=terminal]{PATH} stehen\\
\emph{oder\/} sich im aktuellen Verzeichnis befinden.
\smallskip
\item[Unix:]
Ausführbare Programme werden gefunden,\\
wenn sie im \lstinline[style=terminal]{PATH} stehen.
\smallskip
\textarrow\ Vermeiden von Ausnahmen
% \pause
\smallskip
Das aktuelle Verzeichnis (\lstinline[style=terminal]{.})
\emph{kann\/} im \lstinline[style=terminal]{PATH} stehen,\\
muß dies aber nicht\only<1->{ --\\
und sollte es aus Sicherheitsgründen auch nicht}.
\end{itemize}
\end{frame}
\subsection{Dateisysteme}
\begin{frame}
\showsubsection
\begin{itemize}
\item
Dateien listen: \lstinline[style=cmd]{ls}\\
langes Listenformat: \lstinline[style=cmd]{ls -l}\\
rückwärts nach Zeit sortiert: \lstinline[style=cmd]{ls -lrt}
\item
Datei ausgeben: \lstinline[style=cmd]{cat hello.c}
\item
Datei anzeigen: \lstinline[style=cmd]{less hello.c}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Arbeitsverzeichnis anzeigen: \lstinline[style=cmd]{pwd}\\
\item
Arbeitsverzeichnis wechseln: \lstinline[style=cmd]{cd script}\\
(\emph{kein\/} Programm, sondern Shell-Befehl)
\item
übergeordnetes Verzeichnis: \lstinline[style=cmd]{cd ..}
\item
eigenes \newterm{Home-\/}Verzeichnis: \lstinline[style=cmd]{cd}
\item
Wurzelverzeichnis: \lstinline[style=cmd]{cd /}
\item
wieder zurück: \lstinline[style=cmd]{cd -}
\end{itemize}
% \pause
\begin{lstlisting}[style=terminal]
cassini/home/peter/bo/2013ss/net/script> ¡cd /usr/bin¿
cassini/usr/bin> ¡cd ../lib¿
cassini/usr/lib> ¡cd¿
cassini/home/peter>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Dateien kopieren (\emph{copy\/}): \lstinline[style=cmd]{cp}
\item
Dateien verschieben/umbenennen (\emph{move\/}): \lstinline[style=cmd]{mv}
\item
Dateien löschen (\emph{remove\/}): \lstinline[style=cmd]{rm}
\end{itemize}
\begin{lstlisting}[style=terminal,xleftmargin=-3pt]
cassini/home/peter> ¡cp -p foo/test.txt¿
cp: missing destination file operand after `foo/test.txt'
Try `cp --help' for more information.
cassini/home/peter> ¡cp -p foo/test.txt .¿
cassini/home/peter> ¡mv test.txt bla.txt¿
cassini/home/peter> ¡cat bla.txt¿
Dies ist ein Test.
cassini/home/peter> ¡rm bla.txt¿
cassini/home/peter>
\end{lstlisting}
\medskip
Aktuelles Verzeichnis: \lstinline[style=cmd]{.}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\newterm{Zugriffsrechte}
\end{itemize}
\begingroup
% \small
\begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
cassini/home/peter/bo/2019ws/es/20191009> ¡ls -l¿
...
-rw-r--r-- 1 peter peter 24523 Okt 8 21:47 es-20191009.tex
\end{lstlisting}
\endgroup
\begin{onlyenv}<2>
\begin{picture}(0,1)
\color{red}
\put(0.3,0){\tikz{\draw[-latex,red](0,0)--(0,1);
\draw[-latex,red](0,0)--(2.5,1);}}
\put(0,-0.1){\makebox(0,0)[tl]{Benutzer (u -- \emph{user\/}) darf lesen und schreiben}}
\end{picture}
\end{onlyenv}
\begin{onlyenv}<3>
\begin{picture}(0,1)
\color{red}
\put(0.84,0){\tikz{\draw[-latex,red](0,0)--(0,1);
\draw[-latex,red](0,0)--(3.2,1);}}
\put(0,-0.1){\makebox(0,0)[tl]{Gruppe (g -- \emph{group\/}) darf lesen}}
\end{picture}
\end{onlyenv}
\begin{onlyenv}<4>
\begin{picture}(0,1)
\color{red}
\put(1.47,0){\tikz{\draw[-latex,red](0,0)--(0,1);}}
\put(0,-0.1){\makebox(0,0)[tl]{alle anderen (o -- \emph{other\/}) dürfen lesen}}
\end{picture}
\end{onlyenv}
\medskip
\pause[5]
\begin{itemize}
\item
Zugriffsrechte ändern:\\
\lstinline[style=cmd]{chmod o-r es-20191009.tex} -- Lesezugriff entziehen\\
\lstinline[style=cmd]{chmod g+w es-20191009.tex} -- Schreibzugriff gewähren\\
\lstinline[style=cmd]{chmod 640 es-20191009.tex} --
auf \lstinline[style=terminal]{-}%
\lstinline[style=terminal]{rw-}%
\lstinline[style=terminal]{r--}%
\lstinline[style=terminal]{---} setzen
\end{itemize}
\pause
\begin{picture}(0,0)
\color{red}
\put(7.22,0.55){\makebox(0,0)[tl]{%
\small
\begin{math}%
\underbrace{\rule{0.7em}{0pt}}_{\textstyle 6}%
\underbrace{\rule{0.7em}{0pt}}_{\textstyle 4}%
\underbrace{\rule{0.7em}{0pt}}_{\textstyle 0}
\end{math}}}
\end{picture}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\newterm{ausführbare\/} Dateien
\end{itemize}
\begingroup
% \small
\begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
cassini/home/peter/bo/2019ws/es/20191002> ¡cat test2.txt¿
ls -l
cassini/home/peter/bo/2019ws/es/20191002> ¡chmod +x test2.txt¿
cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l test2.txt¿
-rwxr-xr-x 1 peter peter 6 Okt 2 13:43 test2.txt
cassini/home/peter/bo/2019ws/es/20191002> ¡./test2.txt¿
insgesamt 4828
lrwxrwxrwx 1 peter peter 18 Apr 13 2016 csa2.jpg -> ../common/csa2.jpg
-rw-r--r-- 1 peter peter 4619138 Okt 8 21:28 es-20191002.pdf
...
\end{lstlisting}
\endgroup
% \pause
\begin{itemize}
\item
ausführbare Textdateien: \newterm{Skripte}
% \pause
\smallskip
hier: ausführbare Textdatei mit Shell-Befehlen\\
(ohne spezielle Kennung): Shell-Skript
\pause
\smallskip
Kennung: 1.\ Zeile enthält \lstinline[style=terminal]{#!} und den Interpreter,\\
z.\,B.\ \lstinline[style=terminal]{#!/bin/bash}\\
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Datenträger in Verzeichnis \newterm{einhängen\/}: \lstinline[style=cmd]{mount}
\end{itemize}
\begin{lstlisting}[style=terminal]
cassini/home/peter> ¡ls /media/usb1/¿
cassini/home/peter> ¡mount /media/usb1¿
cassini/home/peter> ¡ls /media/usb1/¿
es-20191002.pdf hello.c hexapode KIS-Bericht.pdf
cassini/home/peter> ¡umount /media/usb1¿
cassini/home/peter> ¡ls /media/usb1/¿
cassini/home/peter>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\newterm{Symbolische Verknüpfungen -- symbolic links}
\smallskip
Verweis auf die eigentliche Datei\\
\textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere.
\smallskip
Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\
(Richtung: wie bei \lstinline[style=cmd]{cp})
\smallskip
Beispiel: \lstinline[style=cmd]{ln -s ../common/GNU-GPL-3 gpl.txt}
\pause
\medskip
\item
\newterm{Harte Verknüpfungen -- hard links}
\smallskip
Dieselben Daten auf dem Datenträger\\
sind unter mehreren Namen verfügbar.\\
\textarrow\ Wenn man einen löscht, sind die Daten noch da.
\smallskip
\begingroup
\begin{lstlisting}[style=terminal,gobble=10,xleftmargin=-3pt]
cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l¿
...
-rw-r--r-- 1 peter peter 1202 Okt 2 13:35 shell-06.txt
drwxr-xr-x 2 peter peter 4096 Okt 2 13:16 test
\end{lstlisting}
\endgroup
\begin{picture}(0,0.5)
\color{red}
\put(2.31,0){\tikz{\draw[-latex,red](0,0)--(0,0.5);}}
\put(0,-0.1){\makebox(0,0)[tl]{Anzahl der ("`harten"') Links
auf diese Datei / dieses Verzeichnis}}
\end{picture}
\end{itemize}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\lstinline[style=cmd]{grep}: Dateien durchsuchen
\end{itemize}
\begin{lstlisting}[style=terminal,xleftmargin=-3pt]
cassini/home/peter/bo/2019ws/es/20191002> ¡grep gcc *.txt¿
shell-03.txt: cassini/...> gcc -Wall -O hello.c -o hello
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen
\end{itemize}
% \small
\begin{lstlisting}[style=terminal]
$ ¡find . -name "*.txt"¿
./shell-06.txt
./shell-03.txt
./shell-05.txt
./test.txt
./test/test.txt
...
$ ¡find . -name "*.txt" -perm /u+x¿
./test2.txt
$ ¡find . -name "*.txt" -perm /u+x -exec ls -l {} \;¿
-rwxr-xr-x 1 peter peter 6 Okt 2 13:43 ./test2.txt
\end{lstlisting}
\end{frame}
\subsection{Ein- und Ausgabeströme}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Standard-Ausgabe in Datei umleiten
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡echo "Dies ist ein Test." > test.txt¿
$ ¡cat test.txt¿
Dies ist ein Test.
\end{lstlisting}
\pause
\smallskip
\begin{itemize}
\item
Standard-Ausgabe an Datei anhängen
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡echo "Dies ist noch ein Test." >> test.txt¿
$ ¡cat test.txt¿
Dies ist ein Test.
Dies ist noch ein Test.
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Fehler-Ausgabe in Datei umleiten
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡cat gibtsnicht.txt > fehler.txt¿
cat: gibtsnicht.txt: No such file or directory
$ ¡cat fehler.txt¿
$ ¡cat gibtsnicht.txt 2> fehler.txt¿
$ ¡cat fehler.txt¿
cat: gibtsnicht.txt: No such file or directory
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
Standard-Eingabe aus Datei lesen
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡bc¿
bc 1.06.95
Copyright [...] 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
¡2 + 2¿
4
$ ¡echo "2 + 2" > test.bc¿
$ ¡bc < test.bc¿
4
\end{lstlisting}
\end{frame}
\subsection{Pipes}
\begin{frame}[fragile]
\showsubsection
Standard-Ausgabe von Programm A\\
wird zu Standard-Eingabe von Programm B
\smallskip
\begin{lstlisting}[style=terminal]
$ ¡echo "2 + 2" | bc¿
4
\end{lstlisting}
\smallskip
\textarrow\ sehr mächtiger "`Baukasten"'
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\lstinline[style=cmd]{sed}: \emph{stream editor}\\
Suchen und Ersetzen (und noch viel mehr)
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿
Schlimmer geht immer.
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\showsubsection
\begin{itemize}
\item
\lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen
\end{itemize}
\begin{lstlisting}[style=terminal]
$ ¡ls | grep slides¿
pgslides.sty
$ ¡ls *.pdf | grep -v logo¿
es-20191002.pdf
Zeichen_123.pdf
$ ¡ls -l $(ls *.pdf | grep -v logo)¿
-rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf
lrwxrwxrwx 1 ... 25 Okt 3 2016 Zeichen_123.pdf -> ...
\end{lstlisting}
\end{frame}
\subsection{Verzweigungen und Schleifen}
\begin{frame}[fragile]
\showsubsection
\begin{lstlisting}[style=terminal]
$ ¡if grep Blubb test.txt; then echo "gefunden"; \
else echo "nicht gefunden"; fi¿
nicht gefunden
$ ¡for x in foo bar baz; do echo $x; done¿
foo
bar
baz
\end{lstlisting}
\end{frame}
\nosectionnonumber{\inserttitle}
\begin{frame}
\shownosectionnonumber
\begin{itemize}
\item[\textbf{1}] \textbf{Einführung}
\hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/dbs}}}%
\begin{itemize}
\item[1.1] Was sind Datenbanken?
\item[1.2] Was ist Datensicherheit?
\item[1.3] In dieser Lehrveranstaltung
\end{itemize}
\item[\textbf{2}] \textbf{Kurzeinführung Unix}
\begin{itemize}
\item[2.1] Grundkonzepte
\item[2.2] Die Kommandozeile: Grundlagen
\color{medgreen}
\item[2.3] Dateisysteme
\item[2.4] Ein- und Ausgabeströme
\item[2.5] Pipes
\item[2.6] Verzweigungen und Schleifen
% \item[\dots]
\end{itemize}
\color{gray}
\item[\textbf{3}] \textbf{Kurzeinführung TCP/IP}
\vspace*{-\smallskipamount}
\item[\textbf{\dots}]
\end{itemize}
\vfilll
\underconstruction
\end{frame}
\iffalse
\fi
\end{document}
File added
% dbs-uebung-20241016.pdf - Exercises on Databases and Information Security
% Copyright (C) 2024 Peter Gerwinski
%
% This document is free software: you can redistribute it and/or
% modify it either under the terms of the Creative Commons
% Attribution-ShareAlike 3.0 License, or under the terms of the
% GNU General Public License as published by the Free Software
% Foundation, either version 3 of the License, or (at your option)
% any later version.
%
% This document is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this document. If not, see <http://www.gnu.org/licenses/>.
%
% You should have received a copy of the Creative Commons
% Attribution-ShareAlike 3.0 Unported License along with this
% document. If not, see <http://creativecommons.org/licenses/>.
% README: 2: Datei löschen, CSV-Datei ausgeben
\documentclass[a4paper]{article}
\usepackage{pgscript}
\thispagestyle{empty}
\begin{document}
\thispagestyle{empty}
\section*{Datenbanken und Datensicherheit\\
Übungsaufgaben 2 -- 16.\ Oktober 2024}
\exercise{Datei löschen}
In einem Verzeichnis befindet sich u.\,a.\ eine Datei mit dem Namen \file{-r $*$}.
\begin{lstlisting}[style=terminal]
$ ¡ls -l¿
insgesamt 4
-rw-r--r-- 1 peter peter 0 15. Okt 11:07 '-r *'
-rw-r--r-- 1 peter peter 0 15. Okt 11:08 wichtig.pdf
-rw-r--r-- 1 peter peter 0 15. Okt 11:08 wertvoll.txt
drwxr-xr-x 2 peter peter 4096 15. Okt 11:12 essentiell
\end{lstlisting}
Wie kann man die Datei löschen, ohne dabei auch die anderen Dateien zu löschen?
\begin{picture}(0,0)
\put(-1,1.2){\makebox(0,0)[tl]{\includegraphics[width=5cm]{Zeichen_101.pdf}}}
\end{picture}
\strong{Hinweis:} Der Befehl \lstinline[style=cmd]{rm -r *} bewirkt ein rekursives
Löschen aller Dateien.\\
\strong{Es besteht die Gefahr von Datenverlust!}
\hangindent-5.2cm
\hangafter 0
Zum Ausprobieren: In den Dateien \gitfile{dbs}{2024ws/20241016}{aufgabe-1.zip}
und \gitfile{dbs}{2024ws/20241016}{aufgabe-1.tar.gz}
finden Sie ein Verzeichnis \file{tmp} mit dem o.\,a.\ Inhalt.
(Je nachdem, wie Sie die Archiv-Dateien entpacken,
wird die Datei \file{-r $*$} evtl.\ gar nicht erst angelegt.)
\exercise{CSV-Datei ausgeben}
Wir betrachten nochmals die Datei \gitfile{dbs}{2024ws/20241009}{cd-sammlung.csv}:
\begin{lstlisting}[style=terminal,basicstyle=\footnotesize\ttfamily\color{darkgreen}]
"CD_ID";"Albumtitel";"Interpret";"Gründungsjahr";"Erscheinungsjahr";"Track";"Titel"
4711;"Not That Kind";"Anastacia";1999;2000;1;"Not That Kind"
4711;"Not That Kind";"Anastacia";1999;2000;2;"I'm Outta Love"
4711;"Not That Kind";"Anastacia";1999;2000;3;"Cowboys & Kisses"
4712;"Wish You Were Here";"Pink Floyd";1965;1975;1;"Shine On You Crazy Diamond"
4713;"Freak of Nature";"Anastacia";1999;2001;1;"Paid my Dues"
\end{lstlisting}
Schreiben Sie ein Shell-Skript, das die Nummern einer Zeile und einer Spalte abfragt
und dann das entsprechende Feld ausgibt, wobei die Titelzeile nicht mitzählt.
Beispiel:
\begin{lstlisting}[style=terminal]
$ ¡./mein_skript.sh¿
Zeile: ¡4¿
Spalte: ¡2¿
Inhalt von Zeile 4, Spalte 2: Freak of Nature
\end{lstlisting}
\strong{Hinweise:}\vspace{-1.5\medskipamount}
\begin{itemize}
\item
\lstinline[style=cmd]{sed -n "35,36p" dbs-uebung-20241016.tex}
\item
Alternativ:\quad\lstinline[style=cmd]{man head},\quad\lstinline[style=cmd]{man tail}
\item
\lstinline[style=cmd]{echo $((6 * 7))}
\item
\dots\ und weiterhin:\quad\lstinline[style=cmd]{man cut}
\end{itemize}
\begin{flushright}
\textit{Viel Erfolg!}
\end{flushright}
\end{document}
File added
cassini/home/peter/bo/2024ws/dbs> find . -name "*.sh"
./20241002/test-01.sh
./gen-prakt.sh
./20241016/ls-root2.sh
./20241016/scripts-13.sh
./20241016/greeting2.sh
./20241016/ls-root.sh
./20241016/greeting.sh
./20241016/hallo3.sh
./20241016/hallo.sh
cassini/home/peter/bo/2024ws/dbs> find . -name "*.pdf"
./20241002/Zeichen_123.pdf
./20241002/dbs-2024ws-p0.pdf
./20241002/dbs-20241002.pdf
./20241002/logo-hochschule-bochum.pdf
./20241002/logo-hochschule-bochum-cvh-text-v2.pdf
./common/dbs-slides-title-2024ws.pdf
./common/Zeichen_123.pdf
./common/Ethernetpaket.pdf
./common/Zeichen_101.pdf
./common/logo-hochschule-bochum.pdf
./common/logo-hochschule-bochum-cvh-text-v2.pdf
./dbs-slides-2024ws.pdf
./20241016/dbs-20241016.pdf
./20241016/Zeichen_123.pdf
./20241016/dbs-uebung-20241016.pdf
./20241016/Zeichen_101.pdf
./20241016/logo-hochschule-bochum.pdf
./20241016/logo-hochschule-bochum-cvh-text-v2.pdf
./20241009/dbs-uebung-20241009.pdf
./20241009/dbs-20241009.pdf
./20241009/Zeichen_123.pdf
./20241009/logo-hochschule-bochum.pdf
./20241009/logo-hochschule-bochum-cvh-text-v2.pdf
cassini/home/peter/bo/2024ws/dbs>
cassini/home/peter/bo/2024ws/dbs> find . -type l
./20241002/zentraler-computer.jpg
./20241002/computer-arbeitsplaetze.jpg
./20241002/pgslides.sty
./20241002/dbms-ohne-computer.jpg
./20241002/Zeichen_123.pdf
./20241002/pgscript.sty
./20241002/online-shop.jpg
./20241002/logo-hochschule-bochum.pdf
./20241002/logo-hochschule-bochum-cvh-text-v2.pdf
./.git
./20241016/test/test-02.txt
./20241016/test/test-03.txt
./20241016/pgslides.sty
./20241016/test2
./20241016/Zeichen_123.pdf
./20241016/pgscript.sty
./20241016/Zeichen_101.pdf
./20241016/logo-hochschule-bochum.pdf
./20241016/logo-hochschule-bochum-cvh-text-v2.pdf
./20241009/zentraler-computer.jpg
./20241009/computer-arbeitsplaetze.jpg
./20241009/pgslides.sty
./20241009/dbms-ohne-computer.jpg
./20241009/Zeichen_123.pdf
./20241009/pgscript.sty
./20241009/online-shop.jpg
./20241009/logo-hochschule-bochum.pdf
./20241009/logo-hochschule-bochum-cvh-text-v2.pdf
cassini/home/peter/bo/2024ws/dbs>
#!/bin/bash
read name
echo Hallo $name
#!/bin/bash
echo Hallo $1
cassini/home/peter/bo/2024ws/dbs/20241016/test3> cat test[123].txt
Hello, world!
Hallo, Welt!
Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> cat test1.txt
Hello, world!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> cat test2.txt
Hallo, Welt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> cat test3.txt
Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep Hallo *.txt
test2.txt:Hallo, Welt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep Hello *.txt
test1.txt:Hello, world!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep H[ae]llo *.txt
test1.txt:Hello, world!
test2.txt:Hallo, Welt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3>
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "H.*o" *.txt
test1.txt:Hello, world!
test2.txt:Hallo, Welt!
test3.txt:Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "H.llo" *.txt
test1.txt:Hello, world!
test2.txt:Hallo, Welt!
test3.txt:Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "Hel*o" *.txt
test1.txt:Hello, world!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "Welt" *.txt
test2.txt:Hallo, Welt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "^Welt" *.txt
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "^H" *.txt
test1.txt:Hello, world!
test2.txt:Hallo, Welt!
test3.txt:Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3>
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep "H.*o" *.txt
test1.txt:Hello, world!
test2.txt:Hallo, Welt!
test3.txt:Hällo, wörlt!
cassini/home/peter/bo/2024ws/dbs/20241016/test3> grep -o "H.*o" *.txt
test1.txt:Hello, wo
test2.txt:Hallo
test3.txt:Hällo
cassini/home/peter/bo/2024ws/dbs/20241016/test3>
cassini/home/peter/bo/2024ws/dbs/20241016> grep -o "https\?://[-0-9a-z./]*" ../common/GNU-GPL-3
http://fsf.org/
http://www.gnu.org/licenses/
http://www.gnu.org/licenses/
http://www.gnu.org/philosophy/why-not-lgpl.html
cassini/home/peter/bo/2024ws/dbs/20241016> egrep -o "https?://[-0-9a-z./]*" ../common/GNU-GPL-3
http://fsf.org/
http://www.gnu.org/licenses/
http://www.gnu.org/licenses/
http://www.gnu.org/philosophy/why-not-lgpl.html
cassini/home/peter/bo/2024ws/dbs/20241016>