Para que é utilizado o comando mknod?

52

Comecei a usar o Ubuntu como meu sistema operacional principal e queria aprender sobre coisas que não deveria fazer e aprender com as coisas ruins que as pessoas fizeram no passado. Eu me deparei com esses e-mails sobre histórias de horror que os administradores de sistemas UNIX e Linux haviam feito em seu próprio sistema quando eram novos. Muitos deles envolveram o uso do comando mknod para distorcer e corrigir um problema. Eu nunca ouvi falar desse comando antes e a página de manual no Ubuntu não é muito útil. Portanto, minha pergunta é: para que esse comando é usado e quais são alguns exemplos em que é útil no dia a dia?

Mark Tomlin
fonte

Respostas:

48

mknodfoi originalmente usado para criar os caracteres e bloquear dispositivos que são preenchidos /dev/. Atualmente, softwares como udevautomaticamente criam e removem nós de dispositivos no sistema de arquivos virtual quando o hardware correspondente é detectado pelo kernel, mas originalmente /devera apenas um diretório /que era preenchido durante a instalação.

Então, sim, no caso de um desastre quase completo, fazendo com que o /devsistema de arquivos virtual não seja carregado e / ou udevfalhe espetacularmente, pode-se mknodfazer o repovoamento meticuloso de pelo menos uma árvore de dispositivos rudimentares para recuperar algo ... Mas sim, isso é um sysadmin horror hora da história. Pessoalmente, recomendo um pen drive ou CD de resgate.

Além de criar pipes nomeados, não consigo pensar em um único uso diário possível para o qual um usuário final precisaria se preocupar - e isso está ampliando a definição de 'uso diário'.

Shadur
fonte
Portanto, é uma maneira MUITO especializada de criar um arquivo virtual que é realmente usado por dispositivos conectados ao sistema como uma maneira de se comunicar com o sistema sem ter que aprender a se comunicar com o dispositivo através do driver?
precisa
11
Mas udevé específico do Linux, não é? Talvez outros sistemas tipo Unix ainda criem dispositivos manualmente?
Faheem Mitha 06/04
2
@mark Er, não. Criar arquivos de dispositivo virtual é como o software deve se comunicar com o dispositivo por meio de seu driver. O driver cria o gancho no kernel; mknod cria o arquivo do dispositivo que vincula o gancho a um arquivo do dispositivo ao qual o software posteriormente pode se conectar.
Shadur
@ Faaem, não tenho certeza; O FreeBSD parece usar devfse / ou devdeu também não tenho experiência pessoal. Suspeito que outros departamentos tenham desenvolvido suas próprias maneiras de automatizar o processo de criação de nós de dispositivos.
Shadur
@mark Por exemplo, a Alsa gera uma série de nós /dev/sndcorrespondentes aos vários elementos de cada bit de hardware de som detectado e suportado. O software que usa som pode usar esses dispositivos para gerar som sem precisar saber exatamente com que tipo de placa de som eles estão falando.
Shadur
7

Você pode fazer um pipe nomeado com ele.

Eu o uso com um programa para ler e outro para escrever nele.

Facilita a comunicação entre processos.

Caso contrário, você pode criar arquivos de dispositivo, para dispositivos que não estão presentes.

Também: http://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.cmds/doc/aixcmds3/mknod.htm

polemon
fonte
Enquanto sua resposta estava correta, Shadur forneceu uma resposta clara para todos os níveis de leitores, então acho que é o melhor para as pessoas que procuram uma resposta para essa pergunta.
Mark Tomlin
Eu sei, apenas tentei explicar a partir de uma abordagem prática enquanto o faço. Usar mknodpara algo mais do que fazer pipes nomeados é mais do que raro.
Polemon
5

Como DBAs da Oracle trabalhando em dispositivos brutos para criar grupos de discos Oracle ASM, usamos regularmente mknodpara vincular dispositivos.

As respostas acima foram muito úteis para mim, pois não somos administradores de sistema. Eu só queria ressaltar que pode ser raro do ponto de vista dos administradores de armazenamento usar, mknodmas do ponto de vista do Oracle ASM é um uso comum. (Pode haver alguém que possa apresentar uma maneira melhor para nós?)

Jay Jee
fonte
11
Estou executando o ASM no Linux e não tive nenhum motivo para executar o mknod. Eu tenho alguns scripts do udev que fazem links simbólicos, mas não sei para que você precisa do mknod ... A menos que você não esteja no Linux. claro.
Derobert 1/10/12
@JayJee Esteja ciente de que em sistemas Linux modernos, se você fizer alterações ou adições para /devcom mknod, essas alterações vão embora na próxima vez que o sistema for reiniciado. Você precisaria escrever um script ou um udevarquivo de regras que fizesse as alterações / adições no momento da inicialização para torná-las persistentes.
telcoM 28/09
3

