Question Je peux lire depuis / dev / null; comment le réparer?


Je lis le Article Wikipedia sur /dev/null et jouait en déplaçant des fichiers à /dev/null.

Pour cela j'ai créé un test_file et y mettre du contenu:

$ touch test_file
$ echo "This is written by Aditya" > test_file
$ cat test_file
This is written by Aditya

Par la suite, j'ai essayé de déplacer le fichier vers /dev/null:

$ mv test_file /dev/null
mv: inter-device move failed: ‘test_file’ to ‘/dev/null’; unable to remove target: Permission denied

Depuis, cela m'a donné un Permission denied Erreur; Je suis allé de l'avant et utilisé sudo comme je le fais normalement chaque fois que je rencontre un Permission denied Erreur.

$ sudo mv test_file /dev/null

La commande a réussi et test_file n'est plus présent dans le répertoire.

Cependant, l'article de Wikipedia dit qu'il n'est pas possible de récupérer quoi que ce soit déplacé à /dev/null et ça donne un EOF à tout processus qui essaie de le lire. Mais, je peux lire de /dev/null:

$ cat /dev/null
This is written by Aditya

Qu'est-ce que j'ai fait mal et comment puis-je réparer /dev/null retour à la normale? Et pourquoi ai-je rencontré Permission denied erreur en premier lieu?


77
2018-03-18 12:23


origine




Réponses:


/dev/null est un fichier. Un fichier spécial Un fichier de périphérique comme / dev / sda ou / dev / tty qui parle à un composant matériel de votre système.

La seule différence avec /dev/null est que aucun matériel n'est lié à elle. Toutes les données que vous lui envoyez sont ignorées en silence. Comme la commande suivante:

echo "Hello World" > /dev/null

qui n'imprimera rien sur votre terminal car vous envoyez la sortie de echo pour annuler au vide un trou noir ainsi.

Mais quand tu l'as fait mv test_file /dev/null vous avez remplacé le fichier spécial /dev/null par un fichier texte normal, contenant une copie du contenu de votre test_file. En d'autres termes, vous avez perdu votre /dev/null.

Maintenant, ce que vous avez à faire est de le reconstruire:

sudo rm /dev/null
sudo mknod -m 0666 /dev/null c 1 3

Vous devriez le reconstruire car de nombreux scripts envoient par défaut une sortie à /dev/null. Si /dev/null n'est plus un trou noir mais un fichier texte régulier, il peut grandir, croître et remplir votre système de fichiers. Et je suis sûr que vous voulez éviter cela.

Et beaucoup plus dangereux, beaucoup de scripts supposent que la lecture de /dev/null ne lira rien; Briser cette hypothèse peut conduire à des ordures aléatoires écrites dans des fichiers tout autour de votre système ... pratiquement impossible à réparer.

Et rappelez-vous que Linux est multi-tâches: pendant que vous jouez avec /dev/null, beaucoup de processus sont en cours d'exécution et peuvent causer des ravages même pendant quelques secondes "fenêtre d'opportunité".

Si vous voulez jouer avec /dev/null vous pouvez créer une copie et l'expérimenter:

sudo mknod -m 0666 /tmp/null c 1 3 

Va créer un /tmp/null fichier qui fonctionne exactement de la même manière que /dev/null mais que vous pouvez manipuler et tester sans aucun risque pour votre système.


141
2018-03-18 12:32





Il y a une grande différence entre écraser un fichier et Ecrire à un fichier.

Lorsque vous écrire quelque chose à  /dev/null, par exemple.,

$ echo Hello > /dev/null

... il est jeté en silence. Pour cela, vous devez disposer d'autorisations d'écriture sur /dev/null, que tout le monde a:

$ ls -l /dev/null 
crw-rw-rw- 1 root root 1, 3 Mar 18 13:17 /dev/null

Lorsque vous écraser  /dev/null, comme vous l'avez fait avec le mv commande, vous remplacez le fichier spécial /dev/null avec tout ce que vous avez déplacé là-bas. Ne fais pas ça! La raison pour laquelle vous aviez besoin de privilèges root pour le faire est que pour écraser un fichier, vous devez disposer d'autorisations en écriture dans le répertoire qui contient le fichier, dans ce cas /dev:

$ ls -ld /dev
drwxr-xr-x 16 root root 4640 Mar 18 13:17 /dev

Restaurer /dev/null, émettre les commandes

$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3

(Regarde aussi U & L StackExchange: comment créer /dev/null)


16
2018-03-18 12:35





Lorsque vous exécutez la commande

$ sudo mv test_file /dev/null

tu as remplacé le fichier spécial /dev/null avec votre fichier texte. Tentatives ultérieures de lecture de /dev/null renvoyer le contenu de votre fichier texte et les programmes qui tentent de l'utiliser /dev/null dans la manière normale sera probablement casser.

Remplacement ou suppression de fichiers de périphérique dans /dev/ nécessite des privilèges de superutilisateur, ce qui explique pourquoi votre tentative de non-sudo a échoué avec une erreur.

Voir la réponse de Benoit pour savoir comment restaurer /dev/null manuellement, mais puisque la plupart (sinon tous) du contenu de /dev/ est géré dynamiquement par udev, je soupçonne qu'un simple redémarrage le corrigera probablement aussi.


8
2018-03-18 12:30





Pour répondre à votre question sur ce que vous auriez dû faire, supprimer un fichier, vous faites:

rm test_file

Comme d'autres l'ont déjà dit, / dev / null est une destination pour la sortie des programmes.


6
2018-03-18 16:22



Je n'ai pas racheté, mais la question n'est pas de supprimer le fichier ... Je sais que nous utilisons rm supprimer des fichiers / répertoires ... Je viens de lire à propos de /dev/null et pour mieux comprendre, j'ai essayé de déplacer les fichiers vers /dev/null et voir l'effet .. Cette question concerne la compréhension de ce que j'ai mal fait en déplaçant les fichiers vers /dev/null à la suite de quoi je peux le lire maintenant ... La question n'est pas sur la façon de supprimer les fichiers du système ... J'espère que c'est clair ... Mais votre réponse est toujours la bienvenue et assez bon pour être conservé comme un répondre... :-) - Aditya
Pour être honnête, demander à «qu'est-ce que je faisais mal» appelle plutôt une explication de ce qui aurait dû être fait à la place. C'est probablement trivial pour la plupart des utilisateurs, mais aucune des autres réponses ne l'a même mentionné. - kapex