Porque la gente asume. Fui una de esas personas hasta que lo probé . Es fácil entender por qué la gente asume ... Parece peligroso ...
... pero en realidad no puedes mover las cosas /dev/null
: es un archivo especial que simplemente absorbe los redireccionamientos (y los envía a la nada). Si intenta mover un directorio a él, el sistema de archivos explotará de manera vergonzosa en su cara y si intenta mover un archivo a él, probablemente terminará reemplazándolo.
El primer enlace tratará con directorios, pero aquí hay una prueba separada solo para sobrescribirlo con un archivo. Como Rmano señala en los comentarios, esto es probablemente algo que no deberías hacer sin la supervisión de un adulto. Hay riesgos involucrados.
$ 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
no dará como resultado que esos datos se muevan a la nada. El resultado será que los datos/dev/null
se moverán correctamentesudo mv file /dev/null
tendrá éxito y puede conducir fácilmente a un sistema completamente inutilizable. Vea mis comentarios sobre la pregunta vinculada en el comentario de @MalteSkoruppa. Este es otro ejemplo claro de "anteponersudo
solo si ha verificado tres veces que sabe lo que está haciendo" ;-)sudo mknod -m 0666 /tmp/mynull c 1 3
--- y luego jugar con ella ;-)/dev/null
es solo un archivo, es un archivo de "caracteres especiales" pero no obstante está sujeto a las reglas que los archivos deben seguir. Dicho esto, nunca podrías ejecutar este comando:El
mv
comando no permitirá esto ya que está moviendo un directorio a un archivo, eso simplemente no tiene sentido contextualmente y lomv
sabe.Ejemplo
No puede copiar en
/dev/null
ninguno, dado que es un archivo de caracteres, si intenta copiar un archivo normal en él.Lo único que puede hacer con este archivo es copiar
mv
sobre él otro archivo o eliminarlo.Después de este comando,
/dev/null
es un archivo normal. El efecto más peligroso de este cambio es que/dev/null
se supone que nunca generará ningún dato, por lo que una serie de scripts de shell supondrá quees equivalente a decir "nada". Tener esta suposición rota puede conducir a datos aleatorios (bueno, los datos que el último proceso escribió en '/ dev / null') insertados en los archivos del sistema en todo el sistema, lo que podría conducir a un sistema completamente roto e irrecuperable.
fuente
Puede escribir archivos u otras secuencias de entrada en
/dev/null
directorios, pero no en ellos. Si intenta mover un directorio a/dev/null
este, se informará un error, ya/dev/null
que no es un directorio sino un archivo.Sin embargo, dado que desea experimentar
/dev/null
, primero se le sugiere conocer las consecuencias de mover un archivo para sobrescribir/dev/null
y cómo recuperarse de esa situación:Según lo sugerido por @Rmano en esta respuesta a esa pregunta, para experimentar con
/dev/null
nosotros deberíamos crear una copia y luego hacer nuestra experimentación. Entonces, creémoslo/tmp/null
y usémoslo para nuestros propósitos de experimentación:Ahora en adelante,
/tmp/null
es nuestro/dev/null
para todos los propósitos:Vamos a crear ay
test_file
untest_dir
dentro de un directorio llamadoask_ubuntu
.A continuación se muestran los contenidos del
ask_ubuntu
directorio:Ahora trata de mover nuestro
test_file
a/tmp/null
y ver los contenidos deask_ubuntu
:El comando tiene éxito y
test_file
ya no está disponible. Ahora intenta pasartest_dir
a lo/tmp/null
que no tiene éxito:test_dir
sigue presente en el interiorask_ubuntu
:Ahora, vamos a averiguar si podemos recuperar nuestra
test_file
partir de/tmp/null
:Por lo tanto, todavía está allí y
/tmp/null
se sobrescribió un archivo especial y se convirtió en cualquier otro archivo normal. Podemos recuperar nuestro archivo copiando/tmp/null
como cualquier otro archivo:Archivo recuperado.
Nota:
Si no creó
/tmp/null
y probó esos comandos directamente usando/dev/null
; asegúrese de recuperar el archivo (si es necesario) ejecutandocp /dev/null our_test_file
; y restaurar/dev/null
para los fines que existen en nuestro sistema ejecutando los siguientes comandos como se indica en la pregunta vinculada lo antes posible:Conclusión:
Por lo tanto, es imposible mover un directorio
/dev/null
y, por lo tanto, no se trata de recuperar el directorio desde allí.En lo que respecta a los archivos, si mueve los archivos directamente a
/dev/null
, aún puede recuperarlos como se demostró anteriormente. Sin embargo, hay dos excepciones:Durante el período que ejecuta
sudo mv test_file /dev/null
ycp /dev/null our_test_file
, si algún script raíz en el sistema lo sobrescribe ejecutandoecho "Whatever text the root script wants to send to /dev/null" > /dev/null
(u otros comandos similares). Entonces no tenemos ninguna manera fácil de recuperar nuestro archivo.Si reinicia el sistema entre la ejecución de esos dos comandos.
/dev/null
se vuelve a crear en el arranque, por lo que nuestro archivo se pierde cuando apagamos la computadora.Pero si desea recuperar flujos de entrada como
echo "Stream this line to /dev/null" > /dev/null
, no puede recuperarlo ya que/dev/null
es un archivo especial para deshacerse de archivos no deseados y flujos de entrada y, como menciona el artículo de Wikipedia, no proporciona ningún dato a un proceso que lo lea.Referencia: artículo de Wikipedia sobre
/dev/null
fuente
sudo mv test_file /dev/null
reemplaza/dev/null
contest_file
. Entonces, después de eso,/dev/null
es solo un archivo normal y puede leer de él cualquier cosa que haya escrito en él. NOTodo lo enviado a
/dev/null
se descarta en silencio. Si escribes:entras
Hello World
en la pantalla. Si escribes:no obtienes nada en la pantalla.
Pero en el caso del comando mover, el comando
mv
intenta reemplazar el archivo / dev / null por el directorio, lo que no es posible. Como todo es un archivo en Linux, / dev / null es un archivo. Uno especial, por supuesto (un archivo de dispositivo), un archivo especial que permite acceder a una pieza de hardware (como discos, particiones, tarjetas de sonido, puertos serie, ...). En el caso de / dev / null, esto no está vinculado a ninguna pieza de hardware, por lo que los datos que se le envían se descartan en silencio. Es por eso que "ellos" pueden haberlo llamado un agujero negro.fuente