¿Para qué se usa el comando mknod?

52

Acabo de comenzar a usar Ubuntu como mi sistema operativo principal y quería aprender sobre cosas que no debería hacer, y aprender sobre las cosas malas que la gente ha hecho en el pasado. Encontré estos correos electrónicos sobre historias de terror que los administradores de sistemas de UNIX y Linux habían hecho en su propio sistema cuando eran nuevos. Muchos de ellos implicaron el uso del comando mknod tanto para analizar como para solucionar un problema. Nunca he oído hablar de este comando antes y la página man en Ubuntu no es muy útil. Entonces, mi pregunta es, ¿para qué se usa este comando y cuáles son algunos ejemplos en los que es útil en el uso diario?

Mark Tomlin
fuente

Respuestas:

48

mknodse usó originalmente para crear el personaje y bloquear dispositivos que pueblan /dev/. Hoy en día, el software udevcrea y elimina automáticamente nodos de dispositivo en el sistema de archivos virtual cuando el núcleo detecta el hardware correspondiente, pero originalmente /devera solo un directorio /que se rellenaba durante la instalación.

Entonces, sí, en caso de un desastre casi completo que hace que el /devsistema de archivos virtual no se cargue y / o udevfalle espectacularmente, se mknodpuede repoblar minuciosamente al menos un árbol de dispositivos rudimentario para recuperar algo ... Pero sí, eso es horror de administrador de sistemas Tiempo de cuentos. Personalmente, recomiendo una memoria USB o CD de rescate.

Además de crear canalizaciones con nombre, no puedo pensar en un solo uso diario posible para el que un usuario final deba preocuparse, e incluso eso es ampliar la definición de 'uso diario'.

Shadur
fuente
Entonces, ¿es una forma MUY especializada de crear un archivo virtual que realmente utilizan los dispositivos conectados al sistema como una forma de comunicarse con el sistema sin tener que aprender a comunicarse con el dispositivo a través de su controlador?
Mark Tomlin el
1
Pero udeves específico de Linux, ¿no es así? ¿Quizás otros sistemas similares a Unix todavía crean dispositivos manualmente?
Faheem Mitha
2
@mark Er, no. La creación de archivos de dispositivos virtuales es cómo se supone que el software se comunica con el dispositivo a través de su controlador. El controlador crea el gancho en el núcleo; mknod crea el archivo de dispositivo que vincula el enlace a un archivo de dispositivo al que posteriormente se puede conectar el software.
Shadur
@ Faheem no estoy seguro; Parece que FreeBSD usa devfsy / o devdno tengo experiencia personal con ninguno de los dos. Sin embargo, sospecho que otras unidades han desarrollado sus propias formas de automatizar el proceso de creación de nodos de dispositivos.
Shadur
@mark Por ejemplo, Alsa genera una serie de nodos /dev/sndcorrespondientes a los diversos elementos de cada bit de hardware de sonido que detectó y admite. El software que usa sonido puede usar esos dispositivos para generar sonido sin tener que saber con precisión con qué tipo de tarjeta de sonido están hablando.
Shadur
7

Puede hacer una tubería con nombre con ella.

Lo uso con un programa para leerlo y otro para escribir en él.

Facilita la comunicación entre procesos.

De lo contrario, puede crear archivos de dispositivo, para dispositivos que no están presentes.

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

polemon
fuente
Si bien su respuesta fue correcta, Shadur proporcionó una respuesta clara para todos los niveles de lectores, así que creo que es lo mejor para las personas que buscan una respuesta para esta pregunta.
Mark Tomlin
Lo sé, solo traté de explicarlo desde un enfoque práctico mientras lo hago. Usar mknodpara algo más que hacer tuberías con nombre es más que raro.
polemon
5

Como DBA de Oracle que trabajan en dispositivos sin formato para crear grupos de discos de Oracle ASM, los usamos regularmente mknodpara vincular dispositivos.

Las respuestas anteriores fueron muy útiles para mí, ya que no somos administradores del sistema. Solo quería señalar que podría ser raro usar el punto de vista de los administradores de almacenamiento, mknodpero desde el punto de vista de Oracle ASM es un uso común. (¿Puede ser que alguien pueda encontrar una mejor manera para nosotros?)

Jay Jee
fuente
1
Estoy ejecutando ASM en Linux y no he tenido ninguna razón para ejecutar mknod. Tengo algunos scripts udev que hacen enlaces simbólicos, pero no estoy seguro de para qué necesitas mknod ... A menos que no estés en Linux. por supuesto.
derobert 01 de
@JayJee tenga en cuenta que en los sistemas Linux modernos, si se realizan cambios o adiciones a /devla mknod, esos cambios se irán la próxima vez que se reinicie el sistema. Tendrá que escribir un script o un udevarchivo de reglas que realice los cambios / adiciones en el momento del arranque para que sean persistentes.
telcoM
3

