Viele Neuerungen

This commit is contained in:
rschaten 2005-02-03 22:24:18 +00:00
parent 82d1e3e470
commit 5b9829acef
7 changed files with 186 additions and 104 deletions

View File

@ -115,20 +115,28 @@ Standardeingabe der Schleife (und somit auf das \texttt{read}-Kommando) legen.
\section{Ein typisches Init-Skript}\label{init-skript}\index{Init-Skript}
Dieses Skript dient dazu, den Apache HTTP-Server zu starten. Es wird während des Bootvorgangs gestartet, wenn der dazugehörige Runlevel initialisiert wird.
Dieses Skript dient dazu, den Apache HTTP-Server zu starten. Es wird während
des Bootvorgangs gestartet, wenn der dazugehörige Runlevel initialisiert wird.
Das Skript muß mit einem Parameter\index{Parameter} aufgerufen werden. Möglich sind hier \textsl{start}, \textsl{stop}, \textsl{status}, \textsl{restart} und \textsl{reload}. Wenn falsche Parameter\index{Parameter} übergeben wurden, wird eine entsprechende Meldung angezeigt.
Das Skript muß mit einem Parameter\index{Parameter} aufgerufen werden. Möglich
sind hier \textsl{start}, \textsl{stop}, \textsl{status}, \textsl{restart} und
\textsl{reload}. Wenn falsche Parameter\index{Parameter} übergeben wurden, wird
eine entsprechende Meldung angezeigt.
Das Ergebnis der Ausführung wird mit Funktionen\index{Funktion} dargestellt, die aus der Datei \texttt{/etc/rc.d/init.d/functions} stammen. Ebenfalls in dieser Datei sind Funktionen, die einen Dienst starten oder stoppen.
Das Ergebnis der Ausführung wird mit Funktionen\index{Funktion} dargestellt,
die aus der Datei \lstinline|functions| stammen. Ebenfalls in dieser Datei sind
Funktionen, die einen Dienst starten oder stoppen.
Zunächst wird festgelegt, daß dieses Skript in der Bourne-Shell ausgeführt werden soll (\ref{auswahl_der_shell}).
Zunächst wird festgelegt, daß dieses Skript in der Bourne-Shell ausgeführt
werden soll (\ref{auswahl_der_shell}).
\begin{lstlisting}
#!/bin/sh
\end{lstlisting}
Dann folgen Kommentare\index{Kommentar}, die den Sinn des Skriptes erläutern (\ref{kommentare}).
Dann folgen Kommentare\index{Kommentar}, die den Sinn des Skriptes erläutern
(\ref{kommentare}).
\begin{lstlisting}[firstnumber=last]
#
@ -310,7 +318,7 @@ echo "aflag=$aflag / Name = $name / Die Dateien sind $*"
\section{Fallensteller: Auf Traps reagieren}\label{traps}\index{trap=\texttt{trap}|(}\index{Signal|(}
Ein laufendes Shell-Skript kann durch Druck auf die Interrupt-Taste
(normalerweise \Ovalbox{CTRL}+\Ovalbox{C}) unterbrochen werden. Durch Druck auf
(\Ovalbox{CTRL}+\Ovalbox{C}) unterbrochen werden. Durch Druck auf
diese Taste wird ein Signal an den entsprechenden Prozeß gesandt, das ihn
bittet sich zu beenden. Dieses Signal heißt SIGINT (für SIGnal INTerrupt) und
trägt die Nummer 2. Das kann ein kleines Problem darstellen, wenn das Skript

View File

@ -132,8 +132,10 @@ M```+$P$`FIP8````!&=!34$``+&.?/M1DP```"!C2%)-``!Z)0``@(,``/G_
\end{lstlisting}
Nach einem Hinweis wird also das Here-Dokument als Eingabe für das Tool
\texttt{uudecode} benutzt. Erstellt wurde das Dokument mit einer Zeile in der
Form \texttt{uuencode icon.png icon.png}.
\texttt{uudecode} benutzt. Erstellt wurde das Dokument mit einer Zeile der
folgenden Form:
\lstinline|uuencode icon.png icon.png|
Wie man sieht ist der Name der Datei in dem Here-Dokument enthalten. Die Datei
wird entpackt und unter diesem gespeichert. In der `realen Welt' muß an der
@ -172,11 +174,11 @@ werden mu
Dabei gibt es zwei Methoden, die angehängte Datei wieder abzuschneiden. Die
einfachere Methode funktioniert mit \texttt{tail}:
\texttt{tail -n +227 \$0 > icon.png}
\lstinline|tail -n +227 $0 > icon.png|
Dieses Beispiel geht davon aus, daß das Skript selbst 227 Zeilen umfaßt. Die
binäre Datei wurde mit einem Kommando wie \texttt{cat icon.png >> skript.sh} an
das Skript angehängt.
binäre Datei wurde mit einem Kommando wie \lstinline|cat icon.png >> skript.sh|
an das Skript angehängt.
Für die etwas kompliziertere Variante muß die Länge des eigentlichen
Skript-Teiles genau angepaßt werden. Wenn das Skript beispielsweise etwa 5,5kB
@ -184,7 +186,7 @@ lang ist, m
werden, damit sich eine Länge von 6kB ergibt. Dann kann das Anhängsel mit dem
Kommando \texttt{dd} in der folgenden Form abgeschnitten werden:
\texttt{dd bs=1024 if=\$0 of=icon.png skip=6}
\lstinline|dd bs=1024 if=$0 of=icon.png skip=6|
Das Kommando kopiert Daten aus einer Eingabe- in eine Ausgabedatei. Im
einzelnen wird hier eine Blockgröße (blocksize, bs) von 1024 Bytes festgelegt.
@ -248,8 +250,10 @@ Bei einfachen Zahlenwerten k
Komplexere Informationen können in eine temporäre Datei geschrieben werden, die
danach geparst werden müßte. Wenn die Informationen in Zeilen der Form
\lstinline|VARIABLE="Wert"| gespeichert werden, kann die Datei einfach mittels
\texttt{source} (Abschnitt \ref{source}) oder einem Konstrukt der Art
\texttt{eval `cat tempfile`} gelesen werden.
\texttt{source} (Abschnitt \ref{source}) oder einem Konstrukt der folgenden Art
gelesen werden:
\lstinline|eval `cat tempfile`|
Und genau mit dieser Überlegung kommen wir zu einem eleganten~--~wenn auch
nicht ganz einfachen~--~Trick.

View File

@ -28,6 +28,7 @@
\usepackage{mathptmx} % Andere Schriften benutzen
\usepackage[scaled=.90]{helvet}
\usepackage{courier}
\usepackage{pifont} % für dinglist (Icon neben Text)
%\usepackage[dvips]{graphicx} % Grafikpaket für Bilder laden
%\usepackage{epstopdf} % .eps bei Bedarf nach .pdf wandeln
@ -97,7 +98,7 @@
\rule{5in}{.04in}\\ \vspace{.25in}
\Huge {\bf SHELL\\ \vspace{.4in} PROGRAMMIERUNG}\\ \vspace{.1in}
\rule{5in}{.04in}\\ \vspace{.6in}
\large v2.0.0 RC1\\
\large v2.0.0 RC2\\
\large \today\\ \vspace{.75in}
\large von\\ \vspace{.3in}
\LARGE {\bf Ronald Schaten} \\ \vspace{.6in}
@ -109,7 +110,7 @@
~\vfill
% Syntax-Boxen (sybox) definieren:
TODO: Breite der sybox anpassen
% TODO: Breite der sybox anpassen:
\fboxsep 1.36mm
\definecolor{g1}{gray}{0.95}
\newsavebox{\syntaxbox}

View File

@ -10,14 +10,14 @@
\texttt{-1} & Formatiert die Ausgabe einspaltig \tabularnewline\STRUT
\texttt{-a} & Zeigt alle Dateien an, auch solche deren Name mit einem Punkt anfängt \tabularnewline\STRUT
\texttt{-A} & GNU-Erweiterung: Zeigt `fast alle' Dateien an, also auch alle deren Name mit einem Punkt anfängt, allerdings nicht `.' und `..', die in jedem Verzeichnis vorkommen \tabularnewline\STRUT
\texttt{-A} & \ding{43} Zeigt `fast alle' Dateien an, also auch alle deren Name mit einem Punkt anfängt, allerdings nicht `.' und `..', die in jedem Verzeichnis vorkommen \tabularnewline\STRUT
\texttt{-d} & Verzeichnisse werden behandelt wie jede andere Datei auch, ein \texttt{ls -ld verzeichnis} gibt also die Eigenschaften des Verzeichnisses aus, nicht dessen Inhalt \tabularnewline\STRUT
\texttt{-h} & GNU-Erweiterung: Gibt bei einer langen Ausgabe mittels \texttt{-l} die Größe der Datei `human readable' aus, also nicht zwingend in Bytes \tabularnewline\STRUT
\texttt{-h} & \ding{43} Gibt bei einer langen Ausgabe mittels \texttt{-l} die Größe der Datei `human readable' aus, also nicht zwingend in Bytes \tabularnewline\STRUT
\texttt{-l} & Lange Ausgabe, inklusiv der Dateiattribute \tabularnewline\STRUT
\texttt{-L} & GNU-Erweiterung: `Dereferenziert' Links vor der Ausgabe. Es werden nicht die Eigenschaften des Links angezeigt, sondern die der verlinkten Datei \tabularnewline\STRUT
\texttt{-L} & \ding{43} `Dereferenziert' Links vor der Ausgabe. Es werden nicht die Eigenschaften des Links angezeigt, sondern die der verlinkten Datei \tabularnewline\STRUT
\texttt{-r} & Sortierreihenfolge umkehren \tabularnewline\STRUT
\texttt{-R} & Rekursiv in Verzeichnisse absteigen und deren Inhalte anzeigen \tabularnewline\STRUT
\texttt{-S} & GNU-Erweiterung: Nach der Größe der Datei sortieren \tabularnewline\STRUT
\texttt{-S} & \ding{43} Nach der Größe der Datei sortieren \tabularnewline\STRUT
\texttt{-t} & Nach der letzten Änderungszeit sortieren \tabularnewline\STRUT
\texttt{-X} & GNU-Erweiterung: Nach der Extension (also dem Namensteil nach dem letzten Punkt) sortieren
\texttt{-X} & \ding{43} Nach der Extension (also dem Namensteil nach dem letzten Punkt) sortieren
\end{longtable}

View File

@ -10,10 +10,10 @@
\texttt{-c} & Anzahl der Vorkommnisse vor die Zeilen schreiben \tabularnewline\STRUT
\texttt{-d} & Nur doppelte Zeilen ausgeben, jede nur einmal \tabularnewline\STRUT
\texttt{-D} & GNU-Erweiterung: Alle doppelten Zeilen ausgeben \tabularnewline\STRUT
\texttt{-D} & \ding{43} Alle doppelten Zeilen ausgeben \tabularnewline\STRUT
\texttt{-f }\textsl{n} & Die ersten \textsl{n} Felder ignorieren \tabularnewline\STRUT
\texttt{-i} & GNU-Erweiterung: Groß- / Kleinschreibung ignorieren \tabularnewline\STRUT
\texttt{-i} & \ding{43} Groß- / Kleinschreibung ignorieren \tabularnewline\STRUT
\texttt{-s }\textsl{n} & Die ersten \textsl{n} Zeichen ignorieren \tabularnewline\STRUT
\texttt{-u} & Nur einfach vorkommende Zeilen ausgeben \tabularnewline\STRUT
\texttt{-w }\textsl{n} & GNU-Erweiterung: Nur die ersten \textsl{n} Zeichen betrachten
\texttt{-w }\textsl{n} & \ding{43} Nur die ersten \textsl{n} Zeichen betrachten
\end{longtable}

View File

@ -44,13 +44,19 @@ typische Aufgaben beschrieben. Diese enthalten `Links' zu den in Frage
kommenden Werkzeugen. Danach gibt es eine alphabetische Aufzählung der
wichtigsten Kommandos.
Das GNU-Projekt\marginpar{GNU!} hat vielen Kommandos nützliche Parameter
zugefügt, einige der hier beschriebenen Tools stehen ausschließlich auf
GNU-Systemen zur Verfügung. Da diese Optionen nicht auf allen Unix-Systemen zur
Verfügung stehen, werden die betroffenen Stellen wie dieser Absatz am Rand mit
`GNU!' markiert. Wenn diese Kommandos und Optionen benutzt werden muß also das
Zielsystem berücksichtigt werden, im Zweifelsfall sollten die Skripte
ausführlich getestet werden.
\begin{dinglist}{43}
\item Viele der hier vorgestellten Kommandos stehen in erweiterten Versionen
zur Verfügung. Besonders auf GNU-Systemen~--~und somit auch auf Linux~--~gibt
es viele sehr nützliche Parameter, die man sich auf `standardkonformeren'
Systemen nur wünschen kann. Diese Vorteile sind allerdings mit Vorsicht zu
genießen: Wenn sie zum Einsatz kommen sind die entstehenden Skripte nicht mehr
plattformunabhängig.
Um Überraschungen zu vermeiden wurde versucht, diese Besonderheiten kenntlich
zu machen. Stellen mit einer Markierung wie in diesem Absatz sind also
besonders zu betrachten.
\end{dinglist}
\section{Nägel...}\label{naegel}
@ -295,7 +301,7 @@ Prozeduren verwendet werden k
\LTXtable{\textwidth}{tab_kommandos_awk_variablen.tex}
Eigene Variablen können nach Belieben verwendet werden, siehe dazu das Beispiel
mit den TeX-Dateien weiter unten.
mit den \TeX-Dateien weiter unten.
\subsubsection{Beispiele}
@ -397,10 +403,12 @@ Au
\lstinline|cat datei.txt | kommando| Daten an ein Programm übergeben, das nur
von der Standardeingabe lesen kann (Filter).
GNU-\texttt{cat}\marginpar{GNU!} verfügt über eine Reihe von Parametern, um die
Ausgabe zu formatieren, so können mit \texttt{-n} bzw. \texttt{-b} die Zeilen
numeriert werden, oder mit \texttt{-s} mehrere Zeilen zu einer einzigen
zusammengefaßt werden.
\begin{dinglist}{43}
\item GNU-\texttt{cat} verfügt über eine Reihe von Parametern, um die Ausgabe
zu formatieren, so können mit \texttt{-n} bzw. \texttt{-b} die Zeilen numeriert
werden, oder mit \texttt{-s} mehrere Zeilen zu einer einzigen zusammengefaßt
werden.
\end{dinglist}
\index{cat=\texttt{cat}|)}
@ -496,9 +504,14 @@ Will man lediglich die Gruppen-ID
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{chpasswd}\index{chpasswd=\texttt{chpasswd}|(textbf}\marginpar{GNU!}
\subsection{chpasswd}\index{chpasswd=\texttt{chpasswd}|(textbf}
Mit diesem GNU-Kommando bietet sich dem Administrator des Systems die
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Mit diesem Kommando bietet sich dem Administrator des Systems die
Mög\-lich\-keit, scriptgesteuert die Paßwörter für neue Benutzer zu vergeben.
Manuell ändert man ein Paßwort mit dem Kommando
\texttt{passwd}\index{passwd=\texttt{passwd}}, allerdings löscht (flusht)
@ -539,9 +552,11 @@ jeweils mit der Position (dezimal) und den beiden Bytes (oktal).
Durch \texttt{-s} läßt sich die Ausgabe von Unterschieden unterdrücken, der
Exit-Status gibt weiterhin das Ergebnis an.
In der GNU-Version\marginpar{GNU!} gibt es auch Parameter, mit denen Bereiche
der Datei vom Vergleich ausgeschlossen werden können (\texttt{-i}), oder mit
denen nur die ersten n Bytes der Dateien verglichen werden (\texttt{-n}).
\begin{dinglist}{43}
\item In der GNU-Version gibt es auch Parameter, mit denen Bereiche der Datei
vom Vergleich ausgeschlossen werden können (\texttt{-i}), oder mit denen nur
die ersten n Bytes der Dateien verglichen werden (\texttt{-n}).
\end{dinglist}
\index{cmp=\texttt{cmp}|)}
@ -873,8 +888,8 @@ Empf
Wenn der Prozeß sich weigert zu sterben, wartet \texttt{killall} ewig.
Eine ähnliche Funktionalität bietet auch das Kommando \texttt{pkill} (Abschnitt
\ref{pkill}), \texttt{killall} hat aber den Vorteil daß es auf mehr Systemen
zur Verfügung steht.
\ref{pkill}), allerdings hat \texttt{killall} den Vorteil daß es auf mehr
Systemen zur Verfügung steht.
\index{killall=\texttt{killall}|)}
@ -888,9 +903,11 @@ informieren.
Der zu loggende Text wird einfach als Parameter übergeben.
Die GNU-Version\marginpar{GNU!} verfügt über einige Parameter, unter anderem
kann die Nachricht mit \texttt{-s} parallel zum System-Log auch auf der
\begin{dinglist}{43}
\item Die GNU-Version verfügt über einige Parameter, unter anderem kann die
Nachricht mit \texttt{-s} parallel zum System-Log auch auf der
Standard-Fehlerausgabe ausgegeben werden.
\end{dinglist}
\index{logger=\texttt{logger}|)}
@ -902,15 +919,19 @@ Den Inhalt von Verzeichnissen im Dateisystem bringt man mit \texttt{ls} in
Erfahrung. Ein einfacher Aufruf listet lediglich die Dateinamen im aktuellen
oder angegebenen Verzeichnis auf, das Kommando hat aber auch sehr viele
Parameter mit denen sich die Ausgabe anpassen läßt. Hier sind die wichtigsten,
eine vollständige Auflistung bietet wie immer die Man-Page:
eine vollständige Auflistung bietet wie immer die Man-Page.
\marginpar{GNU!}\LTXtable{\textwidth}{tab_kommandos_ls_parameter.tex}
\begin{dinglist}{43}
\item Einige der folgenden Parameter entsprechen nicht dem allgemeinen
Standard:
\end{dinglist}
\LTXtable{\textwidth}{tab_kommandos_ls_parameter.tex}
Besonders informativ gibt sich der Parameter \texttt{-l}, da damit auch die
Eigentümer und die Berechtigungen der Dateien angezeigt werden. Die Ausgabe hat
die folgende Form:
\texttt{-rw-r--r-- 1 rschaten users 6252 Nov 19 14:14 shell.tex}
\lstinline|-rw-r--r-- 1 rschaten users 6252 Nov 19 14:14 shell.tex|
Die linke Spalte der Ausgabe zeigt die bestehenden Berechtigungen. Es ist ein
Block in der Form `drwxrwxrwx'. An Stelle des d können auch andere Buchstaben
@ -985,13 +1006,18 @@ gedreht.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{pgrep}\label{pgrep}\index{pgrep=\texttt{pgrep}|(textbf}\marginpar{GNU!}
\subsection{pgrep}\label{pgrep}\index{pgrep=\texttt{pgrep}|(textbf}
Eine häufig wiederkehrende Aufgabe ist es, zu sehen ob ein bestimmter Prozeß
existiert oder nicht. Falls das Kommando \texttt{pgrep} zur Verfügung steht,
kannn man auf das Konstrukt mit \texttt{ps} und \texttt{grep} verzichten. Der
folgende Aufruf liefert alle Prozeß-IDs, deren Name httpd enthält, inclusive
des vollen Kommandos:
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Eine häufig wiederkehrende Aufgabe ist es, zu sehen ob ein bestimmter
Prozeß existiert oder nicht. Falls das Kommando \texttt{pgrep} zur Verfügung
steht, kannn man auf das Konstrukt mit \texttt{ps} und \texttt{grep}
verzichten. Der folgende Aufruf liefert alle Prozeß-IDs, deren Name httpd
enthält, inclusive des vollen Kommandos:
\lstinline|pgrep -lf httpd|
@ -1012,7 +1038,12 @@ Siehe auch: Abschnitt \ref{beispiele_suchen_prozesse}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{pkill}\label{pkill}\index{pkill=\texttt{pkill}|(textbf}\marginpar{GNU!}
\subsection{pkill}\label{pkill}\index{pkill=\texttt{pkill}|(textbf}
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Dieses Kommando ist eng verwandt mit \texttt{pgrep} (Siehe Abschnitt
\ref{pgrep}), es versteht im Wesentlichen die gleichen Parameter. Allerdings
@ -1091,16 +1122,18 @@ In Skripten m
aktiv ist, ob also zum Beispiel ein bestimmter Serverdienst läuft. Dazu macht
man \texttt{ps} über Optionen gesprächiger.
Das Kommando versteht in der GNU-Version\marginpar{GNU!} zwei unterschiedliche
Arten von Optionen. Den sogenannten Unix- bzw. Posix-Stil und den BSD-Stil.
Zusätzlich gibt es noch ausführliche Parameter, aber die sollen hier nicht
beschrieben werden. Die jeweiligen Formen stehen nicht auf allen Systemen zur
Verfügung, wenn ein Skript beispielsweise auch unter Solaris benutzt werden
soll ist man gezwungen, die Unix-Parametrisierung zu benutzen.
\begin{dinglist}{43}
\item Das Kommando versteht in der GNU-Version zwei unterschiedliche Arten von
Optionen. Den sogenannten Unix- bzw. Posix-Stil und den BSD-Stil. Zusätzlich
gibt es noch ausführliche Parameter, aber die sollen hier nicht beschrieben
werden. Die jeweiligen Formen stehen nicht auf allen Systemen zur Verfügung,
wenn ein Skript beispielsweise auch unter Solaris benutzt werden soll ist man
gezwungen, die Unix-Parametrisierung zu benutzen.
Unix-Parameter zeichnen sich durch die übliche Angabe mit Bindestrich aus.
BSD-Pa\-ra\-me\-ter werden ohne Bindestrich angegeben, was neben den meisten
anderen Kommandos etwas ungewohnt aussieht.
\end{dinglist}
Es gibt sehr viele verschiedene Parameter, die beste Informationsquelle ist wie
immer die Man-Page bzw. ein entsprechendes Buch. Hier werden nur ein paar
@ -1163,20 +1196,20 @@ vor der Interpretation gesch
bewirkt also eine mehrzeilige Eingabe. Dieses Verhalten kann mit dem Parameter
\texttt{-r} abgeschaltet werden.
Normalerweise wird eine Eingabezeile mit einem Newline abgeschlossen. Mit dem
Parameter \texttt{-d}\marginpar{GNU!} ist es möglich, ein anderes
Zeilenendezeichen anzugeben. Beispielsweise liest
\lstinline|read -d " " var| alle Zeichen bis zum ersten Leerzeichen in die
Variable \texttt{var} ein.
\begin{dinglist}{43}
\item Normalerweise wird eine Eingabezeile mit einem Newline abgeschlossen. Mit
dem Parameter \texttt{-d} ist es möglich, ein anderes Zeilenendezeichen
anzugeben. Beispielsweise liest \lstinline|read -d " " var| alle Zeichen bis
zum ersten Leerzeichen in die Variable \texttt{var} ein.
Wenn nur eine bestimmte Zahl von Zeichen gelesen werden soll, kann diese durch
den Parameter \texttt{-n}\marginpar{GNU!} angegeben werden. Der Befehl
den Parameter \texttt{-n} angegeben werden. Der Befehl
\lstinline|read -n 5 var| liest die ersten fünf Zeichen in die Variable
\texttt{var} ein. Demzufolge kann ein Skript durch ein \lstinline|read -n 1|
dazu gebracht werden, auf einen einzelnen Tastendruck~--~nicht zwingend ein
Return~--~zu warten.
Mit dem Parameter \texttt{-p}\marginpar{GNU!} kann man einen Prompt, also eine
Mit dem Parameter \texttt{-p} kann man einen Prompt, also eine
Eingabeaufforderung ausgeben lassen. \lstinline|read -p "Gib was ein:" var|
schreibt also erst den Text \textit{Gib was ein:} auf das Terminal, bevor die
Eingaben in die Variable \texttt{var} übernommen werden. Dieser Prompt wird nur
@ -1185,11 +1218,12 @@ Eingaben aus einer Datei oder aus einem Stream erh
Wenn die Eingabe von einem Terminal kommt und nicht auf dem Bildschirm
erscheinen soll, zum Beispiel bei Paßwortabfragen, kann die Ausgabe mit dem
Parameter \texttt{-s}\marginpar{GNU!} (Silent) unterdrückt werden.
Parameter \texttt{-s} (Silent) unterdrückt werden.
Mit \texttt{-t}\marginpar{GNU!} kann ein Time-Out definiert werden, nach dessen
Ablauf das Kommando mit einem Fehler abbricht. Dieser Parameter ist nur bei
interaktiver Eingabe oder beim Lesen aus einer Pipe aktiv.
Mit \texttt{-t} kann ein Time-Out definiert werden, nach dessen Ablauf das
Kommando mit einem Fehler abbricht. Dieser Parameter ist nur bei interaktiver
Eingabe oder beim Lesen aus einer Pipe aktiv.
\end{dinglist}
Der Rückgabewert des \texttt{read}-Kommandos ist 0, es sei denn es trat ein
Timeout oder ein EOF auf.
@ -1209,8 +1243,10 @@ Verzeichnisse k
Gegensatz zu \texttt{rmdir} werden dann auch sämtliche enthaltenen Dateien und
Unterverzeichnisse gelöscht.
Die GNU-Version\marginpar{GNU!} von \texttt{rm} unterstützt zusätzlich den
Parameter \texttt{-v}, mit dem jeder Löschvorgang ausgegeben wird.
\begin{dinglist}{43}
\item Die GNU-Version von \texttt{rm} unterstützt zusätzlich den Parameter
\texttt{-v}, mit dem jeder Löschvorgang ausgegeben wird.
\end{dinglist}
\index{rm=\texttt{rm}|)}
@ -1232,7 +1268,12 @@ nicht-leere Verzeichnisse k
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{script}\label{script}\index{script=\texttt{script}|(textbf}\marginpar{GNU!}
\subsection{script}\label{script}\index{script=\texttt{script}|(textbf}
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Dieses Kommando eignet sich vorzüglich für das Debuggen fertiger Skripte. Man
ruft es in Verbindung mit einem Dateinamen auf. Dieser Aufruf startet eine neue
@ -1244,6 +1285,7 @@ beendet man den script-Befehl durch die Eingabe von \texttt{exit},
Script schreibt alle Ein- und Ausgaben die an dem Terminal vorgenommen werden
in die angegebene Datei. So kann man auch interaktive Skripte relativ leicht
debuggen, da sowohl Ein- als auch Ausgaben in dem Logfile sichtbar sind.
\index{script=\texttt{script}|)}
@ -1293,8 +1335,12 @@ sed -f script.sed datei.txt
Neben den oben erwähnten Parametern kann \texttt{sed} auch mit \texttt{-n}
ruhig gestellt werden. Damit werden die Zeilen nur dann ausgegeben, wenn das
mittels `p' explizit gefordert wird. Die GNU-Version\marginpar{GNU!} stellt
noch ein paar Parameter zur Verfügung, die Man-Page verrät näheres.
mittels `p' explizit gefordert wird.
\begin{dinglist}{43}
\item Die GNU-Version stellt noch ein paar Parameter zur Verfügung, die
Man-Page verrät näheres.
\end{dinglist}
\subsubsection{Addressierung}
@ -1339,18 +1385,18 @@ Modifikator f
falls mehrere Fundstellen in einer Zeile vorkommen. Der Aufruf sieht wie folgt
aus:
\texttt{s/Suchmuster/Ersatzmuster/g}
\lstinline|s/Suchmuster/Ersatzmuster/g|
Im Ersatzmuster können auch Teile der Fundstelle wieder vorkommen, wenn sie
durch Klammern in einen Puffer kopiert werden:
\texttt{s/Seite ([0-9]*) von ([0-9]*)/\textbackslash{}1 aus \textbackslash{}2/}
\lstinline|s/Seite ([0-9]*) von ([0-9]*)/\1 aus \2/|
Mit \texttt{y} hingegen werden einzelne Buchstaben durch andere vertauscht. Das
folgende Kommando wandelt alle eingehenden Kleinbuchstaben in Großbuchstaben
um\footnote{Umlaute und Sonderzeichen ausgeschlossen}:
\texttt{y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/}
\lstinline|y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/|
Normalerweise werden alle Eingabezeilen nach der Bearbeitung wieder ausgegeben,
unabhängig davon ob sie verändert wurden oder nicht. Das Verhalten kann über
@ -1451,7 +1497,12 @@ sed '/./,$!d'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{seq}\label{seq}\index{seq=\texttt{seq}|(textbf}\marginpar{GNU!}
\subsection{seq}\label{seq}\index{seq=\texttt{seq}|(textbf}
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Oft wird eine auf- oder absteigende Sequenz aufeinanderfolgender Zahlen
benötigt, beispielsweise um eine Schleife 100 mal zu durchlaufen. Es ist nicht
@ -1479,13 +1530,15 @@ mit f
Das Kommando \texttt{sleep} veranlaßt die Shell, für eine angegebene Zeit zu
warten. Die Zeit wird dabei in Sekunden angegeben.
In der GNU-Variante\marginpar{GNU!} von \texttt{sleep} kann die Einheit der
angegebenen Zeitspanne durch Suffixe definiert werden: \lstinline|sleep 10s|
schläft zehn Sekunden, \lstinline|sleep 10m| zehn Minuten. Genauso werden
Stunden (h) und Tage (d) definiert.
\begin{dinglist}{43}
\item In der GNU-Variante von \texttt{sleep} kann die Einheit der angegebenen
Zeitspanne durch Suffixe definiert werden: \lstinline|sleep 10s| schläft zehn
Sekunden, \lstinline|sleep 10m| zehn Minuten. Genauso werden Stunden (h) und
Tage (d) definiert.
Außerdem kann die GNU-Variante auch mit nicht-Integer Zeiten arbeiten:
\lstinline|sleep 0.5| schläft eine halbe Sekunde.
\end{dinglist}
\index{sleep=\texttt{sleep}|)}
@ -1536,8 +1589,10 @@ Parameter \texttt{-n} steuern.
Mit dem Parameter \texttt{-f} (follow) gibt \texttt{tail} neue Zeilen aus,
sobald sie an die Datei angehängt werden.
Die GNU-Version\marginpar{GNU!} kann auch das Ende mehrere Dateien ausgeben
bzw. verfolgen, wenn mehrere Namen angegeben werden.
\begin{dinglist}{43}
\item Die GNU-Version kann auch das Ende mehrere Dateien ausgeben bzw.
verfolgen, wenn mehrere Namen angegeben werden.
\end{dinglist}
\index{tail=\texttt{tail}|)}
@ -1692,8 +1747,12 @@ findet sich in Abschnitt \ref{fehlersuche}.
Mit dem Kommando \texttt{uniq} werden doppelt vorkommende Zeilen in einer
Eingabedatei oder der eingehenden Pipe (Standard-Eingabe) bearbeitet. Per
default steht `bearbeitet' an dieser Stelle für `gelöscht', aber durch
Parameter kann dieses Verhalten angepaßt werden:
Parameter kann dieses Verhalten angepaßt werden.
\begin{dinglist}{43}
\item Einige der folgenden Parameter entsprechen nicht dem allgemeinen
Standard:
\end{dinglist}
\LTXtable{\textwidth}{tab_kommandos_uniq_parameter.tex}
Achtung: \texttt{uniq} betrachtet beim Vergleich nur direkt aufeinander
@ -1731,14 +1790,21 @@ Weitaus h
Zeilen zählen lassen. Weiterhin kann man Bytes (\texttt{-c}) oder Zeichen
(\texttt{-m}) zählen lassen.
Der Parameter \texttt{-L} gibt in der GNU-Version \marginpar{GNU!} die Länge
der längsten enthaltenen Zeile aus.
\begin{dinglist}{43}
\item Der Parameter \texttt{-L} gibt in der GNU-Version die Länge der längsten
enthaltenen Zeile aus.
\end{dinglist}
\index{wc=\texttt{wc}|)}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{which}\label{which}\index{which=\texttt{which}|(textbf}\marginpar{GNU!}
\subsection{which}\label{which}\index{which=\texttt{which}|(textbf}
\begin{dinglist}{43}
\item Dies ist kein Standard-Kommando, es steht nicht auf allen Systemen zur
Verfügung.
\end{dinglist}
Sucht im Pfad (vordefinierte Variable
\texttt{\$PATH}\index{\$PATH=\texttt{\$PATH}}, siehe Abschnitt
@ -1788,12 +1854,14 @@ den \texttt{grep}-Aufruf angeh
werden, wird \texttt{grep} mehrfach aufgerufen, allerdings im Gegensatz zum
obigen Beispiel nicht einmal pro Fundstelle.
Neben einigen anderen Parametern informiert die Manpage der
GNU-Version\marginpar{GNU!} über die Option \texttt{-r}. Damit kann vermieden
werden, daß \texttt{xargs} das Kommando startet wenn keine Eingabe vorhanden
ist. Bezogen auf das angegebene Beispiel würde \texttt{grep} ohne Dateinamen
gestartet, wenn \texttt{find} nichts findet. Es würde auf Input von der
Standardeingabe warten, der aber wahrscheinlich nicht kommt. Das Skript würde
hängen, wenn der Parameter \texttt{-r} nicht angewandt würde.
\begin{dinglist}{43}
\item Neben einigen anderen Parametern informiert die Manpage der GNU-Version
über die Option \texttt{-r}. Damit kann vermieden werden, daß \texttt{xargs}
das Kommando startet wenn keine Eingabe vorhanden ist. Bezogen auf das
angegebene Beispiel würde \texttt{grep} ohne Dateinamen gestartet, wenn
\texttt{find} nichts findet. Es würde auf Input von der Standardeingabe warten,
der aber wahrscheinlich nicht kommt. Das Skript würde hängen, wenn der
Parameter \texttt{-r} nicht angewandt würde.
\end{dinglist}
\index{xargs=\texttt{xargs}|)}

View File

@ -588,15 +588,16 @@ Ein Shell-Skript kann in keiner Weise Einflu
Wenn es aber doch gewünscht wird, daß ein Skript die Umgebung des Benutzers
ändern kann, dann muß es mit dem Source-Kommando aufgerufen werden. Das wird in
der Form \lstinline|source skriptname| bzw. \lstinline|. skriptname| angegeben.
Er bewirkt ähnliches wie ein \verb\#include\ in der Programmiersprache C.
Er wirkt ähnlich wie ein \lstinline|#include| in der Programmiersprache C.
Die `gesourcte' Datei wird eingelesen und ausgeführt, als ob ihr Inhalt an der
Stelle des Befehls stehen würde. Diese Methode wird zum Beispiel beim Login in
den Konfigurationsdateien des Benutzers (z. B. \verb\.profile\, \verb\.bashrc\)
oder während des Bootvorgangs in den Init-Skripten benutzt, um immer wieder
benötigte Funktionen (Starten eines Dienstes, Statusmeldungen auf dem
Bildschirm etc.) in einer zentralen Datei pflegen zu können (siehe Beispiel
unter~\ref{init-skript}).
den Konfigurationsdateien des Benutzers (z. B. \lstinline|.profile|,
\lstinline|.bashrc|) oder während des Bootvorgangs in den Init-Skripten
benutzt, um immer wieder benötigte Funktionen (Starten eines Dienstes,
Statusmeldungen auf dem Bildschirm etc.) in einer zentralen Datei pflegen zu
können (siehe Beispiel unter~\ref{init-skript}).
\index{source=\texttt{source}|)}