Forum Linux.noyau Fonctionnement de /dev/null

Posté par  . Licence CC By‑SA.
Étiquettes :
4
9
avr.
2018

Bonjour à tous.
L'autre fois j'utilisais une redirection vers /dev/null, comme ca m'arrive régulièrement et je me suis demandé, comment cela fonctionne t'il ? Cela enregistre la sortie dans un fichier, le place dans /dev/null ?
mais /dev/null n'est pas un dossier, si j'en crois la commande file :
/dev/null: character special (1/3)
Alors cela écrirait la sortie dans ce fichier puis seraient écrasées par des données nulles par dessus ?
Ou alors cela renvoie la sortie vers /dev/null, le système supprime /dev/null puis le recréé ?
Mais dans ce cas la, comment fonctionne la commande rm, comment efface t-elle les données ?
Merci d'avance.

PS: je ne sais pas si je suis dans la bonne catégorie, dites le moi si ce n'est pas le cas.

  • # Fichier système

    Posté par  . Évalué à 10.

    En fait, ce n'est pas un fichier comme les autres.
    Dès que quelque-chose écrit dans un "fichier", une fonction est appelée pour consommer les données écrites. Habituellement, c'est une fonction fournie par le pilote du système de fichier, qui se chargera de les retranscrire sur ton disque dur.
    Pour /dev/null, c'est directement le noyau qui s'en charge. La fonction appelée est write_null(), qui se contente de ne rien faire des données reçues.

    https://elixir.bootlin.com/linux/v3.2/source/drivers/char/mem.c#L763
    https://elixir.bootlin.com/linux/v3.2/source/drivers/char/mem.c#L622

  • # /dev/null est un fichier spécial

    Posté par  . Évalué à 4. Dernière modification le 09 avril 2018 à 20:00.

    Sous Unix, les interfaces vers les périphériques sont des fichiers spéciaux. Par exemple, tu peux trouver des trucs du genre /dev/sda pour ton disque dur, /dev/sda1 pour la première partition, /dev/dsp pour la sortie de la carte son, etc … Derrière chacun de ces fichiers, il y a un pilote de périphérique : pour les disques tu as les pilotes SCSI/SATA…. (je simplifie un peu), derrière /dev/dsp, tu as le pilote de ta carte son.

    /dev/null est un fichier vers un périphérique "virtuel", avec un driver qui se contente d'oublier chaque octet qu'on lui envoie. Le fichier /dev/null n'est jamais modifié, mais le pilote correspondant ne fait rien des données qu'on lui envoie.

    • [^] # Re: /dev/null est un fichier spécial

      Posté par  . Évalué à 2.

      Je savais que /dev/sdx représentaient les périphériques mais je ne savais pas du tout de /dev/nul était un périphérique virtuel, merci de l'information.
      Ainsi le fichier /dev/null n'est absolument pas touché puisque rien n'est écrit dedans grâce à write_null.
      Merci beaucoup pour vos explications !

      • [^] # Re: /dev/null est un fichier spécial

        Posté par  . Évalué à 7.

        En fait, tout les fichiers dans /dev finissent dans un driver de périphérique du noyau.
        Tu as deux types de fichiers, les types block qui ont une taille et dans lesquels ont peut se déplacer (les périphériques disque notamment) et les types caractère qu’on ne peut lire que en flux, ou on retrouve clavier, souris, RS232, etc.

        • [^] # Re: /dev/null est un fichier spécial

          Posté par  (site web personnel) . Évalué à 1.

          Assez d'accord sur l'idée générale, mais on peut avoir des choses un peu différentes, comme des segments de mémoire partagée (shm) ou des (liens symboliques vers des) pipes/sockets.

          Exemples :

          • -rw------- 1 postgres postgres 2316 Apr 2 17:19 /dev/shm/PostgreSQL.655730644

          et :

          • /dev/initctl/run/systemd/initctl/fifo
            prw------- 1 root root 0 Apr 2 17:19 /run/systemd/initctl/fifo

          • /dev/log/run/systemd/journal/dev-log
            srw-rw-rw- 1 root root 0 Apr 2 17:19 /run/systemd/journal/dev-log

          Debian Consultant @ DEBAMAX

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.