Si vous avez appris la programmation shell, vous avez peut-être déjà rencontré quelque chose comme /dev/null. Dans cet article, nous comprendrons de quoi il s’agit et comment il est utilisé. Commençons par comprendre ce qu’est /dev.
Qu'est-ce que /dev ?
Dans le système de fichiers Linux, tout est un fichier ou un répertoire. Même les appareils sont accessibles sous forme de fichiers. Vos partitions de disque dur, clé USB, haut-parleurs, pour tout cela, il existe un fichier à partir duquel on y accède. Maintenant, pour comprendre comment les appareils sont accessibles en tant que fichiers, pensez-y de cette façon : que faisons-nous avec un fichier ? Nous y lisons des données et y écrivons des données. Un appareil tel qu'un haut-parleur peut saisir des données pour produire du son, un disque dur peut être utilisé pour lire et écrire des données, une imprimante prend l'entrée pour imprimer des fichiers, etc. Les fichiers et les appareils sont similaires de cette manière.
/dev est un répertoire qui stocke tous les périphériques physiques et virtuels d'un système Linux. Les périphériques physiques sont faciles à comprendre, ce sont des périphériques tangibles comme une clé USB, des haut-parleurs, des imprimantes, etc. Un système Linux possède également des périphériques virtuels qui agissent comme un périphérique mais ne représentent aucun périphérique physique.
Qu'est-ce que /dev/null ?
Il s'agit d'un périphérique virtuel doté d'une propriété spéciale : toutes les données écrites dans /dev/null disparaissent ou disparaissent. En raison de cette caractéristique, on l’appelle également bitbucket ou blackhole. Voyons une démonstration.
Rediriger la sortie vers /dev/null

Dans cette démo, vous pouvez voir que nous avons ajouté des données, mais que ces données n'ont pas été stockées. Cette caractéristique particulière de /dev/null a quelques cas d'utilisation. Voyons-les.
Utilisation de /dev/null
Puisqu'il supprime tout ce qui y est écrit, vous pouvez déplacer les fichiers vers /dev/null pour les supprimer. Mais ce n’est pas un cas d’utilisation largement utilisé. Il est principalement utilisé pour supprimer la sortie standard et l’erreur standard d’une sortie.
Que sont la sortie standard et l’erreur standard ?
La sortie d'une commande Linux contient deux flux de données : la sortie standard (stdout) et l'erreur standard (stderr0), tandis que la sortie standard est la sortie normale si la commande ne contient aucune erreur, l'erreur standard est l'erreur générée par la commande. La sortie peut contenir à la fois une sortie standard et une entrée standard. Exemple de stdout et stderr :
Exécutons le script shell suivant
# /bin/sh ls apt update>

La première commande s'est exécutée avec succès, mais la seconde a généré une erreur. Puisque stdout et stderr sont deux flux de données distincts, ils peuvent être traités séparément.
Comment accéder à stderr et stdout ?
Stdout et stderr sont des flux de données, tous deux traités comme un fichier sous Linux. Si vous souhaitez effectuer une action sur ceux-ci, vous utilisez un descripteur de fichier qui identifie de manière unique le flux de fichiers. Le descripteur de fichier pour stdout est 1 et pour stderr est 2.
Pour y accéder séparément, voyons la commande suivante qui est exécutée sur le même fichier de script que celui utilisé dans l'exemple précédent.
./script.sh 1>stdout.txt>

En cela, vous pouvez voir que la sortie contient des erreurs standard mais que la sortie standard n'a pas été affichée. En effet, le flux stdout a été envoyé au fichier stdout.txt et vous pouvez voir que le fichier stdout.txt contient la sortie standard.
Lors de l'écriture d'un script shell, nous souhaiterons peut-être supprimer l'erreur standard de la sortie. Quel que soit le flux que nous souhaitons supprimer de la sortie, ce flux de données peut être écrit dans /dev/null. Vous pouvez écrire ces données dans un autre fichier, tout comme dans l'exemple ci-dessus, mais si vous n'avez aucune utilité pour ces données, pourquoi voudriez-vous y gaspiller de la mémoire, il est préférable de les supprimer complètement. Voyons l'exemple suivant
./script.sh 2>/dev/null>

Et juste comme ça, nous avons supprimé le stderr de la sortie. Si vous souhaitez supprimer la sortie complète, vous pouvez utiliser la commande suivante
command>/dev/null 2>&1>
La commande &> redirige la sortie du descripteur de fichier mentionné à gauche (dans la commande ci-dessus, la sortie de 2) vers le flux du descripteur de fichier mentionné à droite. Ainsi, la sortie de stderr (2) est redirigée vers stdout (1), qui à son tour est écrite dans /dev/null et est donc détruite.
Suppression de fichiers sécurisée
'/dev/null' trouve un utilitaire de suppression sécurisée de fichiers. En redirigeant «/dev/null» vers un fichier, vous pouvez effectivement écraser son contenu avec des octets nuls, ce qui rend difficile la récupération de données significatives.
Par exemple:
cat /dev/null>fichier_sensible>
Cette commande remplace le contenu de «sensitive_file» par des octets nuls, garantissant sa suppression sécurisée.
Nettoyage des fichiers journaux
Les fichiers journaux peuvent accumuler des données substantielles au fil du temps. Pour effacer les fichiers journaux sans interrompre les services en cours d'exécution, vous pouvez rediriger leur contenu vers « /dev/null ».
Par exemple:
cat /dev/null>/var/log/syslog>
Cette commande vide le fichier « syslog » en redirigeant son contenu vers « /dev/null », nettoyant ainsi efficacement le journal sans supprimer le fichier lui-même.
Trucs et astuces:
- Redirection de la sortie standard vers « /dev/null » : « command> /dev/null »
- Redirection de l'erreur standard vers '/dev/null' : 'command 2> /dev/null'
- Redirection de la sortie et de l'erreur vers « /dev/null » : « command>/dev/null 2>&1 »
Conclusion
Dans cet article, nous avons discuté de « /dev/null » sous Linux, qui est un trou noir virtuel dans lequel les données disparaissent lorsqu'elles y sont écrites. Il est couramment utilisé pour ignorer les sorties et les erreurs, rendant ainsi l'exécution des commandes plus propre. Il peut également être utilisé pour la suppression sécurisée de fichiers et le nettoyage des fichiers journaux. Comprendre ses fonctionnalités permet des opérations de ligne de commande efficaces sous Linux.