oldrdist(1M) oldrdist(1M)
NAME
oldrdist - Programm zur Verteilung von Dateien
SYNTAX
/usr/ucb/oldrdist [-nqbRhivwyD] [-f distfile] [-d var=value] [-m host]
[name ...]
/usr/ucb/oldrdist [-nqbRhivwyD] -c name ... [login@]host[:dest]
BESCHREIBUNG
oldrdist ist ein Programm zur Verwaltung identischer Kopien von
Dateien, die auf mehrere Hosts verteilt sind. Es speichert wenn mög-
lich den Eigentümer, die Gruppe, den Modus und die Änderungszeit von
Dateien und kann ausgeführte Programme aktualisieren. oldrdist liest
Kommandos aus distfile für die Aktualisierung von Dateien und/oder
Verzeichnissen.
OPTIONEN
Optionen für die erste Syntaxform:
-f Die angegebene Datei distfile verwenden. Wenn distfile gleich -
ist, wird die Standardeingabe verwendet.
Wenn weder die Option -f noch die Option - angegeben wird, sucht
das Programm zuerst nach distfile und dann nach Distfile, um
diese Datei als Eingabe zu verwenden.
Wenn keine Namen (names ...) in der Kommandozeile angegeben werden,
aktualisiert oldrdist alle Dateien und Verzeichnisse, die in distfile
aufgeführt sind. Andernfalls werden die Angaben für names ... als die
Namen der zu aktualisierenden Dateien oder Labels auszuführender Kom-
mandos interpretiert. Bei einem Konflikt zwischen Label- und Dateina-
men, wird von einem Label ausgegangen. Label- und Dateinamen können
zusammen verwendet werden, um bestimmte Dateien mit bestimmten Komman-
dos zu aktualisieren.
Optionen für die zweite Syntaxform:
-c Erzwingt, daß oldrdist die restlichen Argumente als eine kurze
distfile interpretiert. Die entsprechende distfile hierzu ist:
( name ... ) -> [login@]host
install [dest] ;
Optionen, die für beide Syntaxformen gelten:
-b Binärvergleich. Einen Binärvergleich durchführen und die Dateien
bei Unterschieden aktualisieren, anstatt Datumsangaben und Größen
der Dateien zu vergleichen.
-D Den Fehlersuchmodus (debug) aktivieren.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
oldrdist(1M) oldrdist(1M)
-d Die Variable var wird so definiert, daß sie den Wert value
annimmt. Die Option -d wird zum Definieren von Variablen oder
Überschreiben von Variablendefinitionen in der distfile verwen-
det. value kann eine leere Zeichenkette, ein Name oder eine Liste
mit Namen sein, die in Klammern stehen und durch Tabulator-
und/oder Leerzeichen getrennt sind.
-h Symbolische Links verfolgen. Kopiert nicht den Link selbst, son-
dern die Datei, auf die der Link verweist.
-i Nicht aufgelöste Links ignorieren. Normalerweise versucht
oldrdist die Link-Struktur der übertragenen Dateien aufrechtzuer-
halten und warnt den Benutzer, wenn nicht alle Links gefunden
werden.
-m Die Aktualisierung auf bestimmte Rechner begrenzen. Mehrere Argu-
mente -m können angegeben werden, um die Aktualisierungen auf
eine Untermenge der in distfile aufgeführten Hosts zu begrenzen.
-n Die Kommandos ausgeben, ohne sie auszuführen. Diese Option bietet
sich für die Fehlersuche in distfile an.
-q Quiet-Modus. Dateien, die geändert werden, werden normalerweise
auf die Standardausgabe geschrieben. Mit der Option -q wird dies
unterdrückt.
-R Nicht zugehörige Dateien entfernen. Bei der Aktualisierung eines
Verzeichnisses werden Dateien, die auf dem fernen Host, jedoch
nicht im Master-Verzeichnis vorliegen, entfernt. Diese Option
bietet sich an, wenn identische Verzeichniskopien geführt werden
sollen.
-v Prüfen, ob die Dateien auf allen Hosts auf dem neuesten Stand
sind. Veraltete Dateien werden angezeigt, es werden jedoch weder
Dateien geändert noch entsprechende Mail gesendet.
-w Whole-Modus. Der vollständige Dateiname wird an den Namen des
Zielverzeichnisses angehängt. Normalerweise wird beim Umbenennen
von Dateien nur die letzte Komponente eines Namens verwendet.
Hierdurch bleibt die Verzeichnisstruktur der kopierten Dateien
erhalten und wird nicht geglättet. Beim Umbenennen einer Dateili-
ste wie ( dir1/f1 dir2/f2 ) in dir3 würden beispielsweise die
Dateien dir3/dir1/f1 und dir3/dir2/f2 anstelle von dir3/f1 und
dir3/f2 erstellt.
-y Younger-Modus. Dateien werden normalerweise aktualisiert, wenn
mtime und size [siehe stat(2)] nicht zueinander passen. Bei der
Option -y führt oldrdist keine Aktualisierung der Dateien durch,
die aktueller als die Master-Kopie sind. Hiermit kann verhindert
werden, daß neuere Kopien auf anderen Hosts ersetzt werden. Für
Dateien, die neuer als die Master-Kopie sind, wird eine Warnmel-
dung ausgegeben.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
oldrdist(1M) oldrdist(1M)
distfile enthält eine Folge von Einträgen, die die zu kopierenden
Dateien, die Zielhosts und die jeweilige Operation zur Durchführung
der Aktualisierung angeben. Jeder Eintrag hat eines der folgenden For-
mate:
variablename = namelist
[label:] sourcelist -> destinationlist commandlist
[label:] sourcelist :: timestampfile commandlist
Das erste Format wird zum Definieren von Variablen verwendet. Das
zweite Format dient zur Verteilung der Dateien auf andere Hosts. Das
dritte Format wird zum Erstellen von Listen der Dateien verwendet, die
sich seit einem bestimmten Datum geändert haben. sourcelist gibt eine
Liste der Dateien und/oder Verzeichnisse auf dem lokalen Host an, die
als Master-Kopie für die Verteilung dienen sollen. destinationlist
ist die Liste der Hosts, auf die diese Dateien kopiert werden sollen.
Jede Datei in der Quelliste sourcelist wird in eine Änderungsliste
aufgenommen, wenn die Datei auf dem Host, der aktualisiert werden soll
(zweites Format), veraltet ist, oder wenn die Datei neuer als die
Zeitmarkendatei timestampfile (drittes Format) ist.
Labels sind optional. Sie werden zur Kennzeichnung eines Kommandos für
Teilaktualisierungen verwendet.
Zeilenvorschub-, Tabulator- und Leerzeichen werden nur als Trennzei-
chen verwendet und ansonsten ignoriert. Kommentare beginnen mit einem
# und enden mit einem Zeilenvorschub.
Variablen, die erweitert werden sollen, beginnen mit $ gefolgt von
einem Zeichen oder einem Namen in geschweiften Klammern (siehe auch
das Beispiel am Ende).
Die Quell- und Ziellisten haben folgendes Format:
name
oder
( zeroormorenamesseparatedbywhite-space )
Die Shell-Metazeichen [, ], {, }, * und ? werden (nur auf dem lokalen
Host) auf gleiche Weise wie csh(1) erkannt und erweitert. Sie können
mit einem Backslash als Escape-Zeichen verwendet werden. Das Zeichen ~
wird ebenfalls auf dieselbe Weise wie csh erweitert, jedoch separat
auf dem lokalen Host und dem Zielhost. Wenn die Option -w mit einem
Dateinamen verwendet wird, der mit ~ beginnt, werden alle Angaben bis
auf das Home-Verzeichnis an den Zielnamen angehängt. Dateinamen, die
nicht mit / oder ~ beginnen, verwenden das Home-Verzeichnis des Ziel-
benutzers als das Root-Verzeichnis für den Rest des Dateinamens.
Die Kommandoliste enthält keine oder mehrere Kommandos im folgenden
Format:
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
oldrdist(1M) oldrdist(1M)
install options optdestname ;
notify namelist ;
except namelist ;
exceptpat patternlist ;
special namelist string ;
Das Kommando install wird zum Kopieren veralteter Dateien und/oder
Verzeichnisse verwendet. Jede Quelldatei wird auf jeden Host in der
Zielliste kopiert. Verzeichnisse werden rekursiv in gleicher Weise
kopiert. optdestname ist ein optionaler Parameter zum Umbenennen von
Dateien. Wenn kein Kommando install in der Kommandoliste enthalten
ist, oder der Zielname nicht angegeben wird, wird der Name der Quell-
datei verwendet. Verzeichnisse im Pfadnamen werden neu erstellt, wenn
sie auf dem fernen Host noch nicht vorliegen. Um "Katastrophen" zu
vermeiden, wird ein nicht leeres Verzeichnis auf einem Zielhost nie-
mals durch eine reguläre Datei oder einen symbolischen Link ersetzt.
Bei der Option -R wird ein nicht leeres Verzeichnis allerdings ent-
fernt, wenn der zugehörige Dateiname auf dem Master-Host vollständig
fehlt. Die Optionen (options) sind -R, -h, -i, -v, -w, -y und -b und
haben die gleiche Bedeutung wie die Optionen in der Kommandozeile, mit
der Ausnahme, daß sie nur für die Dateien in der Quelliste gelten. Der
auf dem Zielhost verwendete Anmeldename entspricht dem Anmeldenamen
auf dem lokalen Host, sofern der Zielname nicht das Format login@host
aufweist.
Das Kommando notify dient zum Senden der Liste der aktualisierten
Dateien (sowie eventuell aufgetretener Fehler) an die aufgeführten
Namen. Wenn kein @ im Name enthalten ist, wird der Name des Zielhosts
an den Namen angehängt (zum Beispiel name1@host, name2@host, ...).
Das Kommando except dient zum Aktualisieren aller Dateien in der Quel-
liste, mit Ausnahme der in namelist angegebenen Dateien. Dieses Kom-
mando wird normalerweise verwendet, um alles bis auf bestimmte Dateien
in einem Verzeichnis zu kopieren.
Das Kommando exceptpat gleicht dem Kommando except, nur daß hier
patternlist eine Liste der regulären Ausdrücke ist. [Näheres hierzu
finden Sie unter ed(1).] Wenn eines der Muster mit einer Zeichenkette
innerhalb eines Dateinamens übereinstimmt, wird diese Datei ignoriert.
Da \ ein Maskierungszeichen ist, muß es doppelt angegeben werden, um
Teil des regulären Ausdrucks zu werden. Variablen werden in
patternlist zwar erweitert, nicht jedoch Shell-Dateimuster, die Zei-
chen entsprechen. Soll ein $ aufgenommen werden, muß es mit dem
Escape-Zeichen \ versehen werden.
Das Kommando special dient zur Angabe von sh(1)-Kommandos, die auf dem
fernen Host ausgeführt werden sollen, nachdem die Datei in namelist
aktualisiert oder installiert worden ist. Wird namelist nicht angege-
ben, so werden die Shell-Kommandos für jede aktualisierte oder instal-
lierte Datei ausgeführt. Die Shell-Variable $FILE wird auf den aktuel-
len Dateinamen gesetzt, bevor die Kommandos in string ausgeführt
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
oldrdist(1M) oldrdist(1M)
werden. string beginnt und endet mit " und kann über mehrere Zeilen in
distfile gehen. Mehrere Kommandos für die Shell sollten durch ein ;
getrennt werden. Kommandos werden im Home-Verzeichnis des Benutzers
auf dem Host ausgeführt, der aktualisiert werden soll. Mit dem Kom-
mando special können private Datenbanken und Ähnliches nach der Aktua-
lisierung eines Programms neu aufgebaut werden.
Es folgt ein kurzes Beispiel:
HOSTS = ( matisse root@arpa)
FILES = ( /bin /lib /usr/bin /usr/games
/usr/include/{*.h,{stand,sys,vax*,pascal,machine}/*.h}
/usr/lib /usr/man/man? /usr/ucb /usr/local/oldrdist )
EXLIB = ( Mail.rc aliases aliases.dir aliases.pag crontab dshrc
sendmail.cf sendmail.fc sendmail.hf sendmail.st uucp vfont )
${FILES} -> ${HOSTS}
install -R ;
except /usr/lib/${EXLIB} ;
except /usr/games/lib ;
special /usr/lib/sendmail "/usr/lib/sendmail -bz" ;
srcs:
/usr/src/bin -> arpa
exceptpat ( \\.o\$ /SCCS\$ ) ;
IMAGEN = (ips dviimp catdvi)
imagen:
/usr/local/${IMAGEN} -> arpa
install /usr/local/lib ;
notify ralph ;
${FILES} :: stamp.cory
notify root@cory ;
DIAGNOSE
Eine Beschwerde bezüglich nicht übereinstimmender Versionsnummern von
oldrdist ist möglicherweise auf ein Problem beim Starten Ihrer Shell
zurückzuführen (zum Beispiel bei zu vielen Gruppen).
HINWEISE
Quelldateien müssen sich auf dem lokalen Host befinden, auf dem
oldrdist ausgeführt wird.
Es gibt keine einfache Möglichkeit zur Ausführung eines bestimmten
Kommandos, nachdem alle Dateien in einem Verzeichnis aktualisiert wor-
den sind.
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
oldrdist(1M) oldrdist(1M)
Die Variablenerweiterung funktioniert nur für Namenslisten; eine all-
gemeine Makrofunktion sollte vorhanden sein.
oldrdist bricht bei Dateien mit einer Änderungszeit, die vor dem 1.
Januar 1970 UTC liegt, ab.
Wenn oldrdist auf eine Datei angewendet wird, für die jemand anderes
die Eigentumsrechte besitzt, ändert oldrdist den Eigentümer/die Gruppe
des Ziels (durch chown) nur dann, wenn Sie über Superuser-Rechte ver-
fügen.
DATEIEN
distfile
Eingabekommandodatei
/tmp/oldrdist*
Temporäre Datei zur Listenaktualisierung
SIEHE AUCH
csh(1), sh(1), stat(2).
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98