Druckbefehle

lpr, enscript

Suchen Sie sich ein sicheres Passwort aus, und ändern Sie dann Ihr Benutzerpasswort.


\begin{reponse}
\par
\end{reponse}

Ermitteln Sie die Länge der jüngsten Datei in /tmp (in einem Befehl).


\begin{reponse}
ls -ltr /tmp
\par
\end{reponse}

Erzeugen Sie mit einem Kommando die Verzeichnisstruktur tests/fasta.


\begin{reponse}
\par
mkdir -p tests/fasta
\par
\end{reponse}

Kopieren Sie test/fasta nach test2/fasta, vergleichen Sie mit ls -l den Unterschied, wenn beim Kopieren die -a Option mitgegeben wird.


\begin{reponse}
\par
mkdir test2
\par
cp -R test/fasta test2/fasta
\par
ls -l test/fasta test2/fasta
\par
\end{reponse}

Zerstören Sie die Verzeichnisstruktur test2.


\begin{reponse}
\par
rm -r test2
\par
\end{reponse}

Setzen Sie das aktuelle Verzeichnis auf die neu erzeugte Struktur test/fasta, erzeugen Sie dort eine leere Datei Test.fasta, springen sie nach /etc und finden Sie mindestens zwei Arten, um wieder an den vorherigen Punkt zu kommen


\begin{reponse}
cd test/fasta
\par
touch Test.fasta;
\par
cd /etc;
\par
cd \~{}/...
...rt cd /home/toto/test/fasta wobei toto Ihr Benutzername
ist.
\par
\end{reponse}

Geben Sie den Inhalt der Dateien /proc/interrupts und /etc/inittab auf dem Bildschirm aus.


\begin{reponse}
\par
cat /proc/interrupts
\par
cat /etc/inittab
\par
\end{reponse}

Rufen Sie in Ihrem Pager die Datei /etc/profile auf, und suchen Sie nach der Zeichenkette PATH. Markieren sie die Stelle, suchen Sie nach eventuell vorhandenen anderen Vorkommen dieser Zeichenkette. Springen sie zurück an die markierte Stelle. Geben sie als Lösung die Zeilennummern an, an denen die Zeichenkette vorkommt. Hinweis: less -N dateiname erzeugt eine Zeilennumerierung.


\begin{reponse}
\par
less -N /etc/profile
\par
/PATH
\par
ma
\par
n x-mal
\par
'a
\par
\end{reponse}

Erzeugen Sie mit touch eineDateiMiteinemSehrLangenNamen.txt.

tippen Sie anschließen less eine+TAB


\begin{reponse}
\par
\end{reponse}

Holen Sie das Kommando zurück, mit dem sie das test2 Verzeichnis erzeugt hatten.


\begin{reponse}
\par
\end{reponse}

Legen Sie sich ein eigenes .bashrc an, legen Sie ein Verzeichnis ˜/bin an, und modifizieren sie den Suchpfad, damit dieses Verzeichnis auch durchsucht wird. Modifizieren Sie Ihren Prompt, damit dieser die aktuelle Uhrzeit angibt.


\begin{reponse}
\par
\~{}/.bashrc:
export PATH=\$PATH:\~{}/bin
PS1='\(\backslash\)t:\(\backslash\)h:\(\backslash\)w\$ '
\par
\end{reponse}

Legen Sie in Ihr ˜/bin Verzeichnis eine Datei ab, die Sie ls nennen. Ändern sie dessen Rechte, indem sie mit chmod +x ls diese Datei ausführbar machen. Und tippen Sie ls, welche Version wird ausgeführt?

Was lernen wir daraus für die Systemsicherheit?

Abhängig von den Einstellungen in der PATH Variablen, wird die lokale Version genommen, falls der eigene Pfad (oder '.') vor den offiziellen Pfaden vorkommt, sonst die System-Version.

Pfade sollten nur insofern verändert werden, daß Systemprogramme immer vor eignenen ausgeführt werden.


\begin{reponse}
\par
\~{}/.bashrc:
export PATH=PATH=\$PATH:\~{}/bin
PS1='\(\backslash\)t:\(\backslash\)h:\(\backslash\)w\$ '
\par
\end{reponse}

Leiten sie die Auflistung des aktuellen Verzeichnisses in eine Datei um.


\begin{reponse}
\par
\(\backslash\)ls \textgreater{}ls-log
\par
\end{reponse}

Erklären Sie diese Sequenz: du | sort -rn


