Dateinamenskonventionen
Dateinamenskonventionen
Dateinamenskonventionen
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]