Struktur umgestellt
This commit is contained in:
		| @@ -28,30 +28,97 @@ werden. F | ||||
| Man-Pages oder der Kauf eines entsprechenden Buches. Am besten macht man | ||||
| nat<EFBFBD>rlich beides. ;-) | ||||
|  | ||||
| \section{Ein- und Ausgabe}\label{ein_und_ausgabe} | ||||
| Eine globale Beschreibung aller g<>ngigen Kommandos w<>rde den Rahmen dieses | ||||
| Textes sprengen. Au<41>erdem w<>re es nicht leicht, das zu einer Aufgabe passende | ||||
| Werkzeug zu finden. Die Werkzeuge nach Aufgaben zu sortieren f<>llt allerdings | ||||
| auch nicht leicht. Die Entwickler der Kommandos versuchen, ihre Tools m<>glichst | ||||
| universell einsetzbar zu halten, also gibt es keine 1:1-Beziehung zwischen | ||||
| Problem und L<>sung. | ||||
|  | ||||
| Um sowohl das Finden eines Werkzeugs zu einem gegebenen Problem als auch das | ||||
| Finden einer Beschreibung zu einem gegebenen Werkzeug zu vereinfachen, und um | ||||
| die oben beschriebene n:m-Beziehung abzubilden, werden hier also zun<75>chst | ||||
| typische Aufgaben beschrieben. Diese enthalten 'Links' zu den in Frage | ||||
| kommenden Werkzeugen. Danach gibt es eine alphabetische Aufz<66>hlung der | ||||
| wichtigsten Kommandos. | ||||
|  | ||||
| \section{N<EFBFBD>gel...}\label{naegel} | ||||
|  | ||||
| \subsection{Ein- und Ausgabe}\label{ein_und_ausgabe} | ||||
|  | ||||
| Beinahe jedes Skript verwendet in irgendeiner Form die Ein- oder Ausgabe. Sei | ||||
| es in interaktiver Art auf dem Terminal, oder im Hintergrund auf Dateien. | ||||
| Einige grundlegende Kommandos in diesem Zusammenhang werden hier vorgestellt. | ||||
|  | ||||
| \subsection{echo}\label{echo}\index{echo=\texttt{echo}|(textbf} | ||||
|  | ||||
| Dies ist wohl der grundlegendste Befehl, der in einem Skript verwendet werden | ||||
| kann. Er ist die Voraussetzung, um eines der wichtigsten Werkzeuge der | ||||
| Kybernetik auch mittels eines Shell-Skriptes effizient umzusetzen: Hello World. | ||||
| :-) | ||||
|  | ||||
| Die eigentliche Aufgabe dieses Befehls d<>rfte jedem bekannt sein, der sich bis | ||||
| zu dieser Stelle durchgearbeitet hat. Allerdings wissen viele nicht, da<64> auch | ||||
| der echo-Befehl <20>ber Parameter verf<72>gt. Zumindest zwei davon erweisen sich in | ||||
| der Praxis oft als sehr hilfreich: | ||||
|  | ||||
| \LTXtable{\textwidth}{tab_kommandos_echo_parameter.tex} | ||||
|  | ||||
| \index{echo=\texttt{echo}|)} | ||||
| cat | ||||
| echo | ||||
| head | ||||
| printf | ||||
| read | ||||
| tail | ||||
|  | ||||
|  | ||||
| \subsection{printf} | ||||
| \subsection{Pfade und Dateien}\label{pfade_und_dateien} | ||||
|  | ||||
| Eine der Hautaufgaben von Shell-Skripten ist nat<61>rlich das Hantieren mit | ||||
| Dateien. In diesem Abschnitt geht es allerdings nicht um den Umgang mit | ||||
| Dateiinhalten, sondern vielmehr werden einige n<>tzliche Tools im Umgang mit | ||||
| Dateien an sich vorgestellt. | ||||
|  | ||||
| basename | ||||
| dirname | ||||
| touch | ||||
|  | ||||
|  | ||||
| \subsection{Pipes manipulieren}\label{pipes_manipulieren}\index{Pipe|(textbf} | ||||
|  | ||||
| Das Konzept der Pipes (R<>hren) wird bereits in dem Kapitel <20>ber Befehlsformen | ||||
| (\ref{befehlsformen}) vorgestellt. Im wesentlichen besteht es darin, da<64> Daten | ||||
| von einem Programm an ein anderes weitergeleitet werden. Auf diese Weise | ||||
| entsteht eine sogenannte \textit{Pipeline}\index{Pipeline} aus mehreren | ||||
| Kommandos. | ||||
|  | ||||
| Einige Kommandos sind f<>r den Einsatz in einem solchen Konstrukt pr<70>destiniert, | ||||
| obwohl die meisten auch alleine eingesetzt werden k<>nnen. Einige dieser | ||||
| Tools sollen im Folgenden vorgestellt werden. | ||||
|  | ||||
| grep | ||||
| sed | ||||
| awk | ||||
| sort | ||||
| tee | ||||
| wc | ||||
| \index{Pipe|)} | ||||
|  | ||||
|  | ||||
| \subsection{Proze<EFBFBD>management}\label{prozessmanagement} | ||||
|  | ||||
| TODO!! | ||||
|  | ||||
| ps | ||||
| pgrep | ||||
| pkill | ||||
| kill | ||||
|  | ||||
|  | ||||
| \section{... und H<>mmer}\label{haemmer} | ||||
|  | ||||
|  | ||||
| \subsection{awk} | ||||
|  | ||||
| TODO!! | ||||
|  | ||||
|  | ||||
| \subsection{basename}\label{basename}\index{basename=\texttt{basename}|(textbf} | ||||
|  | ||||
| Dem Tool \texttt{basename} wird als Parameter ein Pfad zu einer Datei | ||||
| <EFBFBD>bergeben. Der in der Angabe enthaltene Pfad wird abgeschnitten, nur der Name | ||||
| der eigentlichen Datei wird zur<75>ckgegeben. | ||||
|  | ||||
| \index{basename=\texttt{basename}|)} | ||||
|  | ||||
|  | ||||
| \subsection{bc} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| @@ -80,17 +147,96 @@ werden. | ||||
| \index{cat=\texttt{cat}|)} | ||||
|  | ||||
|  | ||||
| \subsection{tail}\label{tail}\index{tail=\texttt{tail}|(textbf} | ||||
| \subsection{chpasswd}\label{script}\index{chpasswd=\texttt{chpasswd}|(textbf} | ||||
|  | ||||
| Der Befehl \texttt{tail} gibt die letzten zehn Zeilen einer Datei aus. Wenn | ||||
| kein Dateiname (oder ein \texttt{-}) angegeben wird, liest \texttt{tail} von | ||||
| der Standard-Eingabe. Man kann die Anzahl der ausgegebenen Zeilen mit dem | ||||
| Parameter \texttt{-l} steuern. | ||||
| Mit diesem Kommando bietet sich dem Administrator des Systems die M<>glichkeit, | ||||
| scriptgesteuert die Pa<50>w<EFBFBD>rter f<>r neue Benutzer zu vergeben. Manuell <20>ndert man | ||||
| ein Pa<50>wort mit dem Kommando \texttt{passwd}\index{passwd=\texttt{passwd}}, | ||||
| allerdings l<>scht (flusht) dieses Programm die Standard-Eingabe, bevor es das | ||||
| neue Pa<50>wort erwartet. Somit lassen sich Pa<50>w<EFBFBD>rter mit \texttt{passwd} nur | ||||
| interaktiv <20>ndern\footnote{Es gibt auch einen anderen Weg: Man kann | ||||
| \texttt{passwd} auch mittels \texttt{expect} fernsteuern. Allerdings ist diese | ||||
| Methode weniger elegant.}. | ||||
|  | ||||
| Mit dem Parameter \texttt{-f} (follow) gibt \texttt{tail} neue Zeilen aus, | ||||
| sobald sie an die Datei angeh<65>ngt werden. | ||||
| Das Kommando wird in der Form | ||||
|  | ||||
| \index{tail=\texttt{tail}|)} | ||||
| \texttt{echo }\textit{name}\texttt{:}\textit{pass}\texttt{ | chpasswd} | ||||
|  | ||||
| aufgerufen. Es ist auch m<>glich, dem Programm eine Datei mit vielen Name / | ||||
| Pa<EFBFBD>wort-Kombinationen an die Standard-Eingabe zu <20>bergeben: | ||||
|  | ||||
| \texttt{cat }\textit{passwoerter.txt}\texttt{ | chpasswd} | ||||
|  | ||||
| Allerdings sollte dabei aus Sicherheitsgr<67>nden darauf geachtet werden, da<64> | ||||
| diese Datei nicht allgemein lesbar ist. | ||||
|  | ||||
| \index{chpasswd=\texttt{chpasswd}|)} | ||||
| \subsection{dirname}\label{dirname}\index{dirname=\texttt{dirname}|(textbf} | ||||
|  | ||||
| Analog zu \texttt{basename} gibt \texttt{dirname} nur die Pfad-Komponente einer | ||||
| angegebenen Datei zur<75>ck. | ||||
|  | ||||
| \index{dirname=\texttt{dirname}|)} | ||||
|  | ||||
|  | ||||
| \subsection{echo}\label{echo}\index{echo=\texttt{echo}|(textbf} | ||||
|  | ||||
| Dies ist wohl der grundlegendste Befehl, der in einem Skript verwendet werden | ||||
| kann. Er ist die Voraussetzung, um eines der wichtigsten Werkzeuge der | ||||
| Kybernetik auch mittels eines Shell-Skriptes effizient umzusetzen: Hello World. | ||||
| :-) | ||||
|  | ||||
| Die eigentliche Aufgabe dieses Befehls d<>rfte jedem bekannt sein, der sich bis | ||||
| zu dieser Stelle durchgearbeitet hat. Allerdings wissen viele nicht, da<64> auch | ||||
| der echo-Befehl <20>ber Parameter verf<72>gt. Zumindest zwei davon erweisen sich in | ||||
| der Praxis oft als sehr hilfreich: | ||||
|  | ||||
| \LTXtable{\textwidth}{tab_kommandos_echo_parameter.tex} | ||||
|  | ||||
| \index{echo=\texttt{echo}|)} | ||||
|  | ||||
|  | ||||
| \subsection{expr} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{grep}\label{grep}\index{grep=\texttt{grep}|(textbf} | ||||
|  | ||||
| Das Tool \texttt{grep} stammt aus dem Standard-Repertoire eines jeden | ||||
| Systemadministrators. Mit seiner Hilfe kann in einer oder mehreren Dateien, | ||||
| oder eben auch in einem Datenstrom nach dem Auftreten bestimmter regul<75>rer | ||||
| Ausdr<EFBFBD>cke (siehe \ref{mustererkennung}) gesucht werden. | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| Die folgende Tabelle stellt einige der vielen Parameter vor: | ||||
|  | ||||
| \LTXtable{\textwidth}{tab_kommandos_grep_parameter.tex} | ||||
|  | ||||
| Im Zusammenhang mit grep st<73><74>t fast jeder Shell-Skripter fr<66>her oder sp<73>ter auf | ||||
| das Problem, da<64> er irgendwas davon abh<62>ngig machen will, ob ein bestimmter | ||||
| Proze<EFBFBD> l<>uft oder nicht. Im Normalfall wird er zuerst folgendes ausprobieren, | ||||
| was aber oft (nicht immer) in die Hose gehen wird: | ||||
|  | ||||
| \texttt{ps aux | grep }\textit{prozessname}\texttt{ \&\& echo \dq}\textit{l<EFBFBD>uft | ||||
| schon}\texttt{\dq} | ||||
|  | ||||
| Der Grund daf<61>r ist, da<64> unter Umst<73>nden in der Ausgabe von \texttt{ps} auch | ||||
| das \texttt{grep}-Kommando samt Parameter (\textit{prozessname}) aufgelistet | ||||
| wird. So findet das \texttt{grep}-Kommando sich quasi selbst. | ||||
|  | ||||
| Abhilfe schafft das folgende Konstrukt: | ||||
|  | ||||
| \texttt{ps aux | grep \dq}\textit{[p]rozessname}\texttt{\dq~\&\& echo | ||||
| \dq}\textit{l<EFBFBD>uft schon}\texttt{\dq} | ||||
|  | ||||
| Das p ist jetzt als eine Zeichenmenge (regul<75>rer Ausdruck) angegeben worden. | ||||
| Jetzt sucht \texttt{grep} also nach dem String \textit{prozessname}, in der | ||||
| Ausgabe von \texttt{ps} erscheint das \texttt{grep}-Kommando allerdings mit | ||||
| \textit{[p]rozessname} und wird somit ignoriert. | ||||
|  | ||||
| \index{grep=\texttt{grep}|)} | ||||
|  | ||||
|  | ||||
| \subsection{head}\label{head}\index{head=\texttt{head}|(textbf} | ||||
| @@ -101,6 +247,16 @@ werden allerdings nicht die letzten Zeilen angezeigt, sondern die ersten. | ||||
| \index{head=\texttt{head}|)} | ||||
|  | ||||
|  | ||||
| \subsection{kill} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{printf} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{read}\label{read}\index{read=\texttt{read}|(textbf} | ||||
|  | ||||
| Mit dem Kommando \texttt{read} kann man Eingaben von der | ||||
| @@ -152,28 +308,57 @@ Timeout oder ein EOF auf. | ||||
| \index{read=\texttt{read}|)} | ||||
|  | ||||
|  | ||||
| \section{Pfade und Dateien}\label{pfade_und_dateien} | ||||
| \subsection{script}\label{script}\index{script=\texttt{script}|(textbf} | ||||
|  | ||||
| Eine der Hautaufgaben von Shell-Skripten ist nat<61>rlich das Hantieren mit | ||||
| Dateien. In diesem Abschnitt geht es allerdings nicht um den Umgang mit | ||||
| Dateiinhalten, sondern vielmehr werden einige n<>tzliche Tools im Umgang mit | ||||
| Dateien an sich vorgestellt. | ||||
| Dieses Kommando eignet sich vorz<72>glich f<>r das Debuggen fertiger Skripte. Man | ||||
| ruft es in Verbindung mit einem Dateinamen auf. Dieser Aufruf startet eine neue | ||||
| Shell, in der man beliebige Kommandos ausf<73>hren kann. Wenn man fertig ist, | ||||
| beendet man den script-Befehl durch die Eingabe von \texttt{exit}, | ||||
| \texttt{logout} oder Druck der Tastenkombination \Ovalbox{CTRL}+\Ovalbox{d} | ||||
| (EOF). | ||||
|  | ||||
| \subsection{basename}\label{basename}\index{basename=\texttt{basename}|(textbf} | ||||
|  | ||||
| Dem Tool \texttt{basename} wird als Parameter ein Pfad zu einer Datei | ||||
| <EFBFBD>bergeben. Der in der Angabe enthaltene Pfad wird abgeschnitten, nur der Name | ||||
| der eigentlichen Datei wird zur<75>ckgegeben. | ||||
|  | ||||
| \index{basename=\texttt{basename}|)} | ||||
| 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}|)} | ||||
|  | ||||
|  | ||||
| \subsection{dirname}\label{dirname}\index{dirname=\texttt{dirname}|(textbf} | ||||
| \subsection{sed} | ||||
|  | ||||
| Analog zu \texttt{basename} gibt \texttt{dirname} nur die Pfad-Komponente einer | ||||
| angegebenen Datei zur<75>ck. | ||||
| TODO!!! | ||||
|  | ||||
| \index{dirname=\texttt{dirname}|)} | ||||
|  | ||||
| \subsection{seq} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{sleep} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{sort} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{tail}\label{tail}\index{tail=\texttt{tail}|(textbf} | ||||
|  | ||||
| Der Befehl \texttt{tail} gibt die letzten zehn Zeilen einer Datei aus. Wenn | ||||
| kein Dateiname (oder ein \texttt{-}) angegeben wird, liest \texttt{tail} von | ||||
| der Standard-Eingabe. Man kann die Anzahl der ausgegebenen Zeilen mit dem | ||||
| Parameter \texttt{-l} steuern. | ||||
|  | ||||
| Mit dem Parameter \texttt{-f} (follow) gibt \texttt{tail} neue Zeilen aus, | ||||
| sobald sie an die Datei angeh<65>ngt werden. | ||||
|  | ||||
| \index{tail=\texttt{tail}|)} | ||||
|  | ||||
|  | ||||
| \subsection{tee} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{touch}\label{touch}\index{touch=\texttt{touch}|(textbf} | ||||
| @@ -195,144 +380,11 @@ Referenzdatei angepa | ||||
| \index{touch=\texttt{touch}|)} | ||||
|  | ||||
|  | ||||
| \section{Pipes manipulieren}\label{pipes_manipulieren}\index{Pipe|(textbf} | ||||
|  | ||||
| Das Konzept der Pipes (R<>hren) wird bereits in dem Kapitel <20>ber Befehlsformen | ||||
| (\ref{befehlsformen}) vorgestellt. Im wesentlichen besteht es darin, da<64> Daten | ||||
| von einem Programm an ein anderes weitergeleitet werden. Auf diese Weise | ||||
| entsteht eine sogenannte \textit{Pipeline}\index{Pipeline} aus mehreren | ||||
| Kommandos. | ||||
|  | ||||
| Einige Kommandos sind f<>r den Einsatz in einem solchen Konstrukt pr<70>destiniert, | ||||
| obwohl die meisten auch alleine eingesetzt werden k<>nnen. Einige dieser | ||||
| Tools sollen im Folgenden vorgestellt werden. | ||||
|  | ||||
| \subsection{grep}\label{grep}\index{grep=\texttt{grep}|(textbf} | ||||
|  | ||||
| Das Tool \texttt{grep} stammt aus dem Standard-Repertoire eines jeden | ||||
| Systemadministrators. Mit seiner Hilfe kann in einer oder mehreren Dateien, | ||||
| oder eben auch in einem Datenstrom nach dem Auftreten bestimmter regul<75>rer | ||||
| Ausdr<EFBFBD>cke (siehe \ref{mustererkennung}) gesucht werden. | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| Die folgende Tabelle stellt einige der vielen Parameter vor: | ||||
|  | ||||
| \LTXtable{\textwidth}{tab_kommandos_grep_parameter.tex} | ||||
|  | ||||
| Im Zusammenhang mit grep st<73><74>t fast jeder Shell-Skripter fr<66>her oder sp<73>ter auf | ||||
| das Problem, da<64> er irgendwas davon abh<62>ngig machen will, ob ein bestimmter | ||||
| Proze<EFBFBD> l<>uft oder nicht. Im Normalfall wird er zuerst folgendes ausprobieren, | ||||
| was aber oft (nicht immer) in die Hose gehen wird: | ||||
|  | ||||
| \texttt{ps aux | grep }\textit{prozessname}\texttt{ \&\& echo \dq}\textit{l<EFBFBD>uft | ||||
| schon}\texttt{\dq} | ||||
|  | ||||
| Der Grund daf<61>r ist, da<64> unter Umst<73>nden in der Ausgabe von \texttt{ps} auch | ||||
| das \texttt{grep}-Kommando samt Parameter (\textit{prozessname}) aufgelistet | ||||
| wird. So findet das \texttt{grep}-Kommando sich quasi selbst. | ||||
|  | ||||
| Abhilfe schafft das folgende Konstrukt: | ||||
|  | ||||
| \texttt{ps aux | grep \dq}\textit{[p]rozessname}\texttt{\dq~\&\& echo | ||||
| \dq}\textit{l<EFBFBD>uft schon}\texttt{\dq} | ||||
|  | ||||
| Das p ist jetzt als eine Zeichenmenge (regul<75>rer Ausdruck) angegeben worden. | ||||
| Jetzt sucht \texttt{grep} also nach dem String \textit{prozessname}, in der | ||||
| Ausgabe von \texttt{ps} erscheint das \texttt{grep}-Kommando allerdings mit | ||||
| \textit{[p]rozessname} und wird somit ignoriert. | ||||
|  | ||||
| \index{grep=\texttt{grep}|)} | ||||
|  | ||||
|  | ||||
| \subsection{sed} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
|  | ||||
| \subsection{awk} | ||||
|  | ||||
| TODO!! | ||||
|  | ||||
| \subsection{sort} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{tee} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{wc} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \index{Pipe|)} | ||||
|  | ||||
|  | ||||
| \section{Sonstige Befehle}\label{sonstige_befehle} | ||||
|  | ||||
| Eine Reihe weiterer Befehle k<>nnte in verschiedenen Lagen hilfreich sein. | ||||
| Einige davon werden im Folgenden in loser Folge vorgestellt. | ||||
|  | ||||
| \subsection{script}\label{script}\index{script=\texttt{script}|(textbf} | ||||
|  | ||||
| Dieses Kommando eignet sich vorz<72>glich f<>r das Debuggen fertiger Skripte. Man | ||||
| ruft es in Verbindung mit einem Dateinamen auf. Dieser Aufruf startet eine neue | ||||
| Shell, in der man beliebige Kommandos ausf<73>hren kann. Wenn man fertig ist, | ||||
| beendet man den script-Befehl durch die Eingabe von \texttt{exit}, | ||||
| \texttt{logout} oder Druck der Tastenkombination \Ovalbox{CTRL}+\Ovalbox{d} | ||||
| (EOF). | ||||
|  | ||||
| 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}|)} | ||||
|  | ||||
| \subsection{seq} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{expr} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{bc} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{kill} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{sleep} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{who} | ||||
|  | ||||
| TODO!!! | ||||
|  | ||||
| \subsection{chpasswd}\label{script}\index{chpasswd=\texttt{chpasswd}|(textbf} | ||||
|  | ||||
| Mit diesem Kommando bietet sich dem Administrator des Systems die M<>glichkeit, | ||||
| scriptgesteuert die Pa<50>w<EFBFBD>rter f<>r neue Benutzer zu vergeben. Manuell <20>ndert man | ||||
| ein Pa<50>wort mit dem Kommando \texttt{passwd}\index{passwd=\texttt{passwd}}, | ||||
| allerdings l<>scht (flusht) dieses Programm die Standard-Eingabe, bevor es das | ||||
| neue Pa<50>wort erwartet. Somit lassen sich Pa<50>w<EFBFBD>rter mit \texttt{passwd} nur | ||||
| interaktiv <20>ndern\footnote{Es gibt auch einen anderen Weg: Man kann | ||||
| \texttt{passwd} auch mittels \texttt{expect} fernsteuern. Allerdings ist diese | ||||
| Methode weniger elegant.}. | ||||
|  | ||||
| Das Kommando wird in der Form | ||||
|  | ||||
| \texttt{echo }\textit{name}\texttt{:}\textit{pass}\texttt{ | chpasswd} | ||||
|  | ||||
| aufgerufen. Es ist auch m<>glich, dem Programm eine Datei mit vielen Name / | ||||
| Pa<EFBFBD>wort-Kombinationen an die Standard-Eingabe zu <20>bergeben: | ||||
|  | ||||
| \texttt{cat }\textit{passwoerter.txt}\texttt{ | chpasswd} | ||||
|  | ||||
| Allerdings sollte dabei aus Sicherheitsgr<67>nden darauf geachtet werden, da<64> | ||||
| diese Datei nicht allgemein lesbar ist. | ||||
|  | ||||
| \index{chpasswd=\texttt{chpasswd}|)} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user