"파이프를 열어두세요"은(는) 무슨 뜻인가요?

"파이프를 열어두세요"은(는) 무슨 뜻인가요?

저는 Linux 애플리케이션에 대한 다양한 익스플로잇 연습을 따라해 왔습니다. 나는 이것을 꽤 잘 이해하지만 어떤 사람들은 "파이프를 열어 두기" 위해 cat을 사용한다고 언급했습니다.여기.

예를 들어:

(python2 exploit.py ; cat) | ./programToExploit

실제로 "파이프를 열어 두는 것"은 실제로 무엇을 의미하며, 위 명령처럼 파이프를 열어 두는 방법은 무엇입니까?

답변1

차이점 보기

echo 'ls' | sh -s

그리고

( echo 'ls'; cat ) | sh -s

또는,

{ echo 'ls'; cat; } | sh -s

여기서 sh -s표준 입력( )에서 실행할 명령을 읽어 쉘 세션이 시작됩니다 -s.

첫 번째 예에서는 쉘이 실행 ls되고 종료됩니다(더 이상 입력이 없기 때문에).

두 번째 및 세 번째 예에서는 쉘이 실행되고 ls더 이상 입력이 없을 때까지 기다립니다. 입력 스트림은 sh -s먼저 명령에 의해 생성된 echo다음 cat인계받습니다. 프로세스 cat는 상위 셸 세션에서 데이터를 읽고 명령 을 sh -s.ls

cat이는 입력 종료를 알리기 위해 빈 줄을 눌러 프로세스를 종료할 때까지 계속됩니다 .Ctrl+D

나는 이것이 "파이프를 열어 두는 것"이 ​​의미하는 바라고 믿습니다.

관련 정보