¿Hay algún escenario donde se necesita rm -rf -no-preserve-root?

27

He visto algunas preguntas aquí donde las personas lo hacen accidentalmente rm -rf --no-preserve-rooto 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?

Nzall
fuente
44
No puedo imaginar ningún caso útil ... Creo que esta opción solo existe para obtener la ortogonalidad del principio UNIX (en términos de mantener las mismas cosas sin excepciones). Probablemente desee la excepción en caso de /, 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í.
Andreas Wiese
Está allí como un posible arma para usar cuando SkyNet se haga cargo.
Mitch Dart

Respuestas:

26

IMPORTANTE: Los sistemas UEFI modernos montan el firmware bajo el /sysdirectorio 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

rm -rf --no-preserve-root /

Resulta que este se da realmente como un ejemplo en info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Otra razón perfectamente buena es que desea eliminar un sistema de archivos montado en el que ha chrootingresado. En ese caso, rm -rf --no-preserve-root /eliminará el sistema en el chrootentorno 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 protegidos rm, desde 1979, cuando rmadquirieron por primera vez la capacidad de eliminar directorios. Más sobre eso aquí .

terdon
fuente
21
NO USE ESTO PARA ELIMINAR TODOS LOS DATOS SI SU SISTEMA ES UEFI (computadoras nuevas). Esto elimina todas las variables de firmware y hace que la placa base sea tan inútil como un ladrillo
Suici Doga
55
@SuiciDoga: ¿Fuente u otra explicación? El firmware de la placa base no debe almacenarse en el HDD, de lo contrario se perderían si tira de la unidad.
Tarka
15
@Tarka: / sys / firmware / efi / efivars / podría estar montado y la eliminación recursiva puede eliminar esos vars. Realmente no debería bloquear un sistema, pero podría. Ver thenextweb.com/insider/2016/02/01/...
ciánico
44
@Tarka no están almacenados en el HDD y tirar de la unidad no los afectaría. Sin embargo, por razones que aún no entiendo, están montadas, por lo que en realidad se puede acceder a ellas /.
terdon
20
La forma correcta de dejar en blanco una unidad es reformatear sus particiones (o volver a particionarlas por completo). No todos los sistemas de archivos son discos duros, por lo rm -rf /que puede dejar una máquina remota en blanco sobre el soporte NFS / CIFS / SSHFS de alguien, por ejemplo.
Score_Under
12

La existencia del --no-preserve-rootinterruptor 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 rmcomando evita la eliminación accidental del directorio raíz cuando se utiliza una variable no inicializada o un espacio perdido.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

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

dureta
fuente
Gracias por el enlace! Esperaba que se citara ese tid bit histórico ya que me preguntaba cuál era la razón del cambio.
Cameron Gagnon
Información adicional interesante - gracias
Mark
1

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 rmcomando, es parte del proceso switch_root (8) durante el arranque de su sistema Linux (no incorporado).

Explorer09
fuente