Dün gece hata yaptım, bu 1800 GB Dosya Sunucumu istemeden sildi


27

Bu komutu dün koştum, bir test makinesinde düşündüm, ancak SSH ile bağlı bir Dosya Sunucusuydu.

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

Terminal emülatörüm Konsole. Benim sistemim Debian 7.

Soru:

Bu komut, / tmp içindeki dosyalardan başka dosyaları da sildi mi?


Bu / home dosya sistemi monte edilmemiş olabilir mi?
Emmanuel

@Emmanuel Dosyaların kaybolduğunu onayladım.
şey

1
Geçmişiniz herhangi bir silme hatası göstermiyor. "$ $ (Lsof / usr ...)" işlemini yaparken birçok işletim sistemi sürecini öldürdünüz. Deamon paylaşan dosya sistemi etkilenmiş olabilir. Hizmetleri yeniden başlatmayı veya bildirimi yeniden başlatmayı denediniz mi?
Emmanuel

1
@somethingSomething Konsole bir kabuk değildir, KDE'nin varsayılan terminal emülatörüdür. Terminalde bazı karakterler yazmaya çalışın, dsgsadfsfenter ve enter tuşuna basın. Sonucu gör. Öyleyse bash: dsgsadfsf: command not found, kabuğun öyle bash.
Gabor Farkas

5
Umarım iyi bir yedeğin vardır. Kurtarma girişiminde bulunacaksanız, denemek için sürücünün bayt düzeyinde bir kopyasını çıkartana kadar bu sistemi kullanmayı bırakın. Söz konusu dosya sistemine yazılanlar hasarı daha da arttıracaktır.
CVn

Yanıtlar:


43

Bash içindeki doğru sözdizimi aşağıdaki gibidir:

rm /tmp/!(lost+found)

@Goldilocks yorumlarda yazdığı gibi , orijinal komut sorguda bir genişleme yapar ( /tmpklasördeki tüm dosyaları siler , sonra devam eder ve mevcut çalışma klasöründeki tüm dosyaları, sizin klasörünüzde siler home).

Verilerinizden bazılarını kurtarıp kurtarmayacağınızı kontrol etmeye çalışabilirsiniz. Burada Linux veri kurtarma hakkında bir soru var .


28
Ah, öyleyse esasen ünlü olan "tüm verilerimi yok eden komut satırımdaki eksik alan" - tıpkı rm -rf / tmp^^ 'de olduğu gibi
Martin von Wittich

8
Yeterince vurgulayamıyorum, bu sysadmin paranoya nedensel değil. :) Her zaman en değerli verilerinizi sadece root olarak yazabileceğiniz bir yerde yedekleyin.
Gabor Farkas

9
Normal şartlar altında root için yazılamayan ayrı bir sabit diske veya sunucuya yedeklemeyi tercih ederim. OP kullanıldı sudo, bu yüzden sadece root için yazılabilir normal bir klasör mutlaka yardımcı olmazdı.
Martin von Wittich

İyi nokta, OP'ye yeterince dikkat etmedim. Bir sunucu pahalı olabilir, ancak ayrı bir disk yeterli. Varsayılan olarak çıkarılmamış ayrı bir bölüm kullandım. Basit ve kirli, ama etkili.
Gabor Farkas

1
@simonzack, bu sayede monte ederek kaza şansını azaltabilir, benim için yeterli olur :)
Gabor Farkas

26

!(lost+found)Senin içinde rmkomuta muhtemelen ölümcül hataydı:

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

Bununla tam olarak ne bashyaptığını bilmiyorum , ancak aşağıdaki komut /tmp/benim şu anki dizindeki (ve şu anki dizindeki) her şeyi yazıyor ~:

echo /tmp/* !(lost+found)

Bu !(folder), bir keresinde koştuğum bir komutun parçası folder.
şey

3
Zsh ile çalışabilecek bir şeye benziyor; bash, sanmıyorum. Ben olsun !lost+found: event not foundolarak !tarihe komutları almak için kullanılır.
wurtel

9
Olmadı! “Tam olarak bash'ın bununla ne yaptığını bilmiyorum” -> bir genişleme yapıyor. Tahmin et "bu hariç her şey" nedir? cd /; echo !(lost+found)> _ <
goldilocks

13
Lütfen !(foo)sadece extglobseçenek ayarlanmışsa "foo hariç" olarak bash olarak çalıştığını unutmayın . Üstelik, OP hangi kabuğunu kullandığını da belirtmedi, bu yüzden rm !(lost+found)kendi durumunda tam olarak ne yaptığını tahmin etmek gerçekten zordu .
jimmij

5
Büyük açıklama, OP, bashvarsayılan kabuk olan Debian 7'yi kullandığını belirtti . Muhtemelen bunu değiştirmedi. Ayrıca, Debian 7'de, extglobseçenek truevarsayılan olarak ayarlanmıştır (Bunu yeni kontrol ettim).
Gabor Farkas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.