Her zaman bir dizindeki her şeyi silme komutunun neden olduğunu merak ettim rm -rf
.
Neden aynı şeyi yapacak bayraklar yok rmdir
?
rmdir
Dizin işlemleri için kullanmak daha sezgisel olmaz mı?
Her zaman bir dizindeki her şeyi silme komutunun neden olduğunu merak ettim rm -rf
.
Neden aynı şeyi yapacak bayraklar yok rmdir
?
rmdir
Dizin işlemleri için kullanmak daha sezgisel olmaz mı?
Yanıtlar:
İlk Unix Dosya Sisteminde (en azından 1970 V7 günlerinde) dizinler özel dosyalar olarak uygulandı ve sadece kök mknod(2)
onları oluşturan sistem çağrısını kullanabilir ve sadece kök unlink(2)
bir dizin özel dosyasını olabilir.
Bu korumalar, dosya sistemi yapısını tutarlı tutmak için yürürlükteydi. Örneğin, bir kullanıcının bir dizine özel dosya yazmasına izin verildiyse, üst dizinin kendisini göstermesini sağlayabilir ..
(özellikle kendi i-düğümü). Bu, dosya sisteminde Kötü Bir Şey olan döngüsel bir başvuru yaratacaktır. Tabii ki kişinin yapabileceği başka tutarsızlıklar var, bu sadece açık bir örnek.
Tutarlılık, ayrıcalıklı bir kullanıcı adına ayrıcalıklı sistem çağrıları yapabilmeleri için Set-UID kökü gibi mkdir(1)
ve benzeri kullanıcı-alanı programları tarafından korunmuştur rmdir(1)
. Özyineleme eklendiğinde rm(1)
, remove komutu geçerli UID olarak çalışır ve rmdir(1)
yalnızca boş dizinleri kaldırmak için çağrıda bulunur . Bu hala oldukça standart bir izin yükseltme yöntemidir: ihtiyacınız olandan daha fazla izin kullanmayın.
Bir süre sonra mkdir(2)
ve rmdir(2)
kendi sistem çağrıları ancak arasındaki ilişki olarak eklenmiştir rm(1)
ve rmdir(1)
kalıntılar.
Şahsen, biraz daha tatmin edici buluyorum rmdir junk
ve yaptığım en kötü şeyin boş bir dizini kaldırmak olduğunu biliyorum.
rmdir
olsaydı, yine de bir -r
bayrağa ihtiyacı olurdu . ( rmdir -r junk
Yerine rm -r junk
ve rmdir junk
hala sadece dizin boş ise çalışır)
Tarihsel. rm
dosyalara yapılan referansları rmdir
kaldırmak, dizinleri kaldırmak için paralel olarak yapılmıştır mkdir
. Yıllar önce, Unix rm
sadece dizinleri çağırarak kaldırabilirdi rmdir
. Bir rmdir(2)
sistem çağrısı da yoktu rmdir
, çağrılan bir programdı unlink(2)
.
Referanslar:
Tamamen bir fikir meselesidir, ancak dizinleri rm
kaldırırken dosyaları rmdir
kaldırır. Dizin bir dosyadır, ancak özel bir dosya türüdür, bu yüzden rm
onları kaldırmak için mantıklıdır , ancak onları özel olarak işlemek (yani yeteneği etkinleştirmek için ek bir seçenek gerektirmek.) Öte yandan tüm dosyalar dizin değildir, ve rmdir
dizin olmayan bir şeyi kaldırmak IMHO'nun hiçbir anlamı yok .
rm
boş bir dizini kaldıramazsınız (özyinelemeli mod hariç)?
-r
özel dosya dizini özelliğini etkinleştirmek için bayrağa gereksinim duyar .
rmdir
dizinleri kaldırır,rm
kaldırır. Nedenrmdir
dizin olmayanları kaldırmak sezgisel olsun ki ?