A cosa serve il comando mknod?


52

Ho appena iniziato a utilizzare Ubuntu come mio sistema operativo principale e volevo imparare cose che non avrei dovuto fare e imparare dalle cose cattive che le persone hanno fatto in passato. Mi sono imbattuto in queste e-mail sulle storie dell'orrore che gli amministratori di sistema UNIX e Linux avevano fatto sul proprio sistema quando erano nuove. Molti di loro hanno comportato l'uso del comando mknod per distorcere e risolvere un problema. Non ho mai sentito parlare di questo comando prima e la pagina man di Ubuntu non è molto utile. Quindi la mia domanda è: a cosa serve questo comando e quali sono alcuni esempi in cui è utile nell'uso quotidiano?

Risposte:


48

mknodè stato originariamente utilizzato per creare il personaggio e bloccare i dispositivi che popolano /dev/. Al giorno d'oggi software come udevcrea e rimuove automaticamente i nodi del dispositivo sul filesystem virtuale quando l'hardware corrispondente viene rilevato dal kernel, ma originariamente /devera solo una directory /popolata durante l'installazione.

Quindi sì, in caso di un disastro quasi completo che /devnon carica il filesystem virtuale e / o udevfallisca in modo spettacolare, si può fare con mknodscrupolosamente ripopolamento almeno un albero di dispositivi rudimentale per ottenere qualcosa di backup ... Ma sì, è sysadmin horror ora della favola. Personalmente, raccomando una chiavetta USB o un CD di salvataggio.

A parte la creazione di pipe denominate, non riesco a pensare a un singolo possibile uso quotidiano per cui un utente finale dovrebbe preoccuparsi - e anche questo sta allungando la definizione di "uso quotidiano".


Quindi è un modo MOLTO specializzato di creare un file virtuale che viene realmente utilizzato dai dispositivi collegati al sistema come modo di comunicare con il sistema senza dover imparare a comunicare con il dispositivo tramite il suo driver?
Mark Tomlin,

1
Ma udevè specifico di Linux, non è vero? Forse altri sistemi simili a Unix creano ancora manualmente dispositivi?
Faheem Mitha,

2
@mark Er, no. La creazione di file di dispositivi virtuali è il modo in cui il software dovrebbe comunicare con il dispositivo tramite il suo driver. Il driver crea l'hook nel kernel; mknod crea il file del dispositivo che collega l'hook a un file del dispositivo a cui successivamente il software può connettersi.
Shadur,

@Faheem non ne sono sicuro; FreeBSD sembra usare devfse / o devdma non ho esperienza personale con nessuno dei due. Ho il sospetto che altri unice abbiano escogitato i loro modi per automatizzare il processo di creazione dei nodi del dispositivo.
Shadur,

@mark Ad esempio, Alsa genera una serie di nodi in /dev/sndcorrispondenza dei vari elementi di ciascun bit di hardware audio rilevato e supportato. Il software che utilizza l'audio può utilizzare questi dispositivi per generare l'audio senza dover sapere con precisione con quale tipo di scheda audio sta parlando.
Shadur,

7

È possibile creare una pipa denominata con esso.

Lo uso con un programma per leggere da esso e un altro per scrivere in esso.

Semplifica la comunicazione tra i processi.

Altrimenti, è possibile creare file di dispositivo per dispositivi che non sono presenti.

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


Mentre la tua risposta era corretta, Shadur ha fornito una risposta che era chiara per tutti i livelli di lettori, quindi penso che sia la cosa migliore per le persone che cercano una risposta a questa domanda.
Mark Tomlin,

Lo so, ho appena provato a spiegare da un approccio pratico mentre lo faccio. Usare mknodper qualcos'altro oltre a creare pipe con nome è più che raro.
polemon

5

Come DBA Oracle che lavorano su dispositivi raw per creare diskgroup Oracle ASM, utilizziamo regolarmente mknodper collegare i dispositivi.

Le risposte di cui sopra mi sono state molto utili in quanto non siamo amministratori di sistema. Volevo solo sottolineare che potrebbe essere raro dal punto di vista degli amministratori dello storage utilizzare mknodma dal punto di vista di Oracle ASM è un uso comune. (Potrebbe essere qualcuno potrebbe trovare un modo migliore per noi?)


1
Sto eseguendo ASM su Linux e non ho avuto alcun motivo per eseguire mknod. Ho alcuni script udev che creano collegamenti simbolici, ma non sono sicuro di cosa tu abbia bisogno di mknod ... A meno che tu non sia su Linux. ovviamente.
derobert,

