rm पुनरावृत्ति केवल नीचे की ओर सही काम करती है?
rm -r x yहटा देगा xऔर yउनके अंदर सब कुछ (यदि वे निर्देशिका हैं), लेकिन उनके माता-पिता या उनके बाहर कुछ भी नहीं।
रनिंग: sudo rm -R *.QTFSवर्तमान निर्देशिका और उसके बच्चों में सभी * .QTFS फ़ाइलों को हटा देगा, सही है?
नहीं, ये नामित सभी फाइलों को नष्ट करेगा *.QTFS, रिकर्सिवली किसी भी फाइल के अंदर निर्देशिका कहा जाता है *.QTFS, और उन निर्देशिकाओं के लिए खुद को। यदि आप चाहते हैं कि अन्य विलोपन व्यवहार, का उपयोग करें find -delete।
वर्तमान निर्देशिका जिस रूप में प्रदर्शित होती है ls -lhaउसमें एक बेहतर शब्द की कमी के लिए लिंक .और ..लिंक होते हैं , इसलिए पुनरावृत्ति निर्देशिका ट्री में ऊपर की ओर इनका पालन क्यों नहीं करती है? वहाँ rm एप्लिकेशन पर एक कृत्रिम सीमा है, या .और ..वास्तविक चीजें नहीं हैं?
की एक कृत्रिम सीमा है rm।
यह वास्तव में यह सब कृत्रिम नहीं है, हालांकि - यह एकमात्र तरीका है जो कभी भी काम कर सकता है। यदि rmमाता-पिता ..लिंक का अनुसरण करते हैं , तो सभी rm -rसिस्टम की हर फाइल को हटा देंगे, सभी ..लिंक का सभी तरह से पालन करके /। प्रत्येक निर्देशिका में और प्रविष्टियों को rmदेखता है जब वह सामग्री को सूचीबद्ध करता है, और उस कारण से स्पष्ट रूप से अवहेलना करता है।...
आप वास्तव में, खुद को आज़मा सकते हैं। स्पष्ट रूप से त्रुटि रिपोर्ट करते हुए, रन rm -r .और अधिकांश rmकार्यान्वयन कार्य करने से इंकार कर देंगे:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(वह संदेश GNU का हैrm ; अन्य समान हैं)। जब यह इन तर्कों को स्पष्ट तर्कों के बजाय स्पष्ट रूप से सामना करता है, तो यह उन्हें अनदेखा करता है और जारी रखता है। POSIX द्वारा उस व्यवहार की आवश्यकता है । जीएनयू rmऔर कई बीएसडी में, यह fts_readपदानुक्रम-ट्रैवर्सल कार्यों के परिवार द्वारा स्वचालित रूप से प्रदान किया जाता है ।
या .और ..वास्तविक चीजें नहीं हैं?
.और ..कर रहे हैं आम तौर पर , वास्तविक निर्देशिका प्रविष्टियों हालांकि उस फाइल सिस्टम-विशिष्ट है। वे लगभग हमेशा की तरह प्रस्तुत किए जाएंगे, हालांकि वे सभी उपयोगकर्ता कोड के लिए वास्तविक प्रविष्टियां हैं, भले ही। rmअपवाह या अवांछनीय पुनरावृत्ति को पकड़ने या रोकने के लिए सॉफ्टवेयर के कई टुकड़े (सिर्फ नहीं ) विशेष-उनके व्यवहार को।