Esistono 3 descrittori di file: stdin, stdout e stderr (std=standard).
Basilarmente tu puoi:
Una piccola nota per vedere queste cose: con il comando less puoi visualizzare sia stdout (che resterà nel buffer) che lo stderr che verrà stampato sullo schermo, ma eliminato non appena tenterai di 'sfogliare' il buffer.
Questo farà sì che l'output di un programma venga scritto su un file.
ls -l > ls-l.txt
Qui, un file chiamato 'ls-l.txt' verrà creato e conterrà ciò che vedresti
sullo schermo digitando il comando 'ls -l' ed eseguendolo.
Questo farà sì che l'output di stderr di un programma venga scritto su un file.
grep da * 2> grep-errors.txt
Qui, un file chiamato 'grep-errors.txt' sarà creato e conterrà ciò che
vedresti come porzione di stderr dell'output del comando 'grep da *'.
Questo farà sì che l'output di stderr di un programma venga scritto sul medesimo filedescriptor di stdout.
grep da * 1>&2
Qui, la porzione di stdout del comando è inviata a stderr, puoi accorgertene
in diversi modi.
Questo farà sì che l'output di stderr di un programma venga scritto sul medesimo filedescriptor di stdout.
grep * 2>&1
Qui, la porzione di stderr del comando è inviata a stdout, se fai una pipe
verso less, noterai che righe le quali normalmente 'scomparirebbero' (poiché
sono scritte su stderr) ora vengono tenute (perché si trovano su stdout).
Questo porterà ogni output di un programma su un file. Può risultare a volte utile per cron, se vuoi che un comando passi in assoluto silenzio.
rm -f $(find / -name core) &> /dev/null
Questo (pensando a cron) eliminerà ogni file chiamato 'core' in qualsiasi
directory. Osserva che dovresti essere piuttosto sicuro di cosa sta facendo un
comando, prima di eliminarne ogni output.