09.11.2013 Aufrufe

Dateinamenskonventionen

Dateinamenskonventionen

Dateinamenskonventionen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Dateinamenskonventionen</strong><br />

<strong>Dateinamenskonventionen</strong><br />

An dieser Stelle halten wir nochmals fest, dass ein Verzeichnis ein spezieller Typ von Datei<br />

ist. Also die Dateinamenkonventionen beziehen sich ebenso auf Verzeichnisse<br />

Bei der Namensgebung von Dateien sollten Sonderzeichen wie / * & % , vermieden<br />

werden. Vermeiden Sie ebenso, die Benutzung von Leerzeichen innerhalb eines<br />

Dateinamens. Der sicherste Weg eine Datei zu benennen ist mit Hilfe alphanumerischer<br />

Zeichen also Buchstaben und Zahlen zusammen mit dem Unterstrich _ und dem Punkt .<br />

Dateinamen beginnen normalerweise mit mit einem kleingeschriebenen Buchstaben und<br />

enden mit einem Punkt dem sich eine Reihe von Buchstaben anschließen die den Inhalt<br />

der Datei beschreiben. Eine Datei die aus C code besteht wird mit der Endung .c<br />

versehen, beispielsweise, prog1.c .<br />

Vorsicht: einige Anwendungen benennen ihre Ausgabedateien immer gleich.<br />

Einige Compiler, zum Beispiel, erzeugen Dateinamen wie a.out. Wenn Sie vergessen<br />

sollten den Dateinamen für die Ausgabe anzugeben kann das zur Folge haben, dass der<br />

Compiler die Datei immer wieder gleich benennt und diese somit immer wieder<br />

überschrieben wird und alle anderen Daten verloren gehen.<br />

file:///C|/Lehre/PS2002_3/9.htm (1 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Maskierung von Zeichen Quoting<br />

Bei der Kommandoeingabe können sogenannte Metazeichen und Sonderzeichen wie wir sie<br />

in der<br />

letzten Sitzung für die Ein- und Ausgabeumlenkung, und die Kommandoverknüpfung<br />

kennen gelernt<br />

haben, eingesetzt werden (>, >>, , ||, &&).<br />

Sie werden von der Shell und nicht von den Kommandos, die aus der Shell aufgerufen<br />

werden,<br />

interpretiert.<br />

Auch Leerstellen haben eine Sonderbedeutung, und zwar die des Trennzeichens.<br />

Um eine Leerstelle oder ein Metazeichen in einem Kommandostring unterzubringen, muss<br />

diese<br />

Sonderbedeutung unterdrückt werden.<br />

Das Zeichen muss maskiert oder gequotet werden, so dass es für sich selber steht.<br />

Es gibt drei Methoden, ein Metazeichen oder eine Leerstelle zu quoten.<br />

luhme% a=cd\ /usr/mike/ftn<br />

luhme% b=`cd /usr/mike/ftn`<br />

luhme% c=“cd /usr/mike/ftn“<br />

In diesem Fall haben die drei Variablen a,b und c alle denselben Wert.<br />

file:///C|/Lehre/PS2002_3/9.htm (2 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Zum Beispiel wird nach der Eingabe von $ $a das Working Verzeichnis auf /usr/mike/ftn<br />

umgestellt.<br />

Der´Unterschied zwischen den drei Quotingmechanismen ist:<br />

\ maskiert nur das nächstfolgende Zeichen (auch wenn das ein zweites \ ist)<br />

