Saya melakukan kesalahan tadi malam, yang menghapus 1800GB File-Server saya secara tidak sengaja

27

Saya menjalankan perintah ini kemarin, saya berpikir pada mesin uji, tetapi itu adalah File-Server yang terhubung melalui SSH.

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

Emulator terminal saya adalah Konsole. Sistem saya adalah Debian 7.

Pertanyaan:

Apakah perintah ini menghapus file selain file dalam / tmp?

sesuatu Sesuatu
sumber
Mungkinkah sistem file / home tidak di-mount?
Emmanuel
@ Emmanuel Saya sudah mengkonfirmasi bahwa file-file itu hilang.
somethingSomething
1
Riwayat Anda tidak menunjukkan kesalahan penghapusan. Anda membunuh banyak proses sistem operasi saat melakukan "kill $ (lsof / usr ...)". Deamon berbagi sistem file mungkin telah terpengaruh. Apakah Anda mencoba me-restart layanan atau me-reboot filer?
Emmanuel
1
@somethingSomething Konsole bukan shell, ini adalah emulator terminal default KDE. Cobalah untuk mengetik beberapa karakter di terminal, suka dsgsadfsfdan tekan enter. Lihat hasilnya. Jika ya bash: dsgsadfsf: command not found, berarti shell Anda bash.
Gabor Farkas
5
Saya harap Anda memiliki cadangan yang bagus. Jika Anda akan mencoba pemulihan, berhenti menggunakan sistem itu sampai Anda dapat membuat salinan drive level byte untuk percobaan. Setiap penulisan ke sistem file yang dimaksud akan memperburuk kerusakan.
CVn

Jawaban:

43

Sintaks yang benar dalam bash adalah sebagai berikut:

rm /tmp/!(lost+found)

Seperti @goldilocks menulis dalam komentar, perintah asli melakukan ekspansi pada kueri (itu menghapus semua file dalam /tmpfolder, kemudian melanjutkan, dan menghapus semua file di folder yang sedang bekerja, dalam kasus Anda homefolder).

Anda dapat mencoba memeriksa apakah Anda dapat memulihkan beberapa data Anda. Ada pertanyaan tentang pemulihan data Linux di sini .

Gabor Farkas
sumber
28
Ah, jadi pada dasarnya ini adalah kasus lain yang terkenal "ruang yang hilang di baris perintah saya yang menghancurkan semua data saya" - seperti di rm -rf / tmp^^
Martin von Wittich
8
Saya tidak bisa cukup menekankan, bahwa sysadmin paranoia bukan tanpa sebab. :) Selalu buat cadangan data Anda yang paling berharga di suatu tempat, di mana Anda hanya dapat menulis sebagai root.
Gabor Farkas
9
Saya lebih suka mencadangkan ke hard disk atau server terpisah yang bahkan tidak dapat ditulisi untuk root selama keadaan normal. OP digunakan sudo, jadi folder normal yang hanya dapat ditulis untuk root tidak akan membantu.
Martin von Wittich
Poin bagusnya, saya tidak cukup memperhatikan OP. Server bisa mahal, namun disk terpisah cukup adil. Saya telah menggunakan partisi terpisah yang tidak terpasang secara default. Sederhana dan kotor, tetapi efektif.
Gabor Farkas
1
@simonzack dapat mengurangi kemungkinan kecelakaan dengan memasangnya sebagai akibatnya, itu cukup bagi saya :)
Gabor Farkas
26

The !(lost+found)dalam Anda rmperintah mungkin adalah kesalahan fatal:

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

Saya tidak tahu persis apa bashyang dilakukan dengan itu, tetapi perintah di bawah ini mencetak semua yang ada di saya /tmp/dan juga semua direktori saya saat ini (yang saat ini ~):

echo /tmp/* !(lost+found)
Martin von Wittich
sumber
Ini !(folder)adalah bagian dari perintah yang pernah saya jalankan, yang menghapus semua kecuali folder.
somethingSomething
3
Itu terdengar seperti sesuatu yang mungkin bekerja dengan zsh; tapi saya rasa tidak. Saya menjadi !lost+found: event not foundseperti !digunakan untuk mengambil perintah dari sejarah.
Wurtel
9
Astaga! "Aku tidak tahu persis apa yang dilakukan bash dengan itu" -> ia melakukan ekspansi. Coba tebak "segalanya kecuali ini"? cd /; echo !(lost+found)> _ <
goldilocks
13
Harap perhatikan bahwa !(foo)bash berfungsi sebagai "semua kecuali foo" hanya jika extglobopsi disetel. Selain itu OP tidak menentukan shell mana yang dia gunakan, jadi sangat sulit untuk menebak apa sebenarnya rm !(lost+found)perintah yang telah dilakukan dalam kasusnya.
jimmij
5
Komentar bagus, meskipun OP menyatakan dia menggunakan Debian 7, yang memiliki bashshell default. Dia kemungkinan besar tidak mengubah ini. Selanjutnya, di Debian 7, extglobopsi ini diatur truesecara default (saya baru saja memeriksa ini).
Gabor Farkas