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] ?
/dev/ptmx
é o padrão,/dev/pts/ptmx
é adicionado para contêineres de software (Docker etc.) e outros casos em que você precisa de várias instâncias do sistema dedevpts
arquivos.A natureza dos nós do dispositivo
Você deve perceber que a "mágica" de um nó de dispositivo não está em seu nome, mas nos números de dispositivos principais e secundários que ele foi criado 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 no estilo Unix e - a menos que o sistema de arquivos tenha anodev
opção mount - ele se comportará exatamente como/dev/null
, porque para todos os efeitos, será mais uma realização de/dev/null
.Da mesma forma, ambos
/dev/pts/ptmx
e/dev/ptmx
são dispositivos de caracteres com o número principal 5 e o número secundário 2. Portanto, eles fornecerão acesso à mesma funcionalidade dentro do kernel.O tipo de nó de dispositivo (caractere ou bloco) e os números de dispositivo principal e secundário juntos definem com qual driver de dispositivo de kernel esse nó de dispositivo faz interface. O kernel não se importa com nomes - ele fornece nomes padrão para
udev
, mas você está livre para reprojetar completamente o esquema de nomenclatura do dispositivo se quiser. Você pode criar nós de dispositivo fora do/dev
, se necessário.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:
"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
devpts
foi desenvolvido para suporte a contêiner. Isso pode ser confirmado lendo as versões antigas<Linux kernel source>/Documentation/filesystems/devpts.txt
do ano de 2009 ou mais :Quando os contêineres estão em uso, eles normalmente inicializam um namespace totalmente novo para pseudo-TTYs e podem montar outra instância do sistema de
devpts
arquivos dentro do contêiner (isso pode até ser omitido se o suporte a pseudo-TTY dentro do contêiner não for necessário). A presença de umaptmx
entrada no sistema dedevpts
arquivos pode ser útil para minimizar o trabalho necessário para inicializar o ambiente dentro do contêiner.