छोटी निर्देशिका में लंबे समय तक ले रहा है


21

उबंटू चल रहा है, मैं एक टर्मिनल खोलता हूं और करता हूं

sudo bash
cd /
ls | head -n 1000

और अनुमानित रूप से लगभग 20 निर्देशिकाएं वापस आ गई हैं।

हालाँकि, अगर मैं एक ls करता हूँ, और इसे किसी भी चीज़ में नहीं डालता, तो ls सिर्फ वहीं लटका रहता है जब तक कि मैं इसे दूसरे टर्मिनल से नहीं मार देता। क्या हो सकता है?

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

> type ls
ls is aliased to `ls --color=auto`

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

> /bin/ls /
<normal response>
> /bin/ls --color=auto
<hangs indefinitely>

क्यों इस कमांड को लटकाने के लिए ls के आउटपुट को रंग दिया जाता है?


3
भागो type lsकिसी भी संभव उपनाम आदि की जांच करने के
jw013

5
रनिंग strace lsसंभावित रूप से आपको समस्या की पहचान करने में मदद कर सकती है। straceप्रोग्राम द्वारा किए गए सभी सिस्टम कॉल को प्रदर्शित करता है।
गौतम

2
कोशिश करें /bin/ls(या बल्कि command ls) lsअलियासड विकल्पों के बिना चलाने के लिए, यह पुष्टि करने के लिए कि क्या यह रंग विकल्प है जो एक अंतर बना रहा है या नहीं। FWIW, lsरंग को बंद कर देता है जब इसका आउटपुट एक पाइप या अन्य गैर-टर्मिनल डिवाइस होता है।
jw013

3
एक आदेश से पहले एक बैकस्लैश उपनाम के बजाय इसे चलाता है, साथ ही। \ls
रोब

जवाबों:


28

यदि आप सामान्य रूप से ls चलाते हैं, तो यह केवल उनमें से किसी पर स्टेट (2) चलाने की आवश्यकता के बिना फ़ाइलों की सूची दिखाएगा। दूसरे शब्दों में, यह स्वयं FILES का उपयोग नहीं करता है, लेकिन केवल निर्देशिका जिसमें फ़ाइलें हैं।

यदि आप --color विकल्प में जोड़ते हैं, या अन्य ls विकल्पों का उपयोग करते हैं, जिन्हें फ़ाइलों की स्वयं जांच करने की आवश्यकता होती है, तो ls को उन फ़ाइलों को स्टेट करने की आवश्यकता होगी (2)।

आपकी निर्देशिका में कम से कम फ़ाइलों में से अधिकांश की वास्तव में एक दूरस्थ प्रणाली से एनएफएस या समान के माध्यम से माउंट किया जा रहा है। और जिस सर्वर से आपने उस विभाजन को माउंट किया है, वह प्रतिक्रिया नहीं कर रहा है या नहीं। इसलिए, जब ls उस निर्देशिका के बारे में जानकारी प्राप्त करने की कोशिश करता है, तो वह कर्नेल में सर्वर के जवाब के इंतजार में लटका रहेगा।

जैसा कि दूसरों ने उल्लेख किया है, यदि आप स्ट्रेस का उपयोग करते हैं तो आपको पता चलेगा कि कौन सी डायरेक्टरी ls हैंग होने पर एक्सेस करने की कोशिश कर रही है। फिर आप उस माउंटेड विभाजन या जो कुछ भी कर सकते हैं।


एक और संभावना यह है कि आपकी निर्देशिका में एक फाइल कुछ विभाजन को इंगित करने वाला सिम्कलिन है जो दूरस्थ है और जिसका सर्वर प्रतिक्रिया नहीं दे रहा है ... समान सिद्धांत।
मैडिसिनिस्ट

मेरे पास एक सर्वर से nfs माउंट था जो नीचे था। अजीब लगता है कि स्टेट्स केवल nfs माउंट पर नीचे लटका हुआ है। यह बताने के लिए बहुत मुश्किल नहीं है कि क्या यह नीचे था और बस उस रंग को निर्देशिका को प्रिंट करें जिसमें टूटी हुई सीमलिंक मुद्रित हैं।
स्निट्स

दरअसल, NFS सर्वर को डाउन करने के लिए यह (ls के लिए) कठिन है। NFS सिर्फ एक अलग प्रकार का फाइल सिस्टम है (जैसे ext3, xfs, आदि) सभी फाइल सिस्टम कर्नेल में लागू होते हैं। एलएस (1) जैसे एक उपयोगकर्ता कार्यक्रम बस एक पथनाम पर स्टेट (2) की तरह एक सिस्टम कॉल चलाता है; यह पता नहीं है कि किस तरह की फाइलसिस्टम का उपयोग किया जा रहा है। इस स्थिति में सिस्टम कॉल हैंग हो जाता है (इसलिए यूजरस्पेस ऐप को लटका दिया जाता है) जब तक कि परिणाम प्राप्त नहीं हो जाता। इसलिए, परिणाम प्राप्त होने तक कर्नेल द्वारा नींद को लगा दिया जाता है ... जो कभी नहीं होता है। इसलिए ls कुछ गलत नहीं बता सकते।
मैडिसिनिस्ट

मुझे कहना चाहिए कि आप NFS के व्यवहार को बदल सकते हैं। यदि आप एक "हार्ड माउंट" निर्दिष्ट करते हैं, तो कर्नेल हमेशा के लिए फिर से कनेक्ट करने की कोशिश करेगा यदि सर्वर बाहर निकलता है और ऐसा होने तक सिस्टम कॉल से वापस नहीं आएगा। वैकल्पिक रूप से आप "सॉफ्ट माउंट" का अनुरोध कर सकते हैं, जहां कर्नेल एक विफलता के साथ लौटता है अगर सर्वर बार अनुरोध करता है। हालांकि, कई प्रकार के / अधिकांश कार्यक्रमों को इस प्रकार के टाइमआउट संचालन को ठीक से करने के लिए नहीं लिखा जाता है, और इसलिए एनएफएस में सॉफ्ट माउंट को निर्दिष्ट करना खतरनाक है और सिस्टम अस्थिरता का कारण बनता है। जो लोग नियमित रूप से एनएफएस का उपयोग करते हैं, वे हमेशा हार्ड माउंट का उपयोग करते हैं और सलाह देते हैं। Nfs (5) देखें।
मैडिसिनिस्ट

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