나는 책에서 읽은 다음 명령을 시도했습니다.
sudo ls | tee /dev/tty3a
이 명령은 를 사용해도 거부된 권한을 부여합니다 sudo
.
여기서 tty는 제가 이미 알고 있는 텔레타이프입니다. 그런데 3a와 tty는 무슨 뜻인가요?
답변1
/dev
장치 파일 이름은 Unix 변형에 따라 다릅니다. /dev/tty
현재 터미널 등 곳곳에서 볼 수 있는 것들이 있습니다 . 이는 /dev/tty3a
Solaris 및 SCO OpenServer를 포함한 일부 Unix 변형의 네 번째 직렬 포트 이름인 것으로 보입니다. Linux에 해당하는 것은 /dev/ttyS3
.so ls|tee /dev/tty3a
출력이 ls
네 번째 직렬 포트에 복사됩니다.
직렬 포트에 장치가 연결되어 있지 않으면 오류("입력/출력 오류")가 표시됩니다. 직렬 포트용 드라이버가 없으면 다른 오류("해당 장치 없음")가 발생합니다. 장치 노드가 전혀 존재하지 않으면 물론 "해당 파일이나 디렉터리가 없습니다"라는 메시지가 표시됩니다.
장치 노드가 있지만 액세스 권한이 없으면 "액세스 거부" 오류가 표시됩니다. 루트로 실행 중이거나 하드웨어 터미널이 직렬 포트에 연결되어 있고 터미널에 로그인되어 있지 않으면 장치에 액세스할 수 없습니다.
장치가 존재한다고 가정하고 루트로 액세스하려면 tee
루트로 명령을 실행해야 합니다. 예를 들면 다음과 같습니다.
ls | sudo tee /dev/tty3a
이는 루트로만 실행할 sudo ls | tee /dev/tty3a
수 있기 때문에 작동하지 않으며 ls
명령은 원래 사용자에 대한 인수가 아니며 tee
원래 사용자로 실행됩니다. sudo
이 명령에서 파이프는 원래 셸에 의해 생성되고 호출은 sudo
파이프의 왼쪽을 형성합니다. 루트 ls
로 실행하려면 tee
작성해야 합니다 sudo ls | sudo tee /dev/tty3a
(파이프 생성은 여전히 원래 셸에 있음). 이 두 명령을 루트로 실행하고 파이프 설정을 루트로 수행하려면 루트로 셸을 호출하여 파이프를 설정해야 합니다.sudo sh -c 'ls | tee /dev/tty3a'
1직렬 포트 번호는 0부터 시작됩니다.
답변2
책에서 찾은 예는 자신의 화면과 다른 터미널 화면에 동시에 쓸 수 있음을 보여줍니다. 동일한 서버에 로그인하고 두 번 실행하면 w
다음과 같은 결과가 나타납니다.
$ w
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
joe pts/1 :0 21:53 0.00s 0.04s 0.00s w
joe pts/2 :0 22:38 3.00s 0.01s 0.01s /bin/bash
첫 번째 콘솔에서 다음을 작성하십시오.
$ seq 3 | tee /dev/pts/1
듀얼 출력을 얻게 됩니다.
그런 다음 동일한 콘솔에서 시도해 보세요.
$ seq 3 | tee /dev/pts/2
그리고 두 화면 모두에서 동일한 출력을 얻게 됩니다.
이는 로그인된 모니터/콘솔이 많고 하나의 콘솔에서 모두 업데이트하려는 경우 유용할 수 있습니다.