Le fichier / dev / null a-t-il réellement une taille fixe?

23

Je viens de découvrir qu'il /dev/nulls'agit d'un fichier et non d'un répertoire.

Je me demande simplement s'il a une taille de fichier réelle.

Cody
la source

Réponses:

35

/dev/nulln'est pas vraiment un fichier. C'est un appareil de caractère !

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

La première lettre cde la chaîne d'autorisations ( crw-rw-rw-) l'indique. Pour les fichiers normaux, ce serait plutôt un -.

Donc, en termes simples: /dev/nulln'est pas un fichier mais un périphérique virtuel mappé à ce chemin dans le système de fichiers, qui a le seul but d'avaler et de faire disparaître des données - comme un trou noir.
Il peut également être utilisé comme entrée, puis il agit comme un fichier vide (taille 0) et renvoie immédiatement un EOF (End Of File).

Par conséquent, vous ne pouvez pas vraiment dire qu'il /dev/nulla une taille de fichier spécifique, car ce n'est pas un fichier normal sur n'importe quel support de stockage.

Byte Commander
la source
Contribution? Que fournit-il une liste interminable de caractères NUL?
Jonathon
@JonathonWisnoski Je ne sais pas exactement et je ne l'ai jamais utilisé comme ça, donc je peux juste vous donner ce lien vers une question sur StackOverflow où il est expliqué.
Byte Commander
7
@JonathonWisnoski, non - il se comporte comme un fichier de taille nulle en entrée, de sorte que la première lecture indique que le fichier est à l'EOF.
godlygeek
Oui, c'est vrai.
godlygeek
3
@JonathonWisnoski regarde / dev / zero pour cela.
Paŭlo Ebermann
16

/dev/nullest un type spécial de fichier appelé " fichier de périphérique ".

Les fichiers de périphérique servent d'interface à certaines fonctions du noyau. Ils occupent juste l'espace nécessaire pour une entrée de répertoire (" inode ") mais n'ont pas de contenu réel et n'ont pas de taille de fichier réelle.

Les autres fichiers de périphérique sont par exemple /dev/sda(généralement un disque dur ou SSD), /dev/zero(un fichier qui génère des zéro lors de la lecture), ou /dev/random(un fichier qui génère des données aléatoires lors de la lecture). En fait, tous les fichiers /dev/sont des fichiers de périphérique ou des liens pointant vers des fichiers de périphérique.

Florian Diesch
la source
Bien que je trouve la plupart de cette réponse correcte (+1), je pense qu'il est un peu trompeur de dire qu'ils occupent la taille d'une entrée d'inode. Soit ils n'occupent pas d'espace, s'ils se réfèrent à l'espace disque, soit ils en prennent plus, s'ils se réfèrent à leur implémentation entière en tant que périphériques de caractères.
kos
2
Comme tout autre fichier, un fichier de périphérique a besoin d'un inode qui stocke le propriétaire, les autorisations, le numéro majeur / mineur et d'autres métadonnées. Cela dépend du système de fichiers comment et où ces inodes sont stockés (vous pouvez utiliser mknodpour créer des fichiers de périphérique où vous le souhaitez). Pour les systèmes de fichiers virtuels comme /dev/l'inode, il n'occupe pas d'espace disque mais de la mémoire.
Florian Diesch du
Exactement. Je pense que je ne me suis pas bien exprimé, alors laissez-moi reformuler. Peut-être que ce que je souligne, c'est un peu difficile, alors pardonnez-moi. Ce que je voulais dire, c'est que si vous déclarez que chaque périphérique de caractères occupe de l'espace en mémoire en raison de son entrée inode, vous voudrez peut-être souligner que les fonctions à appeler en lecture / écriture sur ces périphériques, qui sont chargées avec eux, donc aussi.
kos
Est-il vraiment correct de dire qu'un fichier occupe l'espace occupé par son entrée de table inode? Je ne pense pas que cela soit généralement inclus dans ce que les gens - et les logiciels ont écrit - signifient lorsqu'ils parlent de la taille des fichiers. En particulier, demander lset dusignaler la taille d'un périphérique spécial de caractère comme /dev/nullou /dev/randomrenvoie 0 .
Eliah Kagan
Désolé, mais j'ai dévalorisé cette réponse, car à moins que quelqu'un ne me prouve le contraire sur ce que j'ai dit (ce que je pourrais être), je pense toujours qu'il n'est pas correct de déclarer qu'un périphérique de caractères occupe l'espace d'une entrée inode.
kos