Eles são idênticos, pelo menos no Linux.
Cheguei a essa conclusão analisando primeiro o código-fonte para mknod(1)
no GNU coreutils , onde na linha 217 da versão atual encontramos que o 'c'
e 'u'
casos são tratados de forma idêntica, obtendo o mesmo tipo de dispositivo. O valor S_IFCHR
é definido nos cabeçalhos do kernel do Linux, mas o valor não é importante. Tudo o que importa é que o mesmo valor seja armazenado no nó dev do sistema de arquivos.
Concluí o problema com um teste simples:
$ sudo mknod /dev/null2 u 1 3
$ ls -l /dev/null*
crw-rw-rw- 1 root root 1, 3 Jan 12 2015 /dev/null
crw-r--r-- 1 root root 1, 3 Oct 19 22:56 /dev/null2
Um u
no comando fornece o mesmo nó dev de c
. Caso encerrado.
Quanto a por que ambos os caracteres são permitidos, meu melhor palpite é que é apenas um alias para aqueles que pensam em b
como "buffer" em vez de "bloquear", de modo que você precisa u
como seu oposto, significando "sem buffer", em vez de c
para "caractere".
Eu pensava que esse recurso do GNU mknod
poderia ter sido compatível com algum tipo de sabor pré-Linux do Unix, já que mknod
em GNU Fileutils é anterior ao próprio Linux, ¹ e esse recurso do GNU mknod
fica claro de volta para o primeiro check-up controlado por versão de mknod.c
, mas ainda tenho que encontrar documentação para qualquer Unix que aceite u
como um argumento para mknod(1)
, então essa hipótese não sustenta a água.²
Além disso:
-
Um utilitário
mknod
foi adicionado ao GNU Fileutils em julho de 1991. A primeira versão do kernel do Linux não foi publicada na Usenet até setembro de 1991. Isso nos diz que a primeira versão do GNUmknod
deve suportam sistemas operacionais não-Linux desde o início. -
Eu verifiquei as páginas de manual on-line para Solaris , HP-UX , AIX , FreeBSD , SCO OpenServer , SCO UnixWare , Minix 2 , Ultrix , 2.11BSD e OS X .
Você encontrará
mknod u
documentado para outros sistemas operacionais - como Minix 3 - mas apenas porque eles também estão usando a implementação GNU Coreutils demknod(1)
. Outra peculiaridade é o Solaris moderno, que envia AT & Tmknod
e GNUmknod
, documentados separadamente nas seções manuais 1m (link acima) e na seção 1g, respectivamente.