RM'deki -f seçeneğinin asıl amacı nedir?


14

İçin GNU coreutils kılavuz sayfasını okuyarak, rmseçeneklerden biri -f, el kitabına göre,

-f, --force
          ignore nonexistent files and arguments, never prompt

Şimdi, bazı testler yaptım ve gerçekten böyle bir şey kullanırsam

rm -f /nonexisting/directory/

şikayet etmeyecek.

Birisi böyle bir seçenekten gerçekten ne kazanabilir?

Artı "dizinleri silme" kullanmanın en yaygın örnekleri rmgibi bir şey

 rm -rf /delete/this/dir

-rSeçenek mantıklı ama -f?

Yanıtlar:


9

Bu durumda man sayfasının biraz detay olmadığını görüyorum. -fSeçeneği rmaslında epeyce kullanım durumlarını vardır:

  • Hata çıkış kodundan kaçınmak için
  • İstenmekten kaçınmak için
  • İzin kontrollerini atlamak için

Varolmayan bir dosyayı kaldırmanın anlamsız olduğunu, ancak komut dosyalarında "Bu dosyaları istemiyorum, bulursanız onları silin, ancak bulmazlarsa beni rahatsız etmeyin. yok. Bazı insanlar set -ekomut dosyalarında komut dosyasını kullanırlar, böylece herhangi bir hatada durur (komut dosyasının neden olabileceği daha fazla hasarı önlemek için) ve rm -rf /home/my/garbagebundan daha kolaydır if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.

İzin denetimleri hakkında bir not: Bir dosyayı silmek için dosyanın kendisine değil üst dizine yazma izninizin olması gerekir . Diyelim ki bir şekilde rootana dizininizde bir dosya var ve sudoerişiminiz yok , -fseçeneği kullanarak dosyayı kaldırabilirsiniz . Git'i kullanırsanız, Git'in oluşturduğu nesne dosyalarında yazma iznini bırakmadığını görebilirsiniz:

-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c

Bu nedenle rm, bir Git deposunu kullanmadan silmenin tek yolu rootkullanmaktır rm -rf.


4
-fhata çıkış kodundan kaçınmaz. Eğer rmçalışır ve varolan bir dosyayı kaldırmak için başarısız, bu bir hata kodu döndürür.
Gilles 'SO- kötü olmayı kes

"Bir hata çıkış kodunu önlemek için" "Hiçbir dosya işlenen veya dosya işlenen yok durumunda bir hata çıkış kodunu önlemek için" olarak yazılmalıdır çünkü bu cevabı reddetti. Bu cevap şimdi yazıldığı için yanlış.
Harold Fischer

6

Bu -fseçenek, salt okunur bir dosyayı silerken onay istemlerini bastırır. Ayrıca, sağlanan bir veya daha fazla dosya olmadığında da hataları bastırır.

Bu -fseçenek, sildiğiniz bazı dosyaların salt okunur olabileceğini bildiğinizde ve sizden istemde bulunulmasını istemediğinizde kullanışlıdır.

Bu fseçenek, bazı dosyaları var olmaları durumunda kaldırmak istediğinizde ve var olup olmadıklarına bakmak istemediğinizde de kullanışlıdır. Bu, makefiles'da , kaynak dosyalardan yeniden oluşturulabilen dosyaları kaldıran bir komut oluşturmak için çok yaygın olarak kullanılır . Örneğin, foo.oyeniden inşa edilebilir foo.c, bar.oyeniden inşa edilebilir bar.cve myappyeniden inşa edilebilir foo.ove bar.odaha sonra makefile hedef

clean:
        rm -f *.o myapp

kaldırır myapp, foo.ove bar.oonların var ve bunlardan herhangi biri yoksa şikayet etmezse.

-fÇoğu durumda bir dizin ağacını kaldırma talimatlarını dahil etmek gerekli değildir. Gerekçe ne olursa olsun, bu dizin ağacını kaldırmak istediğinizden eminseniz, -fbazı dosyaların salt okunur olması durumunda sorulmamasını belirtebilirsiniz . Ancak, kaçmayı söyleyen insanlar rm -rf, seçeneklerin -rve -faslında gerekli olup olmadıklarına bakılmaksızın, bir şeyden kurtulmak için mistik bir büyüyü tekrarlarlar . Seçenekler gerekli değilse, tavsiye edilmezler, çünkü argümandaki bir yazım hatası önemli bir şeyi yok etme riskini artırırlar.


3

-igeçişrm

Genellikle bkz -fbirlikte kullanıldığında rmzaman rmkomut yüzden içerdiğini, diğer ad olarak -iinteraktif için anahtarı. -fAnahtar counteracts -i.

Misal

Diğer rmtakma adlarla sorunu simüle edin rm -i.

$ alias rm='rm -i'

Sahte veriler yapın

$ touch afile

Şimdi, takma ad sürümünü kullanarak silmeyi deneyin. rm

$ rm afile 
rm: remove regular empty file `afile'?

Şimdi kullanmayı deneyin -f

$ rm -f afile 
$

İzinler

Ayrıca bir dizine salt okunur erişime sahip olduğunuz durumlar olduğuna inanıyorum ve söz konusu dizindeki dosyaları ve / veya alt dizinleri silmeye çalıştığınızda benzer bir "emin misiniz?" Sorusuyla karşılaşacaksınız. Kullanımı -fevet demek zorunda kalmadan kurtulur.


Takma ad kullanarak gerçekten bir anlam ifade ediyor. Ve cevabınız sadece openbsd man sayfalarında gösterdiklerimle eşleşiyor. Openbsd GNU / Linux olmasa da, az önce söylediklerinizi açıklıyor gibi görünüyor. Birisi kontrol etmek istiyorsa link: [link] openbsd.org/cgi-bin/…
saliarosaurus

Bash ile her zaman \rmtakma ad olmadan çalıştırabilirsiniz (\ yapının kısayolu command). Ben için en iyi kullanımı -fkabuk var komut dosyası içinde olduğunu var ya da olmayabilir bir lockfile gibi bir şey var, uyarı -fdurur bulmak olduğunu rm: cannot remove 'file': No such file or directory.
Drav Sloan

@DravSloan Evet, bu da mantıklı. Cevaplarınız için teşekkürler Drav Sloan ve slm
saliarosaurus

rm -fSık sık s cleanhedefte kullanıyorumMakefile
Alex

-igerçekte ne olduğu değil -f, daha çok önemli bir durum.
Gilles 'SO- kötü olmayı kes
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.