2

Поскольку netcat на моем компьютере не поддерживает -e , страница netcat дает мне обходной путь:

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

Я не понимаю, как это работает. Я думаю, что когда вы пытаетесь cat /tmp/f , это блокирует, пока что-то не будет записано в /tmp/f и если это заблокировано, как запускается остальная часть команды?

1 ответ1

3

Все команды в конвейере запускаются одновременно и выполняются одновременно - команда 2 не ожидает выхода команды 1. Вместо этого конвейеры полагаются на блокировку операций чтения до тех пор, пока предыдущая команда не выдаст какой-либо вывод.

Например, выход (stdout) cat /tmp/f напрямую 1 связан с входом /bin/sh -i ; всякий раз, когда sh пытается читать с его стандартного ввода, он блокируется, пока cat не выдаст какой-либо вывод.


1 (Почти напрямую; stdout cat и std sh привязаны к двум концам объекта 'pipe'.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .