Si lo hago: touch file; mv file /dev/nullcomo root,/dev/null desaparece. ls -lad /dev/nullno da como resultado tal archivo o directorio. Esto interrumpe las aplicaciones que dependen de /dev/nullSSH y se pueden resolver haciendo esto mknod /dev/null c 1 3; chmod 666 /dev/null. ¿Por qué mover un archivo normal a este archivo especial resulta en la desaparición de /dev/null?
Para aclarar, esto fue con fines de prueba, y entiendo cómo funciona el mvcomando. Lo que tengo curiosidad es por qué ls -la /dev/nullantes de reemplazarlo con un archivo normal muestra el resultado esperado, pero luego muestra que /dev/nullno existe a pesar de que supuestamente se creó un archivo a través del mvcomando original y el comando de archivo muestra texto ASCII. Creo que esto debe ser una combinación del lscomportamiento del comando junto con devfscuando un archivo no especial reemplaza un archivo de caracteres / especial. Esto está en Mac OS X, los comportamientos pueden variar en otros sistemas operativos.

/dev/null.rmcomando.devfses divertido con los archivos normales. Sin embargo, es extraño que no haya recibido un errormv. ¿Qué tal esta maneratouch testfile; mv testfile /dev:?mvsolo puede ser atómico en el mismo sistema de archivos.Respuestas:
Mirando el código fuente de mv, http://www.opensource.apple.com/source/file_cmds/file_cmds-220.7/mv/mv.c :
En la primera pasada a través del ciclo while,
open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)fallará con EEXIST. Luego/dev/nullse desvinculará y se repetirá el ciclo. Pero como señaló en su comentario, no se pueden crear archivos regulares en/dev, por lo que en el próximo paso a través del ciclo,open(to, O_CREAT | O_EXCL | O_TRUNC | O_WRONLY, 0)todavía va a fallar.Presentaría un informe de error con Apple. El
mvcódigo fuente en su mayoría no ha cambiado desde la versión de FreeBSD, pero debido a que los devfs de OSX tienen ese comportamiento que no es POSIX con los archivos normales, Apple debería corregirlosmv.fuente
Mover un archivo a la ubicación de un archivo ya existente reemplaza el archivo existente. En este caso, el
/dev/nullarchivo del dispositivo se reemplaza, como lo haría cualquier archivo normal. Para evitar esto, use la opción-i(interactivo, advierte antes de sobrescribir) o-n(sin clober) paramv./dev/nullsolo realiza su función especial como un depósito de bits y luego el dispositivo se abre como está. Por ejemplo, cuando>se utiliza el operador de shell, el archivo se abre y luego se trunca (no se elimina y se reemplaza, lo que puede ser lo que esperaba). Como mencionó Casey, la forma correcta de eliminar un archivo es conrmo incluso conunlink.fuente
Umm, ¿porque sobrescribes el archivo especial con uno normal? Qué esperabas que sucediera?
dev/nullno es un directorio, es un archivo que apunta a unnulldispositivo. Cuando tienemvalgo que hacer, elimina el original y lo reemplaza con lo que haya movido:fuente
/dev/null, se ha convertido en el archivo que moví.