' ' maskiert alle eingeschlossenen Zeichen ( außer ' selbst )<br />

" " maskiert alle eingeschlossen Zeichen ( außer $ \ ` )<br />

Der Backslash (\)<br />

Der Backslash (\) macht die Sonderbedeutung des nachfolgenden Zeichens unwirksam.<br />

echo \*<br />

erzeugt zum Beispiel die Ausgabe<br />

*<br />

file:///C|/Lehre/PS2002_3/9.htm (3 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Eine Besonderheit hierbei ist die Eingabe von \ mit nachfolgendem Drücken der ENTER-<br />

Taste. Der dadurch am Bildschirm<br />

sichtbare Zeilenvorschub wird bei der Interpretation der Kommandozeile komplett<br />

ignoriert. Auf diese Art ist es möglich, lange<br />

Befehle in mehreren aufeinander folgenden Zeilen einzugeben, um die Übersichtlichkeit zu<br />

verbessern. Ruft man die so eingegebenen Zeilen mit Hilfe der History-Funktionen der<br />

Korn-Shell noch einmal auf, so werden die Zeilenumbrüche in der Form ^J dargestellt.<br />

^J ist dabei ein einzelnes Zeichen (Ctrl-J), was man auch beim Bewegen des Cursors auf<br />

der Zeile feststellen kann.<br />

Das Hochkomma (')<br />

Will man mehrere Zeichen oder Worte vor einer Interpretation schützen, so ist das<br />

Verfahren mit vorangestelltem Backslash etwas unpraktikabel<br />

Für diesen Fall kann man die entsprechende Zeichenkette in zwei Hochkommata<br />

einschließen.<br />

Dies ist insbesondere dann sinnvoll, wenn mehrere durch Zwischenräume getrennte Worte<br />

als ein einziges Argument einem Programm übergeben werden sollen. Ohne den Einschluss<br />

in Hochkommata würde die Shell in diesem Fall Worttrenner erkennen und<br />

dementsprechend mehrere Einzelparameter erzeugen. Innerhalb einer mit Hochkommata<br />

versehenen Zeichenkette darf dann allerdings kein weiteres Hochkomma stehen, auch<br />

file:///C|/Lehre/PS2002_3/9.htm (4 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

nicht als \'.<br />

Es ist möglich, nicht gequotete und gequotete Zeichenketten zu einem Parameter<br />

zusammenzufügen. Dies geschieht einfach durch hintereinanderschreiben der<br />

entsprechenden Ausdrücke.<br />

Beispiel:<br />

Die folgende Sequenz verdeutlicht die Wirkung des Quoting. Der Shell-Prompt besteht<br />

in diesem Beispiel nur aus dem Dollarzeichen.<br />

$ c=test<br />

$ echo $c<br />

test<br />

$ echo '$c'<br />

$c<br />

$ echo $c'$c'<br />

test$c<br />

Erklärung:<br />

Der erste echo-Befehl hat keinerlei Quoting und zeigt damit den Inhalt der vorher<br />

gesetzten Variablen c an.<br />

Der zweite echo-Befehl hat den Ausdruck $c gequotet und verhindert damit, dass<br />

die Shell eine Variablenersetzung vornimmt. Daher wird die Zeichenkette $c unverändert<br />

angezeigt.<br />

file:///C|/Lehre/PS2002_3/9.htm (5 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Der letzte echo Befehl zeigt das Hintereinanderschreiben von einem nicht<br />

gequoteten und einem gequoteten Ausdruck. Die Variablenersetzung wird einmal<br />

ausgeführt und einmal unterbunden.<br />

Das Anführungszeichen (")<br />

Das Anführungszeichen lässt im Gegensatz zum Hochkomma Ersetzungen von Shell-<br />

Variablen und die Interpretation des Backquote-Konstruktes zu, verbietet aber die<br />

Interpretation von Dateinamen-Kurzschreibweisen (*, ? ... ). Dies macht man sich am<br />

besten klar, wenn man das folgende Kommando eingibt:<br />

echo "* `ls`"<br />

Das Ergebnis zeigt nach dem *, der augenscheinlich nicht interpretiert wird, die Liste von<br />

Dateinamen, die ls erzeugt.<br />

Innerhalb einer von Anführungszeichen eingeschlossenen Zeichenkette ist des weiteren<br />

das Quoting mit Hilfe des Backslash erlaubt. Insbesondere darf auch ein in der<br />

Zeichenkette vorkommendes Anführungszeichen durch einen Backslash gequotet werden,<br />

so dass die Shell es nicht als Ende der Zeichenkette erkennt.<br />

Hinweis: Durch Hochkomma oder Anführungszeichen begrenzte Strings dürfen sich über<br />

mehrere Zeilen erstrecken. Wenn also überraschend ein Prompt > auftritt, dann sollten Sie<br />

überprüfen, ob Sie irgendwo das schließende Anführungszeichen vergessen haben.<br />

file:///C|/Lehre/PS2002_3/9.htm (6 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Kommandoersetzung<br />

Einer Variablen wird die Standardausgabe eines Kommandos zugewiesen, wenn<br />

dieses innerhalb<br />

umgekehrter Hochkommatas ‘... ‘ auch accents graves bezeichnet, steht.<br />

luhme% k=‘pwd‘<br />

Hier wird der Variablen k der Name des aktuellen Verzeichnisses zu.<br />

Accents graves quoten nicht. Beispielsweise wird zwischen ‘ ... ‘ $variable durch<br />

den Wert<br />

von Variable ersetzt, bevor das Kommando ausgeführt wird<br />

Sie werden durch ein vorangestelltes \ und zwischen ` ... ` geqoutet aber nicht<br />

zwischen ‘‘ ...‘‘.<br />

file:///C|/Lehre/PS2002_3/9.htm (7 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Beispiele:<br />

Das Verzeichnis usr/mike/ftn enthalte drei Dateien<br />

luhme% d=/usr/mike/ftn<br />

luhme m=`ls $d | wc-w`<br />

luhme echo $m<br />

3<br />

oder<br />

Das Working-Directory sei /usr/mike/ftn/prog:<br />

luhme% n="Das aktuelle Verzeichnis ist `pwd`."<br />

luhme% echo $n<br />

Das aktuelle Verzeichnis ist /usr/mike/ftn/prog.<br />

UNIX- Variablen (Shell- Variable und<br />

Umgebungsvariable)<br />

Variablen sind eine Art des Informationsaustausches zwischen der Shell und den<br />

Programmen die auf der Shell laufen.. Die Programme schauen in der vom Nutzer<br />

definierten Umgebung nach bestimmten Variablen und nutzen deren gespeicherten Wert.<br />

file:///C|/Lehre/PS2002_3/9.htm (8 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Einige Variablen werden vom System andere von Nutzer wieder andere von den<br />

Programmen definiert.<br />

Die Standardmäßigen UNIX-Variablen Standard können in zwei Kategorien unterteilt<br />

werden Umgebungsvariablen und Shell-variablen. Allgemein gesagt werden Shellvariablen<br />

immer nur kurzzeitig für die jeweiligen Anwendungen verwendet wohingegen<br />

Umgebungsvariablen eine weitreichendere Bedeutung haben und diese die während des<br />

login Prozesses gesetzt werden für die gesamte Session gelten. Es wurde Festgelegt, dass<br />

Umgebungsvariablen durch GROSSBUCHSTABEN und Shell-variablen durch<br />

Kleinbuchstaben gekennzeichnet werden.<br />

Zur Anzeige aller gesetzten Umgebungs-Variablen verwendet man den Befehl env. Mit dem<br />

Befehl export erklärt man<br />

eine Shell-Variable zur Umgebungsvariable. Nachfolgende Änderungen an der Shellvariable<br />

ändern dann automatisch<br />

auch die Umgebungsvariable mit.<br />

Hinweis: Eine Umgebungsvariable wird immer nur auf nachfolgend gestartete Programme<br />

vererbt. Bereits laufende Programme erfahren keine Änderung, da bei jedem<br />

Programmstart für dieses eine Kopie der Umgebung angelegt wird. Änderungen werden<br />

auch niemals an den Vaterprozess weitergegeben, das ist nicht möglich.<br />

Umgebungsvariablen<br />

file:///C|/Lehre/PS2002_3/9.htm (9 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Ein Beispiel für eine Umgebungsvariable ist die Variable OSTYPE. Ihr Wert zeigt das<br />

momentan benutze Betriebssystem an<br />

% echo $OSTYPE<br />

Weiter Beispiele für Umgebungsvariablen sind:<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

●<br />

USER (ihr login name)<br />

HOME (der pfad name ihres home verzeichnisses)<br />

HOST (der name des computers den sie gerade nutzen)<br />

ARCH (die processor architektur des computers den sie gerde nutzen)<br />

DISPLAY (der name des computers auf dem sie ihr x window öffnen möchten)<br />

PRINTER (der standard drucker für druckjobs)<br />

PATH (die verzeichnisse die die shell nach kommandos durchsuchen soll<br />

Umgebungsvariablen können mit Hilfe des setenv Kommandos gesetzt und mit Hilfe des<br />

printenv or env Kommandos angesehen werden. Zurückgesetzt werden diese Variablen mit<br />

dem Kommando unsetenv.<br />

Um alle Variablen dieses Typs zu sehen gibt man das Kommando<br />

% printenv | less<br />

ein.<br />

file:///C|/Lehre/PS2002_3/9.htm (10 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Shellvariablen<br />

Ein Beispiel für eine Shell-Variable ist die history Variable. Sie bestimmt den Wert wie viele<br />

shell Kommandos gespeichert werden um dem Nutzer zu erlauben sich die bereits<br />

verwendeten Kommandos nochmals anzusehen.<br />

% echo $history<br />

Weitere Beispiele für shell Variablen sind:<br />

●<br />

●<br />

●<br />

●<br />

cwd (momentanes Arbeitsverzeichnis)<br />

home (der Pfadname ihres home Verzeichnisses)<br />

path (alle Verzeichnisse die shell durchsuchen soll um ein bestimmtes Kommando zu<br />

finden<br />

prompt (the text string used to prompt for interactive commands shell your login<br />

shell)<br />

Shell variablen werden mit dem set Kommando sowohl gesetzt als auch angezeigt. Sie<br />

können mit Hilfe des unset Kommandos wieder zurückgesetzt werden.<br />

Um alle Shell variablen anzuzeigen:<br />

file:///C|/Lehre/PS2002_3/9.htm (11 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

% set | less<br />

Was ist der Unterschied zwischen der variable PATH und der Variable path?<br />

Im allgemeinen haben shell und Umgebungsvariablen den gleichen Namen sind bestimmt<br />

und unabhängig, außer wenn sie die gleichen Eingabewerte besitzen. Auch hier gibt es wie<br />

immer Ausnahmen.<br />

Immer dann wenn die shell Variablen home, user und term verändert werden, erhalten<br />

auch die zugehörigen Umgebungsvariablen HOME, USER und TERM die gleichen Werte.<br />

Andersherum wenn man die Umgebungsvariablen verändert hat dies keine Auswirkung auf<br />

die shell Variablen.<br />

PATH und path spezifizieren Verzeichnisse in denen nach Kommandos und Programmen<br />

gesucht werden soll. Beide Variablen repräsentieren hier die gleiche Verzeichnisliste und<br />

wenn eine Variable verändert wird, bewirkt dies auch die Veränderung der anderen<br />

Variable.<br />

Verwendung und Setzen von Variablen<br />

Jedes mal wenn Sie sich auf einem UNIX Rechner einloggen sucht das System in Ihrem<br />

home Verzeichnis nach initialisierungs Dateien. Die Information in diesen Dateien<br />

file:///C|/Lehre/PS2002_3/9.htm (12 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Information wird Verwendet um Ihre Arbeitsumgebung darzustellen. Die C und TC shells<br />

verwenden die zwei Dateien .login and .cshrc (beide Dateien beginnen mit einem dot).<br />

Während des login Prozesses ließt die C shell zunächst die .cshrc und dann die .login<br />

.login wird benötigt um Bedingungen die während der gesamten Session relevant sind<br />

herzustellen und um alle beim login nötigen Aktionen zu starten.<br />

.cshrc wird verwendet um Bedingungen zu schaffen die sich nur auf die aufgerufene shell<br />

und jeden weiteren shell Aufruf beziehen.<br />

Die Richtlinien sind also dass man Umgebungsvariablen im .login setzt und shell Variablen<br />

im .cshrc.<br />

WARNUNG: verwenden Sie niemals Kommandos die ein graphisches Display starten (<br />

web-browser ) in ihren .cshrc oder .login Dateien.<br />

Setzen von Shellvariablen im .cshrc<br />

file:///C|/Lehre/PS2002_3/9.htm (13 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Wenn Sie beispielsweise die Anzahl der gespeicherten shell-Kommandos in der history<br />

Liste ändern wollen verwenden Sie dazu die shell Variable history. Standardmäßig ist diese<br />

auf den Wert 100 gesetzt. Aber wenn Sie wollen können sie auch 200 Kommandos dort<br />

speichern.<br />

% set history = 200<br />

Um zu Überprüfen ob das funktioniert hat tippen Sie:<br />

% echo $history<br />

Diese Veränderung bezieht sich wie schon erwähnt nur auf die Lebensdauer der<br />

momentanen shell. Wenn Sie ein weiters x-term Fenster öffnen, besitzt dieses nur denn<br />

Standardwert. Um diesen Permanent zu ändern müssen Sie die Variable im . cshrc setzen.<br />

Wie dies gemacht wird zeigt folgendes Beispiel:<br />

Öffnen Sie zunächst die .cshrc datei in einem Texteditor. Verwenden Sie nedit.<br />

% nedit ~/.cshrc<br />

Fügen Sie folgende Zeile in die Kommandoliste ein.<br />

set history = 200<br />

Speichern sie die Datei und lassen Sie die shell den .cshrc mit Hilfe des shell source<br />

kommandos erneut lesen.<br />

% source .cshrc<br />

file:///C|/Lehre/PS2002_3/9.htm (14 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Überprüfen Sie das Ergebnis durch<br />

% echo $history<br />

Setzen der Variable path<br />

Wenn Sie ein Kommando eintippen definiert die path (oder(PATH) Variable in welchen<br />

Verzeichnissen die shell nach diesem Kommando suchen soll. Wenn die shell eine<br />

Nachricht zurückgibt wie : "command: Command not found",bedeuted dies, dass dieses<br />

Kommando entweder nicht existent ist oder, dass dass kommando (Programm) nicht im<br />

Pfad gefunden wurde.<br />

Als beispiel , um das Programm units, zu starten müssen Sie den Pfad direkt spezifiziert<br />

haben (~/units174/bin/units), oder das Verezeichnis ~/units174/bin in Ihrem path<br />

angeben.<br />

Hinzufügen:<br />

% set path = ($path ~/units174/bin)<br />

file:///C|/Lehre/PS2002_3/9.htm (15 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

HINWEIS: Sie können mehrere Kommandos in eine Zeile schreiben wenn Sie diese mit<br />

einem Semikolon trennen.<br />

Um die Variable path ständig zu verändern müssen sie die folgende Zeile in Ihre .cshrc<br />

einfügen.<br />

set path = ($path ~/units174/bin)<br />

Bourne-Shell<br />

(sh)<br />

Korn-Shell<br />

(ksh)<br />

C-Shell (csh)<br />

Allgemeine Initialisierung /etc/profile /etc/profile /etc/.login<br />

Benutzerbezogene<br />

Initialisierung<br />

Login .profile .profile .login<br />

Shellaufruf .kshrc .cshrc<br />

Logout<br />

.logout<br />

file:///C|/Lehre/PS2002_3/9.htm (16 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Die Zugriffsrechte voreinstellen<br />

Bei jeder Erstellung einer Datei werden dieser automatisch in den Profil-dateien voreingestellte<br />

protection bits gesetzt.<br />

Diese Voreinstellung kann und sollte vom Nutzer bei Sitzungsbeginn auf seine Bedürfnisse hin<br />

geändert werden.<br />

Dies kann mit dem Kommando umask 000 (user mask) erreicht werden.<br />

000 ist hierbei wiederum eine Oktalzahl, die allerdings andersherum als beim chmod-Befehl<br />

wirkt.<br />

Die Bits, die in der Maske bestimmt werden, werden beim Anlegen einer Datei gerade nicht gesetzt.<br />

Umask bewirkt also nicht das setzten von protection bits sondern das Nichtsetzen.<br />

Der Umask-Befehl gilt bis zum Sitzungsende bzw. bis zum nächsten umask.<br />

Beispiel:<br />

luhme% umask 077<br />

Jede von diesem Zeitpunk an erzeugte Datei wird read, write und execute Berechtigung nur für<br />

den Eigentümer besitzen, andere Benutzer haben überhaupt keine Zugriffsrechte.<br />

Bei den meisten UNIX-Systemen existiert noch eine Besonderheit bei der Verwendung des<br />

umask Befehls.<br />

Ein x-Bit wird nur dann gesetzt, wenn die neu erstellt Datei ein Verzeichnis ist oder von einem<br />

Compilerlauf erzeugt wurde.<br />

Dateien, die beispielweise von einem Editor nach<br />

luhme% umask 022<br />

erzeugt werden haben folgenden Protection-Mode: rwx r -- r– und nicht, wie vielleicht erwartet:<br />

file:///C|/Lehre/PS2002_3/9.htm (17 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

rwx r-x r-x<br />

Wird eine Datei mit dem Copy-Befehl (cp) kopiert, so werden die Zugriffsrechte der alten<br />

Datei übernommen, soweit diese nicht durch die Maske des umask-Befehls verdeckt werden.<br />

Zusätzliche Rechte werden nie gesetzt.<br />

Hat allerdings bereits eine Datei existiert, die durch den Kopiervorgang überschrieben wird,<br />

so bleiben deren alte Zugriffsrechte erhalten.<br />

Der umask-Befehl ohne Argumente liefert die momentan gültige Einstellung der Maske.<br />

luhme% umask<br />

027<br />

Beispiel:<br />

luhme% ls -l<br />

-rw------- 1 gast 386 Dez 10 10:10 brief<br />

-rw-rw-r-- 1 gast 267 Dez 10 12:30 pbrief<br />

-rwxrwxrwx 1 gast 113 Dez 10 15:41 upro<br />

luhme% umask 027<br />

luhme% cp brief nbrief<br />

luhme% cp brief pbrief<br />

luhme% mkdir priv<br />

luhme% ls -l<br />

-rw------- 1 gast 386 Dez 10 10:10 brief<br />

-rw------- 1 gast 386 Dez 10 16:43 nbrief<br />

-rw-rw-r-- 1 gast 386 Dez 10 16:43 pbrief<br />

drwxr-x--- 2 gast 512 Dez 10 16:43 priv<br />

-rwxrwxrwx 1 gast 113 Dez 10 15:41 upro<br />

file:///C|/Lehre/PS2002_3/9.htm (18 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Dateinamensersetzung (Metazeichen)<br />

Namensmuster<br />

Viele Kommandos verlangen eine Liste von Dateien als Argument.<br />

Eine solche Liste kann man oft mit einigen weiteren Metazeichen, den<br />

sogenannten Wildcards,<br />

Bequem erzeugen.<br />

Ein Kommando das ein Wort enthält, welches die Zeichen *, ? Oder [...] enthält,<br />

wird von der<br />

Shell als Namensmuster betrachtet.<br />

Bevor das Kommando ausgeführt wird, ersetzt die Shell das Wort durch eine<br />

alphabetisch<br />

sortierte Liste aller Dateien, deren Namen zu diesem Muster passen.<br />

Falls keine solche Datei existiert findet keine Ersetzung statt.<br />

Dieses Verfahren nennt man Expandierung (Parameter-, Namens-,<br />

Dateinamensexpansion).<br />

Diese Begriffe werden in der Unix-Literatur synonym verwendet.<br />

file:///C|/Lehre/PS2002_3/9.htm (19 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Wildcards werden folgendermaßen interpretiert:<br />

* ein beliebiger String (Zeichenkette)<br />

? ein einzelnes Zeichen<br />

[...] ein Satz einzelner Zeichen (ohne Trennzeichen!)<br />

- definiert einen Bereich zwischen zwei Zeichen innerhalb [...]<br />

! (als erstes Zeichen nach [) alle Zeichen außer den gelisteten<br />

~ steht für den kompletten Pfadnamen des Heimatverzeichnisses<br />

~ name steht für den kompletten Pfadnamen des Heimatverzeichnisses des<br />

Nutzers name<br />

Zu beachten ist, dass ein / sowie ein . am Anfang eines Dateinamens oder gleich<br />

nach einem /<br />

immer explizit angegeben werden müssen<br />

Ein syntaktischer Ausdruck, dar aus normalen Zeichen und Wildcards besteht,<br />

heißt<br />

regulärer Ausdruck.<br />

Beispiel:<br />

Erstellen Sie ein Verzeichnis das die Dateien prog1, p1.1, p1.2, p1.3, p1.5, p1.6<br />

enthält; und ein das<br />

übergeordnetes Verzeichnis mit den dateien.prof, prog.a und prog.b.<br />

Folgende Muster passen zu den jeweils angegebenen Dateien:<br />

prog* prog1<br />

file:///C|/Lehre/PS2002_3/9.htm (20 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

p ??? p1.1, p1.2, p1.3, p1.4, p1.5, p1.6<br />

*2* p1.2<br />

p1.[136] p1.1, p1.3, p1.6<br />

p1. [1-36] p1.1, p1.2, p1.3, p1.6<br />

p1. [!1-36] p1.4, p1.5<br />

../* ../prog.a, ../prog.b<br />

../.* ../.profile<br />

kopieren sie alle dateien die mit einem p beginnen in ein neues Verezeichnis mit dem<br />

namen neu<br />

fügen sie alle Dateien p1.1 - p1.6 im Verzeichnis neu in einer neuen Datei progs<br />

zusammen<br />

listen Sie alle Dateien deren Dateiname aus fünf Buchstaben bestehen<br />

löschen Sie alle Dateien p 1.1 ... bis p1.6 im alten Verzeichnis unter Verwendung eines<br />

Kommandos in Verbindung mit einer Wildcard<br />

file:///C|/Lehre/PS2002_3/9.htm (21 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Mögliche Anwendungen regulärer Ausdrücke:<br />

cp p* Pfad /neu<br />

cat p1.* >progs verkettet p1.1, p1.2,.... P1.6 in eine Sammeldatei progs<br />

ls –l ????? findet alle Dateien deren Namen aus fünf Buchstaben bestehen<br />

rm p1.*<br />

löscht Dateien p1.1 ....bis p1.6. Vorsicht bei der Anwendung von<br />

Metazeichen in Löschkommandos. Immer besser die Option –i<br />

anwenden<br />

.<br />

Quoting von Wildcards<br />

file:///C|/Lehre/PS2002_3/9.htm (22 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Falls es notwendig ist das Expandieren zu unterbinden, kann die Interpretation<br />

von<br />

Wildcards mit allen drei Quotingmechanismen unterdrückt werden<br />

Eine Datei prog1.* könnte also als prog1.\* oder als `prog1.*` oder als<br />

“prog1.*“<br />

angesprochen werden<br />

Dabei ist zu beachten, dass im Gegensatz zu den anderen Metazeichen, Wildcards<br />

in einem<br />

Variablenwert nicht gequotet sind.<br />

Man muss den Wert explizit quoten, um das Expandieren zu unterbinden.<br />

Beispiel:<br />

Das aktuelle Verzeichnis enthält die Dateien prog1, prog2, prog3:<br />

luhme% x=prog\*<br />

luhme% echo $x<br />

prog1 prog2 prog3<br />

luhme% echo “$x“<br />

prog*<br />

file:///C|/Lehre/PS2002_3/9.htm (23 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Abkürzungen für Kommandos<br />

In der C-Shell gibt es zwei komfortable Möglichkeiten, die Eingabe langer<br />

Kommandos<br />

und die Eingabe immer wiederkehrender Kommandofolgen zu vereinfachen<br />

1.) Die History-Ersetzung und die<br />

2.) Vergabe von Aliasnamen<br />

Die History-Ersetzung der C-Shell<br />

Das History-System der C-Shell verwaltet eine Tabelle, die sogenannte History-<br />

Tabelle.<br />

In dieser Tabelle werden alle Kommandozeilen gespeichert, die bisher ausgeführt<br />

wurden.<br />

Dabei werden nicht nur die Kommandos gespeichert, sondern auch die gesamte<br />

Kommandozeile.<br />

Diese Kommandozeilen kann man sich anzeigen lassen, auf sie zugreifen, sie<br />

modifizieren und<br />

ausführen.<br />

Greift man auf ein Kommando der History-Tabelle zu, so wird es angezeigt und<br />

dann unmittelbar<br />

ausgeführt.<br />

file:///C|/Lehre/PS2002_3/9.htm (24 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Mit dem Befehl<br />

set history=n<br />

kann man die Kommandozeilen in der History-Tabelle speichern<br />

Für n wird eine Zahl eingegeben. Der Befehl speichert dann die letzten n<br />

Kommandozeilen<br />

Der Befehl history ohne Option, lässt alle Kommandos anzeigen, die in der<br />

History-Tabelle<br />

gespeichert wurden.<br />

Die Kommandos sind fortlaufend numeriert.<br />

Mit dem ! wird auf die History-Tabelle zugegriffen.<br />

Die C-Shell erkennt am Ausrufungszeichen !, dass sich um einen Zugriff auf die<br />

History-Tabelle<br />

handelt.<br />

Anhand spezifischer Schlüssel wird die gewünschte Kommandozeile ausgewählt.<br />

Diese Schlüssel können sogenannte Ereignisbezeichner sein.<br />

Ereignisbezeichner identifizieren die gesuchte Kommandozeile anhand der in ihr<br />

enthaltenen<br />

Kommandonamen.<br />

Es können aber auch sogenannte Wortbezeichner sein, sie identifizieren die<br />

gewünschte<br />

Kommandozeile anhand der in ihr enthaltenen Argumente.<br />

Mit Wortmodifikatoren können Argumente modifiziert werden.<br />

Mehrere Ereignis- und Wortbezeichner sowie Wortmodifikatoren, können mit<br />

dem Doppelpunkt<br />

file:///C|/Lehre/PS2002_3/9.htm (25 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

miteinander verknüpft werden.<br />

! E[:[WB...] [:WM..]]<br />

: der Doppelpunkt trennt einzelne Bezeichner<br />

E der Ereignisbezeichner wählt Kommandos aus<br />

WB der Wortbezeichner wählt Kommando-Argumente aus<br />

WM Wortmodifikatoren modifizieren Kommandoargumente<br />

Bezeichner<br />

Funktion<br />

Ereignisbezeichner<br />

n<br />

ccc<br />

der Zeichenkette ccc begann<br />

Kommando Nr.n<br />

das letzte Kommando das mit<br />

-n das n-letzte Kommando<br />

! das letzte Kommando<br />

Wortbezeichner<br />

:0 Kommandoname<br />

:^ erstes Argument<br />

file:///C|/Lehre/PS2002_3/9.htm (26 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

:$ letztes Argument<br />

:x-y<br />

:n-<br />

Argument<br />

Argument x bis y<br />

Argument n bis zum vorletzten<br />

:-n Argument 1-n<br />

:x-y ccc<br />

Zeichenkette ccc am Ende<br />

Argument x bis y sowie die<br />

:* alle Argumente<br />

Aliasnamen der c-shell<br />

Mit Aliasnamen können lange oder häufig vorkommende Kommandos abgekürzt<br />

werden,<br />

file:///C|/Lehre/PS2002_3/9.htm (27 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

wodurch die Arbeit wesentlich erleichtert wird.<br />

Dabei wird einem Aliasnamen ein Kommando zugeordnet.<br />

luhme% alias [aliasname kom]<br />

Dem aliasnamen wird das Kommando kom zugeordnet.<br />

Es können auch Kommandofolgen, Kommandoverkettungen und Pipes mit<br />

Aliasnamen belegt werden.<br />

Desweiteren können komplette Kommandozeilen mit Optionen und Argumenten<br />

angegeben werden.<br />

Wird alias ohne Argumente aufgerufen, werden alle bereits vergebenen Aliase<br />

angezeigt.<br />

Aufruf eines mit Alias versehenen Kommandos<br />

Das mit dem Kommando alias zuvor gespeicherte Kommando wird durch Eingabe<br />

des Aliasnamens<br />

Aliasname aufgerufen.<br />

luhme% aliasname [option] [argument]<br />

Die Optionen werden an das im Aliasnamen gespeicherte Kommando übergeben.<br />

Die Argumente werden ebenfalls an das im Aliasnamen gespeicherte Kommando<br />

weitergegeben.<br />

Ebenso können alle Techniken der Ein- und Ausgabeumleitung und<br />

Kommandoverknüpfung<br />

eingesetzt werden.<br />

Aliaszuordnung rückgängig machen<br />

luhme% unalias aliasname<br />

Der zuvor vergebene Aliasname aliasname wird zurückgenommen. Er kann nicht<br />

mehr<br />

file:///C|/Lehre/PS2002_3/9.htm (28 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

verwendet werden.<br />

Beispiel:<br />

luhme% alias dir ‘ls –l‘<br />

Es wird dem Aliasnamen dir das Kommando ls –l zugeordnet. Gibt man dir ein, so<br />

wird ls –l<br />

ausgeführt.<br />

luhme% dir -d<br />

Bei Aufruf des Aliasnamens dir wird das Argument –d übergeben, das Kommando<br />

ls –l –d<br />

wird ausgeführt<br />

Kommandos mehrfach ausführen<br />

In der C-Shell kann man mit Hilfe des Kommandos repeat Kommandos mehrfach<br />

ausführen lassen<br />

luhme% repeat n kommando<br />

Das Kommando wird mehrmals hintereinander ausgeführt. Die Zahl n gibt dabei<br />

an wie oft.<br />

file:///C|/Lehre/PS2002_3/9.htm (29 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Kommandos zu bestimmten Zeiten ausführen lassen<br />

Mit at wird veranlasst, dass ein Kommando zu einer bestimmten Zeit ausgeführt<br />

wird.<br />

at [-f datei] uhrzeit [datum] [+nincr]<br />

at [option]<br />

-f datei die Kommandos die ausgeführt werden sollen stehen in der Datei datei<br />

-r job der Job, job der mit at gestartet wurde, wird wieder rückgängig gemacht<br />

-l [job] der Job, job wird angezeigt<br />

uhrzeit im Format hh oder hh:mm oder hhmm oder durch Angabe eines<br />

Schlüsselwortes<br />

now für jetzt<br />

noon für Mittag<br />

midnight für Mitternacht<br />

datum im Format Mon dd oder Mon dd, yy<br />

Mon Monatsangabe, erste drei Buchstaben des Monatsnamens<br />

dd Tag des Monats in Ziffern<br />

yy Jahr in Ziffern<br />

file:///C|/Lehre/PS2002_3/9.htm (30 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

+n incr relative Zeitangabe von jetzt an gerechnet eine Ziffer<br />

n eine Ziffer<br />

incr days, minutes, hours, weeks oder years<br />

Damit ein Nutzer at ausführen darf, muss er in der Datei<br />

/usr/sbin/cron.d/at.allow eingetragen sein.<br />

Nutzer, die at nicht benutzen dürfen, sind in der Datei /usr/sbin/cron.d/at.deny<br />

eingetragen.<br />

Beispiele:<br />

at 11<br />

at 1130<br />

at 11:30<br />

at 9:30 Feb 23<br />

at 9:30 Feb 23,90<br />

at noon Mar 12<br />

at 09 Friday<br />

at now + 10 minutes<br />

luhme% at 12 CR<br />

at> echo “Essenszeit“ > /dev/tty19 CR<br />

Strg +D<br />

Um 12 Uhr erscheint die Meldung Essenszeit auf dem Terminal<br />

Mit dem cron-System können Kommandos gezielt zu bestimmten Zeiten zur Ausführung<br />

file:///C|/Lehre/PS2002_3/9.htm (31 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

gebracht werden. Es besteht aus den Kommandos cron und crontab.<br />

cron<br />

crontab datei<br />

crontab [-r] [-l]<br />

-r Die crontab-Datei des Nutzers wird aus dem cron-Verzeichnis entfernt und demzufolge<br />

nicht mehr von cron bearbeitet<br />

-l gibt den Inhalt der crontab-Datei des betreffenden Nutzers aus<br />

Mit dem Kommando cron wird der Dämon-Prozeß cron gestartet.<br />

Dieser Prozess führt bestimmte Kommandos zu festgelegten Zeiten aus.<br />

Dazu liest cron die crontab-Dateien, in denen die Kommandos zusammen mit den<br />

entsprechenden<br />

Zeiten eingetragen sind.<br />

Die crontab-Dateien befinden sich alle im Verzeichnis /var/spool/cron/crontabs.<br />

Eine Kommandozeile in der crontab-Datei hat folgendes Format:<br />

zeitschlüssel kommando<br />

Der Zeitschlüssel besteht aus einer Folge von fünf durch Leerzeichen oder Tabulator<br />

getrennten<br />

Zeitangaben, z.B. 30 10 31 02 *.<br />

Die Zeitangaben haben folgende Form und Reihenfolge:<br />

Minute 0-59<br />

Stunde 0-23<br />

file:///C|/Lehre/PS2002_3/9.htm (32 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Tag 1-31<br />

Monat 1-12<br />

Tag der Woche 0-6<br />

Das Zeichen * bedeutet, dass alle erlaubten Werte verwendet werden.<br />

Zeitbereiche können durch einen Bindestrich angegeben werden.<br />

Beispiel:<br />

10 * * * 0 echo “sonntags nicht arbeiten“ > /dev/tty19<br />

10,20,30 * * * 0 echo “sonntags nicht arbeiten“ > /dev/tty19<br />

1 0 1 1 * echo “Prosit Neujahr“> /dev/tty19<br />

10 17 * * 1-5 echo “Feierabend“ > /dev/tty19<br />

cron veranlasst, dass sonntags 10min nach jeder vollen Stunde eine Meldung auf dem<br />

Terminal<br />

tty19 erscheint<br />

Die zweite Zeile bewirkt, das die gleiche Meldung jeweils 10, 20, und 30 nach ausgegeben<br />

wird.<br />

In der dritten Zeile wird festgelegt, dass in der Neujahrsnacht um 1min nach 12 eine<br />

Meldung erscheint.<br />

Die vierte Zeile veranlasst an jedem Wochentag um 17.10Uhr die Meldung Feierabend.<br />

file:///C|/Lehre/PS2002_3/9.htm (33 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Kommando ausführen lassen wenn<br />

Systemauslastung gering ist<br />

batch veranlasst, dass ein Kommando dann ausgeführt wird, wenn die Systemauslastung<br />

relativ<br />

gering ist<br />

batch < komdat<br />

Das Kommando in der Datei komdat wird ausgeführt, sobald die Systembelastung dies<br />

zulässt.<br />

Kommandos mit niedriger Priorität ausführen lassen<br />

Mit dem Befehl nice können Kommandos mit niedriger CPU-Priorität ausgeführt werden<br />

nice [-increment] kommando<br />

Increment ist eine Nummer zwischen 1 und 19. Je höher die Nummer, desto niedriger ist<br />

file:///C|/Lehre/PS2002_3/9.htm (34 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

die<br />

CPU-Priorität des Kommandos.<br />

Wird keine Nummer eingegeben, wird automatisch 10 eingesetzt.<br />

Kommandos mit niedriger CPU-Priorität bekommen seltener Zugriff auf die CPU als<br />

Kommandos<br />

mit höhere Priorität. Dadurch werden sie langsamer ausgeführt.<br />

Nice wird eingesetzt, wenn ein Kommando viel Zeit beansprucht und nicht unbedingt<br />

schnell<br />

Ausgeführt werden muss. Auf diese Weise wird das System durch das Kommando nicht zu<br />

stark blockiert.<br />

Zeitverbrauch von Kommandos messen<br />

Mit time und timex können Kommandos ausgeführt und anschließend die durch das<br />

Kommando<br />

verbrauchte Zeit angezeigt werden<br />

time [kommando]<br />

timex [option ...] kommando<br />

-p Prozess-Informationen zum Kommando und seinen Kindprozessen werden ausgegeben<br />

-o die Anzahl der gelesenen und geschriebenen Blöcke und Zeichen wird ausgegeben<br />

file:///C|/Lehre/PS2002_3/9.htm (35 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

Gibt man kein Kommando an werden die bisher verbrauchten Zeiten der Shell angezeigt<br />

(nur bei time möglich)<br />

Mit time wird die tatsächlich verbrauchte Zeit (real), die verbrauchte CPU-Zeit im System-<br />

Modus<br />

(sys) und im User-Modus (user) angezeigt.<br />

time existiert auch als eingebautes Kommando der C-Shell.<br />

timex funktioniert ähnlich wie time, es können aber außerdem Informationen zum Prozess<br />

und zur Systemaktivität abgefragt werden<br />

Die Ausgabe erfolgt über die Standardfehlerausgabe<br />

Beispiel:<br />

luhme% time date<br />

Das Kommando date wird ausgeführt und anschließend die verbrauchte Zeit angezeigt<br />

Backslash ( \ )<br />

Hochkomma ( ' )<br />

echo<br />

` `<br />

maskiert die Bedeutung des folgenden Zeichens<br />

maskiert die Bedeutung der eingeschlossenen Zeichenkette<br />

Überprüfung der Kommandointerpretation ohne absetzen des Kommandos<br />

Kommandoersetzung<br />

file:///C|/Lehre/PS2002_3/9.htm (36 von 37) [22.01.2003 08:27:49]


<strong>Dateinamenskonventionen</strong><br />

setenv<br />

printenv, env<br />

unsetenv<br />

umask<br />

Wildcards<br />

Setzen von Umgebungsvariablen<br />

Ansehen von Umgebungsvariablen<br />

Zurücksetzten von Umgebungsvariablen<br />

Voreinstellung der Dateirechte (Achtung anders als normale Rechtevergabe)<br />

* ein beliebiger String (Zeichenkette)<br />

? ein einzelnes Zeichen<br />

[...] ein Satz einzelner Zeichen (ohne Trennzeichen!)<br />

- definiert einen Bereich zwischen zwei Zeichen innerhalb [...]<br />

! (als erstes Zeichen nach [) alle Zeichen außer den gelisteten<br />

~ steht für den kompletten Pfadnamen des Heimatverzeichnisses<br />

~name<br />

history<br />

alias<br />

repeat<br />

at<br />

batch<br />

nice<br />

time<br />

steht für den kompletten Pfadnamen des Heimatverzeichnisses des Nutzers name<br />

Aufruf der History Tabelle mit den bisher verwendeten Kommandos<br />

Vergabe von Aliasnamen<br />

Mehrfachausführung von Kommandos<br />

Ausführung eines Kommandos zu einer bestimmten Zeit<br />

auslastungsabhängige Ausführung von Kommandos<br />

Ausführung von Kommandos mit niedriger CPU-Priorität<br />

Ausführung von Kommandos mit Zeitverbrauchsangabe<br />

file:///C|/Lehre/PS2002_3/9.htm (37 von 37) [22.01.2003 08:27:49]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!