From 5b9829acef3d05fad03bc4b8763b942d7db486a3 Mon Sep 17 00:00:00 2001 From: rschaten Date: Thu, 3 Feb 2005 22:24:18 +0000 Subject: [PATCH] Viele Neuerungen --- beispiele.tex | 20 ++- schmutzige_tricks.tex | 20 +-- shell.tex | 5 +- tab_kommandos_ls_parameter.tex | 10 +- tab_kommandos_uniq_parameter.tex | 6 +- werkzeugkasten.tex | 216 +++++++++++++++++++---------- wie_sieht_ein_shell_skript_aus.tex | 13 +- 7 files changed, 186 insertions(+), 104 deletions(-) diff --git a/beispiele.tex b/beispiele.tex index 9b363b8..b3da401 100644 --- a/beispiele.tex +++ b/beispiele.tex @@ -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 diff --git a/schmutzige_tricks.tex b/schmutzige_tricks.tex index eb86ab6..1605b3d 100644 --- a/schmutzige_tricks.tex +++ b/schmutzige_tricks.tex @@ -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. diff --git a/shell.tex b/shell.tex index a3a9232..91cc566 100644 --- a/shell.tex +++ b/shell.tex @@ -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} diff --git a/tab_kommandos_ls_parameter.tex b/tab_kommandos_ls_parameter.tex index 1cc38d5..a16f051 100644 --- a/tab_kommandos_ls_parameter.tex +++ b/tab_kommandos_ls_parameter.tex @@ -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} diff --git a/tab_kommandos_uniq_parameter.tex b/tab_kommandos_uniq_parameter.tex index 320f342..2575df9 100644 --- a/tab_kommandos_uniq_parameter.tex +++ b/tab_kommandos_uniq_parameter.tex @@ -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} diff --git a/werkzeugkasten.tex b/werkzeugkasten.tex index 1b202d1..28a0f02 100644 --- a/werkzeugkasten.tex +++ b/werkzeugkasten.tex @@ -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}|)} diff --git a/wie_sieht_ein_shell_skript_aus.tex b/wie_sieht_ein_shell_skript_aus.tex index 1ea32e4..3ddcddb 100644 --- a/wie_sieht_ein_shell_skript_aus.tex +++ b/wie_sieht_ein_shell_skript_aus.tex @@ -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}|)}