Каждый процесс имеет как минимум три канала связи: стандартный ввод `STDIN`, стандартный вывод `STDOUT` и стандартный вывод ошибок `STDERR`. Процессы изначально наследуют эти каналы от своих родителей, поэтому они не обязательно знают, куда они ведут. Они могут подключаться к окну терминала, файлу, сетевому соединению или каналу, принадлежащему компьютеру, или каналу, принадлежащему другому процессу, и т.д.
В UNIX и Linux реализована унифицированная модель ввода-вывода, в которой каждый канал именуется небольшим целым числом, называемым дескриптором файла. Точный номер, присвоенный каналу, обычно не имеет значения, но `STDIN`, `STDOUT` и `STDERR` гарантированно соответствуют файловым дескрипторам `0`, `1` и `2`, поэтому можно смело называть эти каналы по номерам. В контексте интерактивного окна терминала `STDIN` обычно считывает данные с клавиатуры, а`STDOUT` и `STDERR`клавиатуры, а`STDOUT` и `STDERR`записывают вывод на экран.
В UNIX и Linux реализована унифицированная модель ввода-вывода, в которой каждый канал именуется небольшим целым числом, называемым дескриптором файла. Точный номер, присвоенный каналу, обычно не имеет значения, но `STDIN`, `STDOUT` и `STDERR` гарантированно соответствуют файловым дескрипторам `0`, `1` и `2`, поэтому можно смело называть эти каналы по номерам. В контексте интерактивного окна терминала `STDIN` обычно считывает данные с клавиатуры, а`STDOUT` и `STDERR` записывают вывод на экран.
Многие традиционные команды UNIX принимают входные данные из `STDIN` и записывают их в `STDOUT`. Сообщения об ошибках они записывают в `STDERR`. Это соглашение позволяет объединять команды, как строительные блоки, для создания конвейеров.