rm özyineleme sadece aşağı doğru çalışır?
rm -r x ysilinir xve yiçindeki her şey (dizin ise), ancak ebeveynleri veya dışındaki herhangi bir şey silinmez.
Çalışıyor: sudo rm -R *.QTFSgeçerli dizindeki ve altlarındaki tüm * .QTFS dosyalarını silecek, doğru mu?
Hayır. Adındaki tüm dosyaları *.QTFS, çağrılan dizinlerin içindeki özyinelemeli dosyaları *.QTFSve bu dizinlerin kendilerini siler . Bu diğer silme davranışını istiyorsanız kullanın find -delete.
geçerli dizinde de gösterildiği gibi daha iyi bir kelime olmaması için bağlantılar ve bağlantılar ls -lhaiçerir , bu yüzden özyineleme neden dizin ağacında bu yukarı doğru takip etmiyor? Rm uygulamasında yapay sınırı var mı, yoksa ve gerçek şeyler değildir?......
Yapay bir sınırı rm.
Yine de o kadar da yapay değil - çalışabilmesinin tek yolu bu. Eğer rmebeveyn takip ..bağlantıları, her rm -rtümünü uygulayarak, sistemde her dosyayı ortadan kaldıracaktır ..dönebildiyse bağlantılar /. içeriği listelediğinde her dizindeki ve girişlerini rmgörür ..ve bu nedenle bunları açıkça göz ardı eder..
Aslında bunu kendiniz deneyebilirsiniz. Çalıştır rm -r .ve çoğu rmuygulama bir hatayı açıkça bildirerek hareket etmeyi reddeder:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(bu mesaj GNU'danrm ; diğerleri benzer). Bu girdiler, açık argümanlar olarak değil, örtük olarak karşılaştığında, onları yok sayar ve devam eder. Bu davranış POSIX için gereklidir . GNU rmve BSD'lerin çoğunda fts_read, hiyerarşi-geçiş işlevleri ailesi tarafından otomatik olarak sağlanır .
ya .ve ..gerçek şeyler değildir?
.ve ..vardır genellikle bu dosya sistemi özgü olmasına rağmen, gerçek dizin girişleri. Neredeyse her zaman, tüm kullanıcı kodlarına gerçek girişlermiş gibi sunulacaktır. Birçok yazılım (sadece değil rm), kaçak veya istenmeyen tekrarlamayı yakalamak veya önlemek için davranışlarını özel olarak ele alır.