@JayJee Essere informato che sui moderni sistemi Linux, se si apportano modifiche o integrazioni /devcon mknod, questi cambiamenti andrà via la prossima volta che il sistema viene riavviato. Dovresti scrivere uno script o un udevfile di regole che renderebbe le modifiche / aggiunte al momento dell'avvio per renderle persistenti.
telcoM,

3

IMHO, anche per creare pipe denominate, il comando mkfifo è migliore di mknod. Uno, è auto-descrittivo nel suo nome, secondo, consente l'opzione -m per sovrascrivere le impostazioni di umask.


1
... e non esisteva fino a un decennio dopo il nome di pipe; molti di noi hanno imparato mknod foo pquando era l'unico modo.

Non avevo mai sentito parlare di mknod fino a poco tempo fa quando guardavo attraverso i coreutils. Ho sempre usato mkfifo ...
Sei il

0

Il comando "mknod" è stato rilasciato ai licenziatari in Unix (tm) versione 4 da AT&T. Consiglierei a tutti che vale la pena spendere tempo e denaro per ottenerne una copia

Bell System Technical Journal, 57: 6. Luglio-Agosto 1978 pagg. 1905-1929. Il sistema di condivisione del tempo UNIX. (Ritchie, DM; Thompson, K.)

Tale questione, e in particolare l'articolo, ti porterà ad apprezzare diversi concetti fondamentali che consentono la costruzione del sistema operativo elegante, compatto, veloce, stabile, sicuro e versatile che Unix (tm)) era. I vari sistemi ora disponibili sono ancora abbastanza versatili ;-)

Proverò a menzionarne alcuni qui.

1) i bit setuid e setgid e come l'uso di detti bit consente la separazione degli utenti in domini di privilegi affidabili e non attendibili. Hop è eterno che gli utenti fidati avranno meno probabilità di comandare il sistema su "# cd /; rm -rf * .o ”, nota sia l'uso improprio del privilegio sia lo“ spazio di distruzione ”. Nota anche che la fine di una frase con una frase tra virgolette determina l'ordine del punto e la virgoletta di chiusura. La grammatica inglese fa schifo (fm). dmr e ken hanno donato il brevetto seminale al pubblico, li benedica.

2) accesso al dispositivo attraverso lo stesso spazio dei nomi dei file. Qui è dove la semplice eleganza di un piccolo strumento combinato con altri semplici strumenti per eseguire attività non pensate dai fondatori diventa potente.

3) Un file nello spazio dati è una stringa. La struttura è imposta dai programmi nello spazio del programma e non è strettamente legata al complicato programma Swiss-Army-Knife. Apple (R), Microsoft (R) e IBM (R) avrebbero potuto avere prodotti migliori se molti di loro avessero letto BSTJ.

4) stdin, stdout, stderr.

5) shell, processori di comandi interpretativi, in grado di integrare facilmente strumenti semplici.

6) ottimizza il codice solo nei loop interni, spendi il tuo tempo limitato e denaro dove conta.

7) non incorporare la sintassi I / O nei processori di traduzione linguistica.

C. <FORTRAN

8) BACIO.

9) "È più facile progettare e implementare un'estensione di sistema multi-utente ayaeem su un buon sistema in tempo reale rispetto al contrario", io, un'estensione di multiproprietà per RSX-11D, implementata usando piccoli strumenti, scritta in MACRO 11 quando unvoidat, altrimenti lo script pr di linguaggi di livello superiore era abbastanza buono, 16 utenti su un PDP-11 // 45 da 248k byte (memoria a stato solido 16k il resto core). Sviluppo simultaneo di programmi con FOCAL, BASIC, FORTRAN IV, C, MACRO-11, editing di link, esecuzione del programma, batch, interattivo e controllo / acquisizione dati di molteplici esperimenti scientifici utilizzando un LAB-11 e interfacce creative personalizzate per A / D, D / A, orologi ad alta risoluzione, ...

Nessuna modifica con ritardo irritante osservabile con CRT 9600baud o stampanti DECwriter da 30 cps. Staccato un po 'a scatti con una stampante da 300 lpm. UT200 e 2780 per RJE. Sviluppo di programmi Fastesr rispetto a RSX-11M, RSX-11M +, IAS e versioni precedenti di VMS.

Un programmatore di condivisione del tempo davvero semplice implementato come un compito in tempo reale utilizzando le felici caratteristiche di un ATL collegato in via prioritaria implementato come dequeue.

Oggi le varietà Unix sono velocissime, ma solo perché le CPU possono eseguire un ciclo infinito in tre secondi. TFC.


Mi scusi, per favore, scrivendo errori. iPhone e Parkinson non giocano bene insieme. C <FORTRAN <COBOL <PL / 1, sinistra è migliore.
k6mrm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.