쉽게 혼동되는 개념: ptmx 및 tty

쉽게 혼동되는 개념: ptmx 및 tty

다음 명령은 모두 데비안 터미널에서 실행됩니다.

ls /dev |grep ptmx
/dev/ptmx

ls  /dev/pts
0  1  ptmx 

/dev/ptmx 이들그리고 그리고 의 차이점은 무엇인가요 /dev/pts/ptmx?

ls  /dev/tty* |sort
/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10

/dev/tty와 /dev/tty0(/dev/tty1....) 사이에 관계가 있습니까?
/dev/tty는 다른 모든 /dev/tty[번호]를 제어합니까?

답변1

/dev/ptmx표준이며 /dev/pts/ptmx소프트웨어 컨테이너(Docker 등) 및 파일 시스템의 여러 인스턴스가 필요한 기타 경우에 devpts추가되었습니다 .

장치 노드의 특성

장치 노드의 "마법"은 이름이 아니라 그 자체에 있다는 것을 깨달아야 합니다.주요 및 보조 장치 번호나타내기 위해 만들어졌습니다.

예를 들어, 적절한 권한이 있는 경우 mknod모든 Unix 스타일 파일 시스템에서 임의로 이름이 지정된 주요 장치 1과 보조 장치 3을 사용하여 문자 장치 노드를 생성할 수 있습니다. 파일 시스템에 nodev마운트 옵션이 없으면 다음과 같이 작동합니다. 와 정확히 동일합니다 /dev/null. 왜냐하면 모든 의도와 목적을 위해할 것이다의 또 다른 구현입니다 /dev/null.

마찬가지로 /dev/pts/ptmx/dev/ptmx는 모두 문자 장치이며 주 장치 번호는 5이고 부 장치 번호는 2입니다. 따라서 커널에서 정확히 동일한 기능에 대한 액세스를 제공합니다.

$ ls -l /dev/ptmx /dev/pts/ptmx
crw-rw-rw- 1 root tty  5, 2 Jun 12 20:14 /dev/ptmx
c--------- 1 root root 5, 2 Jun 12 12:26 /dev/pts/ptmx

장치 노드 유형(문자 또는 블록)은 주 번호 및 부 번호와 함께 장치 노드가 인터페이스하는 커널 장치 드라이버를 정의합니다. 커널은 이름에 신경 쓰지 않습니다. 기본 이름을 제공 udev하지만 원하는 경우 장치 명명 체계를 완전히 다시 디자인할 수 있습니다. /dev원하는 경우 외부에서 장치 노드를 생성할 수 있습니다.

Debian 9에서는 기본 /dev/pts/ptmx권한이 000으로 설정되어 있으므로 사용되지 않을 것으로 예상됩니다. 이는 RHEL 7.5에서도 마찬가지입니다.

4.17 커널 소스 코드의 주석설명하다:

/*
 * ptmx is a new node in /dev/pts and will be unused in legacy (single-
 * instance) mode. To prevent surprises in user space, set permissions of
 * ptmx to 0. Use 'chmod' or remount with '-o ptmxmode' to set meaningful
 * permissions.
 */

"싱글 인스턴스 모드"는 UNIX98 및 Single Unix 사양 v1 표준을 준수하는 시스템으로 사용하는 것을 의미합니다. 그래서 이전 버전과의 호환성이 매우 중요합니다.

다중 인스턴스 기능은 devpts컨테이너 지원을 위해 개발되었습니다. 이는 읽어보면 확인할 수 있다<Linux kernel source>/Documentation/filesystems/devpts.txt2009년경의 이전 버전:

컨테이너를 지원하기 위해 이제 한 인스턴스에 할당된 pty 인덱스가 다른 devpts 인스턴스에 할당된 인덱스와 독립적이도록 devpts 파일 시스템의 여러 인스턴스를 허용합니다.

이전 버전과의 호환성을 유지하기 위해 여러 인스턴스에 대한 지원은 다음 상황에서만 활성화됩니다.

  • CONFIG_DEVPTS_MULTIPLE_INSTANCES=y 및
  • devpts를 마운트할 때 "-o newinstance" 마운트 옵션이 지정되었습니다.

IOW, devpts는 이제 단일 인스턴스 및 다중 인스턴스 의미 체계를 지원합니다.

컨테이너가 사용 중인 경우 일반적으로 의사 TTY에 대해 완전히 새로운 네임스페이스를 초기화하고 devpts컨테이너 내에 파일 시스템의 다른 인스턴스를 마운트할 수 있습니다(컨테이너 내의 의사 TTY 지원이 필요하지 않은 경우 이는 생략할 수도 있음). 파일 시스템 ptmx에 항목이 있으면 devpts컨테이너 내 환경을 초기화하는 데 필요한 작업을 최소화하는 데 도움이 될 수 있습니다.

관련 정보