Alguns conceito confuso: ptmx e tty

0

Todos os comandos a seguir são executados no meu terminal debian.

ls /dev |grep ptmx
/dev/ptmx

ls  /dev/pts
0  1  ptmx 

Qual é a diferença entre /dev/ptmx e /dev/pts/ptmx ?

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

Existe uma relação entre / dev / tty e / dev / tty0 (/ dev / tty1 ....)?
/ dev / tty controla todos os outros / dev / tty [number]?

    
por scrapy 12.06.2018 / 15:37

1 resposta

0

/dev/ptmx é o padrão, /dev/pts/ptmx é adicionado para contêineres de software (Docker etc.) e outros casos quando você precisa de várias instâncias do sistema de arquivos devpts .

A natureza dos nós de dispositivos

Você deve perceber que a "mágica" de um nó de dispositivo não está em seu nome, mas no major & números de dispositivos menores são criados para incorporar.

Por exemplo, se você tiver o privilégio apropriado, você pode usar mknod para criar um nó de dispositivo de caractere com maior 1 e menor 3 com qualquer nome, em qualquer sistema de arquivos estilo Unix, e - a menos que o sistema de arquivos possua o nodev mount option - ele se comportará exatamente como /dev/null , porque para todos os efeitos, será outra realização de /dev/null .

Da mesma forma, tanto /dev/pts/ptmx como /dev/ptmx são dispositivos de caractere com maior número 5 e menor número 2. Assim, eles fornecerão acesso à mesma funcionalidade exata dentro do kernel.

$ 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

O tipo do nó do dispositivo (caractere ou bloco) e o principal & pequenos números de dispositivos juntos definem com qual driver de dispositivo de kernel esse nó de dispositivo faz interface. O kernel não se preocupa com nomes - ele fornece nomes padrão para udev , mas você está livre para redesenhar completamente o esquema de nomes de dispositivos, se quiser. Você pode criar nós de dispositivos fora de /dev , se precisar.

No Debian 9, o /dev/pts/ptmx tem permissões definidas como 000 por padrão, portanto, não é esperado que seja usado. Da mesma forma no RHEL 7.5.

O comentário na fonte do kernel 4.17 diz:

/*
 * 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.
 */

"modo de instância única" refere-se ao uso como um sistema em conformidade com os padrões UNIX98 e Single Unix Specification v1. Portanto, é muito importante a compatibilidade com versões anteriores.

O recurso de várias instâncias para devpts foi desenvolvido para suporte ao contêiner. Isto pode ser confirmado lendo o versões antigas de <Linux kernel source>/Documentation/filesystems/devpts.txt do ano de 2009 ou mais :

To support containers, we now allow multiple instances of devpts filesystem, such that indices of ptys allocated in one instance are independent of indices allocated in other instances of devpts.

To preserve backward compatibility, this support for multiple instances is enabled only if:

  • CONFIG_DEVPTS_MULTIPLE_INSTANCES=y, and
  • '-o newinstance' mount option is specified while mounting devpts

IOW, devpts now supports both single-instance and multi-instance semantics.

Quando os contêineres estão em uso, eles normalmente inicializam um namespace inteiramente novo para pseudo-TTYs e podem montar outra instância do sistema de arquivos devpts dentro do contêiner (isso pode até ser omitido se o suporte pseudo-TTY contiver o contêiner Não é necessário). A presença de uma entrada ptmx dentro do sistema de arquivos devpts pode ser útil para minimizar o trabalho necessário para inicializar o ambiente dentro do contêiner.

    
por 12.06.2018 / 19:21

Tags