한 SSH 세션에서 다른 SSH 세션으로 입력을 전송하는 방법은 무엇입니까? 선입 선출을 사용합니까?

한 SSH 세션에서 다른 SSH 세션으로 입력을 전송하는 방법은 무엇입니까? 선입 선출을 사용합니까?

얼마 전에 fifo?를 사용하여 한 콘솔 창에서 다른 콘솔 창으로 메시지를 전송하는 방법에 대한 기사를 보았습니다.

이전에 사용해 본 적이 없어서 내 기사에 대한 링크를 찾을 수 없습니다. 어떻게 설정하나요?

로깅을 위해 두 개의 콘솔을 열고 한 콘솔이 다른 콘솔에서 전송되는 로그 메시지를 실시간으로 표시하도록 하고 싶습니다.

답변1

mkfifo(또는 수행할 수 있는 다른 작업)를 통해 명명된 파이프를 생성하면 삭제될 때까지(또는 잊어버린 경우 컴퓨터가 다시 시작될 때까지) 그대로 유지되는 파이프 "파일"이 생성됩니다. 그것). 다음과 같이 매개변수가 거의 필요하지 않으므로 mkfifo를 사용하여 자신만의 명명된 파이프를 만들 수 있습니다.

host # mkfifo -m 777 /tmp/corncob

이것이 /tmp/corncob라는 이름의 파이프를 생성하는 데 필요한 전부입니다. 권한 설정을 위한 -m 플래그는 필요하지 않습니다. 일반적으로 이를 포함하지 않으면 새 명명된 파이프에 대한 기본 권한 집합이 시스템의 기본 권한 집합이 됩니다. 또는 -m 플래그를 전달하고 8진수 대신 알파 권한을 설정할 수 있습니다. 예를 들면 다음과 같습니다.

host # mkfifo -m a=rwx /tmp/corncob

똑같은 것을 만드십시오. 파일을 삭제하는 것처럼 명명된 파이프를 삭제할 수 있습니다. rm 하고 사라졌습니다.

명명된 파이프에 대해 주목해야 할 한 가지는 일반적으로 (내가 아는 한) 한 번에 정확히 하나의 입력/출력 스트림만 전달할 수 있다는 것입니다. 즉, 한 프로세스가 명명된 파이프에 입력을 보내고 두 프로세스가 명명된 파이프에서 데이터를 읽는 경우 읽기 프로세스 중 하나만 출력을 받습니다. 또한 이러한 상황이 발생하면 출력을 수신하는 원래 프로세스가 종료되면 다른 프로세스가 명명된 파이프에서 출력을 수신하기 시작합니다(여전히 파이프에서 읽으려고 시도하는 경우). 문장이 긴 걸까요, 아니면 제가 너무 빨리 치는 걸까요? ;)

내가 의미하는 바의 예는 다음과 같습니다.

host-term1 # while :;do echo a b c d e >/tmp/corncob;sleep 15;done

host-term2 # tail -f /tmp/corncob
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e
a b c d e

host-term3 # tail -f /tmp/corncob

host-term2 # ^C

host-term3 #
^C
a b c d e
a b c d e
a b c d e
a b c d e

통과하다

답변2

mkfifo명령을 사용하여 fifo 대기열을 생성하고 출력을 해당 대기열로 파이프한 다음( tee두 터미널 모두에서 출력하려는 ​​경우 리디렉션 대신 사용) cat이를 다른 터미널로 출력합니다. fifo가 차단된다는 점에 유의하세요. 따라서 프로그램을 중단하지 않는 방식으로 이를 사용해야 합니다.

관련 정보