Canos de casca - a ordem das coisas

2

Porque netcat na minha caixa não suporta -e , A página netcat man fornece esta solução alternativa:

$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Eu não entendo como isso funciona. Eu acho que quando você tenta cat /tmp/f que iria bloquear até que algo seja escrito para /tmp/f e se isso é bloqueado como o resto do comando é executado?

    
por Drew LeSueur 03.07.2018 / 08:58

1 resposta

3

Todos os comandos em um pipeline são iniciados simultaneamente e executados simultaneamente - o comando 2 não espera que o comando 1 seja encerrado. Em vez disso, os pipelines dependem do bloqueio das operações de leitura até que o comando anterior tenha produzido alguma saída.

Por exemplo, a saída (stdout) de cat /tmp/f é diretamente 1 conectada à entrada de /bin/sh -i ; sempre que o sh tentar ler o seu stdin, ele irá bloquear até que o cat tenha produzido alguma saída.

1 (Quase diretamente; stdout de gato e stdin de sh são amarrados a duas extremidades de um objeto de 'pipe').

    
por 03.07.2018 / 11:59