/dev/nullist eine spezielle Zeichendatei, was bedeutet, dass es sich um eine inhaltslose Datei handelt, die als in der Lage markiert ist, Byte-Streams zu quellieren und zu speichern. Was mit diesen Streams passiert, wird durch ihre Gerätenummern bestimmt. Auf meinem BSD-System im Moment:
crw-rw-rw- 1 Wurzelrad 3, 2. Januar 25 14:57 / dev / null
Die Gerätenummern sind 3,2 (die Hauptnummer ist 3, die Nebennummer ist 2). Ich kann andere /dev/nullähnliche Dateien erstellen mknod /dev/nil c 3 2, wobei c bedeutet, dass ich eine spezielle Zeichendatei möchte. Auf BSD-Systemen wird das Gerätenummernpaar jedoch dynamisch erstellt und ist beim nächsten Start möglicherweise nicht dasselbe.
Um zu sehen, wie diese Fakten in der Praxis zutreffen:
sh-2.05b # mknod / dev / nil c 3 2
sh-2.05b # ls -l / dev / nil
crw-r - r-- 1 Wurzelrad 3, 2. Januar 25 15:14 / dev / nil
sh-2.05b # echo abc> / dev / nil
sh-2.05b # cat </ dev / nil
sh-2.05b #
Linux verwendet das Dur-Moll-Paar 1,3 und mknod /dev/null c 1 3erstellt dort Ihre Datei neu.
Zeichenspezialdateien sind in vielerlei Hinsicht wie die meisten anderen Dateien und können gelöscht werden, wenn Sie über die Berechtigungen verfügen. Die Verwendung mvin einer Gerätedatei ist genauso, als ob Sie eine reguläre Datei verschoben hätten. Dies bedeutet, dass Sie eine völlig neue Datei erhalten, die Sie anhand der Inodes erkennen können. Zum Beispiel (diesmal Mac OS, aber alle * nixes verhalten sich hier gleich):
helen: tmp cas $ touch abc def
helen: tmp cas $ ls -i1
3775141 abc
3775142 def
helen: tmp cas $ mv abc def
helen: tmp cas $ ls -i1
3775141 def
helen: tmp cas $ echo clobber> def
helen: tmp cas $ ls -i1
3775141 def
Sehen Sie, wie sich der mit dem Dateinamen verknüpfte Inode defnach der Verwendung geändert hat mv, wobei die alte Datei einfach gelöscht wurde. Als ich jedoch die Ausgabe echoin die genannte Datei schrieb def, blieb der Inode derselbe. Ihr mvFehler schlägt also entweder fehl, wahrscheinlich wenn Sie nicht root sind, oder Sie löschen die Datei und legen eine neue Datei unter den Pfad /dev/null, wofür dieses spezielle Zeichen nicht gedacht ist.