Вопрос 1
1) Мы просто не понимаем, как bash может уничтожить диск, включая / data /;
Причина: $OUT_DIR
был сброшен
В bash
и sh
комментарии записываются как # comment
, а не // comment
.
Следующая строка будет иметь следующие эффекты
someVariable=someValue // not a comment
- Присвойте
someValue
переменной someVariable
, но только для этой одной строки.После этой строки переменная вернется к своему старому значению , которое в данном случае равно нулю. - Выполните «команду»
// not a comment
, то есть программу //
спараметры not
, a
и comment
.Поскольку //
- это просто каталог (такой же, как /
), это вызовет сообщение об ошибке и ничего более.
Сейчас это поведение может показаться странным, но вы, возможно, уже использовали егов хорошо известных идиомах, таких как IFS= read -r line
или LC_ALL=C sort
.
Глядя на ваш скрипт, следующие проблемы, вероятно, вызвали проблему:
OUT_DIR=/data/backup/mongodb/tmp // ...
...
rm -rf $OUT_DIR/*
Извините, что принесу это вам,но вы в основном выполнили rm -rf /*
, поскольку $OUT_DIR
расширился до пустой строки.
Потенциальный риск в других системах
Даже если $OUT_DIR
не был пустым, эффект мог были такими же, так как после rm
есть //
«комментарий».Рассмотрим команду
rm -rf some // thing
Предполагается, что удаляются три файла / каталога some
, //
и thing
.Как уже указывалось, //
- это тот же каталог, что и /
.
Однако большинство реализаций rm
в Linux имеют защиту для этого случая и не удаляют /
так легко.В Ubuntu вы получите следующее предупреждение ( не пытайтесь повторить это дома. Сосет, если ваш rm
отличается. )
$ rm -rf //
rm: it is dangerous to operate recursively on '//' (same as '/')
rm: use --no-preserve-root to override this failsafe
Вопрос 2
2) И, конечно, возможно ли получить / data / back?
Это не по теме для StackOverflow.Однако вы можете найти много ответов на на этот вопрос на другие stackexchange sites .
Существуют инструменты восстановления, которые вы можете попробовать, но нет гарантии, что вы сможете восстановить свои данные, если у вас их нетрезервная копия.