J'ai fait une erreur hier soir, qui a supprimé involontairement 1800 Go de mon serveur de fichiers

27

J'ai exécuté cette commande hier, je pensais sur une machine de test, mais c'était un File-Server connecté via SSH.

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

Mon émulateur de terminal est Konsole. Mon système est Debian 7.

Question:

Cette commande a-t-elle supprimé d'autres fichiers que les fichiers dans / tmp?

quelque chose quelque chose
la source
Se pourrait-il que le système de fichiers / home ne soit pas monté?
Emmanuel
@Emmanuel J'ai confirmé que les fichiers étaient perdus.
quelque chose du
1
Votre historique ne montre aucune erreur de suppression. Vous avez tué de nombreux processus du système d'exploitation en faisant le "kill $ (lsof / usr ...)". Le démon de partage du système de fichiers a peut-être été affecté. Avez-vous essayé de redémarrer les services ou de redémarrer le filer?
Emmanuel
1
@somethingSomething Konsole n'est pas un shell, c'est l'émulateur de terminal par défaut de KDE. Essayez de taper quelques caractères dans le terminal, comme dsgsadfsfet appuyez sur Entrée. Voir le résultat. Si c'est le cas bash: dsgsadfsf: command not found, votre coquille l'est bash.
Gabor Farkas
5
J'espère que vous avez de bonnes sauvegardes. Si vous voulez tenter une récupération, arrêtez d'utiliser ce système jusqu'à ce que vous soyez en mesure de faire une copie au niveau octet du lecteur pour tester. Toute écriture dans le système de fichiers en question aggravera les dommages.
un CVn du

Réponses:

43

La syntaxe correcte dans bash est la suivante:

rm /tmp/!(lost+found)

Comme @goldilocks l'a écrit dans les commentaires, la commande d'origine fait une expansion de la requête (elle supprime tous les fichiers du /tmpdossier, puis continue et supprime tous les fichiers du dossier de travail actuel, dans votre cas le homedossier).

Vous pouvez essayer de vérifier si vous pouvez récupérer certaines de vos données. Il y a une question sur la récupération de données Linux ici .

Gabor Farkas
la source
28
Ah, c'est donc essentiellement un autre cas du fameux "l'espace manquant dans ma ligne de commande qui a détruit toutes mes données" - tout comme dans rm -rf / tmp^^
Martin von Wittich
8
Je ne saurais trop insister sur le fait que la paranoïa d'administrateur système n'est pas sans cause. :) Sauvegardez toujours vos données les plus précieuses dans un endroit où vous ne pouvez écrire qu'en tant que root.
Gabor Farkas
9
Je préfère sauvegarder sur un disque dur ou un serveur séparé qui n'est même pas accessible en écriture pour root dans des circonstances normales. OP utilisé sudo, donc un dossier normal inscriptible uniquement pour root n'aurait pas nécessairement aidé.
Martin von Wittich
Bon point, je n'ai pas fait assez attention à OP. Un serveur peut être coûteux, mais un disque séparé est assez juste. J'ai utilisé une partition séparée qui a été démontée par défaut. Simple et sale, mais efficace.
Gabor Farkas
1
@simonzack cela peut réduire les risques d'accidents en le montant en conséquence, cela me suffit :)
Gabor Farkas
26

Le !(lost+found)dans votre rmcommande était probablement l'erreur fatale:

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

Je ne sais pas exactement ce bashque cela fait, mais cette commande ci-dessous affiche tout dans mon /tmp/et aussi tout mon répertoire actuel (qui est actuellement ~):

echo /tmp/* !(lost+found)
Martin von Wittich
la source
Le !(folder)fait partie d'une commande que j'ai exécutée une fois, qui a supprimé tout sauf folder.
quelque chose du
3
Cela ressemble à quelque chose qui pourrait fonctionner avec zsh; bash je ne pense pas. J'obtiens !lost+found: event not foundcomme !est utilisé pour récupérer des commandes de l'historique.
wurtel
9
Oui! "Je ne sais pas exactement ce que bash fait avec ça" -> il effectue une expansion. Devinez ce qu'est "tout sauf ceci"? cd /; echo !(lost+found)> _ <
goldilocks
13
Veuillez garder à l'esprit que cela !(foo)fonctionne en bash comme «tout sauf foo» uniquement si l' extgloboption est définie. De plus, OP n'a pas spécifié quel shell il utilise, il est donc très difficile de deviner exactement ce que la rm !(lost+found)commande a fait dans son cas.
jimmij
5
Grande remarque, bien qu'OP ait déclaré qu'il utilise Debian 7, qui a bashcomme shell par défaut. Il n'a probablement pas changé cela. De plus, dans Debian 7, l' extgloboption est définie truepar défaut (je viens de le vérifier).
Gabor Farkas