rm
özyineleme sadece aşağı doğru çalışır?
rm -r x y
silinir x
ve y
içindeki her şey (dizin ise), ancak ebeveynleri veya dışındaki herhangi bir şey silinmez.
Çalışıyor: sudo rm -R *.QTFS
geç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ı *.QTFS
ve 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 -lha
iç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 rm
ebeveyn takip ..
bağlantıları, her rm -r
tü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 rm
gö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 rm
uygulama 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 rm
ve 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.