Linux : / dev / console, / dev / tty 및 / dev / tty0의 차이점


133

Linux 시스템 /dev/console에서 /dev/tty/dev/tty0? 의 차이점은 무엇 입니까?

각각의 용도는 무엇이며 어떻게 비교합니까?


3
당신은 또한 이것에
Kevin

답변:


93

로부터 문서 :

/dev/tty        Current TTY device
/dev/console    System console
/dev/tty0       Current virtual console

예전 /dev/console에는 시스템 관리자 콘솔이었습니다. TTY는 서버에 연결된 사용자의 직렬 장치였습니다. 지금 /dev/console/dev/tty0현재 디스플레이를 나타내고 일반적으로 동일합니다. 예를 들어에 추가 console=ttyS0하여 이를 재정의 할 수 있습니다 grub.conf. 그 후 귀하 /dev/tty0는 모니터이며 /dev/console입니다 /dev/ttyS0.

운동은 차이 보여 /dev/tty/dev/tty0:

Ctrl+ Alt+ 를 눌러 두 번째 콘솔로 전환하십시오 F2. 로 로그인하십시오 root. 을 입력하십시오 sleep 5; echo tty0 > /dev/tty0. 보도 Enter및 눌러 3 콘솔로 전환 Alt+를 F3. 이제 Alt+ 를 눌러 두 번째 콘솔로 다시 전환하십시오 F2. 을 입력 sleep 5; echo tty > /dev/tty하고를 눌러 Enter세 번째 콘솔로 전환하십시오.

tty프로세스가 시작되는 콘솔이고 tty0항상 최신 콘솔 임을 알 수 있습니다 .


6
좋은 운동! 우분투는 루트를 잠그므로 우분투에서 이것을 재현하는 한 가지 방법은 다음과 같습니다.$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
SFun28

10
@ SFun28, 나는 항상 사용했고, voila- sudo -i루트 쉘.
André Laszlo

4
루트 권한이 필요한 파일에 쓰기위한 하나의 관용구는 echo stuff | sudo 티 / dev / tty0> / dev / null;
Peter Cordes

젠장. Ī̲가 unix.stackexchange.com/a/229598/80483을 썼을 때 Ī̲는 답 을 알지 못했습니다 !
Incnis Mrsi

@ SFun28 : sudo anycommand작동 하면 sudo -i루트로도 작동합니다. 루트로 갈 수없는 Linux / BSD / Unix와 같은 것은 없습니다. (그런데 더 이상 Linux / BSD / Unix가 아닐 것입니다.)
Evi1M4chine

60
  • /dev/console부팅시 매개 변수로 설정할 수있는 가상 장치 세트입니다. 직렬 장치 또는 가상 콘솔로 리디렉션 될 수 있으며 기본적으로을 가리 킵니다 /dev/tty0. 여러 console=옵션이 커널에 전달되면 콘솔 출력이 둘 이상의 장치로 이동합니다.

  • /dev/tty0 현재 가상 콘솔입니다

  • /dev/tty[1-x]당신이로 전환 가상 콘솔 중 하나입니다 control- alt- F1등등.

  • /dev/tty콘솔을 여는 프로세스와 관련된 콘솔 (물리적, 가상 또는 의사 장치)에 대한 일종의 별칭입니다. 다른 장치와 달리 쓰기 위해 루트 권한이 필요하지 않습니다. 또한 cron배치 프로세스와 유사한 배치 프로세스와 같은 프로세스는 프로세스와 관련이 없으므로 사용할 수 /dev/tty없습니다. 이러한 프로세스는이 ?에서 TTY의 열 ps -ef출력.


이 문장에서 "/ dev / tty는 그것을 질의하는 프로세스가 사용하는 콘솔입니다"에서 질의한다는 것은 무슨 뜻입니까?
Ron Vince

1
@ RonVince 나는 /dev/tty그것을 여는 프로세스에 따라 다른 장치가있을 수 있습니다. 답변이 업데이트되었습니다.
jlliagre

감사. 프로세스가 연결된 장치 파일과 직접 / 대신 / dev / tty에서 실제로 쓰거나 읽은 프로세스인지 알 수 있습니까?
Ron Vince

@ RonVince 나는 당신이 무엇을 요구하는지 잘 모르겠습니다. 다시 말씀해 주시겠습니까?
jlliagre

1
@RonVince / dev / tty 열기 (/dev/tty[1,..,n] 아님)는 사용자 터미널에 무언가를 쓰는 프로세스에 대한 Unix (및 Linux) 표준입니다. 이식성이없고 복잡하고 신뢰성이 떨어지는 다른 장치에 직접 쓰는 것. 프로세스는 프로세스 터미널이 연결된 실제 장치가 무엇인지 알 필요가 없으며 커널은 이미 알고 있습니다.
jlliagre

20

