क्यों sudo के साथ चलाने पर ulimit काम नहीं करता है?


9

कुंआ..

$ ulimit -s
8192
$ sudo ulimit -s 16384
$ ulimit -s
8192

ulimitऐसे बर्बर तरीके से मेरा अपमान क्यों करता है?


1
आप के साथ एक ही मुद्दा होगा cd
डेविड श्वार्ट्ज

जवाबों:


10

ulimitखोल / प्रक्रिया विशिष्ट है। छोड़ें sudo

$ ulimit -s
8192
$ ulimit -s 16384
$ ulimit -s
16384

मुझे आश्चर्य है sudoकि पास होने पर कोई त्रुटि नहीं दी ulimit; आमतौर पर इसे एक बाहरी बाइनरी की आवश्यकता होती है, लेकिन ulimitएक शेल बिलिन है।
amphetamachine

@amphetamachine चेक आउट करें which ulimit। इसके बारे में कुछ भी आश्चर्यजनक नहीं है।
डैनियल बेक

यह उत्तर भ्रामक और भ्रामक है, भले ही सत्य के एक दाने पर आधारित हो।
हमीजेल ने 9

3

डैनियल बेक का जवाब सभी सच नहीं बताता (वास्तव में यह थोड़े से हाथ की नींद है), और वास्तव में "सूदो अलिमित" करने के लिए लोगों की ज़रूरत में मदद नहीं करता है।

समस्या यह है कि

  • ulimit की कोमल और कठोर सीमाएँ हैं
  • एक बार जब आप हार्ड लिमिट सेट कर लेते हैं, तो आपको इसे वापस उच्चतर सेट करने के लिए सुपरयुसर होना चाहिए
  • सुडो एक नया खोल शुरू करता है; जब आप इससे बाहर निकलते हैं, तो आप अपने पुराने ulimit में वापस आ जाते हैं!

विस्तृत विवरण

डैनियल का उदाहरण केवल एक बहुत ही विशिष्ट स्थिति में काम करता है (जो सौभाग्य से डिफ़ॉल्ट है)।

counterexample:

$ ulimit -s 8191              # set both hard and soft limits
$ ulimit -s                   # show current soft limit
8191
$ ulimit -s 16384             # set both hard and soft limits
-bash: ulimit: stack size: cannot modify limit: Operation not permitted

तो, आप के साथ सीमा निर्धारित करते हैं ulimit -s, और वह चला गया और नरम और कठोर दोनों सीमाएं निर्धारित करता है। अब आप इसे उच्चतर सेट करने से रोक रहे हैं।
इस बिंदु पर आप कोशिश करने के लिए सोच सकते हैं sudo; लेकिन यह काम नहीं करेगा, क्योंकि डैनियल ने क्या लिखा है।

$ sudo ulimit -s 16384        # maybe with sudo?
$ ulimit -s
8191
$

यहाँ क्या हुआ कि sudoएक नया शेल शुरू किया, जहां यह चला ulimit; और THAT शेल में, नया ulimit सेट किया गया था। लेकिन फिर उस शेल ने अपना काम खत्म कर दिया, फटा हुआ था, और अब आप अपने पिछले शेल में अपने पिछले एलिमिट के साथ वापस आ गए हैं।

सबूत:

$ ulimit -s 8191
$ ulimit -s
8191
$ sudo bash
# ulimit -s
8191
# ulimit -s 16384
# ulimit -s                           # It worked!
16384
# exit
exit
$ ulimit -s                           # ... but now we're back to the old ulimit.
8191
$

तो आखिर डैनियल का उदाहरण काम क्यों करता है? Ulimit की डिफ़ॉल्ट हार्ड और सॉफ्ट लिमिट के कारण, वह सॉफ्ट लिमिट को हार्ड पर पुश कर सकता था। हम इसे चाल दिखाने के लिए धीमी गति से कर सकते हैं:

$ ulimit -Ss                 # show the Soft limit
8192
$ ulimit -Hs                 # show the Hard limit
65532
$ ulimit -s                  # by default, shows the Soft limit
8192
$ ulimit -s 16384            # set both the Soft and Hard limit
$ ulimit -s                  # shows the Soft limit
16384
$ ulimit -Hs                 # but, gotcha! the Hard limit has also been set
16384
$ ulimit -s 16385            # so now we can't go higher
-bash: ulimit: stack size: cannot modify limit: Operation not permitted
$

संक्षेप में: यदि आप अपनी कठिन सीमा निर्धारित करते हैं और इसे आगे बढ़ाना चाहते हैं, तो आप उस शेल में भाग्य से बाहर हैं , ... जब तक कि आप सुपरयुजर के रूप में नहीं रहते या बाद में विशेषाधिकारों को छोड़ने के लिए कुछ झुकाव का उपयोग नहीं करते।

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