"redirecionamento" é um conceito do shell, e os detalhes em torno dele dependem de qual shell você está falando.
No entanto, pode-se dizer que a base para o redirecionamento se baseia na noção de que os programas têm descritores de arquivos de entrada e saída pré-abertos quando iniciados, o que remete a como funciona a função execve
. Ou seja, o processo filho herda os descritores de arquivos abertos.
Assim, para iniciar um filho (um comando), o processo pai (isto é, o shell) será o primeiro bifurcado para o filho, então configure as extremidades apropriadas do pipe para a entrada e saída da criança (descirptores de arquivo 0, 1 e 2), e deixe a criança herdá-la quando executada via execve
.
Sim, são canos.