\begin{reponse}
\par
Disk usage gibt die Festplattenbelegung des aktuellen
Verz...
...ge sortiert, dabei wird die erste
Kolonne als Zahl gewertet.
\par
\end{reponse}

Mehrere Prozesse sollten entweder im Vordergrund gestartet und dann in den Hintergrund befördert werden, oder direkt im Hintergrund gestartet werden. Gut geeignete Beispiele wären z.B. Editoren wie nedit, Programme die nicht sofort zurückkommen.

Listen sie alle diese Prozesse auf und finden Sie 3 verschiedene Möglichkeiten, diese Prozesse von der Shell aus zu töten.


\begin{reponse}
\par
nedit \&
\par
nedit \&
\par
nedit \&
\par
jobs
\par
kill \%1
\par
kill \%ne
\par
kill 52242
\par
\end{reponse}

Erzeugen Sie ein Shell-Skript, welches das Vorhandensein und die Ausführbarkeit eines Skripts (˜/cron.d/daily) prüft und ausführt, bei Vorhandensein ohne Ausführbarkeit soll eine Fehlermeldung ausgegeben werden.
\begin{reponse}
\par
\begin{code}
\char93 !/bin/sh
if [ -f \~{}/cron.d/daily ]...
...}\~{}/cron.d/daily nicht ausführbar\dq{}
fi
fi
\end{code}\par
\end{reponse}

Erzeugen Sie ein Skript, welches /etc/passwd nimmt, die Accountnamen extrahiert, und lokal für diese Accounts ein Verzeichnis einrichtet, sofern nicht schon vorhanden.
\begin{reponse}
\par
\image{images/bash_for_exo.sh.1.eps}{0}{}
\par
\end{reponse}

Schreiben Sie ein Skript, welches nach einer Liste von Verzeichnis/Datei-Namen fragt, und ändern sie die Rechte auf diese Ziele auf 755.
\begin{reponse}
\par
\image{images/bash_for_exo.sh.1.eps}{0}{}
\par
\end{reponse}

Nun haben wir uns einen guten Überblick verschafft um die Fähigkeiten des Shell-Skripts zu erkennen. Die Aufgabe lautet jetzt:

es soll ein lokales Programmpaket lokal gespiegelt werden, und es steht nur http oder ftp als Verbindung zum Hauptserver zur Verfügung. Die Dateien sind auf dem Server als Programm_version.tgz abgelegt. Schreiben Sie ein Skript, das die letzte Version des Programms herunterlädt und dem Benutzer, bei Erfolg, eine Benachrichtigung schickt.
\begin{reponse}
\par
\begin{code}crontab -e
0 1 * * * \$\{HOME\}/bin/latest.jac...
...rb.sh.1.eps}{0}{}
\image{images/latest.jacorb.sh.2.eps}{0}{}
\par
\end{reponse}

Geben Sie an, ob ein bestimmter Benutzer gerade eingeloggt ist.
\begin{reponse}
\par
\begin{code}
\char93 !/bin/bash
\char93  Test ob ein Benutz...
...enutzer \$WER ist momentan nicht eingeloggt\dq{}
fi
\end{code}\par
\end{reponse}

Es soll einer Liste von Benutzern eine mail geschickt werden, mit einem statischen Text, danach mit einem Text aus einer Datei.
\begin{reponse}
\par
\begin{code}
\char93 !/bin/bash
[ \$\char93  = 0 ] \&\& (ec...
...q{} \textgreater{}\textgreater{} benutzer.send
done
\end{code}\par
\end{reponse}

Alle Dateien in einem Verzeichnis imgsrc sollen mit Hilfe des Programms convert in ein anderes Format gewandelt werden.


\begin{reponse}
\par
\begin{code}
\par
for i in imgsrc/* ;do ./convert \$i sh; done
\end{code}\par
\end{reponse}

Eine Text-Datei soll in eine Serie von A5 Seiten in getrennten Datein erzeugt werden, im Postscript Format, der Typ der Syntaxhervorhebung soll als Argument mitgegeben werden.
\begin{reponse}
\par
\image{images/exo-convert.sh.1.eps}{0}{}
\par
\end{reponse}

Ein Benachrichtigungssystem soll aufgesetzt werden, neue Meldungen sollen in ein Verzeuchnis gelegt werden, beim nächsten Einloggen sollen die Benutzer die bisher nicht gelesenen Meldungen lesen.
\begin{reponse}
\par
\image{images/exo-msg.sh.1.eps}{0}{}
\image{images/exo-msg.sh.2.eps}{0}{}
\image{images/exo-msg.sh.3.eps}{0}{}
\par
\end{reponse}