/ dev / console

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst

Linux에서는 console= 부팅 옵션을 사용하여 커널 콘솔을 구성 할 수 있습니다 . printk()예를 들어 장치가로드되거나 오류가 발생했을 때 호출하는 커널 코드가 메시지를 작성할 수 있습니다. 이 메시지는 커널에 의해 버퍼링됩니다. (도 참조 dmesg). 콘솔 장치를 찾아서 시작하면 이전에 버퍼링 된 모든 메시지를받습니다.

console=여러 콘솔을 구성하기 위해 여러 번 전달할 수 있으며 모든 콘솔에 메시지가 작성됩니다. 분명히 당신은 각 "유형"의 하나 개의 콘솔을 선택할 수 있습니다 둘 다 사용할 수 없습니다 console=ttyS0console=ttyS1.

커널 설명서 /dev/console는 번호가 매겨진 문자 장치로 지정합니다 (5,1). 이 문자 장치를 열면 "메인"콘솔이 열리 며 콘솔 목록의 마지막 tty입니다. init"PID 1" 이라고하는 첫 번째 비 커널 프로세스 는 /dev/console표준 출력, 표준 오류 및 표준 입력에 연결되어 시작됩니다 .

어떤 콘솔도 tty가 아닌 경우 열면 /dev/console오류가 발생합니다 ENODEV( "No such device"). 커널은인쇄메시지를 기록하고 init관계없이 시작하십시오 . tty 장치가 아닌 커널 콘솔의 예는 netconsole, 또는 내가 좋아하는 콘솔 라인 프린터를 참조하십시오 .

tty 콘솔 목록을 참조하여 읽을 수도 /sys/class/tty/console/active있습니다. 시스템 문서 는 표시된 첫 번째 장치가 기본 콘솔 임을 나타냅니다 . 이 목록은 실제로 커널 명령 행의 역순입니다. 현재 커널 문서는 잘못 표시된 마지막 장치가 기본 또는 "활성"콘솔이라고 주장한다. 어떤 이유로 콘솔 장치가 제거 된 경우 변경을 위해이 파일을 폴링 할 수 있습니다.

systemd-nspawn컨테이너 내부 에서 표준 /dev/console파일은 의사 터미널 장치 (PTY)로 대체됩니다. 이들은 가상 터미널 장치로 가장 잘 설명됩니다. 그것들은 동적으로 생성되며 그놈 터미널과 같은 그래픽 터미널 에뮬레이터를 구현하고 같은 원격 액세스를 위해 사용 ssh됩니다.

/ dev / tty0

리눅스 TTY의 장치 노드 tty1 를 통해 tty63가상 터미널이다. VT 또는 가상 콘솔이라고도합니다. 실제 콘솔 장치 드라이버 위에서 여러 콘솔을 시뮬레이트합니다. 한 번에 하나의 가상 콘솔 만 표시되고 제어됩니다. 활성 터미널은 예를 들어 chvt, 또는 많은 기능 키를 통해 Ctrl + Alt + F1을 사용하여 전환 할 수 있습니다 .

를 사용하여 현재 VT를 읽고 쓸 수도 있습니다 /dev/tty0. tty0예를 들어 명시 적으로 선택하지 않은 경우 일반적인 커널 콘솔입니다. "시스템은 먼저 VGA 카드 (VT가 실행되는 카드)를 찾은 다음 직렬 포트를 찾습니다". 예를 들어 콘솔을 특정 VT로 설정할 수도 있습니다 console=tty1.

"시스템에 VGA 카드가 없으면 첫 번째 직렬 포트가 자동으로 콘솔이됩니다." "직렬 콘솔"과 같은 ttyS0것이 아마도 가장 일반적인 대안 일 것 tty0입니다. 직렬 콘솔 위에 VT 시스템을 사용할 수 없습니다.

/ dev / tty

/dev/ttyPOSIX에서 지정한 세 가지 표준 장치 파일/dev/ 중 하나입니다 ( POSIX에서 지정한 세 개의 디렉토리 이름 중 하나임). 이를 여는 것은 현재 프로세스의 제어 터미널을 여는 것과 같습니다. 제어 터미널은 프로세스가 적어도 Linux에서 터미널을 처음 열 때 설정됩니다 . 예를 들어에서는을 init참조합니다 /dev/console.

제어 터미널에서 분리하는 것은 일반적으로 백그라운드 로깅 프로세스 (예 : 시스템 로깅 데몬) 를 시작하는 데 필요한 단계 중 하나입니다 . 백그라운드 프로세스가되는 단계는 엄청나게 복잡하지만 구체적으로 제어 터미널에서 분리하는 단계는 setsid 시스템 호출입니다. 보다 현대적인 시스템에서, 초기화 시스템, 예를 들어 systemd는 우선 제어 터미널없이 서비스를 시작합니다.

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