En mi humilde opinión, incluso para hacer tuberías con nombre, el comando mkfifo es mejor que mknod. Uno, es autodescriptivo en su nombre. Segundo, permite que la opción -m anule la configuración de umask.

Tom
fuente
1
... y no existió hasta una década después de las tuberías con nombre; Muchos de nosotros aprendimos mknod foo pcuando era la única manera.
Nunca había oído hablar de mknod hasta hace poco cuando estaba buscando en Coreutils. Siempre he usado mkfifo ...
Six
0

El comando "mknod" fue lanzado a los licenciatarios en Unix (tm) Versión 4 por AT&T. Les recomiendo a todos que valga la pena gastar el tiempo y el dinero para obtener una copia de

Bell System Technical Journal, 57: 6. julio-agosto de 1978 pp 1905-1929. El sistema de tiempo compartido UNIX. (Ritchie, DM; Thompson, K.)

Ese tema, y ​​especialmente ese artículo, lo llevará a apreciar varios conceptos fundamentales que permiten la construcción del sistema operativo elegante, compacto, rápido, estable, seguro y versátil que era Unix (tm). Los diversos sistemas que ahora están disponibles siguen siendo bastante versátiles ;-)

Trataré de mencionar algunos de esos aquí.

1) los bits setuid y setgid y cómo el uso de dichos bits permite la separación de los usuarios en dominios de privilegio confiables y no confiables. Hop Springs eterno que los usuarios de confianza serán menos propensos a ordenar el sistema a "# cd /; rm -rf * .o ", observe tanto el uso inapropiado de privilegios como el" espacio de destrucción ". Observe también que el final de una oración con una frase entre comillas dicta el orden del punto final y las comillas de cierre. La gramática inglesa apesta (fm). dmr y ken donaron la patente semnal al público, bendícelos.

2) acceso al dispositivo a través del mismo espacio de nombres que los archivos. Aquí es donde la simple elegancia de una herramienta pequeña combinada con otras herramientas simples para realizar actividades no pensadas por los fundadores se vuelve poderosa.

3) Un archivo en el espacio de datos es una cadena. La estructura es impuesta por los programas en el espacio del programa y no está estrechamente vinculada al complicado programa Swiss-Army-Knife. Apple (R), Microsoft (R) e IBM (R) podrían haber tenido mejores productos si más de ellos leyeran BSTJ.

4) stdin, stdout, stderr.

5) shells, procesadores de comandos interpretativos, capaces de combinar fácilmente herramientas simples.

6) solo optimice el código en los bucles internos, dedique su tiempo y dinero limitados donde sea importante.

7) no incrustar la sintaxis de E / S en procesadores de traducción de idiomas.

C. <FORTRAN

8) BESO.

9) "Es más fácil diseñar e implementar una extensión de sistema ayaeem de tiempo compartido multiusuario a un buen sistema en tiempo real que al revés", yo, una extensión de tiempo compartido para RSX-11D, implementado usando pequeñas herramientas, escrito en MACRO 11 cuando era inevitable, de lo contrario, la secuencia de comandos de idiomas de nivel superior era bastante buena, 16 usuarios en un PDP-11 // 45 de 248k bytes (memoria de estado sólido de 16k el resto del núcleo). Desarrollo concurrente de programas con FOCAL, BASIC, FORTRAN IV, C, MACRO-11, edición de enlaces, ejecución de programas, lotes, interactivos y adquisición de control / datos de múltiples experimentos científicos usando un LAB-11 e interfaces creativas personalizadas para A / D, D / A, relojes de alta resolución, ...

No hay edición de retraso irritante observable con CRT de 9600 baudios o impresoras de 120 cps, 30 cps de DECwriters. Un staccato un poco desigual con una impresora de 300 lpm. UT200 y 2780 para RJE. Desarrollo de programas más rápido que RSX-11M, RSX-11M +, IAS y versiones anteriores de VMS.

Un programador de tiempo compartido realmente simple implementado como una tarea en tiempo real utilizando las características felices de un ATL vinculado prioritario implementado como una cola.

Las variedades Unix son muy rápidas hoy en día, pero solo porque las CPU pueden hacer un bucle infinito en tres segundos. TFC

k6mrm
fuente
Por favor discúlpeme escribiendo errores. iPhone y Parkinson no juegan bien juntos. C <FORTRAN <COBOL <PL / 1, izquierda es mejor.
k6mrm