답변:
로부터 문서 :
/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
항상 최신 콘솔 임을 알 수 있습니다 .
$ sudo sh -c "sleep5; echo tty0 > /dev/tty0"
sudo -i
루트 쉘.
sudo anycommand
작동 하면 sudo -i
루트로도 작동합니다. 루트로 갈 수없는 Linux / BSD / Unix와 같은 것은 없습니다. (그런데 더 이상 Linux / BSD / Unix가 아닐 것입니다.)
/dev/console
부팅시 매개 변수로 설정할 수있는 가상 장치 세트입니다. 직렬 장치 또는 가상 콘솔로 리디렉션 될 수 있으며 기본적으로을 가리 킵니다 /dev/tty0
. 여러 console=
옵션이 커널에 전달되면 콘솔 출력이 둘 이상의 장치로 이동합니다.
/dev/tty0
현재 가상 콘솔입니다
/dev/tty[1-x]
당신이로 전환 가상 콘솔 중 하나입니다 control- alt- F1등등.
/dev/tty
콘솔을 여는 프로세스와 관련된 콘솔 (물리적, 가상 또는 의사 장치)에 대한 일종의 별칭입니다. 다른 장치와 달리 쓰기 위해 루트 권한이 필요하지 않습니다. 또한 cron
배치 프로세스와 유사한 배치 프로세스와 같은 프로세스는 프로세스와 관련이 없으므로 사용할 수 /dev/tty
없습니다. 이러한 프로세스는이 ?
에서 TTY
의 열 ps -ef
출력.
/dev/tty
그것을 여는 프로세스에 따라 다른 장치가있을 수 있습니다. 답변이 업데이트되었습니다.
https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/serial-console.rst
Linux에서는 console=
부팅 옵션을 사용하여 커널 콘솔을 구성 할 수 있습니다 . printk()
예를 들어 장치가로드되거나 오류가 발생했을 때 호출하는 커널 코드가 메시지를 작성할 수 있습니다. 이 메시지는 커널에 의해 버퍼링됩니다. (도 참조 dmesg
). 콘솔 장치를 찾아서 시작하면 이전에 버퍼링 된 모든 메시지를받습니다.
console=
여러 콘솔을 구성하기 위해 여러 번 전달할 수 있으며 모든 콘솔에 메시지가 작성됩니다. 분명히 당신은 각 "유형"의 하나 개의 콘솔을 선택할 수 있습니다 둘 다 사용할 수 없습니다 console=ttyS0
와 console=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
됩니다.
리눅스 TTY의 장치 노드 tty1
를 통해 tty63
가상 터미널이다. VT 또는 가상 콘솔이라고도합니다. 실제 콘솔 장치 드라이버 위에서 여러 콘솔을 시뮬레이트합니다. 한 번에 하나의 가상 콘솔 만 표시되고 제어됩니다. 활성 터미널은 예를 들어 chvt
, 또는 많은 기능 키를 통해 Ctrl + Alt + F1을 사용하여 전환 할 수 있습니다 .
를 사용하여 현재 VT를 읽고 쓸 수도 있습니다 /dev/tty0
. tty0
예를 들어 명시 적으로 선택하지 않은 경우 일반적인 커널 콘솔입니다. "시스템은 먼저 VGA 카드 (VT가 실행되는 카드)를 찾은 다음 직렬 포트를 찾습니다". 예를 들어 콘솔을 특정 VT로 설정할 수도 있습니다 console=tty1
.
"시스템에 VGA 카드가 없으면 첫 번째 직렬 포트가 자동으로 콘솔이됩니다." "직렬 콘솔"과 같은 ttyS0
것이 아마도 가장 일반적인 대안 일 것 tty0
입니다. 직렬 콘솔 위에 VT 시스템을 사용할 수 없습니다.
/dev/tty
POSIX에서 지정한 세 가지 표준 장치 파일/dev/
중 하나입니다 ( POSIX에서 지정한 세 개의 디렉토리 이름 중 하나임). 이를 여는 것은 현재 프로세스의 제어 터미널을 여는 것과 같습니다. 제어 터미널은 프로세스가 적어도 Linux에서 터미널을 처음 열 때 설정됩니다 . 예를 들어에서는을 init
참조합니다 /dev/console
.
제어 터미널에서 분리하는 것은 일반적으로 백그라운드 로깅 프로세스 (예 : 시스템 로깅 데몬) 를 시작하는 데 필요한 단계 중 하나입니다 . 백그라운드 프로세스가되는 단계는 엄청나게 복잡하지만 구체적으로 제어 터미널에서 분리하는 단계는 setsid 시스템 호출입니다. 보다 현대적인 시스템에서, 초기화 시스템, 예를 들어 systemd는 우선 제어 터미널없이 서비스를 시작합니다.