Tại sao ulimit không hoạt động khi chạy với sudo?


Câu trả lời:


10

ulimitlà vỏ / quy trình cụ thể. Bỏ qua sudo.

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

Tôi ngạc nhiên sudođã không đưa ra một lỗi khi thông qua ulimit; thông thường nó cần một nhị phân bên ngoài, nhưng ulimitlà một vỏ dựng sẵn.
amphetamachine

@amphetamachine Kiểm tra which ulimit. Không có gì đáng ngạc nhiên về nó.
Daniel Beck

Câu trả lời này là sai lầm khủng khiếp và không có ích, ngay cả khi dựa trên một hạt sự thật.
hmijail thương tiếc người từ chức

3

Câu trả lời của Daniel Beck không nói lên tất cả sự thật (thực tế đó là sự nhẹ nhàng của bàn tay) và không giúp mọi người thực sự cần phải thực hiện "sudo ulimit".

Vấn đề là ở đó

  • ulimit có giới hạn mềm và cứng
  • một khi bạn đặt giới hạn cứng, bạn cần trở thành siêu người dùng để đặt lại giới hạn cao hơn
  • sudo bắt đầu một vỏ mới; Khi bạn thoát nó, bạn trở lại với sự lo lắng cũ của bạn!

Giải thích chi tiết

Ví dụ của Daniel chỉ hoạt động trong một tình huống rất cụ thể (may mắn là tình huống mặc định).

Ví dụ:

$ 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

Vì vậy, bạn đặt giới hạn với ulimit -s, và điều đó đã đi và đặt cả giới hạn mềm và giới hạn cứng. Bây giờ bạn bị chặn không đặt nó cao hơn.
Tại thời điểm này bạn có thể nghĩ để thử sudo; nhưng nó sẽ không hoạt động, vì những gì Daniel đã viết.

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

Điều xảy ra ở đây là sudobắt đầu một lớp vỏ mới, nơi nó chạy ulimit; và trong vỏ THAT, ulimit mới đã được thiết lập. Nhưng sau đó, cái vỏ đó đã hoàn thành công việc của nó, đã bị phá hủy, và bây giờ bạn trở lại trong vỏ trước đó với sự lo lắng trước đó.

Bằng chứng:

$ 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
$

Vậy tại sao chính xác ví dụ của Daniel làm việc? Do giới hạn cứng và mềm mặc định của ulimit, anh ta có thể đẩy giới hạn mềm đến giới hạn cứng. Chúng ta có thể làm điều đó trong chuyển động chậm để hiển thị mẹo:

$ 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
$

Tóm lại: nếu bạn đặt giới hạn cứng của mình và muốn đẩy nó lên, bạn sẽ không gặp may trong vỏ đó , ... trừ khi bạn ở lại làm siêu người dùng hoặc sử dụng một số câu thần chú để bỏ đặc quyền sau đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.