Normalerweise kommen die Daten für ein Programm von der Standardeingabe oder, wenn es das Programm direkt unterstützt, aus einer Datei. Die Ausgabe des Programms landet in der Standardausgabe und die Fehlermeldungen in der Standardfehlerausgabe. Im Prinzip sind Standardeingabe, Standardausgabe und Standardfehlerausgabe keine Ziele sondern Datenkanäle zu Zielen. Die Standardeingabe ist normalerweise mit der Tastatur verbunden und Standardausgabe und Standardfehlerausgabe stellen ihre Daten auf dem verbundenem Terminal dar. Diese Datenkanäle können aber auch auf ganz andere Ziel zeigen. Dies wird durch Umleitungen und Pipelines ermöglicht.