Wofür wird der Befehl mknod verwendet?

51

Ich habe gerade angefangen, Ubuntu als mein Hauptbetriebssystem zu verwenden und wollte etwas über Dinge lernen, die ich nicht tun sollte und über die schlechten Dinge, die die Leute in der Vergangenheit getan haben. Ich bin auf diese E-Mail gestoßen, in der es um Horrorgeschichten ging, die UNIX- und Linux- Systemadministratoren auf ihrem eigenen System gemacht hatten, als sie neu waren. Viele von ihnen verwendeten den Befehl mknod, um einen Verlauf zu erstellen und ein Problem zu beheben. Ich habe noch nie von diesem Befehl gehört und die Manpage in Ubuntu ist nicht sehr hilfreich. Meine Frage ist also, wofür dieser Befehl verwendet wird und welche Beispiele sind für den täglichen Gebrauch hilfreich?

Mark Tomlin
quelle

Antworten:

47

mknodwurde ursprünglich verwendet, um die Zeichen zu erstellen und Geräte zu blockieren, die sich füllen /dev/. Heutzutage udeverstellt und entfernt Software wie automatisch Geräteknoten im virtuellen Dateisystem, wenn der Kernel die entsprechende Hardware erkennt, aber ursprünglich /devnur ein Verzeichnis /, das während der Installation ausgefüllt wurde.

Also ja, im Fall einer nahezu vollständigen Katastrophe das verursacht /devvirtuelles Dateisystem nicht zu laden und / oder udevspektakulär versagt, indem mknodzumindest einen rudimentären Gerätebaum mühsam wieder zu bevölkern zu bekommen etwas zurück nach oben getan werden kann ... Aber ja, das ist Sysadmin Horror Märchenstunde. Persönlich empfehle ich einen Rettungs-USB-Stick oder eine Rettungs-CD.

Abgesehen von der Erstellung von Named Pipes fällt mir kein einziger möglicher alltäglicher Gebrauch ein, mit dem sich ein Endbenutzer befassen müsste - und selbst das erweitert die Definition des „alltäglichen Gebrauchs“.

Shadur
quelle
Es handelt sich also um eine SEHR spezialisierte Methode zum Erstellen einer virtuellen Datei, die von an das System angeschlossenen Geräten tatsächlich zur Kommunikation mit dem System verwendet wird, ohne dass Sie lernen müssen, wie Sie über den Treiber mit dem Gerät kommunizieren können.
Mark Tomlin
1
Aber udevist es nicht Linux-spezifisch? Vielleicht erstellen andere Unix-ähnliche Systeme Geräte immer noch manuell?
Faheem Mitha
2
@mark Äh, nein. Virtuelle Gerätedateien zu erstellen ist , wie Software soll mit dem Gerät durch seinen Fahrer kommunizieren. Der Treiber erstellt den Hook im Kernel. mknod erstellt die Gerätedatei, die den Hook mit einer Gerätedatei verknüpft, mit der die Software anschließend eine Verbindung herstellen kann.
Shadur
@Faheem Ich bin nicht sicher; FreeBSD scheint zu verwenden devfsund / oder devdaber ich habe keine persönlichen Erfahrungen mit beiden. Ich vermute, dass andere Unices ihre eigenen Wege gefunden haben, um den Prozess der Herstellung von Geräteknoten zu automatisieren.
Shadur
@mark Alsa generiert beispielsweise eine Reihe von Knoten /dev/snd, die den verschiedenen Elementen der einzelnen erkannten und unterstützten Soundhardware-Bits entsprechen. Software, die Sound verwendet, kann mit diesen Geräten Sound erzeugen, ohne genau wissen zu müssen, mit welcher Art von Soundkarte sie sprechen.
Shadur
7

Sie können damit eine Named Pipe erstellen.

Ich benutze es mit einem Programm zum Lesen und einem anderen zum Schreiben.

Erleichtert die Kommunikation zwischen Prozessen.

Andernfalls können Sie Gerätedateien für Geräte erstellen, die nicht vorhanden sind.

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

Polemon
quelle
Obwohl Ihre Antwort richtig war, gab Shadur eine Antwort, die für alle Leserebenen klar war, sodass ich der Meinung bin, dass dies die beste Antwort für Menschen ist, die nach einer Antwort auf diese Frage suchen.
Mark Tomlin
Ich weiß, ich habe gerade versucht, anhand eines praktischen Ansatzes zu erklären, wie ich es tue. Die Verwendung mknodfür etwas anderes als das Erstellen von Named Pipes ist mehr als selten.
Polemon
5

Als Oracle-Datenbankadministratoren, die an Raw-Geräten arbeiten, um Oracle ASM-Plattengruppen zu erstellen, verwenden wir regelmäßig mknod, um Geräte zu verknüpfen.

Die obigen Antworten waren für mich sehr hilfreich, da wir keine Systemadministratoren sind. Ich wollte nur darauf hinweisen, dass die Verwendung mknodaus Sicht von Storage-Administratoren selten ist, aus Sicht von Oracle ASM jedoch eine häufige Verwendung. (Kann jemand einen besseren Weg für uns finden?)

Jay Jee
quelle
1
Ich verwende ASM unter Linux und habe keinen Grund gehabt, mknod auszuführen. Ich habe einige udev-Skripte, die Symlinks erstellen, aber nicht sicher, wofür Sie mknod benötigen ... Es sei denn, Sie arbeiten nicht unter Linux. Na sicher.
Derobert
@JayJee dass auf modernen Systemen Linux beraten, wenn Sie Änderungen oder Ergänzungen vornehmen zu /devmit mknod, gehen diese Änderungen das System das nächste Mal entfernt neu gestartet wird. Sie müssten ein Skript oder eine udevRegeldatei schreiben , die die Änderungen / Ergänzungen beim Booten vornimmt, damit sie dauerhaft sind.
TelcoM
3

