Viele ueberarbeitungen
This commit is contained in:
@@ -24,9 +24,10 @@ Shell-Programmierer nicht sinnvoll um den Einsatz dieser Programme herum.
|
||||
In diesem Abschnitt sollen einige dieser Programme mit typischen
|
||||
Einsatzmöglichkeiten vorgestellt werden. Eine vollständige Beschreibung wäre
|
||||
(wenn überhaupt möglich) viel zu lang, um an dieser Stelle untergebracht zu
|
||||
werden. Für ausführlichere Beschreibungen empfiehlt sich das Studium der
|
||||
Man-Pages oder der Kauf eines entsprechenden Buches. Am besten macht man
|
||||
natürlich beides. ;-)
|
||||
werden. \textbf{Dies ist also nur ein grober Überblick, nicht mal annähernd
|
||||
eine vollständige Referenz!} Für ausführlichere Beschreibungen empfiehlt sich
|
||||
das Studium der Man-Pages oder der Kauf eines entsprechenden Buches (Siehe
|
||||
Anhang \ref{quellen}, `Quellen'). Am besten macht man natürlich beides. ;-)
|
||||
|
||||
Eine globale Beschreibung aller gängigen Kommandos würde den Rahmen dieses
|
||||
Textes sprengen. Außerdem wäre es nicht leicht, das zu einer Aufgabe passende
|
||||
@@ -85,10 +86,15 @@ Datei kann viel mehr sein als nur ein paar Daten im Filesystem.
|
||||
\begin{itemize}
|
||||
\item \texttt{basename} (\ref{basename}): Den Namen einer Datei (ohne Pfad) ausgeben
|
||||
\item \texttt{cp} (\ref{cp}): Dateien kopieren
|
||||
\item \texttt{chgrp} (\ref{chgrp}): Gruppen-ID einer Datei ändern
|
||||
\item \texttt{chmod} (\ref{chmod}): Zugriffsrechte einer Datei ändern
|
||||
\item \texttt{chown} (\ref{chown}): Eigentümer einer Datei ändern
|
||||
\item \texttt{dirname} (\ref{dirname}): Den Pfad zu einer Datei (ohne den Namen) ausgeben
|
||||
\item \texttt{find} (\ref{find}): Dateien suchen
|
||||
\item \texttt{mkdir} (\ref{mkdir}): Verzeichnisse anlegen
|
||||
\item \texttt{mv} (\ref{mv}): Dateien verschieben
|
||||
\item \texttt{rm} (\ref{rm}): Dateien löschen
|
||||
\item \texttt{rmdir} (\ref{rmdir}): Verzeichnisse löschen
|
||||
\item \texttt{touch} (\ref{touch}): Eine leere Datei anlegen, bzw. das Zugriffsdatum einer Datei ändern
|
||||
\item \texttt{xargs} (\ref{xargs}): Ausgaben eines Kommandos als Parameter eines anderen Kommandos benutzen
|
||||
\end{itemize}
|
||||
@@ -148,6 +154,13 @@ Verf
|
||||
|
||||
\section{... und Hämmer}\label{haemmer}
|
||||
|
||||
Um es noch einmal zu betonen: \textbf{Dies ist keine vollständige
|
||||
Kommandoreferenz!} Es werden nur die wichtigsten Kommandos vorgestellt, und
|
||||
deren Funktion wird in den meisten Fällen auch nur kurz angerissen. Für
|
||||
ausgiebigere Informationen empfehle ich entsprechende Bücher (siehe Anhang
|
||||
\ref{quellen}, `Quellen') und vor allem die Man-Pages.
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{awk}\label{awk}\index{awk=\texttt{awk}|(textbf}
|
||||
|
||||
@@ -170,18 +183,14 @@ der eigentlichen Datei wird zur
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{bc}\label{bc}\index{bc=\texttt{bc}|(textbf}
|
||||
|
||||
Mit dem Kommando \texttt{bc} verfügt die Shell praktisch über einen
|
||||
Taschenrechner. Die Man-Page verrät, daß es sich hierbei um ein erstaunlich
|
||||
komplexes Programm handelt, in der Praxis findet man allerdings meistens
|
||||
einfache Anwendungen wie das inkrementieren einer Laufvariable (\texttt{i=`bc
|
||||
\$i + 1`}).
|
||||
Bei \texttt{bc} handelt es sich, ähnlich wie bei \texttt{expr} um einen
|
||||
Taschenrechner. Allerdings verfügt dieses Kommando um eine vergleichsweise
|
||||
komplexe Syntax, die auch Berechnungen mit hoher Genauigkeit zulassen.
|
||||
|
||||
Bei Multiplikationen ist darauf zu achten, daß der Stern in der Shell eine
|
||||
Sonderbedeutung hat, er muß also gequoted werden: \texttt{i=`bc \$i
|
||||
\textbackslash{}* 3`}.
|
||||
|
||||
Eine andere Möglichkeit für einfache Rechnungen besteht in der sogenannten
|
||||
Arithmetik-Expansion (Siehe \ref{arithmetikexpansion}).
|
||||
Für einfache Grundrechenaufgaben wie das Inkrementieren von Variablen sollte
|
||||
man entweder die eingebaute Arithmetik-Expansion der Shell (Siehe
|
||||
\ref{arithmetikexpansion}) oder das wesentlich ressourcenfreundlichere
|
||||
\texttt{expr} (Siehe \ref{expr}) benutzen.
|
||||
|
||||
\index{bc=\texttt{bc}|)}
|
||||
|
||||
@@ -211,6 +220,87 @@ werden.
|
||||
\index{cat=\texttt{cat}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{chgrp}\label{chgrp}\index{chgrp=\texttt{chgrp}|(textbf}
|
||||
|
||||
Jede Datei gehört einem Benutzer und einer Gruppe. Letzteres läßt sich mit
|
||||
\texttt{chgrp} einstellen. Als Parameter wird der Name oder die ID der Gruppe,
|
||||
sowie ein oder mehrere Dateinamen übergeben. Verzeichnisse können rekursiv mit
|
||||
dem Parameter \texttt{-R} bearbeitet werden.
|
||||
|
||||
Der Eingentümer der Datei wird mit \texttt{chown} (Abschnitt \ref{chown})
|
||||
festgelegt.
|
||||
|
||||
\index{chgrp=\texttt{chgrp}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{chmod}\label{chmod}\index{chmod=\texttt{chmod}|(textbf}
|
||||
|
||||
In unixoiden Systemen verfügt jede Datei über eine Reihe von Attributen. Damit
|
||||
kann eine Menge gemacht werden, für den vollen Funktionsumfang empfiehlt sich
|
||||
das Studium der Man-Page oder einer umfangreicheren Kommandoreferenz. Hier nur
|
||||
das wichtigste in Kürze:
|
||||
|
||||
Die Syntax lautet \texttt{chmod [options] mode file...}.
|
||||
|
||||
Die einzig wichtige Option ist, analog zu \texttt{chgrp} und \texttt{chown} der
|
||||
Parameter \texttt{-R} für die rekursive Bearbeitung von Verzeichnissen.
|
||||
|
||||
In der Syntax steht `file' für einen oder mehrere Dateinamen.
|
||||
|
||||
Den Modus einer Datei sieht man, indem man \texttt{ls -l} darauf ansetzt, die
|
||||
Ausgabe wird im entsprechenden Abschnitt (\ref{ls}) beschrieben.
|
||||
|
||||
Dort ist von den drei `rwx-Blöcken' die Rede, die die Berechtigungen für User
|
||||
(u), Group (g) und Other (o) angeben. Genau die können mittels \texttt{chmod}
|
||||
gesteuert werden. Zusätzlich gibt es hier noch die Angabe All (a), mit denen
|
||||
die Rechte für alle Benutzer verändert werden können.
|
||||
|
||||
Hier wird der Modus gesteuert, indem direkt angegeben wird für wen welche
|
||||
Rechte gelten sollen. Mit `+' werden die Rechte erweitert, `-' nimmt Rechte
|
||||
und mit `=' werden die Rechte hart gesetzt.
|
||||
|
||||
\texttt{chmod u+x datei} macht die Datei für den Besitzer ausführbar. Mit
|
||||
\texttt{chmod u=rw,go=r datei} werden die Rechte auf `rw-r--r--' gesetzt, der
|
||||
Besitzer kann lesen und schreiben, alle anderen nur lesen.
|
||||
|
||||
Neben dieser Art der Notation gibt es noch eine~--~wesentlich
|
||||
gängigere~--~numerische Schreibweise. Dabei werden die Berechtigungen in Form
|
||||
von Zahlen angegeben. Dabei werden drei Zahlen von eins bis sieben benutzt.
|
||||
Deren Bedeutung ergibt sich, wenn man sich die drei Stellen `rwx' als Binärzahl
|
||||
vorstellt. Das x steht an der niederwertigsten Stelle, erhält also den Wert 1.
|
||||
Das w steht für die 2 und r für 4. In Summe ergeben diese Zahlen die
|
||||
Berechtigung. Also ist `rwx' gleichbedeutend mit 4+2+1=7. `rw' entspricht
|
||||
4+2=6. Die reine Leseberechtigung `r' bleibt als 4 stehen.
|
||||
|
||||
Zur Verdeutlichung ein paar Beispiele, wo es möglich ist in beiden Notationen:
|
||||
|
||||
\LTXtable{\textwidth}{tab_kommandos_chmod_beispiele.tex}
|
||||
|
||||
Am wichtigsten sind also die Aufrufe \texttt{chmod 644 datei} und \texttt{chmod
|
||||
755 datei}, je nachdem ob die Datei ausführbar sein soll oder nicht.
|
||||
|
||||
\index{chmod=\texttt{chmod}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{chown}\label{chown}\index{chown=\texttt{chown}|(textbf}
|
||||
|
||||
Mit \texttt{chown} lassen sich Benutzer- und Gruppen-ID von Dateien und
|
||||
Verzeichnissen festlegen. Mit dem Parameter \texttt{-R} sogar rekursiv für
|
||||
Verzeichnisse.
|
||||
|
||||
Ein einzelner Parameter gibt die User-ID oder den Namen des zukünfigen
|
||||
Benutzers an, in der Form name:gruppe können sowohl User- als auch Gruppen-ID
|
||||
gleichzeitig geändert werden.
|
||||
|
||||
Will man lediglich die Gruppen-ID ändern, benutzt man das Kommando
|
||||
\texttt{chgrp} (Abschnitt \ref{chgrp}).
|
||||
|
||||
\index{chown=\texttt{chown}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{chpasswd}\label{script}\index{chpasswd=\texttt{chpasswd}|(textbf}
|
||||
|
||||
@@ -245,7 +335,7 @@ Mit \texttt{cp} werden Dateien kopiert. Die wichtigsten Optionen im
|
||||
Zusammenhang mit Skripten sind \texttt{-f} und \texttt{-R}. Ersteres erzwingt
|
||||
(force) das Kopieren, falls an der Zielstelle schon Dateien existieren werden
|
||||
sie überschrieben. Letzteres ermöglicht ein rekursives Kopieren.
|
||||
Verzeichnisse~---~auch leere~---~können nur mit \texttt{-R} kopiert werden.
|
||||
Verzeichnisse~--~auch leere~--~können nur mit \texttt{-R} kopiert werden.
|
||||
|
||||
\index{cp=\texttt{cp}|)}
|
||||
|
||||
@@ -295,10 +385,34 @@ der Praxis oft als sehr hilfreich:
|
||||
\index{echo=\texttt{echo}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{eval}\label{eval}\index{eval=\texttt{eval}|(textbf}
|
||||
|
||||
TODO!!! eval
|
||||
|
||||
\index{eval=\texttt{eval}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{expr}\label{expr}\index{expr=\texttt{expr}|(textbf}
|
||||
|
||||
TODO!!! expr
|
||||
Mit dem Kommando \texttt{expr} verfügt die Shell praktisch über einen
|
||||
Taschenrechner für einfache Berechnungen. Für komplexe Aufgaben bietet sich das
|
||||
Tool \texttt{bc} an, näheres dazu steht in Abschnitt \ref{bc}.
|
||||
|
||||
Genau genommen kann man mit \texttt{expr} nicht nur Berechnungen
|
||||
durch\-füh\-ren, sondern ganz allgemein `Ausdrücke evaluieren'. Damit ist
|
||||
gemeint, daß es zum Beispiel auch Operatoren für Pattern-Matching gibt. Die
|
||||
wichtigsten Operatoren lauten wie folgt:
|
||||
|
||||
\LTXtable{\textwidth}{tab_kommandos_expr_parameter.tex}
|
||||
|
||||
Bei einigen Sonderzeichen ist deren Bedeutung in der Shell zu berücksichtigen,
|
||||
sie sind also durch Anführungszeichen oder Backslashes zu quoten:
|
||||
\texttt{i=`expr \$i \textbackslash{}* 3`}.
|
||||
|
||||
Eine andere Möglichkeit für einfache Rechnungen besteht in der sogenannten
|
||||
Arithmetik-Expansion (Siehe \ref{arithmetikexpansion}).
|
||||
|
||||
\index{expr=\texttt{expr}|)}
|
||||
|
||||
@@ -317,9 +431,9 @@ Siehe auch: Abschnitt \ref{beispiele_suchen_dateien}.
|
||||
\subsection{grep}\label{grep}\index{grep=\texttt{grep}|(textbf}
|
||||
|
||||
Das Tool \texttt{grep} stammt aus dem Standard-Repertoire eines jeden
|
||||
Sys\-tem\-ad\-mi\-ni\-stra\-tors. Mit seiner Hilfe kann in einer oder mehreren Dateien,
|
||||
oder eben auch in einem Datenstrom nach dem Auftreten bestimmter regulärer
|
||||
Ausdrücke (siehe \ref{mustererkennung}) gesucht werden.
|
||||
Sys\-tem\-ad\-mi\-ni\-stra\-tors. Mit seiner Hilfe kann in einer oder mehreren
|
||||
Dateien, oder eben auch in einem Datenstrom nach dem Auftreten bestimmter
|
||||
regulärer Ausdrücke (siehe \ref{mustererkennung}) gesucht werden.
|
||||
|
||||
Die folgende Tabelle stellt einige der vielen Parameter vor:
|
||||
|
||||
@@ -354,15 +468,62 @@ die ganze Wahrheit.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{killall}\label{killall}\index{killall=\texttt{killall}|(textbf}
|
||||
|
||||
TODO!!! killall
|
||||
Im Abschnitt über \texttt{kill} (\ref{kill}) wird beschrieben, wie man ein
|
||||
Signal an einen Prozeß schickt, dessen ID bekannt ist. Kennt man die ID nicht,
|
||||
oder will man das Signal an mehrere Prozesse schicken, kann dieses Kommando
|
||||
eine große Hilfe darstellen.
|
||||
|
||||
Mit dem Parameter \texttt{-i} wird vor jedem Signal interaktiv gefragt, ob es
|
||||
geschickt werden soll. Mit \texttt{-v} wird angegeben, ob die Signale
|
||||
erfolgreich versandt wurden, \texttt{-q} hingegen unterdrückt die Ausgaben.
|
||||
|
||||
Da ein Prozeß nach einem Signal nicht notwendigerweise sofort stirbt, gibt es
|
||||
eine Option \texttt{-w}. Diese Veranlaßt \texttt{killall} zu warten, bis alle
|
||||
Empfänger tot sind. Dieser Parameter ist allerdings mit Vorsicht zu genießen:
|
||||
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.
|
||||
|
||||
\index{killall=\texttt{killall}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{ls}\label{ls}\index{ls=\texttt{ls}|(textbf}
|
||||
|
||||
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
|
||||
stehen, hier wird der Dateityp angegeben, also ob es sich um eine einfache
|
||||
Datei (-), ein Verzeichnis (d), einen Link (l) oder ähnliches\footnote{Siehe
|
||||
Man-Page} handelt. An Stelle der rwx-Blöcke können auch Striche stehen, die
|
||||
stehen für nicht gesetzte Attribute.
|
||||
|
||||
TODO!!! ls
|
||||
|
||||
\index{ls=\texttt{ls}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{mkdir}\label{mkdir}\index{mkdir=\texttt{mkdir}|(textbf}
|
||||
|
||||
Mit diesem Kommando werden Verzeichnisse angelegt. Dabei kann mit \texttt{-m}
|
||||
angegeben werden, welche Berechtigungen das Verzeichnis bekommen soll. Mit
|
||||
\texttt{-p} werden bei Bedarf auch Parent-Verzeichnisse angelegt, es entsteht
|
||||
also ein kompletter Pfad.
|
||||
|
||||
Entfernen lassen sich Verzeichnisse mit \texttt{rmdir} (Abschnitt \ref{rmdir}).
|
||||
|
||||
\index{mkdir=\texttt{mkdir}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{mv}\label{mv}\index{mv=\texttt{mv}|(textbf}
|
||||
|
||||
TODO!!! mv
|
||||
Dateien und Verzeichnisse können mit dem Kommando \texttt{mv} verschoben
|
||||
werden. Falls am Ziel schon Dateien existieren erzwingt der Parameter
|
||||
\texttt{-f} die Aktion, die alten Dateien werden überschrieben. Mit \texttt{-i}
|
||||
wird der Vorgang interaktiv, vor jeder Dateibewegung wird nachgefragt.
|
||||
|
||||
\index{mv=\texttt{mv}|)}
|
||||
|
||||
@@ -370,7 +531,24 @@ TODO!!! mv
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{pgrep}\label{pgrep}\index{pgrep=\texttt{pgrep}|(textbf}
|
||||
|
||||
TODO!!! pgrep
|
||||
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:
|
||||
|
||||
\texttt{pgrep -lf httpd}
|
||||
|
||||
Über weitere Parameter läßt sich genauer spezifizieren, wonach gesucht werden
|
||||
soll, hier die wichtigsten:
|
||||
|
||||
\LTXtable{\textwidth}{tab_kommandos_pgrep_parameter.tex}
|
||||
|
||||
Die Ausgabe enthält per Default nur die Prozeß-IDs der Fundstellen. Diese läßt
|
||||
sich als Parameter für andere Programme benutzen. Das folgende Beispiel liefert
|
||||
detaillierte Informationen über alle xterm-Prozesse:
|
||||
|
||||
\texttt{ps -fp \$(pgrep -d, -x xterm)}
|
||||
|
||||
Siehe auch: Abschnitt \ref{beispiele_suchen_prozesse}.
|
||||
|
||||
@@ -380,7 +558,24 @@ Siehe auch: Abschnitt \ref{beispiele_suchen_prozesse}.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{pkill}\label{pkill}\index{pkill=\texttt{pkill}|(textbf}
|
||||
|
||||
TODO!!! pkill
|
||||
Dieses Kommando ist eng verwandt mit \texttt{pgrep} (Siehe Abschnitt
|
||||
\ref{pgrep}), es versteht im Wesentlichen die gleichen Parameter. Allerdings
|
||||
werden die Fundstellen hier nicht ausgegeben. Wie der Name schon andeutet,
|
||||
werden hiermit Prozesse umgebracht. Da man hier mit einem Kommando unter
|
||||
Umständen viele Prozesse beendet, sollten \textbf{die verwendeten Parameter
|
||||
genau unter die Lupe} genommen werden, um `Kollateralschäden' zu vermeiden. :-)
|
||||
|
||||
Es besteht auch die Möglichkeit, den Prozessen andere Signale zuzuschicken,
|
||||
diese Funktion wird im Abschnitt zu \texttt{kill} (\ref{kill}) näher
|
||||
beschrieben. Das folgende Kommando veranlaßt beispielsweise den Syslog-Daemon,
|
||||
seine Konfiguration neu einzulesen:
|
||||
|
||||
\texttt{pkill -HUP syslogd}
|
||||
|
||||
Das Kommando \texttt{killall} (Abschnitt \ref{killall}) bietet eine ähnliche
|
||||
Funktionalität, allerdings fehlen ihm einige Parameter. Trotzdem sollte im
|
||||
Zweifel \texttt{killall} benutzt werden, da es auf mehr Systemen zur Verfügung
|
||||
steht.
|
||||
|
||||
\index{pkill=\texttt{pkill}|)}
|
||||
|
||||
@@ -429,7 +624,7 @@ Wenn nur eine bestimmte Zahl von Zeichen gelesen werden soll, kann diese durch
|
||||
den Parameter \texttt{-n} angegeben werden. Der Befehl \texttt{read -n 5 var}
|
||||
liest die ersten fünf Zeichen in die Variable \texttt{var} ein. Demzufolge kann
|
||||
ein Skript durch ein \texttt{read -n 1} dazu gebracht werden, auf einen
|
||||
einzelnen Tastendruck~---~nicht zwingend ein Return~---~zu warten.
|
||||
einzelnen Tastendruck~--~nicht zwingend ein Return~--~zu warten.
|
||||
|
||||
Mit dem Parameter \texttt{-p} kann man einen Prompt, also eine
|
||||
Eingabeaufforderung ausgeben lassen. \texttt{read -p \dq{}Gib was ein:\dq~var}
|
||||
@@ -460,11 +655,37 @@ Timeout oder ein EOF auf.
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{rm}\label{rm}\index{rm=\texttt{rm}|(textbf}
|
||||
|
||||
TODO!!! rm
|
||||
Mit diesem Kommando können Dateien und Verzeichnisse gelöscht werden. Dabei
|
||||
kann man vorsichtig vorgehen, indem man mit \texttt{-i} dafür sorgt, daß jeder
|
||||
Löschvorgang bestätigt werden muß. Oder rabiat, indem man mit \texttt{-f} das
|
||||
Löschen erzwingt.
|
||||
|
||||
Verzeichnisse können mit dem Parameter \texttt{-R} entfernt werden, im
|
||||
Gegensatz zu \texttt{rmdir} werden dann auch sämtliche enthaltenen Dateien und
|
||||
Unterverzeichnisse gelöscht.
|
||||
|
||||
Die GNU-Version von \texttt{rm} unterstützt zusätzlich den Parameter
|
||||
\texttt{-v}, mit dem jeder Löschvorgang ausgegeben wird.
|
||||
|
||||
\index{rm=\texttt{rm}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{rmdir}\label{rmdir}\index{rmdir=\texttt{rmdir}|(textbf}
|
||||
|
||||
Mit \texttt{rmdir} werden Verzeichnisse gelöscht. Das funktioniert nur, wenn
|
||||
sie leer sind. Mit \texttt{-p} kann ein kompletter Verzeichnispfad gelöscht
|
||||
werden, will sagen: Alle höher liegenden Verzeichnisse im angegebenen Pfad
|
||||
werden gelöscht. Voraussetzung ist hier natürlich auch, daß die Verzeichnisse
|
||||
nichts außer dem angegebenen Unterverzeichnis enthalten.
|
||||
|
||||
Angelegt werden Verzeichnisse mit \texttt{mkdir} (Abschnitt \ref{mkdir}),
|
||||
nicht-leere Verzeichnisse können rekursiv mit \texttt{rm -r} (Abschnitt
|
||||
\ref{rm}) gelöscht werden.
|
||||
|
||||
\index{rmdir=\texttt{rmdir}|)}
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{script}\label{script}\index{script=\texttt{script}|(textbf}
|
||||
|
||||
@@ -492,7 +713,22 @@ TODO!!! sed
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{seq}\label{seq}\index{seq=\texttt{seq}|(textbf}
|
||||
|
||||
TODO!!! seq
|
||||
Oft wird eine auf- oder absteigende Sequenz aufeinanderfolgender Zahlen
|
||||
benötigt, beispielsweise um eine Schleife 100 mal zu durchlaufen. Es ist nicht
|
||||
sehr performant bei jedem Schleifendurchlauf hochzuzählen und dann die
|
||||
entstandene Zahl mit dem Limit zu vergleichen. Daher nimmt man an der Stelle
|
||||
\texttt{seq} zur Hilfe.
|
||||
|
||||
Die zu zählenden Werte werden durch drei unterschiedliche Arten der
|
||||
Parametrisierung definiert: Ein Aufruf in der Form \texttt{seq 10} gibt die
|
||||
Zahlen von 1 bis 10 aus. Mit \texttt{seq 10 20} wird von 10 bis 20 gezählt, und
|
||||
\texttt{seq 20 -2 10} zählt in zweierschritten rückwärts von 20 nach 10.
|
||||
|
||||
Per default kommen die Werte zeilenweise, mit dem Parameter \texttt{-s} kann
|
||||
aber auch ein anderes Trennzeichen definiert werden. Will man etwas numerieren
|
||||
und später nach den Zahlen sortieren, ist es sinnvoll wenn `schmalere' Zahlen
|
||||
mit führenden Nullen aufgefüllt werden. Das erreicht man mit dem Parameter
|
||||
\texttt{-w}.
|
||||
|
||||
\index{seq=\texttt{seq}|)}
|
||||
|
||||
@@ -500,7 +736,16 @@ TODO!!! seq
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{sleep}\label{sleep}\index{sleep=\texttt{sleep}|(textbf}
|
||||
|
||||
TODO!!! sleep
|
||||
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 von \texttt{sleep} kann die Einheit der angegebenen
|
||||
Zeitspanne durch Suffixe definiert werden: \texttt{sleep 10s} schläft zehn
|
||||
Sekunden, \texttt{sleep 10m} zehn Minuten. Genauso werden Stunden (h) und Tage
|
||||
(d) definiert.
|
||||
|
||||
Außerdem kann die GNU-Variante auch mit nicht-Integer Zeiten arbeiten:
|
||||
\texttt{sleep 0.5} schläft eine halbe Sekunde.
|
||||
|
||||
\index{sleep=\texttt{sleep}|)}
|
||||
|
||||
@@ -508,7 +753,34 @@ TODO!!! sleep
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{sort}\label{sort}\index{sort=\texttt{sort}|(textbf}
|
||||
|
||||
TODO!!! sort
|
||||
Mit diesem Befehl wird wie der Name schon andeutet sortiert. Wenn kein
|
||||
Dateiname als Parameter angegeben wird, liest \texttt{sort} von der
|
||||
Standard-Eingabe. Geschrieben wird immer auf der Standard-Ausgabe.
|
||||
|
||||
Man kann sich vorstellen, daß ein solches Kommando recht flexibel sein muß,
|
||||
daher stehen eine Menge Parameter zur Verfügung:
|
||||
|
||||
\LTXtable{\textwidth}{tab_kommandos_sort_parameter.tex}
|
||||
|
||||
Die Sortierung nach der Spalte (mit \texttt{-k}) ist etwas tricky. Die genaue
|
||||
Syntax wird in der Man-Page mit \texttt{-k POS1[,POS2]} angegeben, das bedeutet
|
||||
man muß einen Parameter angeben, man kann bei Bedarf einen zweiten angeben.
|
||||
Bei der Sortierung wird dann der Bereich ab POS1, bzw. der Bereich zwischen
|
||||
POS1 und POS2 berücksichtigt.
|
||||
|
||||
Dabei lautet die Syntax für POS \texttt{F[.C][OPTS]}. Dabei gibt F die
|
||||
Feldnummer an (siehe Parameter \texttt{-t}). Wenn nicht nach dem Feld an sich
|
||||
sortiert werden soll, kann C die Position des Zeichens innerhalb des Feldes
|
||||
angeben. Und als ob das noch nicht kompliziert genug wäre, kann man dem ganzen
|
||||
Konstrukt noch einen einbuchstabigen Parameter für die Sortier-Option mitgeben.
|
||||
|
||||
Wenn das angegebene Feld nicht existiert wird nach der ganzen Zeile sortiert.
|
||||
|
||||
OK, Beispiele:
|
||||
|
||||
\LTXtable{\textwidth}{tab_kommandos_sort_beispiele.tex}
|
||||
|
||||
Weitere Parameter verrät wie immer die Man-Page.
|
||||
|
||||
\index{sort=\texttt{sort}|)}
|
||||
|
||||
@@ -530,7 +802,12 @@ sobald sie an die Datei angeh
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{tee}\label{tee}\index{tee=\texttt{tee}|(textbf}
|
||||
|
||||
TODO!!! tee
|
||||
Dies ist praktisch ein T-Stück für Pipes. \texttt{tee} liest von seiner
|
||||
Standard-Eingabe, und gibt alle Eingaben direkt auf der Standard-Ausgabe wieder
|
||||
aus. Nebenbei werden die Ausgaben in eine oder mehrere Dateien geschrieben.
|
||||
|
||||
Wenn die Ausgabedateien schon existieren, werden sie überschrieben. Dieses
|
||||
Verhalten kann mit dem Parameter \texttt{-a} geändert werden.
|
||||
|
||||
\index{tee=\texttt{tee}|)}
|
||||
|
||||
@@ -558,7 +835,15 @@ Referenzdatei angepa
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{wc}\label{wc}\index{wc=\texttt{wc}|(textbf}
|
||||
|
||||
TODO!!! wc
|
||||
Wie der Name schon suggeriert\footnote{Oder etwa nicht?!? ;-)} kann man mit
|
||||
diesem Kommando Wörter zählen (word count). Gezählt wird entweder in einer
|
||||
Datei, oder~--~wenn kein Dateiname angegeben wurde~--~in der Standardeingabe.
|
||||
|
||||
Weitaus häufiger wird aber der Parameter \texttt{-l} benutzt, mit dem sich die
|
||||
Zeilen zählen lassen. Weiterhin kann man Bytes (\texttt{-c}) oder Zeichen
|
||||
(\texttt{-m}) zählen lassen.
|
||||
|
||||
Der Parameter \texttt{-L} gibt die Länge der längsten enthaltenen Zeile aus.
|
||||
|
||||
\index{wc=\texttt{wc}|)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user