Anoche cometí un error, que eliminó 1800 GB de mi servidor de archivos sin querer


27

Ejecuté este comando ayer, pensé en una máquina de prueba, pero era un servidor de archivos conectado a través de SSH.

sudo rm -rf /tmp/* !(lost+found)

Mi emulador de terminal es Konsole. Mi sistema es Debian 7.

Pregunta:

¿Este comando eliminó otros archivos que no sean los archivos en / tmp?


¿Podría ser que / sistema de archivos de inicio no está montado?
Emmanuel

@ Emmanuel He confirmado que los archivos están perdidos.
algo Algo

1
Su historial no muestra ningún error de eliminación. Eliminó muchos procesos del sistema operativo mientras hacía el "kill $ (lsof / usr ...)". El sistema de archivos que comparte el demonio puede haber sido afectado. ¿Intentó reiniciar los servicios o reiniciar el archivador?
Emmanuel

1
@somethingAlgo que Konsole no es un shell, es el emulador de terminal predeterminado de KDE. Intente escribir algunos caracteres en la terminal, como dsgsadfsfy presione enter. Ver el resultado. Si es así bash: dsgsadfsf: command not found, entonces su caparazón es bash.
Gabor Farkas el

55
Espero que tengas buenas copias de seguridad. Si va a intentar la recuperación, deje de usar ese sistema hasta que pueda hacer una copia a nivel de bytes de la unidad para experimentar. Cualquier escritura en el sistema de archivos en cuestión exacerbará el daño.
un CVn

Respuestas:


43

La sintaxis correcta en bash es la siguiente:

rm /tmp/!(lost+found)

Como @goldilocks escribió en los comentarios, el comando original hace una expansión en la consulta (elimina todos los archivos en la /tmpcarpeta, luego continúa y elimina todos los archivos en la carpeta de trabajo actual, en su caso la homecarpeta).

Puede intentar verificar si puede recuperar algunos de sus datos. Hay una pregunta acerca de la recuperación de datos de Linux aquí .


28
Ah, entonces es esencialmente otro caso del famoso "el espacio perdido en mi línea de comando que destruyó todos mis datos", al igual que en rm -rf / tmp^^
Martin von Wittich

8
No puedo enfatizar lo suficiente, que la paranoia sysadmin no es sin causa. :) Siempre haga una copia de seguridad de sus datos más valiosos en un lugar, donde solo puede escribir como root.
Gabor Farkas

99
Prefiero hacer una copia de seguridad en un disco duro o servidor separado que ni siquiera se puede escribir para root en circunstancias normales. OP utilizado sudo, por lo que una carpeta normal que solo se pueda escribir para root no necesariamente habría ayudado.
Martin von Wittich

Buen punto, no presté suficiente atención a OP. Un servidor puede ser costoso, sin embargo, un disco separado es lo suficientemente justo. He usado una partición separada que fue desmontada por defecto. Simple y sucio, pero efectivo.
Gabor Farkas el

1
@simonzack puede reducir la posibilidad de accidentes al montarlo en consecuencia, es suficiente para mí :)
Gabor Farkas

26

El !(lost+found)en su rmcomando fue probablemente el error fatal:

1978  rm -rf /tmp/* !(lost+found)
1979  sudo rm -rf /tmp/* !(lost+found)

No sé exactamente qué bashestá haciendo con eso, pero este comando a continuación imprime todo en mi /tmp/y también todo mi directorio actual (que es actualmente ~):

echo /tmp/* !(lost+found)

El !(folder)es parte de un comando que una vez ejecuté, que eliminó todo excepto folder.
somethingSomething

3
Eso suena como algo que podría funcionar con zsh; bash no lo creo. Obtengo !lost+found: event not foundcomo !se usa para recuperar comandos del historial.
wurtel

99
¡Ay! "No sé exactamente qué bash está haciendo con eso" -> está realizando una expansión. ¿Adivina qué es "todo excepto esto"? cd /; echo !(lost+found)> _ <
Ricitos

13
Tenga en cuenta que !(foo)funciona en bash como "todos excepto foo" solo si extglobse establece la opción Además, OP no especificó qué shell está usando, por lo que es muy difícil adivinar qué rm !(lost+found)comando ha hecho exactamente en su caso.
jimmij

55
Gran comentario, aunque OP declaró que está usando Debian 7, que tiene bashcomo shell predeterminado. Lo más probable es que no haya cambiado esto. Además, en Debian 7, la extglobopción está configurada truepor defecto (acabo de comprobar esto)
Gabor Farkas el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.