He visto algunas preguntas aquí donde las personas lo hacen accidentalmente rm -rf --no-preserve-root
o rm -rf *
, borrando la mayoría o la totalidad de su sistema de archivos antes de que puedan reaccionar.
¿Hay alguna razón para usar --no-preserve-root
, ya sea en uso normal, como desarrollador o como administrador?
/
, pero el »caso general« todavía está representado. En otras palabras: "No es el trabajo de mi computadora decirme qué hacer". Y no debería ser así.Respuestas:
IMPORTANTE: Los sistemas UEFI modernos montan el firmware bajo el
/sys
directorio y lo ponen a disposición del sistema operativo. NO ejecute este comando en un sistema moderno ya que eliminará este firmware, esencialmente bloqueando su máquina.El escenario más simple que se me ocurre es que alguien quiere eliminar todos los datos de su disco. Puede haber razones perfectamente legítimas para hacer esto y la forma más simple en que puedo pensar es
Resulta que este se da realmente como un ejemplo en
info rm
:Otra razón perfectamente buena es que desea eliminar un sistema de archivos montado en el que ha
chroot
ingresado. En ese caso,rm -rf --no-preserve-root /
eliminará el sistema en elchroot
entorno pero dejará el suyo intacto.Estoy seguro de que hay más razones posibles, pero en general parece un enfoque muy razonable que mi sistema me permita hacer lo que quiera con él. Es mi trabajo tener cuidado, el sistema solo debería permitirme hacer lo que quiero hacer. Si lo que quiero es estúpido, ese es mi problema y no el sistema operativo.
De todos modos, esta es una restricción relativamente nueva, se agregó en la séptima versión de la especificación POSIX (la anterior está aquí), antes de que
rm -rf /
fuera un comando perfectamente válido. En una nota histórica, los directorios.
y..
siempre han estado protegidosrm
, desde 1979, cuandorm
adquirieron por primera vez la capacidad de eliminar directorios. Más sobre eso aquí .fuente
/
.rm -rf /
que puede dejar una máquina remota en blanco sobre el soporte NFS / CIFS / SSHFS de alguien, por ejemplo.La existencia del
--no-preserve-root
interruptor no es para agregar funcionalidad adicional, sino para anular una reducción muy sensata en la funcionalidad. Es probable que este cambio se base en la filosofía de que la computadora debe hacer lo que se le dice y que los comandos deben estar disponibles para expresar cualquier acción deseada. Este cambio es anterior a UEFI y, según mi experiencia, digo que ahora está obsoleto.En la práctica moderna, sin este modificador, el
rm
comando evita la eliminación accidental del directorio raíz cuando se utiliza una variable no inicializada o un espacio perdido.Nota divertida: la protección no era su intención. Según un blog de Sun Microsystems, eliminar el
/
directorio eliminará implícitamente el directorio de trabajo actual, una violación de la consideración especial ya hecha para los directorios.
y..
. Es por eso que su comité de estándares permitió esta excepción especial, no para prevenir un accidente. Este cambio se introdujo por primera vez con Solaris 10 build 36.http://archive.is/5lmc9
fuente
Quizás esta no sea una respuesta que el autor de la pregunta original quiera, pero hay un caso de uso que necesita eliminar todos los archivos de forma recursiva del directorio raíz. Aunque no es a través del
rm
comando, es parte del proceso switch_root (8) durante el arranque de su sistema Linux (no incorporado).fuente