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 rm
uso (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
rm
comando con uno que no tenga esa característica.rm -rf
puede 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 DELETE
DELETE
y compruebe que realmente es lo que desea eliminarrm -rf DELETE
Nunca llame
rm -rf
con 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 /bar
lugar derm -rf /foo/bar
) o debido a un cerebro (vaya, no, quise eliminarfoo.old
y 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)rm
por 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).rm
modificar ciertos directorios.fuente
--no-preserve-root
opción, por otra carpeta importante .. Y que al parecer no existe siquiera como una práctica ...rm -rf
ya significa "eliminar esto, sí, estoy seguro de saber lo que estoy haciendo". Si desea más, reemplácelorm
por un script que se niega a eliminar ciertos directorios.rm
acceso 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 -f
sirve?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
rmtest
con el archivo nombrado-i
dentro. Si intenta hacerrm
todo lo que está dentro del directorio,rm
primero se-i
lo 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
> -i
EDITAR 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/file
Esto 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,vim
por 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 file
De lo contrario, si esto no es adecuado, una cosa que practico es siempre
ls /some/dir
primero, y luego, en lugar de volver a escribir el comando, presione la flecha hacia arriba CTL-A, luego eliminels
y escriba mirm -rf
si 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 -rf
y comenzar a usarrm -ri
. Eli
pará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 -ri
en algo memorable comokill_it_with_fire
. De esta manera, cuando tengas ganas de quitar algo, adelante y mátalo con fuego.fuente
f
es exactamente lo contrario de lai
opción? Lo intenté y trabajé sin embargo ...r
allí. Solo lo arreglé.Me gusta poner el nombre del directorio primero así:
fuente