IMHO, auch für Named Pipes, ist der Befehl mkfifo besser als mknod. Erstens ist es in seinem Namen selbsterklärend. Zweitens erlaubt es der Option -m, umask-Einstellungen zu überschreiben.

Tom
quelle
1
... und es gab es erst ein Jahrzehnt nach Named Pipes; Viele von uns haben gelernt, mknod foo pals es der einzige Weg war.
Ich hatte bis vor kurzem noch nie von mknod gehört, als ich Coreutils durchgesehen habe. Ich habe immer nur mkfifo verwendet ...
Sechs
0

Der Befehl „mknod“ wurde für Lizenznehmer in Unix (tm) Version 4 von AT & T freigegeben. Ich würde euch allen empfehlen, dass es sich lohnt, die Zeit und das Geld zu investieren, um eine Kopie davon zu bekommen

Bell System Technical Journal, 57: 6. Juli-August 1978, S. 1905-1929. Das UNIX-Timesharing-System. (Ritchie, DM; Thompson, K.)

In dieser Ausgabe und insbesondere in diesem Artikel erfahren Sie, welche grundlegenden Konzepte es ermöglichen, das elegante, kompakte, schnelle, stabile, sichere und vielseitige Betriebssystem von Unix (tm) zu erstellen. Die verschiedenen Systeme, die jetzt verfügbar sind, sind noch recht vielseitig ;-)

Ich werde versuchen, einige davon hier zu erwähnen.

1) die setuid- und setgid-Bits und wie die Verwendung dieser Bits die Trennung von Benutzern in vertrauenswürdige und nicht vertrauenswürdige Privilegdomänen ermöglicht. Hop Springs ewig, dass vertrauenswürdige Benutzer das System mit geringerer Wahrscheinlichkeit anweisen, “# cd /; rm -rf * .o “, beachten Sie sowohl die missbräuchliche Verwendung von Privilegien als auch den„ Raum der Zerstörung “. Englische Grammatik saugt (FM). dmr und ken haben das semnal patent der öffentlichkeit geschenkt, segne sie.

2) Gerätezugriff über denselben Namespace wie Dateien. Hier wird die schlichte Eleganz eines kleinen Werkzeugs in Kombination mit anderen einfachen Werkzeugen zur Ausführung von Aktivitäten, an die die Gründer nicht gedacht haben, mächtig.

3) Eine Datei im Datenraum ist eine Zeichenfolge. Die Struktur wird durch Programme im Programmraum vorgegeben und ist nicht eng an ein kompliziertes Schweizer Taschenmesserprogramm gebunden. Apple, Microsoft und IBM hatten möglicherweise bessere Produkte, von denen mehr BSTJ lesen.

4) stdin, stdout, stderr.

5) Muscheln, interpretierende Befehlsprozessoren, die in der Lage sind, einfache Werkzeuge leicht zu handhaben.

6) Optimieren Sie Code nur in inneren Schleifen, verwenden Sie Ihre begrenzte Zeit und Ihr begrenztes Geld dort, wo es darauf ankommt.

7) Betten Sie keine I / O-Syntax in Sprachübersetzungsprozessoren ein.

C. <FORTRAN

8) KUSS.

9) „Es ist einfacher, eine Mehrbenutzer-Timesharing-Ayaeem-Systemerweiterung für ein gutes Echtzeitsystem zu entwerfen und zu implementieren als umgekehrt“, ich, Eine Timesharing-Erweiterung für RSX-11D, die mit kleinen Tools implementiert wurde und in MACRO geschrieben ist 11 Wenn unvermeidlich, sonst höhere Sprachen Pr-Skript war ziemlich gut, 16 Benutzer auf einem 248k-Byte-PDP-11 / / 45 (16k Solid-State-Speicher der Rest Kern). Gleichzeitige Programmentwicklung mit FOCAL, BASIC, FORTRAN IV, C, MACRO-11, Linkbearbeitung, Programmausführung, Batch, Interaktivität und Kontrolle / Datenerfassung mehrerer wissenschaftlicher Experimente unter Verwendung eines LAB-11 und kreativer kundenspezifischer Schnittstellen zu A / D, D / A, hochauflösende Uhren, ...

Keine störenden Verzögerungen bei der Bearbeitung mit 9600-Bit-CRTs oder 120-Bit-Druckern mit 30-Bit-DECwritern. Etwas ruckeliges Staccato mit einem 300 l / min Drucker. UT200 und 2780 für RJE. Schnelle Programmentwicklung als RSX-11M, RSX-11M +, IAS und frühere Versionen von VMS.

Ein wirklich einfacher Zeitverteilungsplaner, der als Echtzeitaufgabe implementiert ist und die glücklichen Eigenschaften einer prioritätsgebundenen ATL nutzt, die als Warteschlange implementiert ist.

Unix-Varianten sind heutzutage blitzschnell, aber nur, weil CPUs eine Endlosschleife in drei Sekunden ausführen können. TFC.

k6mrm
quelle
Entschuldigen Sie bitte Tippfehler. iPhone und Parkinson spielen nicht gut zusammen. C <FORTRAN <COBOL <PL / 1, links ist besser.
28.