A quoi sert la commande mknod?

52

Je viens tout juste de commencer à utiliser Ubuntu comme principal système d’exploitation et je voulais apprendre des choses que je ne devrais pas faire, et tirer parti des mauvaises choses que les gens ont faites par le passé. Je suis tombé sur ces courriels concernant des histoires d'horreur que les administrateurs système UNIX et Linux avaient écrites sur leur propre système lorsqu'ils étaient nouveaux. Beaucoup d'entre eux impliquaient l'utilisation de la commande mknod à la fois pour distory et pour résoudre un problème. Je n'ai jamais entendu parler de cette commande auparavant et la page de manuel d'Ubuntu n'est pas très utile. Ma question est donc la suivante: à quoi cette commande est-elle utilisée et quels sont les exemples où elle est utile dans une utilisation quotidienne?

Mark Tomlin
la source

Réponses:

48

mknoda été utilisé à l'origine pour créer le caractère et bloquer les périphériques qui peuplent /dev/. De nos jours, un logiciel comme udevcrée et supprime automatiquement les nœuds de périphérique sur le système de fichiers virtuel lorsque le matériel correspondant est détecté par le noyau, mais qu’il ne /devs’agissait à l’ origine d’ un répertoire /qui a été rempli lors de l’installation.

Donc, oui, en cas de sinistre presque complet empêchant le /devsystème de fichiers virtuel de se charger et / ou udevéchouant de manière spectaculaire, il est possible mknodde repeupler minutieusement au moins une arborescence de périphériques rudimentaire pour récupérer quelque chose ... Mais oui, c'est une horreur sysadmin l'heure du conte. Personnellement, je recommande une clé USB ou un CD de secours.

Hormis la création de canaux nommés, je ne peux pas penser à un seul usage quotidien possible pour lequel un utilisateur final devrait se préoccuper - et même cela élargit la définition du terme «usage quotidien».

Shadur
la source
C'est donc une manière TRÈS spécialisée de créer un fichier virtuel réellement utilisé par les périphériques connectés au système pour communiquer avec le système sans avoir à apprendre à communiquer avec le périphérique via son pilote?
Mark Tomlin le
1
Mais udevest-ce spécifique à Linux, n'est-ce pas? Peut-être que d'autres systèmes de type Unix créent encore manuellement des périphériques?
Faheem Mitha
2
@ Mark Er, non. La création de fichiers de périphérique virtuel est la façon dont le logiciel est censé communiquer avec le périphérique via son pilote. Le pilote crée le hook dans le noyau; mknod crée le fichier de périphérique qui lie le raccord à un fichier de périphérique auquel le logiciel peut se connecter par la suite.
Shadur
@Faheem Je ne suis pas sûr; FreeBSD semble utiliser devfset / ou devdmais je n'ai aucune expérience personnelle avec l'un ou l'autre. Je suppose que d’autres unités de gestion ont mis au point leurs propres moyens d’automatiser le processus de création de nœuds de périphériques.
Shadur
@mark Par exemple, Alsa génère une série de nœuds /dev/sndcorrespondant aux différents éléments de chaque bit de matériel audio détecté et pris en charge. Les logiciels qui utilisent le son peuvent utiliser ces appareils pour générer du son sans avoir à savoir exactement à quel type de carte son ils parlent.
Shadur
7

Vous pouvez faire un tuyau nommé avec elle.

Je l'utilise avec un programme pour le lire et un autre pour y écrire.

Facilite la communication entre les processus.

Sinon, vous pouvez créer des fichiers de périphérique, pour les périphériques non présents.

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

polemon
la source
Bien que votre réponse soit correcte, Shadur a fourni une réponse claire pour tous les niveaux de lecteurs. Je pense donc que c’est le meilleur choix pour ceux qui recherchent une réponse à cette question.
Mark Tomlin
Je sais, je viens d'essayer d'expliquer d'une manière pratique que je le fais. Utiliser mknodpour autre chose que fabriquer des pipes nommées est plus que rare.
polemon
5

En tant que administrateurs de base de données oracle travaillant sur des périphériques bruts pour créer des groupes de disques Oracle ASM, nous l’utilisons régulièrement mknodpour lier des périphériques.

Les réponses ci-dessus m'ont été très utiles car nous ne sommes pas des administrateurs système. Je voulais simplement souligner le fait qu'il peut être rare d'utiliser mknoddu point de vue des administrateurs de stockage, mais du point de vue d'Oracle ASM, c'est une utilisation courante. (Peut-être que quelqu'un pourrait trouver un meilleur moyen pour nous?)

