Viele Neuerungen
This commit is contained in:
parent
82d1e3e470
commit
5b9829acef
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
@ -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}
|
||||
|
@ -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}|)}
|
||||
|
@ -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}|)}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user