[linux-l] pppd-Problem

Guntram Trebs gunni at mathematik.hu-berlin.de
Di Mär 26 03:32:32 CET 2002


On Sat, 23 Mar 2002, Brisson Olivier wrote:

>  "du" bedeutet "disk utility". Mit diesem Komando kann man
> sehr einfach alle Dateien in einem Ordner aufzeichnen.
> Leider gehen die Informationen zu schnell, um etwas zu
> sehen. Deshalb benutzt man eine Pipe.
>
>  du -aH > meinedatei
>
>  ">" leitet diese Informationen in einer Datei, und wie hier
> im Beispiel "meinedatei".

( "du" heißt disk usage also Plattenverbrauch )

"<" liest die Standard-Eingabe aus einer Datei
">", ">>" leitet die Standard-Ausgabe in eine Datei um,
  wobei ">" überschreibt und ">>" anhängt

"<" und ">>" löschen die Datei, wenn sie gleichzeitig mit _derselben_
  Datei verwendet werden, wovor auch Links nicht schützen

"|" leitet die Standard-Ausgabe des vorhergehenden Kommandos an die
  Standard-Eingabe des nachfolgenden Kommandos weiter

Unter einer Pipe versteht man afaik nur das letztere.

Generell haben Unix-Kommandos eine Standard-Eingabe, aus der sie
normalerweise Daten beziehen, und zwei Ausgabeströme (Standard-Ausgabe
und Standard-Fehler-Ausgabe) (stdin, stdout, stderr)

Manche Programme schreiben Fehlermeldungen auf die Standard-Ausgabe,
manche schreiben sie auf die Standard-Fehler-Ausgabe.

Das hat den Nachteil, daß bei

grep text * | less

z.B. die Meldungen verlorengehen über Verzeichnisse und nicht-lesbare
Dateien, die natürlich nicht durchsucht werden können.

Wer das sich trotzdem im less anzeigen lassen möchte, muß erst die
Standard-Fehler-Ausgabe vom grep auf die Standard-Ausgabe vom grep
umlenken.

Das geschieht mit  "2>&1".

Die 2 steht für stderr (Standardfehler), die 1 für stdout (Standard-
Ausgabe), 0 steht für stdin (Standardeingabe)

Also:

grep text * 2>&1 | less


Weiterhin kann man mit "(" und ")" noch dafür sorgen, daß die Ausgabe
von mehreren Programmen umgelenkt wird.

(echo a; echo b) | less

läßt sowohl "a", als auch "b" im less erscheinen, während bei

echo a; echo b | less

nur das "b" angezeigt wird.

Dabei muß man wieder beachten, daß stderr vom ersten echo verlorengeht.

Will man die Fehler-Ausgaben aller Programme haben, muß man beispielsweise
schreiben:

(grep text1 * 2>&1 ; grep text2 * 2>&1 ; grep text3 * 2>&1) | less

Am besten mal ein bisschen rumprobieren und notfalls in der man-page
der bash nachlesen.

Alle Angaben ohne Gewähr, da ich grad nicht an ein vernünftgiges OS
rankomme ;-)


Guntram




Mehr Informationen über die Mailingliste linux-l