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