Jay Jee
la source
1
J'utilise ASM sous Linux et je n'ai aucune raison d'exécuter mknod. J'ai quelques scripts udev qui font des liens symboliques, mais je ne sais pas pourquoi vous avez besoin de mknod ... Sauf si vous n'êtes pas sous Linux. bien sûr.
derobert
@JayJee Sachez que sur les systèmes Linux modernes, si vous apportez des modifications ou des ajouts /devavec mknod, ces modifications disparaîtront au prochain redémarrage du système. Vous auriez besoin d'écrire un script ou un udevfichier de règles qui apporterait les modifications / ajouts pour vous au moment du démarrage afin de les rendre persistants.
telcoM le
3

IMHO, même pour faire des pipes nommés, la commande mkfifo soit meilleure que mknod. Premièrement, elle est auto-descriptive dans son nom. Deuxièmement, elle autorise l'option -m à remplacer les paramètres umask.

À M
la source
1
... et il n'existait pas avant une décennie après les pipes nommées; beaucoup d'entre nous ont appris mknod foo pque c'était le seul moyen.
Je n'avais jamais entendu parler de mknod jusqu'à récemment, alors que je cherchais dans les coreutils. J'ai toujours utilisé mkfifo ...
Six
0

La commande «mknod» a été transmise aux titulaires de licence sous Unix (TM) version 4 par AT & T. Je recommanderais à tout le monde de gagner du temps et de l’argent pour en obtenir un exemplaire.

Revue technique du système Bell, 57: 6. juillet-août 1978, pages 1905-1929. Le système de partage du temps UNIX. (Ritchie, DM; Thompson, K.)

Ce numéro, et en particulier cet article, vous mènera à une compréhension de plusieurs concepts fondamentaux qui permettent la construction du système d'exploitation élégant, compact, rapide, stable, sécurisé et polyvalent qu'était Unix (tm). Les différents systèmes disponibles sont encore assez polyvalents ;-)

Je vais essayer d'en mentionner quelques-unes ici.

1) les bits setuid et setgid et comment leur utilisation permet de séparer les utilisateurs en domaines de privilèges sécurisés et non sécurisés. Les sources de confiance incitent les utilisateurs de confiance à commander moins souvent le système à «# cd /; rm -rf * .o ”, notez à la fois l’utilisation abusive du privilège et“ l’espace de destruction ”. Notez également que la fin de la phrase avec une phrase citée dicte l’ordre des guillemets complet et fermé. La grammaire anglaise craint (FM). dmr et ken ont fait don du brevet de semnal au public, bénis-le.

2) accès au périphérique via le même espace de noms que les fichiers. C'est ici que l'élégance simple d'un petit outil combiné à d'autres outils simples pour effectuer des activités non considérées par les fondateurs devient puissante.

3) Un fichier dans l'espace de données est une chaîne. La structure est imposée par les programmes dans l'espace programme et n'est pas étroitement liée au programme compliqué Swiss-Army-Knife. Apple (R), Microsoft (R) et IBM (R) auraient peut-être eu de meilleurs produits si davantage d’entre eux lisaient BSTJ.

4) stdin, stdout, stderr.

5) coques, processeurs de commande d'interprétation, capables de comprendre facilement des outils simples.

6) n'optimisez le code que dans les boucles internes, utilisez votre temps et votre argent limités là où cela compte.

7) ne pas incorporer la syntaxe i / o dans les processeurs de traduction.

C. <FORTRAN

8) KISS.

9) «Il est plus facile de concevoir et de mettre en œuvre une extension du système multi-utilisateur multi-utilisateur qu'un bon système temps réel que dans l'autre sens», moi, une extension en temps partagé à RSX-11D, implémentée à l'aide de petits outils, écrite en MACRO 11 lorsque non nécessaire, sinon le langage de script de niveau supérieur était assez bon, 16 utilisateurs sur un PDP-11 // 45 de 248k octets (16k de mémoire solide le reste de la mémoire). Développement de programmes simultanés avec FOCAL, BASIC, FORTRAN IV, C, MACRO-11, édition de liens, exécution de programmes, acquisition par lots, acquisition interactive et contrôle / données de multiples expériences scientifiques à l'aide d'un LAB-11 et d'interfaces personnalisées créatives vers A / D, D / A, horloges haute résolution, ...

Pas de retards de retouches irritants observables avec les imprimeurs Decwriters 30cps ou CRT à 9600 bauds. Un peu saccadé avec une imprimante 300 l / min. UT200 et 2780 pour RJE. Développement de programme Fastesr plus rapide que RSX-11M, RSX-11M +, IAS et les premières versions de VMS.

Un ordonnanceur à partage de temps très simple implémenté en tant que tâche en temps réel utilisant les caractéristiques heureuses d'un ATL lié par priorité implémenté en tant que file d'attente.

Les variétés Unix sont ultra-rapides de nos jours, mais uniquement parce que les processeurs peuvent créer une boucle infinie en trois secondes. TFC.

k6mrm
la source
Excusez-moi s'il vous plaît. iPhone et Parkinson ne jouent pas bien ensemble. C <FORTRAN <COBOL <PL / 1, mieux vaut.
k6mrm le