ทำไม ulimit ไม่ทำงานเมื่อทำงานกับ sudo


9

ดี..

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

ทำไมฉันจึงไม่ulimitดูหมิ่นฉันในแบบที่ป่าเถื่อน?


1
cdคุณต้องการมีปัญหาเดียวกันกับ
David Schwartz

คำตอบ:


10

ulimitเป็นเชลล์ / กระบวนการเฉพาะ ข้ามsudoไป

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

ฉันประหลาดใจsudoไม่ได้ให้ข้อผิดพลาดเมื่อผ่านไปulimit; โดยปกติจะต้องการไบนารีภายนอก แต่ulimitเป็นเชลล์ในตัว
แอมเฟตามา

@amphetamachine which ulimitตรวจสอบ ไม่มีอะไรน่าแปลกใจกับมัน
Daniel Beck

คำตอบนี้ทำให้เข้าใจผิดและไม่ช่วยเหลืออย่างน่ากลัวแม้ว่าจะอยู่บนพื้นฐานของความจริง
hmijail mourns ลาออก

3

คำตอบของ Daniel Beck ไม่ได้บอกความจริงทั้งหมด (อันที่จริงแล้วมันเป็นมือที่ค่อนข้างคล่องแคล่ว) และไม่ได้ช่วยให้ผู้คนต้องการ "sudo ulimit"

ปัญหาคือว่า

  • ulimit มีข้อ จำกัด อ่อนและแข็ง
  • เมื่อคุณตั้งค่าขีด จำกัด ฮาร์ดคุณจะต้องเป็น superuser เพื่อตั้งค่าให้สูงขึ้น
  • sudo เริ่มเชลล์ใหม่ เมื่อคุณออกไปคุณจะกลับไปหาแผลเก่า ๆ ของคุณ!

คำอธิบายโดยละเอียด

ตัวอย่างของดาเนียลนั้นใช้ได้เฉพาะในสถานการณ์ที่เฉพาะเจาะจงเท่านั้น (ซึ่งโชคดีที่เป็นค่าเริ่มต้น)

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; และในเชลล์นั้น ulimit ใหม่ถูกตั้งค่า แต่จากนั้นเปลือกหอยก็เสร็จสิ้นการทำงานถูกฉีกขาดและตอนนี้คุณกลับมาที่เปลือกก่อนหน้าของคุณด้วย 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
$

ดังนั้นทำไมตัวอย่างของ Daniel จึงใช้ได้จริง เนื่องจากขีด จำกัด ฮาร์ดและซอฟต์เริ่มต้นของ 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
$

โดยสรุป: หากคุณตั้งค่าขีด จำกัด สูงสุดของคุณและต้องการที่จะผลักดันมันขึ้นมาคุณจะไม่มีโชคในเชลล์นั้น ... เว้นแต่คุณจะอยู่ในฐานะผู้ใช้ระดับสูงหรือใช้คาถาเพื่อยกเลิกสิทธิ์ในภายหลัง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.