IMHO, mesmo para fazer pipes nomeados, o comando mkfifo é melhor que o mknod. Primeiro, é auto-descritivo em seu nome. Segundo, permite que a opção -m substitua as configurações do umask.

Tom
fonte
11
... e não existia até uma década depois de tubos nomeados; muitos de nós aprendemos mknod foo pquando esse era o único caminho.
Eu nunca tinha ouvido falar de mknod até recentemente, quando eu estava olhando através de coreutils. Eu sempre usei apenas mkfifo ...
Seis
0

O comando "mknod" foi liberado para os licenciados no Unix (tm) Versão 4 pela AT&T. Eu recomendaria a todos que vale a pena gastar tempo e dinheiro para obter uma cópia do

Bell System Technical Journal, 57: 6. Julho-agosto de 1978, páginas 1905-1929. O sistema de compartilhamento de tempo UNIX. (Ritchie, DM; Thompson, K.)

Essa edição e, especialmente, esse artigo, levarão você a uma apreciação de vários conceitos fundamentais que permitem a construção do sistema operacional elegante, compacto, rápido, estável, seguro e versátil que era o Unix (tm). Os vários sistemas que estão agora disponíveis ainda são bastante versáteis ;-)

Vou tentar mencionar alguns deles aqui.

1) os bits setuid e setgid e como o uso dos referidos bits permite a separação dos usuários em domínios de privilégios confiáveis ​​e não confiáveis. O salto é eterno, pois usuários confiáveis ​​terão menos probabilidade de comandar o sistema “# cd /; rm -rf * .o ”, observe o uso indevido de privilégios e o“ espaço de destruição ”. Observe também que o final de uma frase com uma frase entre aspas dita a ordem do ponto final e as aspas finais. A gramática inglesa é péssima (fm). dmr e ken doaram a patente semnal ao público, abençoe-os.

2) acesso ao dispositivo através do mesmo espaço para nome dos arquivos. Aqui é onde a elegância simples de uma pequena ferramenta combinada com outras ferramentas simples para realizar atividades não pensadas pelos fundadores se torna poderosa.

3) Um arquivo no espaço de dados é uma sequência. A estrutura é imposta pelos programas no espaço do programa e não está fortemente vinculada ao complicado programa do canivete suíço. Apple (R), Microsoft (R) e IBM (R) poderiam ter produtos melhores se mais deles tivessem lido BSTJ.

4) stdin, stdout, stderr.

5) shells, processadores de comando interpretativos, capazes de facilmente usar ferramentas simples.

6) otimize o código apenas em loops internos, gaste seu tempo e dinheiro limitados onde é importante.

7) não incorpore sintaxe de E / S nos processadores de tradução de idiomas.

C. <FORTRAN

8) BEIJO.

9) “É mais fácil projetar e implementar uma extensão de sistema de compartilhamento de tempo multiusuário para um bom sistema em tempo real do que o contrário”, eu, Uma extensão de compartilhamento de tempo para RSX-11D, implementada usando pequenas ferramentas, escritas em MACRO 11 quando inevitável, o script pr de linguagens de nível superior era muito bom, 16 usuários em um PDP-11 de 248k bytes // 45 (16k de memória de estado sólido o restante do núcleo). Desenvolvimento de programa simultâneo com FOCAL, BASIC, FORTRAN IV, C, MACRO-11, edição de links, execução de programas, lote, interativo e aquisição de controle / dados de vários experimentos científicos usando um LAB-11 e interfaces personalizadas criativas para A / D, D / A, relógios de alta resolução, ...

Não é possível atrasar a edição irritante observável com CRTs de 9600 baud ou impressoras de 120 cps e DECwriters de 30 cps. Um staccato um pouco irregular com uma impressora de 300 lpm. UT200 e 2780 para RJE. Desenvolvimento de programa mais rápido que o RSX-11M, RSX-11M +, IAS e versões anteriores do VMS.

Um agendador de compartilhamento de tempo realmente simples, implementado como uma tarefa em tempo real, usando as características felizes de um ATL vinculado à prioridade, implementado como uma desenfileiramento.

Hoje em dia, as variedades Unix são extremamente rápidas, mas apenas porque as CPUs podem executar um loop infinito em três segundos. TFC.

k6mrm
fonte
Por favor, desculpe-me digitando erros. iPhone e Parkinson não tocam bem juntos. C <FORTRAN <COBOL <PL / 1, esquerda melhor.
k6mrm 28/09