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.