Rm -rf -no-preserve-root'un gerekli olduğu bir senaryo var mı?


27

Burada insanların yanlışlıkla yaptıkları rm -rf --no-preserve-rootveya rm -rf *dosya sisteminin çoğunu veya tamamını tepki vermeden önce sildikleri bazı sorular gördüm .

--no-preserve-rootNormal kullanımda olsun, geliştirici veya yönetici olarak kullanmanın bir nedeni var mı ?


4
Yararlı bir durum düşünemiyorum ... Bence bu seçenek sadece UNIX prensibinin dikey olmasını sağlamak için var (istisnasız aynı şeyleri aynı tutmak için). Muhtemelen istisnayı istiyorsunuz/ , ancak »genel durum« hala temsil edilmektedir. Başka bir deyişle: »Bana ne yapacağımı söylemek bilgisayarımın işi değil.« Ve olmamalı.
Andreas Wiese

SkyNet devraldığında kullanılabilecek bir silah olarak var.
Mitch Dart

Yanıtlar:


26

ÖNEMLİ: Modern UEFI sistemleri, bellenimi /sysdizinin altına monte eder ve işletim sistemine sunar. Bu komutu modern bir sistemde ÇALIŞTIRMAYIN , çünkü bu bellenimi kaldıracaktır, esas olarak makinenizi tuğla.


Aklıma gelen en basit senaryo, sürücülerindeki tüm verileri silmek isteyen biri. Bunu yapmak için mükemmel meşru nedenler olabilir ve aklıma gelen en basit yol

rm -rf --no-preserve-root /

Bunun aslında bir örnek olarak verildiği ortaya çıkıyor info rm:

`--no-preserve-root'
    Do not treat `/' specially when removing recursively.  This option
    is not recommended unless you really want to remove all the files
    on your computer. 

Mükemmel bir başka neden, chrootiçine girdiğiniz bağlı bir dosya sistemini silmek istemenizdir . Bu durumda, rm -rf --no-preserve-root /sistemi chrootortamdan siler ancak sizinkini olduğu gibi bırakır.

Eminim daha olası nedenler vardır, ancak genel olarak sistemimin istediğim her şeyi yapmama izin verdiği çok makul bir yaklaşım gibi görünüyor. Dikkatli olmak benim işim, sistem sadece istediğim şeyi yapmama izin vermeli. İstediğim şey aptalca ise, işletim sistemim değil sorunum bu.

Her neyse, bu nispeten yeni bir kısıtlamadır, POSIX belirtiminin 7. sürümüne (bir önceki burada) eklenmiştir, bu rm -rf /tamamen geçerli bir komuttu. Tarihsel bir notta, .ve ..dizinler rm, rmilk olarak dizinleri silme yeteneğini ilk kez 1979'dan beri koruma altına alınmıştır. Burada daha fazlası .


21
SİSTEMİNİZ UEFI (yeni bilgisayarlar) ise TÜM VERİLERİ SİLMEK İÇİN KULLANMAYIN. Bunu yapmak tüm bellenim değişkenlerini siler ve anakartın tuğla kadar işe yaramaz olmasına neden olur
Suici Doga

5
@SuiciDoga: Kaynak mı yoksa daha fazla açıklama mı? Anakart bellenimi HDD'de saklanmamalıdır, aksi takdirde sürücüyü çekerseniz kaybolurlar.
Tarka

15
@Tarka: / sys / firmware / efi / efivars / monte edilebilir ve yinelemeli olarak silmek bu değişkenleri kaldırabilir. Gerçekten bir sistemi örmemeliydi, ama olabilir. Bkz. Thenextweb.com/insider/2016/02/01/…
cyanic

4
@Tarka HDD'de saklanmazlar ve sürücüyü sormak onları etkilemez. Ancak, henüz anlayamadığım nedenlerden ötürü, gerçekten erişilebilir oldukları için monte edilirler /.
terdon

20
Bir sürücüyü boşaltmanın doğru yolu, bölümlerini yeniden biçimlendirmektir (veya tamamen yeniden bölümlendirmektir). Tüm dosya sistemleri sabit disk değildir, bu nedenle rm -rf /sizi kullanarak uzaktaki bir makineyi örneğin birinin NFS / CIFS / SSHFS yuvası üzerine boşaltabilirsiniz.
17'den

12

--no-preserve-rootAnahtarın varlığı ek işlevsellik eklemek değil, işlevsellikte çok akılcı bir azalmayı geçersiz kılmaktır. Bu anahtar muhtemelen bilgisayarın söylediklerini yapması ve istenen eylemleri ifade etmek için komutların kullanılabilir olması felsefesine dayanır. Bu anahtar UEFI'den önce ve deneyimlerime dayanarak, artık eski olduğunu söylüyorum.

Modern uygulamada, bu anahtar olmadan, rmkomut, başlatılmamış bir değişken veya kaçak bir boşluk kullanırken kök dizinin yanlışlıkla silinmesini önler.

rm -rf /${my_directory}
rm -rf / var/log/httpd/*

Eğlenceli dipnot: Koruma niyeti değildi. Sun Microsystems blogu başına, /dizini kaldırmak geçerli çalışma dizinini dolaylı olarak kaldıracak, .ve ..dizinleri için zaten özel değerlendirmenin ihlali olacaktır . Bu nedenle standartlar komitesi bu özel istisnaya izin verdi - bir kazayı önlemek için değil. Bu değişiklik ilk olarak Solaris 10 build 36 ile tanıtıldı.

http://archive.is/5lmc9


Bağlantı için teşekkürler! Değişimin nedeninin ne olduğunu merak ettiğim için tarihsel tid bitinden bahsedileceğini umuyordum.
Cameron Gagnon

İlginç ek bilgiler - teşekkürler
Mark

1

Belki de bu, orijinal askerin istediği bir cevap değildir, ancak kök dizinden tüm dosyaları özyinelemeli olarak silmesi gereken bir kullanım durumu vardır. rmKomut aracılığıyla olmasa da , (gömülü olmayan) Linux sisteminizin önyüklenmesi sırasında switch_root (8) işleminin bir parçası .

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.