Pipes e streams no Linux

Usando stdoute stdinpodemos conectar programas e gravar em arquivos arbitrários. Esse nível de desacoplamento
simplifica a alteração de parte do processo e até permite que programas escritos em diferentes linguagens de programação sejam usados
em um único processo.

É importante não usar stdoute stdinpara outros tipos de saída, como progresso e erros. Escreva isso para
stderr.

Redirecionamento de saída

Gravar no arquivo

O >operador de redirecionamento grava tudo o que é gravado stdoutem um arquivo.

./fetch > rawdata.json

Ler do arquivo

O <operador de redirecionamento lerá um arquivo e o transmitirá para stdin.

./process < rawdata.json

Combinando leitura e escrita

Você pode combinar o operador >e <, mas não pode usá-lo para modificar um arquivo.

./process < rawdata.json > data.json

Tubo

Stream tendo fetché escrito stdoute processé lido stdin.

./fetch | ./process

Você pode redirecionar a saída de processpara um arquivo

./fetch | ./process > data.json

ou canalize-o para outro processo.

./fetch | ./process | ./store

tee

O programa bash teepode ser usado para fazer várias coisas com a saída de um processo.

Encanar e armazenar

Você pode especificar um arquivo para salvar os dados, enquanto mantém seu pipeline.

./fetch | ./process | tee data.json | ./store

Canalize para vários processos

tee também pode ser usado para criar uma subpipeline.

./fetch | ./process | tee >(./fetch-images | ./store-images) | ./store-data

Transmita pela rede

Podemos usar streams de soquetes TCP simples para canalizar dados para outro servidor. Isso permite dividir o processo entre máquinas.

No servidor B ( 192.168.0.101 ) ouça a porta 9000 e transmita para processe store.

nc -l 9000 | ./process | ./store

No servidor A, buscamos e gravamos o conteúdo na porta 9000 do servidor B.

./fetch > /dev/tcp/192.168.0.101/9000