क्या -v (वर्बोज़) को धीमा करने की आज्ञा देता है?


34

इस सवाल में: कैसे निर्देशिका में सभी फ़ाइलों और उपनिर्देशिकाओं को हटाने के बिना, निर्देशिका को बैश में हटाने के लिए? यह पूछा जाता है कि किसी फ़ोल्डर में सभी फ़ाइल को कैसे हटाया जाए, और फ़ोल्डर को ही नहीं।

मैट एस एक्सेलेंट उत्तर में 'आरएम' कमांड के लिए -v फ्लैग का उपयोग शामिल है।

rm -rfv dontDeleteMe && mkdir dontDeleteMe

मैंने जिस कमांड को छोड़ा था, वह ऊपर था। निश्चित रूप से वास्तव में उपयोगी है, लेकिन -v 'rm' और / या सामान्य रूप से कमांड लाइन के माध्यम से किए गए कार्यों को धीमा करता है?

मेरे पास .txt-files (उनमें से लगभग 100.000) के साथ एक फ़ोल्डर है जिसे मैंने अब कुछ समय के लिए बनाया, हटाया और फिर से बनाया है। आरएम के साथ कुछ समय, फाइलब्रोसर में कुछ समय, और मुझे लगता है कि यह आरएम-कमांड का उपयोग करने के लिए धीमा है जैसा कि ऊपर दिखाया गया है। -V ध्वज का इससे कोई लेना-देना नहीं है?

जवाबों:


37

हाँ, -v ध्वज कमांड को धीमा कर देता है।

अधिकांश, यदि सभी सॉफ्टवेयर्स (या कमांड्स) यह जांचते हैं कि क्या झंडा प्रदान किया गया है, और फिर ध्वज से संबंधित कोड का एक गुच्छा निष्पादित करें। -V ध्वज के मामले में, वे संभवतः आउटपुट कमांड (जैसे echoया printf) का एक गुच्छा निष्पादित करेंगे , जो वे ध्वज के बिना छोड़ देंगे।

इसका मतलब है कि प्रोसेसर के लिए अधिक अनुदेश चक्र और इस प्रकार अधिक निष्पादन समय।

यदि आप संदेशों को पढ़ने / ज़रूरत नहीं पड़ने वाले हैं तो -v ध्वज का उपयोग न करें तो बेहतर है।

दूसरी ओर, सीएलआई / जीयूआई की तुलना में तेज होना चाहिए, यह मानते हुए कि आपके पास कमांड टाइप करने और Enterकुंजी दबाने के लिए आवश्यक समय शामिल नहीं है ।

से सुपर उपयोगकर्ता के इस ब्लॉग इस छवि को बहुत अच्छी तरह से सुस्ती बताते हैं

यहाँ छवि विवरण दर्ज करें

प्रश्न में विशिष्ट कमांड के लिए, टाइम कमांड के परिणाम हैं

//with -v
real    0m8.753s
user    0m0.816s
sys     0m2.036s

//without -v
real    0m1.282s
user    0m0.124s
sys     0m1.092s

यह 100000 खाली फ़ाइलों वाली निर्देशिका के साथ किया गया था


9
मैं "इको कमांड" की बात नहीं करूंगा। अधिकांश कार्यक्रम स्क्रिप्ट को नहीं मारते हैं, इसलिए वे प्रतिध्वनि नहीं कहते हैं। समस्या यह है कि वे stdout (या stderr ) को लिख रहे हैं , दूसरे शब्दों में, वे I / O संचालन कर रहे हैं, जिसके लिए समय की आवश्यकता होती है (I / O महंगा है) और उन्हें सिस्टम कॉल की भी आवश्यकता होती है (जिसका अर्थ है अधिक संदर्भ स्विच और इसलिए अधिक कैश मिस आदि)।
बाकूरी

23
स्टडआउट को लिखने के साथ मुख्य समस्या उस सामग्री का वास्तविक प्रतिपादन है; यदि आप किसी फ़ाइल में stdout रीडायरेक्ट करते हैं, या /dev/null, टर्मिनल एमुलेटर पर पाठ प्रदर्शित करने में प्रदर्शन लगभग इतना बाधित नहीं है।
याकूब क्राल

जैसा कि आप ग्राफ से देख सकते हैं, समय का अंतर नगण्य है यदि आप मानव के दृष्टिकोण से प्रतिक्रिया समय के बारे में बात कर रहे हैं। इस प्रकार, यदि आप कमांड देखने वाले व्यक्ति के लिए दक्षता के बारे में चिंतित हैं, तो यह प्रासंगिक नहीं है। यह केवल बड़ी संख्या में फ़ाइलों के लिए या कई बार चलने वाले रनों के लिए प्रासंगिक है जहां कंप्यूटर का समय कीमती है (उदाहरण के लिए एक व्यस्त वेब सर्वर या एक प्राचीन कंप्यूटर)।
धान लांडौ

सबसे अधिक प्रभाव, और शायद एकमात्र मामला जहां यह वास्तव में मायने रखेगा, जब आप एसएसएच के माध्यम से रिमोट मशीन पर कमांड चलाते हैं। वर्बोज़ लॉगिंग आसानी से दसियों मेगाबाइट्स ट्रैफ़िक उत्पन्न कर सकता है, जिसे होस्ट से आपके कंसोल पर प्रेषित करना होगा। मैंने एक बार एक स्क्रिप्ट से अत्यधिक कंसोल लॉगिंग को हटाने के बाद 10x के क्रम में एक स्पीडअप का अनुभव किया, जिसे मैंने एसएसएच के माध्यम से चलाया।
सर्गेई

5

अपने आप को क्यों नहीं पता: समय का उपयोग करें।

$ time rm -rfv dontDeleteMe && mkdir dontDeleteMe
real    0m0.003s
user    0m0.001s
sys     0m0.002s

$ time rm -rf dontDeleteMe && mkdir dontDeleteMe
real    0m0.002s
user    0m0.001s
sys     0m0.001s

10
यह वास्तव में इस सवाल का जवाब नहीं देता है। प्रत्येक कमांड के एकल रन के बीच 1 एमएस का अंतर बहुत सारे कारकों के कारण हो सकता है। यह भी स्पष्ट नहीं है कि क्या आपने -vआउटपुट छोड़ा है या निर्देशिका खाली थी।

धीमी गति का उल्लेख नहीं करने के लिए अतिरिक्त निष्पादित निर्देशों से नहीं है, लेकिन इसे एक फ़ाइल या टर्मिनल पर लिखने की प्रक्रिया से। time' pretty much redirects the output to / dev / बातिल '।
कोल जॉनसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.