Ho fatto un errore ieri sera, che ha eliminato involontariamente 1800 GB del mio file server


27

Ho eseguito questo comando ieri, ho pensato su una macchina di prova, ma era un File Server collegato tramite SSH.

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

Il mio emulatore di terminale è Konsole. Il mio sistema è Debian 7.

Domanda:

Questo comando ha eliminato file diversi dai file in / tmp?


Potrebbe essere che il file system / home non sia montato?
Emmanuel,

@Emmanuel Ho confermato che i file sono andati persi.
somethingSomething

1
La tua cronologia non mostra errori di eliminazione. Hai ucciso molti processi del sistema operativo mentre facevi "kill $ (lsof / usr ...)". Il deamon di condivisione del file system potrebbe essere stato influenzato. Hai provato a riavviare i servizi o riavviare il filer?
Emmanuel,

1
@somethingSomething Konsole non è una shell, è l'emulatore di terminale predefinito di KDE. Prova a digitare alcuni caratteri nel terminale, come dsgsadfsfe premi invio. Vedi il risultato Se lo è bash: dsgsadfsf: command not found, allora lo è la tua shell bash.
Gabor Farkas,

5
Spero che tu abbia buoni backup. Se tenterai di ripristinare, smetti di usare quel sistema fino a quando non sarai in grado di fare una copia a livello di byte dell'unità su cui sperimentare. Qualsiasi scrittura sul file system in questione aggraverà il danno.
un CVn del

Risposte:


43

La sintassi corretta in bash è la seguente:

rm /tmp/!(lost+found)

Come ha scritto @goldilocks nei commenti, il comando originale effettua un'espansione sulla query (elimina tutti i file nella /tmpcartella, quindi continua ed elimina tutti i file nella cartella di lavoro corrente, nel tuo caso la homecartella).

Puoi provare a verificare se puoi recuperare alcuni dei tuoi dati. C'è una domanda sul recupero dei dati di Linux qui .


28
Ah, quindi è essenzialmente un altro caso del famoso "spazio mancante nella mia riga di comando che ha distrutto tutti i miei dati" - proprio come in rm -rf / tmp^^
Martin von Wittich,

8
Non posso sottolineare abbastanza che la paranoia di amministratore di sistema non è priva di causa. :) Effettua sempre il backup dei tuoi dati più preziosi in un luogo, dove puoi scrivere solo come root.
Gabor Farkas,

9
Preferirei eseguire il backup su un disco rigido o server separato che non è nemmeno scrivibile per root in circostanze normali. OP utilizzato sudo, quindi una normale cartella scrivibile solo per root non avrebbe necessariamente aiutato.
Martin von Wittich,

Bene, non ho prestato sufficiente attenzione all'OP. Un server può essere costoso, tuttavia un disco separato è abbastanza giusto. Ho usato una partizione separata che è stata smontata di default. Semplice e sporco, ma efficace.
Gabor Farkas,

1
@simonzack può ridurre la possibilità di incidenti montandolo di conseguenza, è abbastanza per me :)
Gabor Farkas,

26

Il !(lost+found)tuo rmcomando è stato probabilmente l'errore fatale:

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

Non so esattamente cosa ci bashfaccia, ma questo comando di seguito stampa tutto nella mia /tmp/e anche la mia directory corrente (che è attualmente ~):

echo /tmp/* !(lost+found)

Fa !(folder)parte di un comando che ho eseguito una volta, che ha eliminato tutto tranne folder.
qualcosa del

3
Sembra qualcosa che potrebbe funzionare con zsh; bash non la penso così. Ottengo !lost+found: event not foundcome !viene utilizzato per recuperare i comandi dalla cronologia.
wurtel,

9
Yikes! "Non so esattamente che bash ci stia facendo" -> sta eseguendo un'espansione. Indovina cos'è "tutto tranne questo"? cd /; echo !(lost+found)> _ <
goldilocks

13
Tieni presente che !(foo)funziona in bash come "all tranne foo" solo se l' extglobopzione è impostata. Inoltre OP non ha specificato quale shell sta usando, quindi è davvero difficile indovinare cosa rm !(lost+found)ha fatto esattamente il comando nel suo caso.
Jimmij,

5
Ottima osservazione, sebbene OP abbia affermato che sta usando Debian 7, che ha bashcome shell predefinita. Molto probabilmente non ha cambiato questo. Inoltre, in Debian 7, l' extglobopzione è impostata di truedefault (ho appena controllato questo).
Gabor Farkas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.