• Keine Ergebnisse gefunden

– L¨osung zur Praktikumsaufgabe 7 –

N/A
N/A
Protected

Academic year: 2021

Aktie "– L¨osung zur Praktikumsaufgabe 7 –"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Betriebssysteme I

– L¨osung zur Praktikumsaufgabe 7 –

Thema: Netzoperationen, fork()

5.

Listing 1: Beispiell¨osung der Aufgabe 5.

#!/bin/bash

#

# copy all tutorial files via wget into path $1

# demonstrates usage of wget

HOST="http://www.informatik.htw-dresden.de"

PRAKPATH="˜robge/bs1/prak/"

if [ $# -ne 1 ]; then

echo "Usage: $0 <path>"

exit 1 fi

if [ ! -w $1 ]; then

echo "Pfad $1 existiert nicht (oder ist nicht schreibbar)."

exit 2 fi

if [ ! `which wget` ]; then

echo "Bitte installieren Sie zunaechst wget."

exit 3 fi

cd $1

# wget options

# -nd : do not create a hierarchy of directories

# -r : get all files recursively ...

# -l1 : ... but only one level deep

# -A : list of file name suffixes (patterns) to be accepted wget -nd -r -l1 -A bs1-prak??.pdf $HOST/$PRAKPATH

exit 0

Anmerkungen:

ˆ dawgetnicht unbedingt standardm¨aßig installiert sein muss, sollte man auf seine Existenz zun¨achst pr¨ufen.

ˆ Es werden zun¨achst mehr Dateien ¨ubertragen, die jedoch danach wieder transpa- rent gel¨oscht werden.

ˆ Die Datei robots.txt, die Suchhinweise f¨ur Webcrawler enth¨alt, l¨asst sich of- fenbar nicht vermeiden.

ˆ Die Pfadangabe im URL muss in Anf¨uhrungszeichen gesetzt werden, ansonsten wird die Tilde lokal durch die Shell expandiert.

ˆ Man kann entweder mit dem Switch -Ralle diejenigen Dateien (als Suchmuster) angeben, die nicht mit geladen werden sollen, oder mit dem Switch -A explizit alle angeben, die geladen werden sollen (ebenfalls als Suchmuster).

©Robert Baumgartl, 2008-20 – 1 – 16. Dezember 2020

(2)

Betriebssysteme I

ˆ Mit dem Webserver des Rechenzentrums (www2.htw-dresden.de) funktio- niert es leider nicht.

6.

Listing 2: Ein Shellskript zur Pr¨ufung aller Rechner in Z146a

#!/bin/bash allup=1

for host in isys{1..22}

do

ping -c1 -W1 $host >/dev/null 2>1 if [ $? -ne 0 ]; then

echo "Host $host does not respond."

allup=0 fi

done

if [ $allup -eq 1 ]; then

echo "All hosts in Z146a are up and running."

fi exit 0

7. Es sind einige Fehlerzust¨ande denkbar, die man geeignet abfangen sollte:

ˆ Rechner ist ausgeschaltet, nicht erreichbar, hat keine Netzverbindung.

ˆ Rechner l¨auft unter Windows (→ stellt keinenssh-Dienst zur Verf¨ugung).

Listing 3: Abfrage eingeloggter Nutzer auf einem entfernten Rechner

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage: $0 <host>"

exit 3 fi

host=$1

ping -c1 -W1 $host &>/dev/null if [ $? -ne 0 ]; then

echo "$1 does not answer ping."

exit 1 fi

users=$(ssh $host who | cut -f 1 -d ’ | sort | uniq) if [ $? -ne 0 ]; then

echo "ssh not possible with $1. Windows host?"

exit 2 fi

for user in $users do

name=$(ssh $host "finger $user | grep -o "Name:.*$" | cut -f2- - -d ’")

©Robert Baumgartl, 2008-20 – 2 – 16. Dezember 2020

(3)

Betriebssysteme I

echo "$user ($name)"

done exit 0

Die L¨osung ist einigermaßen ineffizient, da wir f¨ur n eingeloggte Nutzer insgesamt n + 1 entfernte ssh-Aufrufe ausf¨uhren. Es ist auch m¨oglich, die gesamte Folge der Kommandos auf einen Rutsch auf dem entfernten Host auszuf¨uhren, aber das liegt außerhalb unseres Pensums.

Listing 4: Abfrage eingeloggter Nutzer auf einem entfernten Rechner, nur ein ssh-Aufruf

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage: $0 <host>"

exit 3 fi

host=$1

ping -c1 -W1 $host &>/dev/null if [ $? -ne 0 ]; then

echo "$1 does not answer ping."

exit 1 fi

ssh -T robge@ilux150 << ’EOF

for v in $(who | cut -f1 -d\ | sort | uniq) do

n=$(finger $v | grep -o "Name:.*$" | cut -f2- -d\ ) echo "$v ($n)"

done EOF exit 0

8.

Listing 5: L¨osung der Aufgabe 7

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#define N 3

int main(int argc, char* argv[]) {

int c, ret;

pid_t pid[N];

for (c=0; c<N; c++) { pid[c] = fork();

if (pid[c] == -1) { perror("fork");

©Robert Baumgartl, 2008-20 – 3 – 16. Dezember 2020

(4)

Betriebssysteme I

exit(EXIT_FAILURE);

}

if (pid[c] == 0) { /* Sohn */

printf("PID des Sohnes %i = %i\n", c+1, getpid());

exit(EXIT_SUCCESS);

} }

for (c=0; c<N; c++){

ret = wait(NULL);

if (ret == -1) { perror("wait");

exit(EXIT_FAILURE);

} }

exit(EXIT_SUCCESS);

}

©Robert Baumgartl, 2008-20 – 4 – 16. Dezember 2020

Referenzen

ÄHNLICHE DOKUMENTE

Damit der Vermieter anstelle des Renovierungsanspruches einen Anspruch auf Erstattung der hierfür erforderlichen Kosten in die Hand bekommt, muß er jedoch dem Mieter

Am Ende hast Du alle Zahlen von oben in die

Doch Vorsicht: Nach An- sicht von Andreas Kövel vom Gesamtverband der Deut- schen Versicherungswirtschaft in Berlin ist das Problem der Doppelkarten aus dem Inter- net rechtlich

„Ziel dieses Projektes ist es, mit Jugendlichen gemeinsam zu diskutieren und herauszufinden, was man für sein eigenes Leben, aber auch auf dem Feld der Politik selbst gestalten

Ultrakalte Atome, die sich in den letzten zehn Jahren zu vielseitigen Modellsystemen für Vielteilchen- effekte entwickelt haben [2], sind jedoch neutral, sodass diese Effekte

Über den TOP 2 der nichtöffentlichen Sitzung vom 22.03.2021, die Ausschreibung für die Fachplanung Heizung-/Sanitär-/Elektro bezüglich der Sanierung des Anwesens Kulmbacher Straße 5

Ohne Beratung geht es nicht Je mehr Arzneistoffe, zumindest unter Auflagen, aus der Verschreibungs- pflicht entlassen werden, umso mehr steigt die Eigenverantwortung des Pa-

PHANTOM* -- This CPU board generates a PHANTOM* signal whenever it addresses memory locations located above the lowest 64K.. This signal may be used to disable