다른 터미널에서 한 터미널의 출력에 어떻게 연결할 수 있습니까?


44

가상 터미널에서 현재 실행중인 터미널 (tty1)의 출력에 연결하고 캡처 (X 서버 실행)해야합니다.


5
명령이 실행 된 후 다른 tty에서 콘텐츠를 캡처해야 할 필요가 있음을 이해하지만 1 온스의 예방 조치는 치료법의 가치가 있으므로 항상 다른 터미널에서 액세스 할 수있는 명령을 사용 하기 전에 screen또는 tmux시작하기 전에 고려하십시오 .
depquid

그리고 당신이 전에 그것을 준비 할 수있을 때, 아마도 tmate 는 로컬뿐만 아니라 인터넷을 통해 작동하는 훌륭한 후보 일 것입니다. (및 선택적 쓰기 권한이 있음)
rugk

답변:


23

이 도구 하나를 발견했습니다 ttylog. CPAN 에서 사용할 수있는 Perl 프로그램 입니다. 여기에는 몇 가지주의 사항이 있습니다. 하나는 누군가 내 상자에 ssh'ing하는 일부로 만들어진 터미널에 연결하는 방법 만 알 수 있다는 것입니다. 다른 하나는 높은 권한 (예 : root 또는 sudo)으로 실행해야한다는 것입니다.

그러나 작동합니다!

예를 들어

먼저 TERM # 1에서 상자에 넣습니다.

TERM#1% ssh saml@grinchy

이 새로운 터미널의 tty에 주목하십시오 :

TERM#1% tty
/dev/pts/3

