Parce que les gens supposent. J'étais une de ces personnes jusqu'à ce que je le teste . Il est facile de comprendre pourquoi les gens supposent ... Cela semble dangereux ...
... mais vous ne pouvez pas réellement déplacer les choses vers /dev/null
- C'est un fichier spécial qui absorbe simplement les redirections (et les envoie dans le néant). Si vous essayez de déplacer un répertoire vers celui-ci, le système de fichiers explosera verbalement et si vous essayez d'y déplacer un fichier, vous finirez probablement par le remplacer.
Le premier lien traitera des répertoires, mais voici un test séparé juste pour l'écraser avec un fichier. Comme le souligne Rmano dans les commentaires, c'est probablement quelque chose que vous ne devriez pas faire sans la surveillance d'un adulte. Il y a un risque.
$ echo "this is my file" > test
$ cat test
this is my file
$ sudo mv test /dev/null
$ cat /dev/null
this is my file
# Fix this!
$ sudo rm /dev/null
$ sudo mknod -m 0666 /dev/null c 1 3
/dev/null
n'entraînera pas le déplacement de ces données dans le néant. Cela entraînera le déplacement correct des données, mais/dev/null
sera écrasé, et vous pouvez donc les reculer encore :) Voir également askubuntu.com/questions/435887/…sudo mv file /dev/null
cela réussira et peut facilement conduire à un système complètement inutilisable. Voir mes commentaires sur la question liée dans le commentaire de @MalteSkoruppa. Ceci est un autre exemple clair de "pré-ajoutsudo
uniquement si vous avez vérifié trois fois que vous savez ce que vous faites" ;-)sudo mknod -m 0666 /tmp/mynull c 1 3
--- puis jouer avec ;-)/dev/null
n'est qu'un fichier, c'est un fichier "caractère spécial" mais il n'en est pas moins lié par les règles que les fichiers doivent suivre. Cela étant dit, vous ne pourrez jamais exécuter cette commande:La
mv
commande ne le permettra pas puisque vous déplacez un répertoire vers un fichier, cela n'a tout simplement pas de sens contextuellement et lemv
sait.Exemple
Vous ne pouvez pas copier sur l'un
/dev/null
ou l'autre, étant donné qu'il s'agit d'un fichier de caractères, si vous essayez de copier un fichier normal dessus.La seule chose que vous pouvez faire avec ce fichier est de copier
mv
dessus un autre fichier ou de le supprimer.Après cette commande,
/dev/null
est un fichier normal. L'effet le plus dangereux de ce changement est qu'il/dev/null
est censé ne jamais produire de données, donc un certain nombre de scripts shell supposeront queéquivaut à dire "rien". Avoir cette hypothèse cassée peut conduire à des données aléatoires (enfin, les données écrites par le dernier processus dans `/ dev / null ') insérées dans les fichiers système tout autour du système --- ce qui pourrait conduire à un système complètement cassé et irrécupérable.
la source
Vous pouvez écrire des fichiers ou d'autres flux d'entrée dans,
/dev/null
mais pas dans des répertoires. Si vous essayez de déplacer un répertoire vers/dev/null
celui-ci, il signalera une erreur car il/dev/null
ne s'agit pas d'un répertoire mais d'un fichier.Cependant, puisque vous voulez expérimenter
/dev/null
, il vous est d'abord suggéré de connaître les conséquences du déplacement d'un fichier à écraser/dev/null
et comment récupérer de cette situation:Comme suggéré par @Rmano dans cette réponse à cette question, afin d'expérimenter avec
/dev/null
nous devrions plutôt en créer une copie puis faire notre expérimentation. Alors, créons-le/tmp/null
et utilisons-le à des fins d'expérimentation:A partir de maintenant,
/tmp/null
est notre/dev/null
à toutes fins:Créons un
test_file
et untest_dir
dans un répertoire appeléask_ubuntu
.Ce qui suit montre le contenu du
ask_ubuntu
répertoire:Essayez maintenant de déplacer notre
test_file
pour/tmp/null
voir le contenu deask_ubuntu
:La commande réussit et
test_file
n'est plus disponible. Essayez maintenant de passertest_dir
à/tmp/null
ce qui ne réussit pas:test_dir
est toujours présent à l'intérieurask_ubuntu
:Maintenant, laissez - nous figurons si nous pouvons récupérer notre
test_file
de/tmp/null
:Donc, il est toujours là et
/tmp/null
qui était un fichier spécial a été écrasé et il est devenu comme n'importe quel autre fichier normal. Nous pouvons récupérer notre fichier en copiant/tmp/null
comme n'importe quel autre fichier:Fichier récupéré.
Remarque:
Si vous n'avez pas créé
/tmp/null
et essayé ces commandes directement en utilisant/dev/null
; assurez-vous de récupérer le fichier (si vous en avez besoin) en exécutantcp /dev/null our_test_file
; et restaurer/dev/null
pour les fins qu'il existe sur notre système en exécutant les commandes suivantes comme indiqué dans la question liée dès que possible:Conclusion:
Il est donc impossible de déplacer un répertoire vers
/dev/null
et il n'est donc pas question de récupérer le répertoire à partir de là.En ce qui concerne les fichiers, si vous déplacez directement des fichiers vers
/dev/null
, vous pouvez toujours les récupérer comme indiqué ci-dessus. Cependant, il existe deux exceptions:Pendant la période que vous exécutez
sudo mv test_file /dev/null
etcp /dev/null our_test_file
, si un script racine du système le remplace par l'exécutionecho "Whatever text the root script wants to send to /dev/null" > /dev/null
(ou d'autres commandes similaires). Ensuite, nous n'avons aucun moyen facile de récupérer notre fichier.Si vous redémarrez le système entre l'exécution de ces deux commandes.
/dev/null
est recréé au démarrage, donc notre fichier est perdu lorsque nous éteignons l'ordinateur.Mais si vous souhaitez récupérer des flux d'entrée comme
echo "Stream this line to /dev/null" > /dev/null
, vous ne pouvez pas le récupérer car il/dev/null
s'agit d'un fichier spécial pour éliminer les fichiers et les flux d'entrée indésirables et, comme le mentionne l'article Wikipedia, il ne fournit aucune donnée à un processus qui le lit.Référence: article Wikipedia sur
/dev/null
la source
sudo mv test_file /dev/null
remplace/dev/null
partest_file
. Donc, après c'est/dev/null
juste un fichier normal et vous pouvez y lire tout ce que vous y avez écrit. NE FAITES PAS CELATout ce qui est envoyé
/dev/null
est jeté en silence. Si vous tapez:vous obtenez
Hello World
sur l'écran. Si vous tapez:vous n'obtenez rien à l'écran.
Mais dans le cas de la commande move, la commande
mv
essaie de remplacer le fichier / dev / null par le répertoire, ce qui n'est pas possible. Parce que tout est un fichier sous Linux, / dev / null est un fichier. Un fichier spécial bien sûr (un fichier de périphérique), un fichier spécial permettant d'accéder à du matériel (comme des disques, des partitions, des cartes son, des ports série, ...). Dans le cas de / dev / null, cela n'est lié à aucun matériel, de sorte que les données qui lui sont envoyées sont supprimées en silence. C'est pourquoi "ils" ont peut-être appelé cela un trou noir.la source