अनलिंक और आरएम के बीच अंतर क्या है?


64

क्या rm की तुलना में कोई तेजी से निकल रहा है?


9
"समयपूर्व अनुकूलन प्रोग्रामिंग में सभी बुराई (या कम से कम अधिकांश) की जड़ है।" - डोनाल्ड नुथ en.wikiquote.org/wiki/Donald_Knuth
क्रिस

जवाबों:


68

दोनों एक ही मूल कार्य के लिए एक आवरण है जो एक unlink()सिस्टम कॉल है।

उपयोगकर्ता के उपयोग के बीच के अंतरों को तौलना।

rm(1):

  • अधिक विकल्प।
  • अधिक प्रतिक्रिया।
  • स्वच्छता जाँच।
  • उपरोक्त के परिणामस्वरूप एकल कॉल के लिए थोड़ा धीमा।
  • एक ही समय में कई तर्कों के साथ कहा जा सकता है।

unlink(1):

  • कम पवित्रता की जाँच।
  • निर्देशिकाओं को हटाने में असमर्थ।
  • पुन: प्राप्त करने में असमर्थ।
  • एक समय में केवल एक तर्क ले सकते हैं।
  • सरलता के कारण सिंगल कॉल के लिए मार्जिन लीनर।
  • rm(1)कई तर्क देने के साथ तुलना करने पर धीमी ।

आप इसके साथ अंतर प्रदर्शित कर सकते हैं:

$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'

$ touch $(seq 1 100)
$ time rm $(seq 1 100)

real    0m0.048s
user    0m0.004s
sys     0m0.008s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done

real    0m0.207s
user    0m0.044s
sys     0m0.112s

$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done

real    0m0.167s
user    0m0.048s
sys     0m0.120s

हालांकि अगर हम सिस्टम unlink(2)फ़ंक्शन के लिए एक अनधिकृत कॉल के बारे में बात कर रहे हैं , जो मुझे अब पता चलता है कि शायद आप उसके लिए लेखांकन नहीं कर रहे हैं।

आप unlink()निर्देशिका और फ़ाइलों पर समान रूप से एक प्रणाली कर सकते हैं । लेकिन अगर निर्देशिका अन्य निर्देशिकाओं और फ़ाइलों के लिए एक माता-पिता है, तो उस माता-पिता का लिंक हटा दिया जाएगा, लेकिन बच्चों को झूलना छोड़ दिया जाएगा। जो आदर्श से कम है।

संपादित करें:

क्षमा करें, unlink(1)और के बीच का अंतर स्पष्ट किया unlink(2)। शब्दार्थ अभी भी मंच के बीच भिन्न होने जा रहे हैं।


क्या इसका मतलब यह है कि यूनिक्स फाइलसिस्टम में एक डायरेक्टरी को हटाने और इसके तहत सभी फाइलों को हटाने के लिए हमेशा एक ऐसा ऑपरेशन होगा जो फाइलों की संख्या के अनुपात में होता है / इसमें डायर होते हैं? जब मैं एक निर्देशिका को अनलिंक करता हूं, जो अन्य dirs / फ़ाइलों के लिए अभिभावक है? यह कभी मिटाया नहीं जाता है और मैंने इस स्थान को हमेशा के लिए खो दिया है?
मार्सिन

6
यह तकनीकी रूप से संभव है कि सभी फाइल सिस्टम न होने पर अनाथ निर्देशिकाओं / फाइलों को छोड़ दें। इसे आम तौर पर ठीक करने का मतलब है फ़ाइल सिस्टम रिपेयर टूल चलाना। यूनिक्स / लिनक्स पर इन उपकरणों को 'fsck' के रूप में जाना जाता है और विभिन्न फाइल सिस्टमों के लिए कुछ विशिष्ट बदलाव किए जाते हैं। यदि वे कुछ ठीक करते हैं तो वे इसे 'खो + पाया' नामक एक निर्देशिका में छोड़ देंगे
ConcernedOfTunbridgeWells

1
सही बात। rm ऊपर पेड़ के नीचे से फिर से निकलेगा। आप यह प्रदर्शित कर सकते हैं कि कैसे mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1:। यदि आपने मूल निर्देशिका को अनलिंक किया है, तो बच्चों द्वारा उपयोग किए जाने वाले स्थान को ऐसे समय तक खो दिया जाना चाहिए जब तक कि फेक को विसंगति का पता न चल जाए।
डैन कार्ले

1
तुम्हारी किस बारे में बोलने की इच्छा थी? $ mkdir -p 1/2/3 $ अनलिंक 1 को अनलिंक करें: अनलिंक नहीं कर सकता `1 ': क्या एक निर्देशिका उपयोगकर्ताओं को" मेमोरी "लीक के कारण fsck की आवश्यकता है? संभावना नहीं!
थॉमस

1
लिनक्स और फ्रीबीएसडी दोनों स्पष्ट रूप से बताते हैं कि यह एक निर्देशिका पर अनलिंक () चलाने की कोशिश करते समय विफल हो जाएगा।
थॉमस

8

POSIX कल्पना स्तर पर, जो rm करता है वह अनलिंक करने की तुलना में बहुत अधिक कसकर निर्दिष्ट होता है।

परिणाम की पोर्टेबिलिटी rm के उपयोग से बेहतर होने की संभावना है, यदि आपकी स्क्रिप्ट को OS के पार चलाना है।


4

हटाने का धीमा हिस्सा फाइलसिस्टम कोड और डिस्क स्टफ है, न कि अनलिंक () सिस्टम कॉल की यूजरस्पेस तैयारी।

Ie: यदि गति अंतर मायने रखता है, तो आपको फ़ाइल सिस्टम पर डेटा संग्रहीत नहीं करना चाहिए।

अनलिंक सिर्फ एक rm "प्रकाश" है। rm में अधिक विशेषताएं हैं लेकिन वे एक ही काम करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.