Hat die Datei / dev / null tatsächlich eine feste Größe?

23

Ich habe gerade herausgefunden, dass /dev/nulles sich um eine Datei und nicht um ein Verzeichnis handelt.

Ich frage mich nur, ob es eine tatsächliche Dateigröße hat.

Cody
quelle

Antworten:

35

/dev/nullist nicht wirklich eine Datei. Es ist ein Zeichengerät !

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Apr 10 09:53 /dev/null

Der erste Buchstabe cder Berechtigungszeichenfolge ( crw-rw-rw-) gibt dies an. Für reguläre Dateien wäre es eine -.

Also in einfachen Worten: /dev/nullIst keine Datei, sondern ein virtuelles Gerät, das diesem Pfad im Dateisystem zugeordnet ist. Dies hat den einzigen Zweck, Daten zu verschlucken und zu löschen - wie ein Schwarzes Loch.
Es kann aber auch als Eingabe verwendet werden, verhält sich dann wie eine leere Datei (Größe 0) und gibt sofort ein EOF (End Of File) zurück.

Daher kann man nicht wirklich sagen, dass /dev/nulldas eine bestimmte Dateigröße hat, da es sich nicht um eine reguläre Datei auf irgendeinem Speichermedium handelt.

Byte Commander
quelle
Eingang? Was liefert es eine endlose Liste von NUL-Zeichen?
Jonathon
@ JonathonWisnoski Ich weiß es nicht genau und habe es nie so benutzt, also kann ich Ihnen diesen Link zu einer Frage auf StackOverflow geben, wo es erklärt wird.
Byte Commander
7
@ JonathonWisnoski, nein - es verhält sich bei der Eingabe wie eine Datei mit der Größe Null, sodass beim ersten Lesevorgang gemeldet wird, dass sich die Datei auf EOF befindet.
Godlygeek
Ja, das stimmt.
Godlygeek
3
@ JonathonWisnoski schau dir / dev / zero dafür an.
Paŭlo Ebermann
16

/dev/nullist eine spezielle Art von Datei, die " Gerätedatei " genannt wird.

Gerätedateien dienen als Schnittstelle zu einigen Kernelfunktionen. Sie belegen nur den Platz, der für einen Verzeichniseintrag (" inode ") benötigt wird, haben aber keinen wirklichen Inhalt und keine tatsächliche Dateigröße.

Andere Gerätedateien sind z. B. /dev/sda(im Allgemeinen eine Festplatte oder eine SSD), /dev/zero(eine Datei, die beim Lesen Nullen erzeugt) oder /dev/random(eine Datei, die beim Lesen Zufallsdaten erzeugt). Tatsächlich handelt es sich bei allen Dateien in /dev/entweder um Gerätedateien oder um Links, die auf Gerätedateien verweisen.

Florian Diesch
quelle
Obwohl ich die meisten dieser Antworten für richtig halte (+1), finde ich es etwas irreführend zu sagen, dass sie die Größe eines Inode-Eintrags einnehmen. Sie belegen entweder keinen Platz, wenn sie sich auf Festplattenspeicher beziehen, oder sie belegen mehr, wenn sie sich auf ihre gesamte Implementierung als Zeichengeräte beziehen.
Kos
2
Wie jede andere Datei benötigt auch eine Gerätedatei einen Inode, in dem der Besitzer, die Berechtigungen, die Haupt- / Nebennummer und andere Metadaten gespeichert sind. Es hängt vom Dateisystem ab, wie und wo diese Inodes gespeichert werden (Sie können mknodGerätedateien erstellen, wo immer Sie möchten). Bei virtuellen Dateisystemen wie /dev/dem Inode belegt der Inode nicht den Festplattenspeicher, sondern etwas Speicher.
Florian Diesch
Genau. Ich glaube, ich habe mich nicht gut ausgedrückt, also lass es mich umformulieren. Vielleicht ist das, worauf ich hinweise, etwas pingelig, also vergib mir das. Was ich damit gemeint habe, ist, dass, wenn Sie angeben, dass jedes Zeichengerät aufgrund seines Inode-Eintrags etwas Speicherplatz belegt, Sie vielleicht darauf hinweisen möchten, dass Funktionen, die beim Lesen / Schreiben auf einem solchen Gerät aufgerufen werden sollen, dies auch tun Desweiteren.
Kos
Ist es wirklich richtig zu sagen, dass eine Datei den von ihrem Inode-Tabelleneintrag belegten Platz belegt? Ich denke nicht, dass dies normalerweise in dem enthalten ist, was Leute - und Software-Leute geschrieben haben - meinen, wenn sie über die Dateigröße sprechen. Insbesondere das Fragen lsund duMelden der Größe eines speziellen Zeichengeräts wie /dev/nulloder /dev/randomergibt 0 .
Eliah Kagan
Entschuldigung, aber ich habe diese Antwort abgelehnt, da ich immer noch der Meinung bin, dass es nicht korrekt ist, zu sagen, dass ein Zeichengerät den Platz eines Inode-Eintrags einnimmt, es sei denn, jemand beweist, dass ich mich bei dem, was ich gesagt habe, geirrt habe (was ich sein könnte).
Kos