이제 다른 터미널 (TERM # 2)에서 다음 명령을 실행하십시오.

TERM#2% ttylog pts/3
DEBUG: Scanning for psuedo terminal pts/3
DEBUG: Psuedo terminal [pts/3] found.
DEBUG: Found parent sshd pid [13789] for user [saml]

이제 TERM # 1로 돌아가서 내용을 입력하면 TERM # 2에 표시됩니다.

터미널의 ss

내가 시도한 모든 명령 (top, ls 등)은을 사용하여 사건없이 작동했습니다 ttylog.


정확히 내가 찾던 것 (과거에는 사용했지만 이름을 잊어 버렸고 기억할 수 없었습니다). 많은 감사, 나는 일시적으로 더티 옵션 (gdb 및 출력 복제)을 사용했습니다.
pruzinat

예, 이것이 gdb내가 만난 첫 번째 옵션이었습니다. 나는 과거에 직접 사용했지만 적어도 나에게는 해키입니다. 기꺼이 도와주었습니다!
slm

1
ttylog는 올바른 프로세스에 첨부 할 수없는 것 같습니다-누구나 내 질문에 대답 할 수
있습니까

21

실제로 그렇습니다. / dev / vcs * 및 / dev / vcsa * 장치는 / dev / tty * 장치 (가상 터미널)에 해당합니다. F1 = tty1 = vcs1 / vcsa1 등. vcs / vcsa는 "현재"가상 터미널의 tty와 같습니다.

루트로서이 장치들 (예를 들어 cat / dev / vcs2)을 cat하고 스냅 샷을 찍는 것과 같이 해당 VT에있는 것들 (예 : F2의 / dev / tty2)을 볼 수 있습니다. vcsa *는 터미널 (화면)의 크기에 대한 정보를 포함한다는 점에서 vcs *와 다릅니다. 터미널에 할당 된 메모리에서 수집 된 화면에 표시되는 문자의 생생한 스냅 샷이므로 훌륭하고 쉽게 파싱 가능한 출력을 기대하지 마십시오.

단점은 정보가 너무 빨리지나 가면 캡처하기 어려울 수 있다는 것입니다. 여러 screenfulls를 따라야 할 경우 tail -f / dev / vcs1이 작동합니까? 먼저 파일로 간단히 리디렉션하는 것이 가장 쉬울 수 있습니다. 단자의 치수가 같으므로 VT (F1-F6)를 사용하여 보는 것이 좋습니다. 내 경험상, vcsa *가 아닌 vcs * 장치를 사용하는 것이 가장 좋습니다.

그래도 문제가 해결되지 않으면 관리자가 터미널의 활동을 감시 할 수있는 "거대한"패키지 중 하나 일 수 있습니다.

추신 : 사용중인 OS를 묻는 것을 잊었습니다. 유사한 장치가 다른 OS에도 존재할 수 있지만 이것은 Linux 용입니다. 장치 매뉴얼 페이지에서 "가상 콘솔 메모리"를 검색하십시오.


ssh에서 tty1에 입력을 삽입하는 방법이 있습니까? 예를 들어 데비안을 실행하는 라즈베리 파이로 작업해야하지만 문제는 USB 포트가 하나 밖에 없기 때문에 Wi-Fi 어댑터가 사용하므로 키보드를 물리적으로 연결하여 tty1을 사용할 수는 없다는 것입니다. 실행 과정에서 종료되는 스크립트를 실행해야하기 때문에 wlan0실제로이 스크립트가 실패하는 곳을 디버깅하려고하는 catch-22 상황이 있습니다. 내가 USB 허브를 사용할 수 없다고 가정 해보십시오 ... 어떻게 든 문자를 / dev / tty1에 파이프하는 방법이 있습니까?
Steven Lu

2
잘. 나는 /dev/tty1루트로 물건을 파이프 할 수 있지만이 모든 것은 문자를 화면에 표시하고 입력하지 않는 것입니다.
Steven Lu

1
이것이 소음 일 경우 미안합니다. 실제로 100 % 관련성이 없습니다. 그러나 나는 이것으로
Steven Lu

18

보다:

man 1 script

예를 들면 다음과 같습니다.

script -f /dev/tty1

나는 이것을 찾고 있었다. 잘못하여 첨부하려고 시도 screen했습니다. 효과가있다.
sdkks

5

tty각 터미널 에서 명령을 사용하여 식별하십시오.

$ tty
/dev/pts/0

$ tty
/dev/pts/1

이 TTY를 가정하여 첫 번째 stdout을 두 번째 stdout으로 리디렉션하려면 첫 번째 터미널에서 이것을 실행하십시오.

exec 1>/dev/pts/1

참고 : 이제 모든 명령 출력 이 pts / 1에 표시됩니다.

pts / 0의 기본 동작 stdout을 복원하려면 다음을 수행하십시오.

exec 1>/dev/pts/0

데모는 이 비디오 를 참조하십시오 .


2

이것은 나를 위해 일했다 :

  • 컴퓨터 "A"(예 : 제어 할 실제 컴퓨터)의 키보드를 사용하여 다음을 실행하십시오. screen -q

  • 연결과 ssh컴퓨터 "B"에서 컴퓨터에 "A".

  • ssh 세션에서 : screen -ls를 입력 하여 연결할 세션 ID를 가져 오십시오 ( tty 를 포함하는 행의 4 자리 숫자 ).

  • screen -x <session id>... screen -ls위 명령 에서 수신 한 세션 ID 번호를 사용하여 위 세션에 연결하십시오 .

"세션"중 하나에 입력 된 내용은 두 "세션"모두에서 발생하므로 예를 들어 입력 screen -d하면 두 세션이 모두 종료 됩니다 .


1

다른 방법은 screen로컬 컴퓨터 에서 gnu 유틸리티 를 사용하는 것 입니다. -L옵션을 사용하여 호출 하거나 해당 옵션없이 시작하고 ^aH명령 순서를 사용하십시오 . 두 가지 방법 중 하나를 사용하면 모든 입력 및 출력이 이름 screenlog.x이 x 인 파일에 기록됩니다. 여기서 x는 화면 번호입니다.

이것은 원격 시스템에 추가로 설치할 필요가 없기 때문에 편리합니다.


1

화면에서 tty1을 시작하지 않았 으므로이 스크립트가 도움이되었습니다.

위의 Baard Kopperud의 답변을 사용했습니다. "128"은 tty1의 한 줄입니다. 수면은 적절한 숫자로 설정 될 수 있습니다.

#!/bin/bash
while true
do
    sudo tail -c 128 /dev/vcs1 && echo ""
    sleep 10
done

터미네이터에서 이것을 사용하고 열의 크기를 조정하여 스크롤이 한 줄의 텍스트가되도록했습니다.


아이디어에 감사드립니다. rasperry에서는 간단히 '' 'cat cat / dev / vcs' ''를 수행해야했습니다. 프로세스를 보려면 'screen'사용을 잊어 버린 가상 콘솔에서 시작했습니다. 그리고 나는 그놈 터미널을 80 문자 너비로 조정했습니다.
axkibe

0

두 개의 터미널을 엽니 다. tty각각을 입력 하면 ID가 다음 과 같이 나타납니다./dev/pts/nº

그런 다음 첫 번째에 입력 script -f /dev/pts/nºofSecondTerminal하고 두 번째에 반대를 수행하여 연결script -f /dev/pts/nºofFirstTerminal 되도록

축하합니다! 두 터미널 모두 동일한 내용을 출력하고 수신합니다. 세 번째가 필요하십니까? 글쎄, 당신은 조합을 공부 했습니까? 6 개의 script -f명령 이 필요 합니다. 더 tty? 곧...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.