Creo que mucha gente aquí erróneamente ' rm -rf' editó el directorio equivocado, y con suerte no causó un gran daño ... ¿Hay alguna forma de evitar que los usuarios hagan una historia de terror similar a Unix ? Alguien mencionó (en la sección de comentarios del enlace anterior ) que
... Estoy bastante seguro de que ahora cada curso o compañía de Unix que usa unix establece rm -fr para deshabilitar las cuentas de las personas que intentan ejecutarlo o evitar que lo ejecuten ...
¿Hay alguna implementación de eso en alguna distribución actual de Unix o Linux? ¿Y cuál es la práctica común para evitar ese error incluso desde un administrador de sistemas (con acceso de root)?
Parece que hubo cierta protección para el directorio raíz ( /) en Solaris (desde 2005) y GNU (desde 2006). ¿Hay alguna forma de implementar la misma forma de protección en otras carpetas también?
Para darle más claridad, no estaba preguntando sobre consejos generales sobre el rmuso (y he actualizado el título para indicar que más), quiero algo más como la protección de la carpeta raíz: para rm -rf /que tenga que pasar un parámetro específico: rm -rf --no-preserve-root /¿Hay implementaciones similares para un conjunto personalizado de directorios? ¿O puedo especificar archivos además /de estar protegidos por la opción preservar raíz ?
fuente

rmcomando con uno que no tenga esa característica.rm -rfpuede ser un evento generador de currículum. Check y triple check antes de ejecutarloRespuestas:
Para evitar un error
rm -rf, no escribarm -rf.Si necesita eliminar un árbol de directorios, le recomiendo el siguiente flujo de trabajo:
mv directory-to-delete DELETEDELETEy compruebe que realmente es lo que desea eliminarrm -rf DELETENunca llame
rm -rfcon una discusión que no seaDELETE. Hacer la eliminación en varias etapas le da la oportunidad de verificar que no está eliminando lo incorrecto, ya sea debido a un error tipográfico (como enrm -rf /foo /barlugar derm -rf /foo/bar) o debido a un cerebro (vaya, no, quise eliminarfoo.oldy mantenerfoo.new) .Si su problema es que no puede confiar en que otros no escriban
rm -rf, considere eliminar sus privilegios de administrador. Hay mucho más que puede salir mal querm.Siempre haga copias de seguridad .
Verifique periódicamente que sus copias de seguridad estén funcionando y actualizadas.
Mantenga todo lo que no se pueda descargar fácilmente desde algún lugar bajo control de versiones.
Con un sistema básico de Unix, si realmente desea hacer que algunos directorios sean indelectables
rm, reemplace (o mejor sombra)rmpor un script personalizado que rechace ciertos argumentos. Ohg rm.Algunas variantes de Unix ofrecen más posibilidades.
chmod +a 'group:everyone deny delete_child' somedir(esto no impide la eliminación de archivos en subdirectorios: si si quieres eso, configura la ACL en el subdirectorio también).rmmodificar ciertos directorios.fuente
--no-preserve-rootopción, por otra carpeta importante .. Y que al parecer no existe siquiera como una práctica ...rm -rfya significa "eliminar esto, sí, estoy seguro de saber lo que estoy haciendo". Si desea más, reemplácelormpor un script que se niega a eliminar ciertos directorios.rmacceso a ciertos directorios. Además, dado que su pregunta no es solo sobre Linux, debería haber mencionado OSX, que tiene algo parecido a lo que desea.Si está utilizando
rm *y el zsh, puede configurar la opciónrmstarwait:Ahora el shell advierte cuando estás usando
*:Cuando lo rechazas (
n), no pasa nada. De lo contrario, todos los archivos serán eliminados.fuente
zsh -fsirve?Para protegerse contra un accidente
rm -rf *en un directorio, cree un archivo llamado "-i" (puede hacerlo con emacs o algún otro programa) en ese directorio. El shell intentará interpretar -i y hará que entre en modo interactivo.Por ejemplo: tiene un directorio llamado
rmtestcon el archivo nombrado-identro. Si intenta hacerrmtodo lo que está dentro del directorio,rmprimero se-ilo pasará y pasará al modo interactivo. Si coloca dicho archivo dentro de los directorios en los que le gustaría tener alguna protección, podría ayudar.Tenga en cuenta que esto no es efectivo contra
rm -rf rmtest.fuente
> -iEDITAR como lo sugiere el comentario:
Puede cambiar el atributo de a inmutable el archivo o directorio y luego no se puede eliminar ni siquiera por root hasta que se elimine el atributo.
chattr +i /some/important/fileEsto también significa que el archivo no se puede escribir ni modificar de ninguna manera, ni siquiera por root . Otro atributo aparentemente disponible que no he utilizado yo mismo es el atributo append (
chattr +a /some/important/file. Entonces el archivo solo se puede abrir en modo append, lo que significa que no se puede eliminar también, pero puede agregarlo (digamos un archivo de registro). Esto significa que usted no podrá editarlo,vimpor ejemplo, pero puede hacerloecho 'this adds a line' >> /some/important/file. Usar en>lugar de>>fallará.Estos atributos se pueden desarmar usando un signo menos, es decir
chattr -i fileDe lo contrario, si esto no es adecuado, una cosa que practico es siempre
ls /some/dirprimero, y luego, en lugar de volver a escribir el comando, presione la flecha hacia arriba CTL-A, luego eliminelsy escriba mirm -rfsi lo necesito. No es perfecto, pero al mirar los resultados de ls, sabes de antemano si es lo que querías.fuente
Si entiende el lenguaje de programación C, creo que es posible reescribir el código fuente rm y hacer un pequeño parche para el núcleo. Vi esto en un servidor y fue imposible eliminar algunos directores importantes y cuando escribes 'rm -rf / direcotyr' envía un correo electrónico a sysadmin.
fuente
Una opción posible es dejar de usar
rm -rfy comenzar a usarrm -ri. Eliparámetro adicional es asegurarse de que le pregunte si está seguro de que desea eliminar el archivo.Probablemente su mejor apuesta con esto sería alias
rm -rien algo memorable comokill_it_with_fire. De esta manera, cuando tengas ganas de quitar algo, adelante y mátalo con fuego.fuente
fes exactamente lo contrario de laiopción? Lo intenté y trabajé sin embargo ...rallí. Solo lo arreglé.Me gusta poner el nombre del directorio primero así:
fuente