There are 3 file descriptors, stdin, stdout and stderr (std=standard).
Basically you can:
A little note for seeing the output of these commands: with the less command you can view both stdout (which will remain on the buffer) and the stderr that will be printed on the screen, but erased as you try to 'browse' the buffer.
This will cause the output of a program to be written to a file.
Here, a file called 'ls-l.txt' will be created and it will contain what you would see on the screen if you type the command 'ls -l' and execute it.
ls -l > ls-l.txt
This will cause the stderr output of a program to be written to a file.
Here, a file called 'grep-errors.txt' will be created and it will contain what you would see the stderr portion of the output of the 'grep da *' command.
grep da * 2> grep-errors.txt
This will cause the stdout output of a program to be written to the same filedescriptor as stderr.
Here, the stdout portion of the command is sent to stderr, you may notice that in different ways.
grep da * 1>&2
This will cause the stderr output of a program to be written to the same filedescriptor as stdout.
Here, the stderr portion of the command is sent to stdout, if you pipe to less, you'll see that lines that normally 'disappear' (as they are written to stderr) are being kept now (because they're on stdout).
grep * 2>&1
This will place every output of a program to a file. This is suitable sometimes for cron entries, if you want a command to pass in absolute silence.
This (thinking on the cron entry) will delete every file called 'core' in any directory. Notice that you should be pretty sure of what a command is doing if you are going to wipe its output.
rm -f $(find / -name core) &> /dev/null