Unix provides standard output and standard error, which can be redirected independently.
$ ls /not-exist ls: cannot access '/not-exist': No such file or directory $ ls /not-exist > redirect.out ls: cannot access '/not-exist': No such file or directory $ ls /not-exist 2> redirect.err $
I heard there's a story somewhere on the Web, which gives a fun reason why this separation was implemented. It involves the computerized typesetting that early Unix was used for (and Unix pipelines, I think). I failed to find it right now.
Would anyone like to link that story here, to associate it with the relevant tags and make it easier to find?